Skip to content

Commit ed3f9d1

Browse files
committed
Manual patching required after generating x509.d
* struct definitions removed from x509 are instead added as declarations in ossl_typ. * imports translated according to #include's in header-file, dstep doesn't resolve imports. * macros used as function aliasesas without argument list are incorrectly generated into enum types. * "#ifndef OPENSSL_NO_*" translated into "version".
1 parent f12be7e commit ed3f9d1

File tree

3 files changed

+68
-13
lines changed

3 files changed

+68
-13
lines changed

deimos/openssl/ossl_typ.d

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,18 @@ import deimos.openssl.x509_vfy;
175175
struct ssl_dane_st;
176176
alias SSL_DANE = ssl_dane_st;
177177

178+
struct x509_st;
178179
alias x509_st X509;
179180
alias X509_algor_st X509_ALGOR;
181+
struct X509_crl_st;
180182
alias X509_crl_st X509_CRL;
181183
struct x509_crl_method_st;
182184
alias x509_crl_method_st X509_CRL_METHOD;
185+
struct x509_revoked_st;
183186
alias x509_revoked_st X509_REVOKED;
187+
struct X509_name_st;
184188
alias X509_name_st X509_NAME;
189+
struct X509_pubkey_st;
185190
alias X509_pubkey_st X509_PUBKEY;
186191
struct x509_store_st;
187192
alias x509_store_st X509_STORE;
@@ -197,7 +202,7 @@ alias X509_LOOKUP_METHOD = x509_lookup_method_st;
197202
struct X509_VERIFY_PARAM_st;
198203
alias X509_VERIFY_PARAM = X509_VERIFY_PARAM_st;
199204

200-
205+
struct pkcs8_priv_key_info_st;
201206
alias pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO;
202207

203208
import deimos.openssl.x509v3;

deimos/openssl/pem.d

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,8 +477,6 @@ mixin(DECLARE_PEM_rw!("X509", "X509")());
477477

478478
mixin(DECLARE_PEM_rw!("X509_AUX", "X509")());
479479

480-
mixin(DECLARE_PEM_rw!("X509_CERT_PAIR", "X509_CERT_PAIR")());
481-
482480
mixin(DECLARE_PEM_rw!("X509_REQ", "X509_REQ")());
483481
mixin(DECLARE_PEM_write!("X509_REQ_NEW", "X509_REQ")());
484482

deimos/openssl/x509.d

Lines changed: 62 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,34 @@
1313
* SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
1414
*/
1515

16-
import core.stdc.config;
17-
import core.stdc.stdio;
18-
import core.sys.posix.sched;
16+
module deimos.openssl.x509;
17+
18+
import core.stdc.time;
19+
20+
import deimos.openssl._d_util;
21+
import deimos.openssl.x509v3 : stack_st_ASN1_OBJECT;
22+
23+
public import deimos.openssl.e_os2;
24+
public import deimos.openssl.ossl_typ;
25+
public import deimos.openssl.symhacks;
26+
public import deimos.openssl.buffer;
27+
public import deimos.openssl.evp;
28+
public import deimos.openssl.bio;
29+
public import deimos.openssl.stack;
30+
public import deimos.openssl.asn1;
31+
public import deimos.openssl.safestack;
32+
public import deimos.openssl.ec;
33+
34+
/* if OPENSSL_API_COMPAT < 0x10100000L */
35+
public import deimos.openssl.rsa;
36+
public import deimos.openssl.dsa;
37+
public import deimos.openssl.dh;
38+
/* endif */
39+
40+
public import deimos.openssl.sha;
1941

2042
extern (C):
43+
nothrow:
2144

