Skip to content

Commit b834a23

Browse files
committed
Added (more or less) complete D translation.
1 parent 9ff5da5 commit b834a23

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+34048
-0
lines changed

README

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
OpenSSL D interface
2+
-------------------
3+
4+
From the OpenSSL website: "The OpenSSL Project is a collaborative effort to
5+
develop a robust, commercial-grade, full-featured, and Open Source toolkit
6+
implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security
7+
(TLS v1) protocols as well as a full-strength general purpose cryptography
8+
library. The project is managed by a worldwide community of volunteers that
9+
use the Internet to communicate, plan, and develop the OpenSSL toolkit and its
10+
related documentation."
11+
12+
Library version: 1.0.0e
13+
14+
Status: (Almost) complete, typical application should build fine. Most of the
15+
functions from <openssl/kssl.h> are not available due to missing Kerberos
16+
headers.
17+
18+
The OpenSSL headers are huge (>35k LOC) and make quite liberal use of the C
19+
preprocessor, and thus a fully automatic translation is as desirable as
20+
it is infeasible. This repository contains the result of a semi-automatic
21+
approach, and while all header files have been ported (and successfully
22+
compile), some preprocessor artifacts still need to be ported (currently
23+
commented out and tagged with a FIXME note).
24+
25+
The OPENSSL_NO_* family of conditional compilation switches has been
26+
translated to D version()s, none of which is set by default.
27+
28+
License: The OpenSSL toolkit is under a dual license, i.e. both the conditions
29+
of the OpenSSL License and the original SSLeay license apply to the toolkit.
30+
See the OpenSSL distribution for details. These interface files are a derived
31+
work and do not impose any additional restrictions.

deimos/openssl/_d_util.d

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module deimos.openssl._d_util;
2+
3+
public import core.stdc.config;
4+
version (OPENSSL_NO_FP_API) {} else { public import core.stdc.stdio; }
5+
6+
package:
7+
8+
// Very boiled down version because we cannot use std.traits without causing
9+
// DMD to create a ModuleInfo reference for _d_util, which would require users
10+
// to include the Deimos files in the build.
11+
12+
template ReturnType(T){
13+
static if (is(typeof(*(T.init)) R == return)) {
14+
alias R ReturnType;
15+
}
16+
}
17+
18+
template ParameterTypeTuple(T) {
19+
static if (is(typeof(*(T.init)) P == function)) {
20+
alias P ParameterTypeTuple;
21+
}
22+
}
23+
24+
template ExternC(T) {
25+
alias extern(C) ReturnType!T function(ParameterTypeTuple!T) ExternC;
26+
}