2245
enum X509_FILETYPE_PEM = 1;
2346
enum X509_FILETYPE_ASN1 = 2;
@@ -563,14 +586,18 @@ int X509_signature_print(
563586
int X509_sign(X509* x, EVP_PKEY* pkey, const(EVP_MD)* md);
564587
int X509_sign_ctx(X509* x, EVP_MD_CTX* ctx);
565588

589+
version(OPENSSL_NO_OCSP) {} else {
566590
int X509_http_nbio(OCSP_REQ_CTX* rctx, X509** pcert);
591+
}
567592

568593
int X509_REQ_sign(X509_REQ* x, EVP_PKEY* pkey, const(EVP_MD)* md);
569594
int X509_REQ_sign_ctx(X509_REQ* x, EVP_MD_CTX* ctx);
570595
int X509_CRL_sign(X509_CRL* x, EVP_PKEY* pkey, const(EVP_MD)* md);
571596
int X509_CRL_sign_ctx(X509_CRL* x, EVP_MD_CTX* ctx);
572597

598+
version(OPENSSL_NO_OCSP) {} else {
573599
int X509_CRL_http_nbio(OCSP_REQ_CTX* rctx, X509_CRL** pcrl);
600+
}
574601

575602
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI* x, EVP_PKEY* pkey, const(EVP_MD)* md);
576603

@@ -596,29 +623,36 @@ int X509_NAME_digest(
596623
ubyte* md,
597624
uint* len);
598625

626+
version(OPENSSL_NO_STDIO) {} else {
599627
X509* d2i_X509_fp(FILE* fp, X509** x509);
600628
int i2d_X509_fp(FILE* fp, X509* x509);
601629
X509_CRL* d2i_X509_CRL_fp(FILE* fp, X509_CRL** crl);
602630
int i2d_X509_CRL_fp(FILE* fp, X509_CRL* crl);
603631
X509_REQ* d2i_X509_REQ_fp(FILE* fp, X509_REQ** req);
604632
int i2d_X509_REQ_fp(FILE* fp, X509_REQ* req);
605633

634+
version(OPENSSL_NO_RSA) {} else {
606635
RSA* d2i_RSAPrivateKey_fp(FILE* fp, RSA** rsa);
607636
int i2d_RSAPrivateKey_fp(FILE* fp, RSA* rsa);
608637
RSA* d2i_RSAPublicKey_fp(FILE* fp, RSA** rsa);
609638
int i2d_RSAPublicKey_fp(FILE* fp, RSA* rsa);
610639
RSA* d2i_RSA_PUBKEY_fp(FILE* fp, RSA** rsa);
611640
int i2d_RSA_PUBKEY_fp(FILE* fp, RSA* rsa);
641+
}
612642

643+
version(OPENSSL_NO_DSA) {} else {
613644
DSA* d2i_DSA_PUBKEY_fp(FILE* fp, DSA** dsa);
614645
int i2d_DSA_PUBKEY_fp(FILE* fp, DSA* dsa);
615646
DSA* d2i_DSAPrivateKey_fp(FILE* fp, DSA** dsa);
616647
int i2d_DSAPrivateKey_fp(FILE* fp, DSA* dsa);
648+
}
617649

650+
version(OPENSSL_NO_EC) {} else {
618651
EC_KEY* d2i_EC_PUBKEY_fp(FILE* fp, EC_KEY** eckey);
619652
int i2d_EC_PUBKEY_fp(FILE* fp, EC_KEY* eckey);
620653
EC_KEY* d2i_ECPrivateKey_fp(FILE* fp, EC_KEY** eckey);
621654
int i2d_ECPrivateKey_fp(FILE* fp, EC_KEY* eckey);
655+
}
622656

623657
X509_SIG* d2i_PKCS8_fp(FILE* fp, X509_SIG** p8);
624658
int i2d_PKCS8_fp(FILE* fp, X509_SIG* p8);
@@ -631,30 +665,36 @@ int i2d_PrivateKey_fp(FILE* fp, EVP_PKEY* pkey);
631665
EVP_PKEY* d2i_PrivateKey_fp(FILE* fp, EVP_PKEY** a);
632666
int i2d_PUBKEY_fp(FILE* fp, EVP_PKEY* pkey);
633667
EVP_PKEY* d2i_PUBKEY_fp(FILE* fp, EVP_PKEY** a);
634-
668+
} /+ OPENSSL_NO_STDIO +/
635669
X509* d2i_X509_bio(BIO* bp, X509** x509);
636670
int i2d_X509_bio(BIO* bp, X509* x509);
637671
X509_CRL* d2i_X509_CRL_bio(BIO* bp, X509_CRL** crl);
638672
int i2d_X509_CRL_bio(BIO* bp, X509_CRL* crl);
639673
X509_REQ* d2i_X509_REQ_bio(BIO* bp, X509_REQ** req);
640674
int i2d_X509_REQ_bio(BIO* bp, X509_REQ* req);
641675

676+
version(OPENSSL_NO_RSA) {} else {
642677
RSA* d2i_RSAPrivateKey_bio(BIO* bp, RSA** rsa);
643678
int i2d_RSAPrivateKey_bio(BIO* bp, RSA* rsa);
644679
RSA* d2i_RSAPublicKey_bio(BIO* bp, RSA** rsa);
645680
int i2d_RSAPublicKey_bio(BIO* bp, RSA* rsa);
646681
RSA* d2i_RSA_PUBKEY_bio(BIO* bp, RSA** rsa);
647682
int i2d_RSA_PUBKEY_bio(BIO* bp, RSA* rsa);
683+
}
648684

685+
version(OPENSSL_NO_DSA) {} else {
649686
DSA* d2i_DSA_PUBKEY_bio(BIO* bp, DSA** dsa);
650687
int i2d_DSA_PUBKEY_bio(BIO* bp, DSA* dsa);
651688
DSA* d2i_DSAPrivateKey_bio(BIO* bp, DSA** dsa);
652689
int i2d_DSAPrivateKey_bio(BIO* bp, DSA* dsa);
690+
}
653691

692+
version(OPENSSL_NO_EC) {} else {
654693
EC_KEY* d2i_EC_PUBKEY_bio(BIO* bp, EC_KEY** eckey);
655694
int i2d_EC_PUBKEY_bio(BIO* bp, EC_KEY* eckey);
656695
EC_KEY* d2i_ECPrivateKey_bio(BIO* bp, EC_KEY** eckey);
657696
int i2d_ECPrivateKey_bio(BIO* bp, EC_KEY* eckey);
697+
}
658698

659699
X509_SIG* d2i_PKCS8_bio(BIO* bp, X509_SIG** p8);
660700
int i2d_PKCS8_bio(BIO* bp, X509_SIG* p8);
@@ -735,14 +775,20 @@ c_long X509_get_pathlen(X509* x);
735775
int i2d_PUBKEY(EVP_PKEY* a, ubyte** pp);
736776
EVP_PKEY* d2i_PUBKEY(EVP_PKEY** a, const(ubyte*)* pp, c_long length);
737777

778+
version(OPENSSL_NO_RSA) {} else {
738779
int i2d_RSA_PUBKEY(RSA* a, ubyte** pp);
739780
RSA* d2i_RSA_PUBKEY(RSA** a, const(ubyte*)* pp, c_long length);
781+
}
740782

783+
version(OPENSSL_NO_DSA) {} else {
741784
int i2d_DSA_PUBKEY(DSA* a, ubyte** pp);
742785
DSA* d2i_DSA_PUBKEY(DSA** a, const(ubyte*)* pp, c_long length);
786+
}
743787

788+
version(OPENSSL_NO_EC) {} else {
744789
int i2d_EC_PUBKEY(EC_KEY* a, ubyte** pp);
745790
EC_KEY* d2i_EC_PUBKEY(EC_KEY** a, const(ubyte*)* pp, c_long length);
791+
}
746792

747793
X509_SIG* X509_SIG_new();
748794
void X509_SIG_free(X509_SIG* a);
@@ -971,10 +1017,10 @@ int X509_set_pubkey(X509* x, EVP_PKEY* pkey);
9711017
int X509_up_ref(X509* x);
9721018
int X509_get_signature_type(const(X509)* x);
9731019