deimos/openssl/aes.d

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
2+
/* ====================================================================
3+
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions
7+
* are met:
8+
*
9+
* 1. Redistributions of source code must retain the above copyright
10+
* notice, this list of conditions and the following disclaimer.
11+
*
12+
* 2. Redistributions in binary form must reproduce the above copyright
13+
* notice, this list of conditions and the following disclaimer in
14+
* the documentation and/or other materials provided with the
15+
* distribution.
16+
*
17+
* 3. All advertising materials mentioning features or use of this
18+
* software must display the following acknowledgment:
19+
* "This product includes software developed by the OpenSSL Project
20+
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
21+
*
22+
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23+
* endorse or promote products derived from this software without
24+
* prior written permission. For written permission, please contact
25+
26+
*
27+
* 5. Products derived from this software may not be called "OpenSSL"
28+
* nor may "OpenSSL" appear in their names without prior written
29+
* permission of the OpenSSL Project.
30+
*
31+
* 6. Redistributions of any form whatsoever must retain the following
32+
* acknowledgment:
33+
* "This product includes software developed by the OpenSSL Project
34+
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
35+
*
36+
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37+
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40+
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45+
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47+
* OF THE POSSIBILITY OF SUCH DAMAGE.
48+
* ====================================================================
49+
*
50+
*/
51+
52+
module deimos.openssl.aes;
53+
54+
import deimos.openssl._d_util;
55+
56+
public import deimos.openssl.opensslconf;
57+
58+
version (OPENSSL_NO_AES) {
59+
static assert(false, "AES is disabled.");
60+
}
61+
62+
import core.stdc.config;
63+
64+
enum AES_ENCRYPT = 1;
65+
enum AES_DECRYPT = 0;
66+
67+
/* Because array size can't be a const in C, the following two are macros.
68+
Both sizes are in bytes. */
69+
enum AES_MAXNR = 14;
70+
enum AES_BLOCK_SIZE = 16;
71+
72+
extern (C):
73+
nothrow:
74+
75+
/* This should be a hidden type, but EVP requires that the size be known */
76+
struct aes_key_st {
77+
version (AES_LONG) {
78+
c_ulong rd_key[4* (AES_MAXNR + 1)];
79+
} else {
80+
uint rd_key[4* (AES_MAXNR + 1)];
81+
}
82+
int rounds;
83+
};
84+
alias aes_key_st AES_KEY;
85+
86+
const(char)* AES_options();
87+
88+
int AES_set_encrypt_key(const(ubyte)* userKey, const int bits,
89+
AES_KEY* key);
90+
int AES_set_decrypt_key(const(ubyte)* userKey, const int bits,
91+
AES_KEY* key);
92+
93+
void AES_encrypt(const(ubyte)* in_, ubyte* out_,
94+
const(AES_KEY)* key);
95+
void AES_decrypt(const(ubyte)* in_, ubyte* out_,
96+
const(AES_KEY)* key);
97+
98+
void AES_ecb_encrypt(const(ubyte)* in_, ubyte* out_,
99+
const(AES_KEY)* key, const int enc);
100+
void AES_cbc_encrypt(const(ubyte)* in_, ubyte* out_,
101+
size_t length, const(AES_KEY)* key,
102+
ubyte* ivec, const int enc);
103+
void AES_cfb128_encrypt(const(ubyte)* in_, ubyte* out_,
104+
size_t length, const(AES_KEY)* key,
105+
ubyte* ivec, int* num, const int enc);
106+
void AES_cfb1_encrypt(const(ubyte)* in_, ubyte* out_,
107+
size_t length, const(AES_KEY)* key,
108+
ubyte* ivec, int* num, const int enc);
109+
void AES_cfb8_encrypt(const(ubyte)* in_, ubyte* out_,
110+
size_t length, const(AES_KEY)* key,
111+
ubyte* ivec, int* num, const int enc);
112+
void AES_ofb128_encrypt(const(ubyte)* in_, ubyte* out_,
113+
size_t length, const(AES_KEY)* key,
114+
ubyte* ivec, int* num);
115+
void AES_ctr128_encrypt(const(ubyte)* in_, ubyte* out_,
116+
size_t length, const(AES_KEY)* key,
117+
ubyte ivec[AES_BLOCK_SIZE],
118+
ubyte ecount_buf[AES_BLOCK_SIZE],
119+
uint* num);
120+
/* NB: the IV is _two_ blocks long */
121+
void AES_ige_encrypt(const(ubyte)* in_, ubyte* out_,
122+
size_t length, const(AES_KEY)* key,
123+
ubyte* ivec, const int enc);
124+
/* NB: the IV is _four_ blocks long */
125+
void AES_bi_ige_encrypt(const(ubyte)* in_, ubyte* out_,
126+
size_t length, const(AES_KEY)* key,
127+
const(AES_KEY)* key2, const(ubyte)* ivec,
128+
const int enc);
129+
130+
int AES_wrap_key(AES_KEY* key, const(ubyte)* iv,
131+
ubyte* out_,
132+
const(ubyte)* in_, uint inlen);
133+
int AES_unwrap_key(AES_KEY* key, const(ubyte)* iv,
134+
ubyte* out_,
135+
const(ubyte)* in_, uint inlen);

0 commit comments

Comments
 (0)