974-
enum X509_get_notBefore = X509_getm_notBefore;
975-
enum X509_get_notAfter = X509_getm_notAfter;
976-
enum X509_set_notBefore = X509_set1_notBefore;
977-
enum X509_set_notAfter = X509_set1_notAfter;
1020+
alias X509_get_notBefore = X509_getm_notBefore;
1021+
alias X509_get_notAfter = X509_getm_notAfter;
1022+
alias X509_set_notBefore = X509_set1_notBefore;
1023+
alias X509_set_notAfter = X509_set1_notAfter;
9781024

9791025
/*
9801026
* This one is only used so that a binary form can output, as in
@@ -1051,8 +1097,8 @@ int X509_CRL_set1_nextUpdate(X509_CRL* x, const(ASN1_TIME)* tm);
10511097
int X509_CRL_sort(X509_CRL* crl);
10521098
int X509_CRL_up_ref(X509_CRL* crl);
10531099

1054-
enum X509_CRL_set_lastUpdate = X509_CRL_set1_lastUpdate;
1055-
enum X509_CRL_set_nextUpdate = X509_CRL_set1_nextUpdate;
1100+
alias X509_CRL_set_lastUpdate = X509_CRL_set1_lastUpdate;
1101+
alias X509_CRL_set_nextUpdate = X509_CRL_set1_nextUpdate;
10561102

10571103
c_long X509_CRL_get_version(const(X509_CRL)* crl);
10581104
const(ASN1_TIME)* X509_CRL_get0_lastUpdate(const(X509_CRL)* crl);
@@ -1103,8 +1149,10 @@ c_ulong X509_issuer_name_hash(X509* a);
11031149
int X509_subject_name_cmp(const(X509)* a, const(X509)* b);
11041150
c_ulong X509_subject_name_hash(X509* x);
11051151

1152+
version(OPENSSL_NO_MD5) {} else {
11061153
c_ulong X509_issuer_name_hash_old(X509* a);
11071154
c_ulong X509_subject_name_hash_old(X509* x);
1155+
}
11081156

11091157
int X509_cmp(const(X509)* a, const(X509)* b);
11101158
int X509_NAME_cmp(const(X509_NAME)* a, const(X509_NAME)* b);
@@ -1115,6 +1163,7 @@ int X509_CRL_cmp(const(X509_CRL)* a, const(X509_CRL)* b);
11151163
int X509_CRL_match(const(X509_CRL)* a, const(X509_CRL)* b);
11161164
int X509_aux_print(BIO* out_, X509* x, int indent);
11171165

1166+
version(OPENSSL_NO_STDIO) {} else {
11181167
int X509_print_ex_fp(FILE* bp, X509* x, c_ulong nmflag, c_ulong cflag);
11191168
int X509_print_fp(FILE* bp, X509* x);
11201169
int X509_CRL_print_fp(FILE* bp, X509_CRL* x);
@@ -1124,6 +1173,7 @@ int X509_NAME_print_ex_fp(
11241173
const(X509_NAME)* nm,
11251174
int indent,
11261175
c_ulong flags);
1176+
}
11271177

11281178
int X509_NAME_print(BIO* bp, const(X509_NAME)* name, int obase);
11291179
int X509_NAME_print_ex(
@@ -1450,6 +1500,7 @@ X509_ALGOR* PKCS5_pbe2_set_iv(
14501500
ubyte* aiv,
14511501
int prf_nid);
14521502

1503+
version(OPENSSL_NO_SCRYPT) {} else {
14531504
X509_ALGOR* PKCS5_pbe2_set_scrypt(
14541505
const(EVP_CIPHER)* cipher,
14551506
const(ubyte)* salt,
@@ -1458,6 +1509,7 @@ X509_ALGOR* PKCS5_pbe2_set_scrypt(
14581509
ulong N,
14591510
ulong r,
14601511
ulong p);
1512+
}
14611513

14621514
X509_ALGOR* PKCS5_pbkdf2_set(
14631515
int iter,

0 commit comments

Comments
 (0)