diff options
author | jsing <> | 2015-02-11 03:39:51 +0000 |
---|---|---|
committer | jsing <> | 2015-02-11 03:39:51 +0000 |
commit | a4446bfb10ec0a821da3861d90dc625a93d84cff (patch) | |
tree | d942bf9cb3a1b441f2c996072292ae69b1aa83d2 /src/lib | |
parent | dea579e3ced20a997dc9c2b82eb0c086555a68b8 (diff) | |
download | openbsd-a4446bfb10ec0a821da3861d90dc625a93d84cff.tar.gz openbsd-a4446bfb10ec0a821da3861d90dc625a93d84cff.tar.bz2 openbsd-a4446bfb10ec0a821da3861d90dc625a93d84cff.zip |
Expand most of the ASN1_SEQUENCE* and associated macros, making the data
structures visible and easier to review, without having to wade through
layers and layers of asn1t.h macros.
Change has been scripted and the generated assembly only differs by changes
to line numbers.
Discussed with beck@ miod@ tedu@
Diffstat (limited to 'src/lib')
34 files changed, 1900 insertions, 292 deletions
diff --git a/src/lib/libcrypto/asn1/n_pkey.c b/src/lib/libcrypto/asn1/n_pkey.c index 198ca97c09..8f65a4b926 100644 --- a/src/lib/libcrypto/asn1/n_pkey.c +++ b/src/lib/libcrypto/asn1/n_pkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: n_pkey.c,v 1.23 2015/02/10 04:01:26 jsing Exp $ */ | 1 | /* $OpenBSD: n_pkey.c,v 1.24 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -87,10 +87,40 @@ typedef struct netscape_encrypted_pkey_st { | |||
87 | } NETSCAPE_ENCRYPTED_PKEY; | 87 | } NETSCAPE_ENCRYPTED_PKEY; |
88 | 88 | ||
89 | 89 | ||
90 | ASN1_BROKEN_SEQUENCE(NETSCAPE_ENCRYPTED_PKEY) = { | 90 | static const ASN1_AUX NETSCAPE_ENCRYPTED_PKEY_aux = { |
91 | ASN1_SIMPLE(NETSCAPE_ENCRYPTED_PKEY, os, ASN1_OCTET_STRING), | 91 | .app_data = NULL, |
92 | ASN1_SIMPLE(NETSCAPE_ENCRYPTED_PKEY, enckey, X509_SIG) | 92 | .flags = ASN1_AFLG_BROKEN, |
93 | } ASN1_BROKEN_SEQUENCE_END(NETSCAPE_ENCRYPTED_PKEY) | 93 | .ref_offset = 0, |
94 | .ref_lock = 0, | ||
95 | .asn1_cb = NULL, | ||
96 | .enc_offset = 0, | ||
97 | }; | ||
98 | static const ASN1_TEMPLATE NETSCAPE_ENCRYPTED_PKEY_seq_tt[] = { | ||
99 | { | ||
100 | .flags = 0, | ||
101 | .tag = 0, | ||
102 | .offset = offsetof(NETSCAPE_ENCRYPTED_PKEY, os), | ||
103 | .field_name = "os", | ||
104 | .item = &ASN1_OCTET_STRING_it, | ||
105 | }, | ||
106 | { | ||
107 | .flags = 0, | ||
108 | .tag = 0, | ||
109 | .offset = offsetof(NETSCAPE_ENCRYPTED_PKEY, enckey), | ||
110 | .field_name = "enckey", | ||
111 | .item = &X509_SIG_it, | ||
112 | }, | ||
113 | }; | ||
114 | |||
115 | const ASN1_ITEM NETSCAPE_ENCRYPTED_PKEY_it = { | ||
116 | .itype = ASN1_ITYPE_SEQUENCE, | ||
117 | .utype = V_ASN1_SEQUENCE, | ||
118 | .templates = NETSCAPE_ENCRYPTED_PKEY_seq_tt, | ||
119 | .tcount = sizeof(NETSCAPE_ENCRYPTED_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
120 | .funcs = &NETSCAPE_ENCRYPTED_PKEY_aux, | ||
121 | .size = sizeof(NETSCAPE_ENCRYPTED_PKEY), | ||
122 | .sname = "NETSCAPE_ENCRYPTED_PKEY", | ||
123 | }; | ||
94 | 124 | ||
95 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY) | 125 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY) |
96 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY, NETSCAPE_ENCRYPTED_PKEY) | 126 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY, NETSCAPE_ENCRYPTED_PKEY) |
@@ -120,11 +150,39 @@ NETSCAPE_ENCRYPTED_PKEY_free(NETSCAPE_ENCRYPTED_PKEY *a) | |||
120 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_ENCRYPTED_PKEY_it); | 150 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_ENCRYPTED_PKEY_it); |
121 | } | 151 | } |
122 | 152 | ||
123 | ASN1_SEQUENCE(NETSCAPE_PKEY) = { | 153 | static const ASN1_TEMPLATE NETSCAPE_PKEY_seq_tt[] = { |
124 | ASN1_SIMPLE(NETSCAPE_PKEY, version, LONG), | 154 | { |
125 | ASN1_SIMPLE(NETSCAPE_PKEY, algor, X509_ALGOR), | 155 | .flags = 0, |
126 | ASN1_SIMPLE(NETSCAPE_PKEY, private_key, ASN1_OCTET_STRING) | 156 | .tag = 0, |
127 | } ASN1_SEQUENCE_END(NETSCAPE_PKEY) | 157 | .offset = offsetof(NETSCAPE_PKEY, version), |
158 | .field_name = "version", | ||
159 | .item = &LONG_it, | ||
160 | }, | ||
161 | { | ||
162 | .flags = 0, | ||
163 | .tag = 0, | ||
164 | .offset = offsetof(NETSCAPE_PKEY, algor), | ||
165 | .field_name = "algor", | ||
166 | .item = &X509_ALGOR_it, | ||
167 | }, | ||
168 | { | ||
169 | .flags = 0, | ||
170 | .tag = 0, | ||
171 | .offset = offsetof(NETSCAPE_PKEY, private_key), | ||
172 | .field_name = "private_key", | ||
173 | .item = &ASN1_OCTET_STRING_it, | ||
174 | }, | ||
175 | }; | ||
176 | |||
177 | const ASN1_ITEM NETSCAPE_PKEY_it = { | ||
178 | .itype = ASN1_ITYPE_SEQUENCE, | ||
179 | .utype = V_ASN1_SEQUENCE, | ||
180 | .templates = NETSCAPE_PKEY_seq_tt, | ||
181 | .tcount = sizeof(NETSCAPE_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
182 | .funcs = NULL, | ||
183 | .size = sizeof(NETSCAPE_PKEY), | ||
184 | .sname = "NETSCAPE_PKEY", | ||
185 | }; | ||
128 | 186 | ||
129 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_PKEY) | 187 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_PKEY) |
130 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_PKEY, NETSCAPE_PKEY) | 188 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_PKEY, NETSCAPE_PKEY) |
diff --git a/src/lib/libcrypto/asn1/nsseq.c b/src/lib/libcrypto/asn1/nsseq.c index ceab3992fd..dff9b189d9 100644 --- a/src/lib/libcrypto/asn1/nsseq.c +++ b/src/lib/libcrypto/asn1/nsseq.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: nsseq.c,v 1.8 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: nsseq.c,v 1.9 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -75,10 +75,40 @@ nsseq_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
75 | 75 | ||
76 | /* Netscape certificate sequence structure */ | 76 | /* Netscape certificate sequence structure */ |
77 | 77 | ||
78 | ASN1_SEQUENCE_cb(NETSCAPE_CERT_SEQUENCE, nsseq_cb) = { | 78 | static const ASN1_AUX NETSCAPE_CERT_SEQUENCE_aux = { |
79 | ASN1_SIMPLE(NETSCAPE_CERT_SEQUENCE, type, ASN1_OBJECT), | 79 | .app_data = NULL, |
80 | ASN1_EXP_SEQUENCE_OF_OPT(NETSCAPE_CERT_SEQUENCE, certs, X509, 0) | 80 | .flags = 0, |
81 | } ASN1_SEQUENCE_END_cb(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) | 81 | .ref_offset = 0, |
82 | .ref_lock = 0, | ||
83 | .asn1_cb = nsseq_cb, | ||
84 | .enc_offset = 0, | ||
85 | }; | ||
86 | static const ASN1_TEMPLATE NETSCAPE_CERT_SEQUENCE_seq_tt[] = { | ||
87 | { | ||
88 | .flags = 0, | ||
89 | .tag = 0, | ||
90 | .offset = offsetof(NETSCAPE_CERT_SEQUENCE, type), | ||
91 | .field_name = "type", | ||
92 | .item = &ASN1_OBJECT_it, | ||
93 | }, | ||
94 | { | ||
95 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
96 | .tag = 0, | ||
97 | .offset = offsetof(NETSCAPE_CERT_SEQUENCE, certs), | ||
98 | .field_name = "certs", | ||
99 | .item = &X509_it, | ||
100 | }, | ||
101 | }; | ||
102 | |||
103 | const ASN1_ITEM NETSCAPE_CERT_SEQUENCE_it = { | ||
104 | .itype = ASN1_ITYPE_SEQUENCE, | ||
105 | .utype = V_ASN1_SEQUENCE, | ||
106 | .templates = NETSCAPE_CERT_SEQUENCE_seq_tt, | ||
107 | .tcount = sizeof(NETSCAPE_CERT_SEQUENCE_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
108 | .funcs = &NETSCAPE_CERT_SEQUENCE_aux, | ||
109 | .size = sizeof(NETSCAPE_CERT_SEQUENCE), | ||
110 | .sname = "NETSCAPE_CERT_SEQUENCE", | ||
111 | }; | ||
82 | 112 | ||
83 | 113 | ||
84 | NETSCAPE_CERT_SEQUENCE * | 114 | NETSCAPE_CERT_SEQUENCE * |
diff --git a/src/lib/libcrypto/asn1/p5_pbe.c b/src/lib/libcrypto/asn1/p5_pbe.c index 7491a5bdc7..6d08cb28a1 100644 --- a/src/lib/libcrypto/asn1/p5_pbe.c +++ b/src/lib/libcrypto/asn1/p5_pbe.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p5_pbe.c,v 1.18 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: p5_pbe.c,v 1.19 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -66,10 +66,32 @@ | |||
66 | 66 | ||
67 | /* PKCS#5 password based encryption structure */ | 67 | /* PKCS#5 password based encryption structure */ |
68 | 68 | ||
69 | ASN1_SEQUENCE(PBEPARAM) = { | 69 | static const ASN1_TEMPLATE PBEPARAM_seq_tt[] = { |
70 | ASN1_SIMPLE(PBEPARAM, salt, ASN1_OCTET_STRING), | 70 | { |
71 | ASN1_SIMPLE(PBEPARAM, iter, ASN1_INTEGER) | 71 | .flags = 0, |
72 | } ASN1_SEQUENCE_END(PBEPARAM) | 72 | .tag = 0, |
73 | .offset = offsetof(PBEPARAM, salt), | ||
74 | .field_name = "salt", | ||
75 | .item = &ASN1_OCTET_STRING_it, | ||
76 | }, | ||
77 | { | ||
78 | .flags = 0, | ||
79 | .tag = 0, | ||
80 | .offset = offsetof(PBEPARAM, iter), | ||
81 | .field_name = "iter", | ||
82 | .item = &ASN1_INTEGER_it, | ||
83 | }, | ||
84 | }; | ||
85 | |||
86 | const ASN1_ITEM PBEPARAM_it = { | ||
87 | .itype = ASN1_ITYPE_SEQUENCE, | ||
88 | .utype = V_ASN1_SEQUENCE, | ||
89 | .templates = PBEPARAM_seq_tt, | ||
90 | .tcount = sizeof(PBEPARAM_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
91 | .funcs = NULL, | ||
92 | .size = sizeof(PBEPARAM), | ||
93 | .sname = "PBEPARAM", | ||
94 | }; | ||
73 | 95 | ||
74 | 96 | ||
75 | PBEPARAM * | 97 | PBEPARAM * |
diff --git a/src/lib/libcrypto/asn1/p5_pbev2.c b/src/lib/libcrypto/asn1/p5_pbev2.c index 1189e7e26b..f967f25d3d 100644 --- a/src/lib/libcrypto/asn1/p5_pbev2.c +++ b/src/lib/libcrypto/asn1/p5_pbev2.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p5_pbev2.c,v 1.19 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: p5_pbev2.c,v 1.20 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999-2004. | 3 | * project 1999-2004. |
4 | */ | 4 | */ |
@@ -66,10 +66,32 @@ | |||
66 | 66 | ||
67 | /* PKCS#5 v2.0 password based encryption structures */ | 67 | /* PKCS#5 v2.0 password based encryption structures */ |
68 | 68 | ||
69 | ASN1_SEQUENCE(PBE2PARAM) = { | 69 | static const ASN1_TEMPLATE PBE2PARAM_seq_tt[] = { |
70 | ASN1_SIMPLE(PBE2PARAM, keyfunc, X509_ALGOR), | 70 | { |
71 | ASN1_SIMPLE(PBE2PARAM, encryption, X509_ALGOR) | 71 | .flags = 0, |
72 | } ASN1_SEQUENCE_END(PBE2PARAM) | 72 | .tag = 0, |
73 | .offset = offsetof(PBE2PARAM, keyfunc), | ||
74 | .field_name = "keyfunc", | ||
75 | .item = &X509_ALGOR_it, | ||
76 | }, | ||
77 | { | ||
78 | .flags = 0, | ||
79 | .tag = 0, | ||
80 | .offset = offsetof(PBE2PARAM, encryption), | ||
81 | .field_name = "encryption", | ||
82 | .item = &X509_ALGOR_it, | ||
83 | }, | ||
84 | }; | ||
85 | |||
86 | const ASN1_ITEM PBE2PARAM_it = { | ||
87 | .itype = ASN1_ITYPE_SEQUENCE, | ||
88 | .utype = V_ASN1_SEQUENCE, | ||
89 | .templates = PBE2PARAM_seq_tt, | ||
90 | .tcount = sizeof(PBE2PARAM_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
91 | .funcs = NULL, | ||
92 | .size = sizeof(PBE2PARAM), | ||
93 | .sname = "PBE2PARAM", | ||
94 | }; | ||
73 | 95 | ||
74 | 96 | ||
75 | PBE2PARAM * | 97 | PBE2PARAM * |
@@ -97,12 +119,46 @@ PBE2PARAM_free(PBE2PARAM *a) | |||
97 | ASN1_item_free((ASN1_VALUE *)a, &PBE2PARAM_it); | 119 | ASN1_item_free((ASN1_VALUE *)a, &PBE2PARAM_it); |
98 | } | 120 | } |
99 | 121 | ||
100 | ASN1_SEQUENCE(PBKDF2PARAM) = { | 122 | static const ASN1_TEMPLATE PBKDF2PARAM_seq_tt[] = { |
101 | ASN1_SIMPLE(PBKDF2PARAM, salt, ASN1_ANY), | 123 | { |
102 | ASN1_SIMPLE(PBKDF2PARAM, iter, ASN1_INTEGER), | 124 | .flags = 0, |
103 | ASN1_OPT(PBKDF2PARAM, keylength, ASN1_INTEGER), | 125 | .tag = 0, |
104 | ASN1_OPT(PBKDF2PARAM, prf, X509_ALGOR) | 126 | .offset = offsetof(PBKDF2PARAM, salt), |
105 | } ASN1_SEQUENCE_END(PBKDF2PARAM) | 127 | .field_name = "salt", |
128 | .item = &ASN1_ANY_it, | ||
129 | }, | ||
130 | { | ||
131 | .flags = 0, | ||
132 | .tag = 0, | ||
133 | .offset = offsetof(PBKDF2PARAM, iter), | ||
134 | .field_name = "iter", | ||
135 | .item = &ASN1_INTEGER_it, | ||
136 | }, | ||
137 | { | ||
138 | .flags = ASN1_TFLG_OPTIONAL, | ||
139 | .tag = 0, | ||
140 | .offset = offsetof(PBKDF2PARAM, keylength), | ||
141 | .field_name = "keylength", | ||
142 | .item = &ASN1_INTEGER_it, | ||
143 | }, | ||
144 | { | ||
145 | .flags = ASN1_TFLG_OPTIONAL, | ||
146 | .tag = 0, | ||
147 | .offset = offsetof(PBKDF2PARAM, prf), | ||
148 | .field_name = "prf", | ||
149 | .item = &X509_ALGOR_it, | ||
150 | }, | ||
151 | }; | ||
152 | |||
153 | const ASN1_ITEM PBKDF2PARAM_it = { | ||
154 | .itype = ASN1_ITYPE_SEQUENCE, | ||
155 | .utype = V_ASN1_SEQUENCE, | ||
156 | .templates = PBKDF2PARAM_seq_tt, | ||
157 | .tcount = sizeof(PBKDF2PARAM_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
158 | .funcs = NULL, | ||
159 | .size = sizeof(PBKDF2PARAM), | ||
160 | .sname = "PBKDF2PARAM", | ||
161 | }; | ||
106 | 162 | ||
107 | 163 | ||
108 | PBKDF2PARAM * | 164 | PBKDF2PARAM * |
diff --git a/src/lib/libcrypto/asn1/p8_pkey.c b/src/lib/libcrypto/asn1/p8_pkey.c index f8688ebc17..486aa8d42c 100644 --- a/src/lib/libcrypto/asn1/p8_pkey.c +++ b/src/lib/libcrypto/asn1/p8_pkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p8_pkey.c,v 1.13 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: p8_pkey.c,v 1.14 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -75,12 +75,54 @@ pkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
75 | return 1; | 75 | return 1; |
76 | } | 76 | } |
77 | 77 | ||
78 | ASN1_SEQUENCE_cb(PKCS8_PRIV_KEY_INFO, pkey_cb) = { | 78 | static const ASN1_AUX PKCS8_PRIV_KEY_INFO_aux = { |
79 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, version, ASN1_INTEGER), | 79 | .app_data = NULL, |
80 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkeyalg, X509_ALGOR), | 80 | .flags = 0, |
81 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkey, ASN1_ANY), | 81 | .ref_offset = 0, |
82 | ASN1_IMP_SET_OF_OPT(PKCS8_PRIV_KEY_INFO, attributes, X509_ATTRIBUTE, 0) | 82 | .ref_lock = 0, |
83 | } ASN1_SEQUENCE_END_cb(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) | 83 | .asn1_cb = pkey_cb, |
84 | .enc_offset = 0, | ||
85 | }; | ||
86 | static const ASN1_TEMPLATE PKCS8_PRIV_KEY_INFO_seq_tt[] = { | ||
87 | { | ||
88 | .flags = 0, | ||
89 | .tag = 0, | ||
90 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, version), | ||
91 | .field_name = "version", | ||
92 | .item = &ASN1_INTEGER_it, | ||
93 | }, | ||
94 | { | ||
95 | .flags = 0, | ||
96 | .tag = 0, | ||
97 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, pkeyalg), | ||
98 | .field_name = "pkeyalg", | ||
99 | .item = &X509_ALGOR_it, | ||
100 | }, | ||
101 | { | ||
102 | .flags = 0, | ||
103 | .tag = 0, | ||
104 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, pkey), | ||
105 | .field_name = "pkey", | ||
106 | .item = &ASN1_ANY_it, | ||
107 | }, | ||
108 | { | ||
109 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SET_OF | ASN1_TFLG_OPTIONAL, | ||
110 | .tag = 0, | ||
111 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, attributes), | ||
112 | .field_name = "attributes", | ||
113 | .item = &X509_ATTRIBUTE_it, | ||
114 | }, | ||
115 | }; | ||
116 | |||
117 | const ASN1_ITEM PKCS8_PRIV_KEY_INFO_it = { | ||
118 | .itype = ASN1_ITYPE_SEQUENCE, | ||
119 | .utype = V_ASN1_SEQUENCE, | ||
120 | .templates = PKCS8_PRIV_KEY_INFO_seq_tt, | ||
121 | .tcount = sizeof(PKCS8_PRIV_KEY_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
122 | .funcs = &PKCS8_PRIV_KEY_INFO_aux, | ||
123 | .size = sizeof(PKCS8_PRIV_KEY_INFO), | ||
124 | .sname = "PKCS8_PRIV_KEY_INFO", | ||
125 | }; | ||
84 | 126 | ||
85 | 127 | ||
86 | PKCS8_PRIV_KEY_INFO * | 128 | PKCS8_PRIV_KEY_INFO * |
diff --git a/src/lib/libcrypto/asn1/x_algor.c b/src/lib/libcrypto/asn1/x_algor.c index f7cae9499a..c10e114318 100644 --- a/src/lib/libcrypto/asn1/x_algor.c +++ b/src/lib/libcrypto/asn1/x_algor.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_algor.c,v 1.18 2015/02/10 08:33:10 jsing Exp $ */ | 1 | /* $OpenBSD: x_algor.c,v 1.19 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
@@ -61,10 +61,32 @@ | |||
61 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
62 | #include <openssl/asn1t.h> | 62 | #include <openssl/asn1t.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_ALGOR) = { | 64 | static const ASN1_TEMPLATE X509_ALGOR_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_ALGOR, algorithm, ASN1_OBJECT), | 65 | { |
66 | ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY) | 66 | .flags = 0, |
67 | } ASN1_SEQUENCE_END(X509_ALGOR) | 67 | .tag = 0, |
68 | .offset = offsetof(X509_ALGOR, algorithm), | ||
69 | .field_name = "algorithm", | ||
70 | .item = &ASN1_OBJECT_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = ASN1_TFLG_OPTIONAL, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_ALGOR, parameter), | ||
76 | .field_name = "parameter", | ||
77 | .item = &ASN1_ANY_it, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | const ASN1_ITEM X509_ALGOR_it = { | ||
82 | .itype = ASN1_ITYPE_SEQUENCE, | ||
83 | .utype = V_ASN1_SEQUENCE, | ||
84 | .templates = X509_ALGOR_seq_tt, | ||
85 | .tcount = sizeof(X509_ALGOR_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
86 | .funcs = NULL, | ||
87 | .size = sizeof(X509_ALGOR), | ||
88 | .sname = "X509_ALGOR", | ||
89 | }; | ||
68 | 90 | ||
69 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = | 91 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = |
70 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) | 92 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) |
diff --git a/src/lib/libcrypto/asn1/x_crl.c b/src/lib/libcrypto/asn1/x_crl.c index 536aa74e00..338a784189 100644 --- a/src/lib/libcrypto/asn1/x_crl.c +++ b/src/lib/libcrypto/asn1/x_crl.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_crl.c,v 1.22 2015/02/10 08:33:10 jsing Exp $ */ | 1 | /* $OpenBSD: x_crl.c,v 1.23 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -71,11 +71,39 @@ static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | |||
71 | const X509_REVOKED * const *b); | 71 | const X509_REVOKED * const *b); |
72 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); | 72 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); |
73 | 73 | ||
74 | ASN1_SEQUENCE(X509_REVOKED) = { | 74 | static const ASN1_TEMPLATE X509_REVOKED_seq_tt[] = { |
75 | ASN1_SIMPLE(X509_REVOKED, serialNumber, ASN1_INTEGER), | 75 | { |
76 | ASN1_SIMPLE(X509_REVOKED, revocationDate, ASN1_TIME), | 76 | .flags = 0, |
77 | ASN1_SEQUENCE_OF_OPT(X509_REVOKED, extensions, X509_EXTENSION) | 77 | .tag = 0, |
78 | } ASN1_SEQUENCE_END(X509_REVOKED) | 78 | .offset = offsetof(X509_REVOKED, serialNumber), |
79 | .field_name = "serialNumber", | ||
80 | .item = &ASN1_INTEGER_it, | ||
81 | }, | ||
82 | { | ||
83 | .flags = 0, | ||
84 | .tag = 0, | ||
85 | .offset = offsetof(X509_REVOKED, revocationDate), | ||
86 | .field_name = "revocationDate", | ||
87 | .item = &ASN1_TIME_it, | ||
88 | }, | ||
89 | { | ||
90 | .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
91 | .tag = 0, | ||
92 | .offset = offsetof(X509_REVOKED, extensions), | ||
93 | .field_name = "extensions", | ||
94 | .item = &X509_EXTENSION_it, | ||
95 | }, | ||
96 | }; | ||
97 | |||
98 | const ASN1_ITEM X509_REVOKED_it = { | ||
99 | .itype = ASN1_ITYPE_SEQUENCE, | ||
100 | .utype = V_ASN1_SEQUENCE, | ||
101 | .templates = X509_REVOKED_seq_tt, | ||
102 | .tcount = sizeof(X509_REVOKED_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
103 | .funcs = NULL, | ||
104 | .size = sizeof(X509_REVOKED), | ||
105 | .sname = "X509_REVOKED", | ||
106 | }; | ||
79 | 107 | ||
80 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); | 108 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); |
81 | static int def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, | 109 | static int def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, |
@@ -111,15 +139,75 @@ crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
111 | } | 139 | } |
112 | 140 | ||
113 | 141 | ||
114 | ASN1_SEQUENCE_enc(X509_CRL_INFO, enc, crl_inf_cb) = { | 142 | static const ASN1_AUX X509_CRL_INFO_aux = { |
115 | ASN1_OPT(X509_CRL_INFO, version, ASN1_INTEGER), | 143 | .app_data = NULL, |
116 | ASN1_SIMPLE(X509_CRL_INFO, sig_alg, X509_ALGOR), | 144 | .flags = ASN1_AFLG_ENCODING, |
117 | ASN1_SIMPLE(X509_CRL_INFO, issuer, X509_NAME), | 145 | .ref_offset = 0, |
118 | ASN1_SIMPLE(X509_CRL_INFO, lastUpdate, ASN1_TIME), | 146 | .ref_lock = 0, |
119 | ASN1_OPT(X509_CRL_INFO, nextUpdate, ASN1_TIME), | 147 | .asn1_cb = crl_inf_cb, |
120 | ASN1_SEQUENCE_OF_OPT(X509_CRL_INFO, revoked, X509_REVOKED), | 148 | .enc_offset = offsetof(X509_CRL_INFO, enc), |
121 | ASN1_EXP_SEQUENCE_OF_OPT(X509_CRL_INFO, extensions, X509_EXTENSION, 0) | 149 | }; |
122 | } ASN1_SEQUENCE_END_enc(X509_CRL_INFO, X509_CRL_INFO) | 150 | static const ASN1_TEMPLATE X509_CRL_INFO_seq_tt[] = { |
151 | { | ||
152 | .flags = ASN1_TFLG_OPTIONAL, | ||
153 | .tag = 0, | ||
154 | .offset = offsetof(X509_CRL_INFO, version), | ||
155 | .field_name = "version", | ||
156 | .item = &ASN1_INTEGER_it, | ||
157 | }, | ||
158 | { | ||
159 | .flags = 0, | ||
160 | .tag = 0, | ||
161 | .offset = offsetof(X509_CRL_INFO, sig_alg), | ||
162 | .field_name = "sig_alg", | ||
163 | .item = &X509_ALGOR_it, | ||
164 | }, | ||
165 | { | ||
166 | .flags = 0, | ||
167 | .tag = 0, | ||
168 | .offset = offsetof(X509_CRL_INFO, issuer), | ||
169 | .field_name = "issuer", | ||
170 | .item = &X509_NAME_it, | ||
171 | }, | ||
172 | { | ||
173 | .flags = 0, | ||
174 | .tag = 0, | ||
175 | .offset = offsetof(X509_CRL_INFO, lastUpdate), | ||
176 | .field_name = "lastUpdate", | ||
177 | .item = &ASN1_TIME_it, | ||
178 | }, | ||
179 | { | ||
180 | .flags = ASN1_TFLG_OPTIONAL, | ||
181 | .tag = 0, | ||
182 | .offset = offsetof(X509_CRL_INFO, nextUpdate), | ||
183 | .field_name = "nextUpdate", | ||
184 | .item = &ASN1_TIME_it, | ||
185 | }, | ||
186 | { | ||
187 | .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
188 | .tag = 0, | ||
189 | .offset = offsetof(X509_CRL_INFO, revoked), | ||
190 | .field_name = "revoked", | ||
191 | .item = &X509_REVOKED_it, | ||
192 | }, | ||
193 | { | ||
194 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
195 | .tag = 0, | ||
196 | .offset = offsetof(X509_CRL_INFO, extensions), | ||
197 | .field_name = "extensions", | ||
198 | .item = &X509_EXTENSION_it, | ||
199 | }, | ||
200 | }; | ||
201 | |||
202 | const ASN1_ITEM X509_CRL_INFO_it = { | ||
203 | .itype = ASN1_ITYPE_SEQUENCE, | ||
204 | .utype = V_ASN1_SEQUENCE, | ||
205 | .templates = X509_CRL_INFO_seq_tt, | ||
206 | .tcount = sizeof(X509_CRL_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
207 | .funcs = &X509_CRL_INFO_aux, | ||
208 | .size = sizeof(X509_CRL_INFO), | ||
209 | .sname = "X509_CRL_INFO", | ||
210 | }; | ||
123 | 211 | ||
124 | /* Set CRL entry issuer according to CRL certificate issuer extension. | 212 | /* Set CRL entry issuer according to CRL certificate issuer extension. |
125 | * Check for unhandled critical CRL entry extensions. | 213 | * Check for unhandled critical CRL entry extensions. |
@@ -331,11 +419,47 @@ setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) | |||
331 | DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl)); | 419 | DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl)); |
332 | } | 420 | } |
333 | 421 | ||
334 | ASN1_SEQUENCE_ref(X509_CRL, crl_cb, CRYPTO_LOCK_X509_CRL) = { | 422 | static const ASN1_AUX X509_CRL_aux = { |
335 | ASN1_SIMPLE(X509_CRL, crl, X509_CRL_INFO), | 423 | .app_data = NULL, |
336 | ASN1_SIMPLE(X509_CRL, sig_alg, X509_ALGOR), | 424 | .flags = ASN1_AFLG_REFCOUNT, |
337 | ASN1_SIMPLE(X509_CRL, signature, ASN1_BIT_STRING) | 425 | .ref_offset = offsetof(X509_CRL, references), |
338 | } ASN1_SEQUENCE_END_ref(X509_CRL, X509_CRL) | 426 | .ref_lock = CRYPTO_LOCK_X509_CRL, |
427 | .asn1_cb = crl_cb, | ||
428 | .enc_offset = 0, | ||
429 | }; | ||
430 | static const ASN1_TEMPLATE X509_CRL_seq_tt[] = { | ||
431 | { | ||
432 | .flags = 0, | ||
433 | .tag = 0, | ||
434 | .offset = offsetof(X509_CRL, crl), | ||
435 | .field_name = "crl", | ||
436 | .item = &X509_CRL_INFO_it, | ||
437 | }, | ||
438 | { | ||
439 | .flags = 0, | ||
440 | .tag = 0, | ||
441 | .offset = offsetof(X509_CRL, sig_alg), | ||
442 | .field_name = "sig_alg", | ||
443 | .item = &X509_ALGOR_it, | ||
444 | }, | ||
445 | { | ||
446 | .flags = 0, | ||
447 | .tag = 0, | ||
448 | .offset = offsetof(X509_CRL, signature), | ||
449 | .field_name = "signature", | ||
450 | .item = &ASN1_BIT_STRING_it, | ||
451 | }, | ||
452 | }; | ||
453 | |||
454 | const ASN1_ITEM X509_CRL_it = { | ||
455 | .itype = ASN1_ITYPE_SEQUENCE, | ||
456 | .utype = V_ASN1_SEQUENCE, | ||
457 | .templates = X509_CRL_seq_tt, | ||
458 | .tcount = sizeof(X509_CRL_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
459 | .funcs = &X509_CRL_aux, | ||
460 | .size = sizeof(X509_CRL), | ||
461 | .sname = "X509_CRL", | ||
462 | }; | ||
339 | 463 | ||
340 | 464 | ||
341 | X509_REVOKED * | 465 | X509_REVOKED * |
diff --git a/src/lib/libcrypto/asn1/x_exten.c b/src/lib/libcrypto/asn1/x_exten.c index 755faebeba..6f82a71d68 100644 --- a/src/lib/libcrypto/asn1/x_exten.c +++ b/src/lib/libcrypto/asn1/x_exten.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_exten.c,v 1.13 2015/02/10 06:36:30 jsing Exp $ */ | 1 | /* $OpenBSD: x_exten.c,v 1.14 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
@@ -61,11 +61,39 @@ | |||
61 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
62 | #include <openssl/asn1t.h> | 62 | #include <openssl/asn1t.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_EXTENSION) = { | 64 | static const ASN1_TEMPLATE X509_EXTENSION_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_EXTENSION, object, ASN1_OBJECT), | 65 | { |
66 | ASN1_OPT(X509_EXTENSION, critical, ASN1_BOOLEAN), | 66 | .flags = 0, |
67 | ASN1_SIMPLE(X509_EXTENSION, value, ASN1_OCTET_STRING) | 67 | .tag = 0, |
68 | } ASN1_SEQUENCE_END(X509_EXTENSION) | 68 | .offset = offsetof(X509_EXTENSION, object), |
69 | .field_name = "object", | ||
70 | .item = &ASN1_OBJECT_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = ASN1_TFLG_OPTIONAL, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_EXTENSION, critical), | ||
76 | .field_name = "critical", | ||
77 | .item = &ASN1_BOOLEAN_it, | ||
78 | }, | ||
79 | { | ||
80 | .flags = 0, | ||
81 | .tag = 0, | ||
82 | .offset = offsetof(X509_EXTENSION, value), | ||
83 | .field_name = "value", | ||
84 | .item = &ASN1_OCTET_STRING_it, | ||
85 | }, | ||
86 | }; | ||
87 | |||
88 | const ASN1_ITEM X509_EXTENSION_it = { | ||
89 | .itype = ASN1_ITYPE_SEQUENCE, | ||
90 | .utype = V_ASN1_SEQUENCE, | ||
91 | .templates = X509_EXTENSION_seq_tt, | ||
92 | .tcount = sizeof(X509_EXTENSION_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
93 | .funcs = NULL, | ||
94 | .size = sizeof(X509_EXTENSION), | ||
95 | .sname = "X509_EXTENSION", | ||
96 | }; | ||
69 | 97 | ||
70 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = | 98 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = |
71 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) | 99 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) |
diff --git a/src/lib/libcrypto/asn1/x_name.c b/src/lib/libcrypto/asn1/x_name.c index a985cf19ce..d6d5bea369 100644 --- a/src/lib/libcrypto/asn1/x_name.c +++ b/src/lib/libcrypto/asn1/x_name.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_name.c,v 1.24 2015/02/10 08:33:10 jsing Exp $ */ | 1 | /* $OpenBSD: x_name.c,v 1.25 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -87,10 +87,32 @@ static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname, | |||
87 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, | 87 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, |
88 | const char *fname, const ASN1_PCTX *pctx); | 88 | const char *fname, const ASN1_PCTX *pctx); |
89 | 89 | ||
90 | ASN1_SEQUENCE(X509_NAME_ENTRY) = { | 90 | static const ASN1_TEMPLATE X509_NAME_ENTRY_seq_tt[] = { |
91 | ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT), | 91 | { |
92 | ASN1_SIMPLE(X509_NAME_ENTRY, value, ASN1_PRINTABLE) | 92 | .flags = 0, |
93 | } ASN1_SEQUENCE_END(X509_NAME_ENTRY) | 93 | .tag = 0, |
94 | .offset = offsetof(X509_NAME_ENTRY, object), | ||
95 | .field_name = "object", | ||
96 | .item = &ASN1_OBJECT_it, | ||
97 | }, | ||
98 | { | ||
99 | .flags = 0, | ||
100 | .tag = 0, | ||
101 | .offset = offsetof(X509_NAME_ENTRY, value), | ||
102 | .field_name = "value", | ||
103 | .item = &ASN1_PRINTABLE_it, | ||
104 | }, | ||
105 | }; | ||
106 | |||
107 | const ASN1_ITEM X509_NAME_ENTRY_it = { | ||
108 | .itype = ASN1_ITYPE_SEQUENCE, | ||
109 | .utype = V_ASN1_SEQUENCE, | ||
110 | .templates = X509_NAME_ENTRY_seq_tt, | ||
111 | .tcount = sizeof(X509_NAME_ENTRY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
112 | .funcs = NULL, | ||
113 | .size = sizeof(X509_NAME_ENTRY), | ||
114 | .sname = "X509_NAME_ENTRY", | ||
115 | }; | ||
94 | 116 | ||
95 | 117 | ||
96 | X509_NAME_ENTRY * | 118 | X509_NAME_ENTRY * |
diff --git a/src/lib/libcrypto/asn1/x_nx509.c b/src/lib/libcrypto/asn1/x_nx509.c index 9738560c19..f36f1d9eca 100644 --- a/src/lib/libcrypto/asn1/x_nx509.c +++ b/src/lib/libcrypto/asn1/x_nx509.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_nx509.c,v 1.4 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_nx509.c,v 1.5 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2005. | 3 | * project 2005. |
4 | */ | 4 | */ |
@@ -63,10 +63,32 @@ | |||
63 | 63 | ||
64 | /* Old netscape certificate wrapper format */ | 64 | /* Old netscape certificate wrapper format */ |
65 | 65 | ||
66 | ASN1_SEQUENCE(NETSCAPE_X509) = { | 66 | static const ASN1_TEMPLATE NETSCAPE_X509_seq_tt[] = { |
67 | ASN1_SIMPLE(NETSCAPE_X509, header, ASN1_OCTET_STRING), | 67 | { |
68 | ASN1_OPT(NETSCAPE_X509, cert, X509) | 68 | .flags = 0, |
69 | } ASN1_SEQUENCE_END(NETSCAPE_X509) | 69 | .tag = 0, |
70 | .offset = offsetof(NETSCAPE_X509, header), | ||
71 | .field_name = "header", | ||
72 | .item = &ASN1_OCTET_STRING_it, | ||
73 | }, | ||
74 | { | ||
75 | .flags = ASN1_TFLG_OPTIONAL, | ||
76 | .tag = 0, | ||
77 | .offset = offsetof(NETSCAPE_X509, cert), | ||
78 | .field_name = "cert", | ||
79 | .item = &X509_it, | ||
80 | }, | ||
81 | }; | ||
82 | |||
83 | const ASN1_ITEM NETSCAPE_X509_it = { | ||
84 | .itype = ASN1_ITYPE_SEQUENCE, | ||
85 | .utype = V_ASN1_SEQUENCE, | ||
86 | .templates = NETSCAPE_X509_seq_tt, | ||
87 | .tcount = sizeof(NETSCAPE_X509_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
88 | .funcs = NULL, | ||
89 | .size = sizeof(NETSCAPE_X509), | ||
90 | .sname = "NETSCAPE_X509", | ||
91 | }; | ||
70 | 92 | ||
71 | 93 | ||
72 | NETSCAPE_X509 * | 94 | NETSCAPE_X509 * |
diff --git a/src/lib/libcrypto/asn1/x_pubkey.c b/src/lib/libcrypto/asn1/x_pubkey.c index 0c7d01e60d..55084182cc 100644 --- a/src/lib/libcrypto/asn1/x_pubkey.c +++ b/src/lib/libcrypto/asn1/x_pubkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_pubkey.c,v 1.23 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_pubkey.c,v 1.24 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -84,10 +84,40 @@ pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
84 | return 1; | 84 | return 1; |
85 | } | 85 | } |
86 | 86 | ||
87 | ASN1_SEQUENCE_cb(X509_PUBKEY, pubkey_cb) = { | 87 | static const ASN1_AUX X509_PUBKEY_aux = { |
88 | ASN1_SIMPLE(X509_PUBKEY, algor, X509_ALGOR), | 88 | .app_data = NULL, |
89 | ASN1_SIMPLE(X509_PUBKEY, public_key, ASN1_BIT_STRING) | 89 | .flags = 0, |
90 | } ASN1_SEQUENCE_END_cb(X509_PUBKEY, X509_PUBKEY) | 90 | .ref_offset = 0, |
91 | .ref_lock = 0, | ||
92 | .asn1_cb = pubkey_cb, | ||
93 | .enc_offset = 0, | ||
94 | }; | ||
95 | static const ASN1_TEMPLATE X509_PUBKEY_seq_tt[] = { | ||
96 | { | ||
97 | .flags = 0, | ||
98 | .tag = 0, | ||
99 | .offset = offsetof(X509_PUBKEY, algor), | ||
100 | .field_name = "algor", | ||
101 | .item = &X509_ALGOR_it, | ||
102 | }, | ||
103 | { | ||
104 | .flags = 0, | ||
105 | .tag = 0, | ||
106 | .offset = offsetof(X509_PUBKEY, public_key), | ||
107 | .field_name = "public_key", | ||
108 | .item = &ASN1_BIT_STRING_it, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | const ASN1_ITEM X509_PUBKEY_it = { | ||
113 | .itype = ASN1_ITYPE_SEQUENCE, | ||
114 | .utype = V_ASN1_SEQUENCE, | ||
115 | .templates = X509_PUBKEY_seq_tt, | ||
116 | .tcount = sizeof(X509_PUBKEY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
117 | .funcs = &X509_PUBKEY_aux, | ||
118 | .size = sizeof(X509_PUBKEY), | ||
119 | .sname = "X509_PUBKEY", | ||
120 | }; | ||
91 | 121 | ||
92 | 122 | ||
93 | X509_PUBKEY * | 123 | X509_PUBKEY * |
diff --git a/src/lib/libcrypto/asn1/x_req.c b/src/lib/libcrypto/asn1/x_req.c index 6ffcb9d03c..5e8aa21b0d 100644 --- a/src/lib/libcrypto/asn1/x_req.c +++ b/src/lib/libcrypto/asn1/x_req.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_req.c,v 1.13 2015/02/10 05:25:45 jsing Exp $ */ | 1 | /* $OpenBSD: x_req.c,v 1.14 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -92,15 +92,57 @@ rinf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
92 | return 1; | 92 | return 1; |
93 | } | 93 | } |
94 | 94 | ||
95 | ASN1_SEQUENCE_enc(X509_REQ_INFO, enc, rinf_cb) = { | 95 | static const ASN1_AUX X509_REQ_INFO_aux = { |
96 | ASN1_SIMPLE(X509_REQ_INFO, version, ASN1_INTEGER), | 96 | .app_data = NULL, |
97 | ASN1_SIMPLE(X509_REQ_INFO, subject, X509_NAME), | 97 | .flags = ASN1_AFLG_ENCODING, |
98 | ASN1_SIMPLE(X509_REQ_INFO, pubkey, X509_PUBKEY), | 98 | .ref_offset = 0, |
99 | .ref_lock = 0, | ||
100 | .asn1_cb = rinf_cb, | ||
101 | .enc_offset = offsetof(X509_REQ_INFO, enc), | ||
102 | }; | ||
103 | static const ASN1_TEMPLATE X509_REQ_INFO_seq_tt[] = { | ||
104 | { | ||
105 | .flags = 0, | ||
106 | .tag = 0, | ||
107 | .offset = offsetof(X509_REQ_INFO, version), | ||
108 | .field_name = "version", | ||
109 | .item = &ASN1_INTEGER_it, | ||
110 | }, | ||
111 | { | ||
112 | .flags = 0, | ||
113 | .tag = 0, | ||
114 | .offset = offsetof(X509_REQ_INFO, subject), | ||
115 | .field_name = "subject", | ||
116 | .item = &X509_NAME_it, | ||
117 | }, | ||
118 | { | ||
119 | .flags = 0, | ||
120 | .tag = 0, | ||
121 | .offset = offsetof(X509_REQ_INFO, pubkey), | ||
122 | .field_name = "pubkey", | ||
123 | .item = &X509_PUBKEY_it, | ||
124 | }, | ||
99 | /* This isn't really OPTIONAL but it gets round invalid | 125 | /* This isn't really OPTIONAL but it gets round invalid |
100 | * encodings | 126 | * encodings |
101 | */ | 127 | */ |
102 | ASN1_IMP_SET_OF_OPT(X509_REQ_INFO, attributes, X509_ATTRIBUTE, 0) | 128 | { |
103 | } ASN1_SEQUENCE_END_enc(X509_REQ_INFO, X509_REQ_INFO) | 129 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SET_OF | ASN1_TFLG_OPTIONAL, |
130 | .tag = 0, | ||
131 | .offset = offsetof(X509_REQ_INFO, attributes), | ||
132 | .field_name = "attributes", | ||
133 | .item = &X509_ATTRIBUTE_it, | ||
134 | }, | ||
135 | }; | ||
136 | |||
137 | const ASN1_ITEM X509_REQ_INFO_it = { | ||
138 | .itype = ASN1_ITYPE_SEQUENCE, | ||
139 | .utype = V_ASN1_SEQUENCE, | ||
140 | .templates = X509_REQ_INFO_seq_tt, | ||
141 | .tcount = sizeof(X509_REQ_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
142 | .funcs = &X509_REQ_INFO_aux, | ||
143 | .size = sizeof(X509_REQ_INFO), | ||
144 | .sname = "X509_REQ_INFO", | ||
145 | }; | ||
104 | 146 | ||
105 | 147 | ||
106 | X509_REQ_INFO * | 148 | X509_REQ_INFO * |
@@ -128,11 +170,47 @@ X509_REQ_INFO_free(X509_REQ_INFO *a) | |||
128 | ASN1_item_free((ASN1_VALUE *)a, &X509_REQ_INFO_it); | 170 | ASN1_item_free((ASN1_VALUE *)a, &X509_REQ_INFO_it); |
129 | } | 171 | } |
130 | 172 | ||
131 | ASN1_SEQUENCE_ref(X509_REQ, 0, CRYPTO_LOCK_X509_REQ) = { | 173 | static const ASN1_AUX X509_REQ_aux = { |
132 | ASN1_SIMPLE(X509_REQ, req_info, X509_REQ_INFO), | 174 | .app_data = NULL, |
133 | ASN1_SIMPLE(X509_REQ, sig_alg, X509_ALGOR), | 175 | .flags = ASN1_AFLG_REFCOUNT, |
134 | ASN1_SIMPLE(X509_REQ, signature, ASN1_BIT_STRING) | 176 | .ref_offset = offsetof(X509_REQ, references), |
135 | } ASN1_SEQUENCE_END_ref(X509_REQ, X509_REQ) | 177 | .ref_lock = CRYPTO_LOCK_X509_REQ, |
178 | .asn1_cb = 0, | ||
179 | .enc_offset = 0, | ||
180 | }; | ||
181 | static const ASN1_TEMPLATE X509_REQ_seq_tt[] = { | ||
182 | { | ||
183 | .flags = 0, | ||
184 | .tag = 0, | ||
185 | .offset = offsetof(X509_REQ, req_info), | ||
186 | .field_name = "req_info", | ||
187 | .item = &X509_REQ_INFO_it, | ||
188 | }, | ||
189 | { | ||
190 | .flags = 0, | ||
191 | .tag = 0, | ||
192 | .offset = offsetof(X509_REQ, sig_alg), | ||
193 | .field_name = "sig_alg", | ||
194 | .item = &X509_ALGOR_it, | ||
195 | }, | ||
196 | { | ||
197 | .flags = 0, | ||
198 | .tag = 0, | ||
199 | .offset = offsetof(X509_REQ, signature), | ||
200 | .field_name = "signature", | ||
201 | .item = &ASN1_BIT_STRING_it, | ||
202 | }, | ||
203 | }; | ||
204 | |||
205 | const ASN1_ITEM X509_REQ_it = { | ||
206 | .itype = ASN1_ITYPE_SEQUENCE, | ||
207 | .utype = V_ASN1_SEQUENCE, | ||
208 | .templates = X509_REQ_seq_tt, | ||
209 | .tcount = sizeof(X509_REQ_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
210 | .funcs = &X509_REQ_aux, | ||
211 | .size = sizeof(X509_REQ), | ||
212 | .sname = "X509_REQ", | ||
213 | }; | ||
136 | 214 | ||
137 | 215 | ||
138 | X509_REQ * | 216 | X509_REQ * |
diff --git a/src/lib/libcrypto/asn1/x_sig.c b/src/lib/libcrypto/asn1/x_sig.c index 7c4c8c9c55..090a454ffb 100644 --- a/src/lib/libcrypto/asn1/x_sig.c +++ b/src/lib/libcrypto/asn1/x_sig.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_sig.c,v 1.9 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_sig.c,v 1.10 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -61,10 +61,32 @@ | |||
61 | #include <openssl/asn1t.h> | 61 | #include <openssl/asn1t.h> |
62 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_SIG) = { | 64 | static const ASN1_TEMPLATE X509_SIG_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_SIG, algor, X509_ALGOR), | 65 | { |
66 | ASN1_SIMPLE(X509_SIG, digest, ASN1_OCTET_STRING) | 66 | .flags = 0, |
67 | } ASN1_SEQUENCE_END(X509_SIG) | 67 | .tag = 0, |
68 | .offset = offsetof(X509_SIG, algor), | ||
69 | .field_name = "algor", | ||
70 | .item = &X509_ALGOR_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = 0, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_SIG, digest), | ||
76 | .field_name = "digest", | ||
77 | .item = &ASN1_OCTET_STRING_it, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | const ASN1_ITEM X509_SIG_it = { | ||
82 | .itype = ASN1_ITYPE_SEQUENCE, | ||
83 | .utype = V_ASN1_SEQUENCE, | ||
84 | .templates = X509_SIG_seq_tt, | ||
85 | .tcount = sizeof(X509_SIG_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
86 | .funcs = NULL, | ||
87 | .size = sizeof(X509_SIG), | ||
88 | .sname = "X509_SIG", | ||
89 | }; | ||
68 | 90 | ||
69 | 91 | ||
70 | X509_SIG * | 92 | X509_SIG * |
diff --git a/src/lib/libcrypto/asn1/x_spki.c b/src/lib/libcrypto/asn1/x_spki.c index fc056ff53b..6250c1343b 100644 --- a/src/lib/libcrypto/asn1/x_spki.c +++ b/src/lib/libcrypto/asn1/x_spki.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_spki.c,v 1.9 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_spki.c,v 1.10 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -65,10 +65,32 @@ | |||
65 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
66 | #include <openssl/asn1t.h> | 66 | #include <openssl/asn1t.h> |
67 | 67 | ||
68 | ASN1_SEQUENCE(NETSCAPE_SPKAC) = { | 68 | static const ASN1_TEMPLATE NETSCAPE_SPKAC_seq_tt[] = { |
69 | ASN1_SIMPLE(NETSCAPE_SPKAC, pubkey, X509_PUBKEY), | 69 | { |
70 | ASN1_SIMPLE(NETSCAPE_SPKAC, challenge, ASN1_IA5STRING) | 70 | .flags = 0, |
71 | } ASN1_SEQUENCE_END(NETSCAPE_SPKAC) | 71 | .tag = 0, |
72 | .offset = offsetof(NETSCAPE_SPKAC, pubkey), | ||
73 | .field_name = "pubkey", | ||
74 | .item = &X509_PUBKEY_it, | ||
75 | }, | ||
76 | { | ||
77 | .flags = 0, | ||
78 | .tag = 0, | ||
79 | .offset = offsetof(NETSCAPE_SPKAC, challenge), | ||
80 | .field_name = "challenge", | ||
81 | .item = &ASN1_IA5STRING_it, | ||
82 | }, | ||
83 | }; | ||
84 | |||
85 | const ASN1_ITEM NETSCAPE_SPKAC_it = { | ||
86 | .itype = ASN1_ITYPE_SEQUENCE, | ||
87 | .utype = V_ASN1_SEQUENCE, | ||
88 | .templates = NETSCAPE_SPKAC_seq_tt, | ||
89 | .tcount = sizeof(NETSCAPE_SPKAC_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
90 | .funcs = NULL, | ||
91 | .size = sizeof(NETSCAPE_SPKAC), | ||
92 | .sname = "NETSCAPE_SPKAC", | ||
93 | }; | ||
72 | 94 | ||
73 | 95 | ||
74 | NETSCAPE_SPKAC * | 96 | NETSCAPE_SPKAC * |
@@ -96,11 +118,39 @@ NETSCAPE_SPKAC_free(NETSCAPE_SPKAC *a) | |||
96 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_SPKAC_it); | 118 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_SPKAC_it); |
97 | } | 119 | } |
98 | 120 | ||
99 | ASN1_SEQUENCE(NETSCAPE_SPKI) = { | 121 | static const ASN1_TEMPLATE NETSCAPE_SPKI_seq_tt[] = { |
100 | ASN1_SIMPLE(NETSCAPE_SPKI, spkac, NETSCAPE_SPKAC), | 122 | { |
101 | ASN1_SIMPLE(NETSCAPE_SPKI, sig_algor, X509_ALGOR), | 123 | .flags = 0, |
102 | ASN1_SIMPLE(NETSCAPE_SPKI, signature, ASN1_BIT_STRING) | 124 | .tag = 0, |
103 | } ASN1_SEQUENCE_END(NETSCAPE_SPKI) | 125 | .offset = offsetof(NETSCAPE_SPKI, spkac), |
126 | .field_name = "spkac", | ||
127 | .item = &NETSCAPE_SPKAC_it, | ||
128 | }, | ||
129 | { | ||
130 | .flags = 0, | ||
131 | .tag = 0, | ||
132 | .offset = offsetof(NETSCAPE_SPKI, sig_algor), | ||
133 | .field_name = "sig_algor", | ||
134 | .item = &X509_ALGOR_it, | ||
135 | }, | ||
136 | { | ||
137 | .flags = 0, | ||
138 | .tag = 0, | ||
139 | .offset = offsetof(NETSCAPE_SPKI, signature), | ||
140 | .field_name = "signature", | ||
141 | .item = &ASN1_BIT_STRING_it, | ||
142 | }, | ||
143 | }; | ||
144 | |||
145 | const ASN1_ITEM NETSCAPE_SPKI_it = { | ||
146 | .itype = ASN1_ITYPE_SEQUENCE, | ||
147 | .utype = V_ASN1_SEQUENCE, | ||
148 | .templates = NETSCAPE_SPKI_seq_tt, | ||
149 | .tcount = sizeof(NETSCAPE_SPKI_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
150 | .funcs = NULL, | ||
151 | .size = sizeof(NETSCAPE_SPKI), | ||
152 | .sname = "NETSCAPE_SPKI", | ||
153 | }; | ||
104 | 154 | ||
105 | 155 | ||
106 | NETSCAPE_SPKI * | 156 | NETSCAPE_SPKI * |
diff --git a/src/lib/libcrypto/asn1/x_val.c b/src/lib/libcrypto/asn1/x_val.c index 27835e94da..3f1d830d3e 100644 --- a/src/lib/libcrypto/asn1/x_val.c +++ b/src/lib/libcrypto/asn1/x_val.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_val.c,v 1.9 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_val.c,v 1.10 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -61,10 +61,32 @@ | |||
61 | #include <openssl/asn1t.h> | 61 | #include <openssl/asn1t.h> |
62 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_VAL) = { | 64 | static const ASN1_TEMPLATE X509_VAL_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_VAL, notBefore, ASN1_TIME), | 65 | { |
66 | ASN1_SIMPLE(X509_VAL, notAfter, ASN1_TIME) | 66 | .flags = 0, |
67 | } ASN1_SEQUENCE_END(X509_VAL) | 67 | .tag = 0, |
68 | .offset = offsetof(X509_VAL, notBefore), | ||
69 | .field_name = "notBefore", | ||
70 | .item = &ASN1_TIME_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = 0, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_VAL, notAfter), | ||
76 | .field_name = "notAfter", | ||
77 | .item = &ASN1_TIME_it, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | const ASN1_ITEM X509_VAL_it = { | ||
82 | .itype = ASN1_ITYPE_SEQUENCE, | ||
83 | .utype = V_ASN1_SEQUENCE, | ||
84 | .templates = X509_VAL_seq_tt, | ||
85 | .tcount = sizeof(X509_VAL_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
86 | .funcs = NULL, | ||
87 | .size = sizeof(X509_VAL), | ||
88 | .sname = "X509_VAL", | ||
89 | }; | ||
68 | 90 | ||
69 | 91 | ||
70 | X509_VAL * | 92 | X509_VAL * |
diff --git a/src/lib/libcrypto/asn1/x_x509.c b/src/lib/libcrypto/asn1/x_x509.c index 756848fe19..1f29d5498a 100644 --- a/src/lib/libcrypto/asn1/x_x509.c +++ b/src/lib/libcrypto/asn1/x_x509.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_x509.c,v 1.21 2015/02/10 13:28:17 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509.c,v 1.22 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -65,18 +65,96 @@ | |||
65 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
66 | #include <openssl/x509v3.h> | 66 | #include <openssl/x509v3.h> |
67 | 67 | ||
68 | ASN1_SEQUENCE_enc(X509_CINF, enc, 0) = { | 68 | static const ASN1_AUX X509_CINF_aux = { |
69 | ASN1_EXP_OPT(X509_CINF, version, ASN1_INTEGER, 0), | 69 | .app_data = NULL, |
70 | ASN1_SIMPLE(X509_CINF, serialNumber, ASN1_INTEGER), | 70 | .flags = ASN1_AFLG_ENCODING, |
71 | ASN1_SIMPLE(X509_CINF, signature, X509_ALGOR), | 71 | .ref_offset = 0, |
72 | ASN1_SIMPLE(X509_CINF, issuer, X509_NAME), | 72 | .ref_lock = 0, |
73 | ASN1_SIMPLE(X509_CINF, validity, X509_VAL), | 73 | .asn1_cb = 0, |
74 | ASN1_SIMPLE(X509_CINF, subject, X509_NAME), | 74 | .enc_offset = offsetof(X509_CINF, enc), |
75 | ASN1_SIMPLE(X509_CINF, key, X509_PUBKEY), | 75 | }; |
76 | ASN1_IMP_OPT(X509_CINF, issuerUID, ASN1_BIT_STRING, 1), | 76 | static const ASN1_TEMPLATE X509_CINF_seq_tt[] = { |
77 | ASN1_IMP_OPT(X509_CINF, subjectUID, ASN1_BIT_STRING, 2), | 77 | { |
78 | ASN1_EXP_SEQUENCE_OF_OPT(X509_CINF, extensions, X509_EXTENSION, 3) | 78 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL, |
79 | } ASN1_SEQUENCE_END_enc(X509_CINF, X509_CINF) | 79 | .tag = 0, |
80 | .offset = offsetof(X509_CINF, version), | ||
81 | .field_name = "version", | ||
82 | .item = &ASN1_INTEGER_it, | ||
83 | }, | ||
84 | { | ||
85 | .flags = 0, | ||
86 | .tag = 0, | ||
87 | .offset = offsetof(X509_CINF, serialNumber), | ||
88 | .field_name = "serialNumber", | ||
89 | .item = &ASN1_INTEGER_it, | ||
90 | }, | ||
91 | { | ||
92 | .flags = 0, | ||
93 | .tag = 0, | ||
94 | .offset = offsetof(X509_CINF, signature), | ||
95 | .field_name = "signature", | ||
96 | .item = &X509_ALGOR_it, | ||
97 | }, | ||
98 | { | ||
99 | .flags = 0, | ||
100 | .tag = 0, | ||
101 | .offset = offsetof(X509_CINF, issuer), | ||
102 | .field_name = "issuer", | ||
103 | .item = &X509_NAME_it, | ||
104 | }, | ||
105 | { | ||
106 | .flags = 0, | ||
107 | .tag = 0, | ||
108 | .offset = offsetof(X509_CINF, validity), | ||
109 | .field_name = "validity", | ||
110 | .item = &X509_VAL_it, | ||
111 | }, | ||
112 | { | ||
113 | .flags = 0, | ||
114 | .tag = 0, | ||
115 | .offset = offsetof(X509_CINF, subject), | ||
116 | .field_name = "subject", | ||
117 | .item = &X509_NAME_it, | ||
118 | }, | ||
119 | { | ||
120 | .flags = 0, | ||
121 | .tag = 0, | ||
122 | .offset = offsetof(X509_CINF, key), | ||
123 | .field_name = "key", | ||
124 | .item = &X509_PUBKEY_it, | ||
125 | }, | ||
126 | { | ||
127 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL, | ||
128 | .tag = 1, | ||
129 | .offset = offsetof(X509_CINF, issuerUID), | ||
130 | .field_name = "issuerUID", | ||
131 | .item = &ASN1_BIT_STRING_it, | ||
132 | }, | ||
133 | { | ||
134 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL, | ||
135 | .tag = 2, | ||
136 | .offset = offsetof(X509_CINF, subjectUID), | ||
137 | .field_name = "subjectUID", | ||
138 | .item = &ASN1_BIT_STRING_it, | ||
139 | }, | ||
140 | { | ||
141 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
142 | .tag = 3, | ||
143 | .offset = offsetof(X509_CINF, extensions), | ||
144 | .field_name = "extensions", | ||
145 | .item = &X509_EXTENSION_it, | ||
146 | }, | ||
147 | }; | ||
148 | |||
149 | const ASN1_ITEM X509_CINF_it = { | ||
150 | .itype = ASN1_ITYPE_SEQUENCE, | ||
151 | .utype = V_ASN1_SEQUENCE, | ||
152 | .templates = X509_CINF_seq_tt, | ||
153 | .tcount = sizeof(X509_CINF_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
154 | .funcs = &X509_CINF_aux, | ||
155 | .size = sizeof(X509_CINF), | ||
156 | .sname = "X509_CINF", | ||
157 | }; | ||
80 | 158 | ||
81 | 159 | ||
82 | X509_CINF * | 160 | X509_CINF * |
@@ -148,11 +226,47 @@ x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
148 | return 1; | 226 | return 1; |
149 | } | 227 | } |
150 | 228 | ||
151 | ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { | 229 | static const ASN1_AUX X509_aux = { |
152 | ASN1_SIMPLE(X509, cert_info, X509_CINF), | 230 | .app_data = NULL, |
153 | ASN1_SIMPLE(X509, sig_alg, X509_ALGOR), | 231 | .flags = ASN1_AFLG_REFCOUNT, |
154 | ASN1_SIMPLE(X509, signature, ASN1_BIT_STRING) | 232 | .ref_offset = offsetof(X509, references), |
155 | } ASN1_SEQUENCE_END_ref(X509, X509) | 233 | .ref_lock = CRYPTO_LOCK_X509, |
234 | .asn1_cb = x509_cb, | ||
235 | .enc_offset = 0, | ||
236 | }; | ||
237 | static const ASN1_TEMPLATE X509_seq_tt[] = { | ||
238 | { | ||
239 | .flags = 0, | ||
240 | .tag = 0, | ||
241 | .offset = offsetof(X509, cert_info), | ||
242 | .field_name = "cert_info", | ||
243 | .item = &X509_CINF_it, | ||
244 | }, | ||
245 | { | ||
246 | .flags = 0, | ||
247 | .tag = 0, | ||
248 | .offset = offsetof(X509, sig_alg), | ||
249 | .field_name = "sig_alg", | ||
250 | .item = &X509_ALGOR_it, | ||
251 | }, | ||
252 | { | ||
253 | .flags = 0, | ||
254 | .tag = 0, | ||
255 | .offset = offsetof(X509, signature), | ||
256 | .field_name = "signature", | ||
257 | .item = &ASN1_BIT_STRING_it, | ||
258 | }, | ||
259 | }; | ||
260 | |||
261 | const ASN1_ITEM X509_it = { | ||
262 | .itype = ASN1_ITYPE_SEQUENCE, | ||
263 | .utype = V_ASN1_SEQUENCE, | ||
264 | .templates = X509_seq_tt, | ||
265 | .tcount = sizeof(X509_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
266 | .funcs = &X509_aux, | ||
267 | .size = sizeof(X509), | ||
268 | .sname = "X509", | ||
269 | }; | ||
156 | 270 | ||
157 | 271 | ||
158 | X509 * | 272 | X509 * |
diff --git a/src/lib/libcrypto/asn1/x_x509a.c b/src/lib/libcrypto/asn1/x_x509a.c index 8a3561e882..be8ebbdcbb 100644 --- a/src/lib/libcrypto/asn1/x_x509a.c +++ b/src/lib/libcrypto/asn1/x_x509a.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_x509a.c,v 1.11 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509a.c,v 1.12 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -71,13 +71,53 @@ | |||
71 | 71 | ||
72 | static X509_CERT_AUX *aux_get(X509 *x); | 72 | static X509_CERT_AUX *aux_get(X509 *x); |
73 | 73 | ||
74 | ASN1_SEQUENCE(X509_CERT_AUX) = { | 74 | static const ASN1_TEMPLATE X509_CERT_AUX_seq_tt[] = { |
75 | ASN1_SEQUENCE_OF_OPT(X509_CERT_AUX, trust, ASN1_OBJECT), | 75 | { |
76 | ASN1_IMP_SEQUENCE_OF_OPT(X509_CERT_AUX, reject, ASN1_OBJECT, 0), | 76 | .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, |
77 | ASN1_OPT(X509_CERT_AUX, alias, ASN1_UTF8STRING), | 77 | .tag = 0, |
78 | ASN1_OPT(X509_CERT_AUX, keyid, ASN1_OCTET_STRING), | 78 | .offset = offsetof(X509_CERT_AUX, trust), |
79 | ASN1_IMP_SEQUENCE_OF_OPT(X509_CERT_AUX, other, X509_ALGOR, 1) | 79 | .field_name = "trust", |
80 | } ASN1_SEQUENCE_END(X509_CERT_AUX) | 80 | .item = &ASN1_OBJECT_it, |
81 | }, | ||
82 | { | ||
83 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
84 | .tag = 0, | ||
85 | .offset = offsetof(X509_CERT_AUX, reject), | ||
86 | .field_name = "reject", | ||
87 | .item = &ASN1_OBJECT_it, | ||
88 | }, | ||
89 | { | ||
90 | .flags = ASN1_TFLG_OPTIONAL, | ||
91 | .tag = 0, | ||
92 | .offset = offsetof(X509_CERT_AUX, alias), | ||
93 | .field_name = "alias", | ||
94 | .item = &ASN1_UTF8STRING_it, | ||
95 | }, | ||
96 | { | ||
97 | .flags = ASN1_TFLG_OPTIONAL, | ||
98 | .tag = 0, | ||
99 | .offset = offsetof(X509_CERT_AUX, keyid), | ||
100 | .field_name = "keyid", | ||
101 | .item = &ASN1_OCTET_STRING_it, | ||
102 | }, | ||
103 | { | ||
104 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
105 | .tag = 1, | ||
106 | .offset = offsetof(X509_CERT_AUX, other), | ||
107 | .field_name = "other", | ||
108 | .item = &X509_ALGOR_it, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | const ASN1_ITEM X509_CERT_AUX_it = { | ||
113 | .itype = ASN1_ITYPE_SEQUENCE, | ||
114 | .utype = V_ASN1_SEQUENCE, | ||
115 | .templates = X509_CERT_AUX_seq_tt, | ||
116 | .tcount = sizeof(X509_CERT_AUX_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
117 | .funcs = NULL, | ||
118 | .size = sizeof(X509_CERT_AUX), | ||
119 | .sname = "X509_CERT_AUX", | ||
120 | }; | ||
81 | 121 | ||
82 | 122 | ||
83 | X509_CERT_AUX * | 123 | X509_CERT_AUX * |
@@ -217,10 +257,32 @@ X509_reject_clear(X509 *x) | |||
217 | } | 257 | } |
218 | } | 258 | } |
219 | 259 | ||
220 | ASN1_SEQUENCE(X509_CERT_PAIR) = { | 260 | static const ASN1_TEMPLATE X509_CERT_PAIR_seq_tt[] = { |
221 | ASN1_EXP_OPT(X509_CERT_PAIR, forward, X509, 0), | 261 | { |
222 | ASN1_EXP_OPT(X509_CERT_PAIR, reverse, X509, 1) | 262 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL, |
223 | } ASN1_SEQUENCE_END(X509_CERT_PAIR) | 263 | .tag = 0, |
264 | .offset = offsetof(X509_CERT_PAIR, forward), | ||
265 | .field_name = "forward", | ||
266 | .item = &X509_it, | ||
267 | }, | ||
268 | { | ||
269 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL, | ||
270 | .tag = 1, | ||
271 | .offset = offsetof(X509_CERT_PAIR, reverse), | ||
272 | .field_name = "reverse", | ||
273 | .item = &X509_it, | ||
274 | }, | ||
275 | }; | ||
276 | |||
277 | const ASN1_ITEM X509_CERT_PAIR_it = { | ||
278 | .itype = ASN1_ITYPE_SEQUENCE, | ||
279 | .utype = V_ASN1_SEQUENCE, | ||
280 | .templates = X509_CERT_PAIR_seq_tt, | ||
281 | .tcount = sizeof(X509_CERT_PAIR_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
282 | .funcs = NULL, | ||
283 | .size = sizeof(X509_CERT_PAIR), | ||
284 | .sname = "X509_CERT_PAIR", | ||
285 | }; | ||
224 | 286 | ||
225 | 287 | ||
226 | X509_CERT_PAIR * | 288 | X509_CERT_PAIR * |
diff --git a/src/lib/libssl/src/crypto/asn1/n_pkey.c b/src/lib/libssl/src/crypto/asn1/n_pkey.c index 198ca97c09..8f65a4b926 100644 --- a/src/lib/libssl/src/crypto/asn1/n_pkey.c +++ b/src/lib/libssl/src/crypto/asn1/n_pkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: n_pkey.c,v 1.23 2015/02/10 04:01:26 jsing Exp $ */ | 1 | /* $OpenBSD: n_pkey.c,v 1.24 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -87,10 +87,40 @@ typedef struct netscape_encrypted_pkey_st { | |||
87 | } NETSCAPE_ENCRYPTED_PKEY; | 87 | } NETSCAPE_ENCRYPTED_PKEY; |
88 | 88 | ||
89 | 89 | ||
90 | ASN1_BROKEN_SEQUENCE(NETSCAPE_ENCRYPTED_PKEY) = { | 90 | static const ASN1_AUX NETSCAPE_ENCRYPTED_PKEY_aux = { |
91 | ASN1_SIMPLE(NETSCAPE_ENCRYPTED_PKEY, os, ASN1_OCTET_STRING), | 91 | .app_data = NULL, |
92 | ASN1_SIMPLE(NETSCAPE_ENCRYPTED_PKEY, enckey, X509_SIG) | 92 | .flags = ASN1_AFLG_BROKEN, |
93 | } ASN1_BROKEN_SEQUENCE_END(NETSCAPE_ENCRYPTED_PKEY) | 93 | .ref_offset = 0, |
94 | .ref_lock = 0, | ||
95 | .asn1_cb = NULL, | ||
96 | .enc_offset = 0, | ||
97 | }; | ||
98 | static const ASN1_TEMPLATE NETSCAPE_ENCRYPTED_PKEY_seq_tt[] = { | ||
99 | { | ||
100 | .flags = 0, | ||
101 | .tag = 0, | ||
102 | .offset = offsetof(NETSCAPE_ENCRYPTED_PKEY, os), | ||
103 | .field_name = "os", | ||
104 | .item = &ASN1_OCTET_STRING_it, | ||
105 | }, | ||
106 | { | ||
107 | .flags = 0, | ||
108 | .tag = 0, | ||
109 | .offset = offsetof(NETSCAPE_ENCRYPTED_PKEY, enckey), | ||
110 | .field_name = "enckey", | ||
111 | .item = &X509_SIG_it, | ||
112 | }, | ||
113 | }; | ||
114 | |||
115 | const ASN1_ITEM NETSCAPE_ENCRYPTED_PKEY_it = { | ||
116 | .itype = ASN1_ITYPE_SEQUENCE, | ||
117 | .utype = V_ASN1_SEQUENCE, | ||
118 | .templates = NETSCAPE_ENCRYPTED_PKEY_seq_tt, | ||
119 | .tcount = sizeof(NETSCAPE_ENCRYPTED_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
120 | .funcs = &NETSCAPE_ENCRYPTED_PKEY_aux, | ||
121 | .size = sizeof(NETSCAPE_ENCRYPTED_PKEY), | ||
122 | .sname = "NETSCAPE_ENCRYPTED_PKEY", | ||
123 | }; | ||
94 | 124 | ||
95 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY) | 125 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY) |
96 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY, NETSCAPE_ENCRYPTED_PKEY) | 126 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY, NETSCAPE_ENCRYPTED_PKEY) |
@@ -120,11 +150,39 @@ NETSCAPE_ENCRYPTED_PKEY_free(NETSCAPE_ENCRYPTED_PKEY *a) | |||
120 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_ENCRYPTED_PKEY_it); | 150 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_ENCRYPTED_PKEY_it); |
121 | } | 151 | } |
122 | 152 | ||
123 | ASN1_SEQUENCE(NETSCAPE_PKEY) = { | 153 | static const ASN1_TEMPLATE NETSCAPE_PKEY_seq_tt[] = { |
124 | ASN1_SIMPLE(NETSCAPE_PKEY, version, LONG), | 154 | { |
125 | ASN1_SIMPLE(NETSCAPE_PKEY, algor, X509_ALGOR), | 155 | .flags = 0, |
126 | ASN1_SIMPLE(NETSCAPE_PKEY, private_key, ASN1_OCTET_STRING) | 156 | .tag = 0, |
127 | } ASN1_SEQUENCE_END(NETSCAPE_PKEY) | 157 | .offset = offsetof(NETSCAPE_PKEY, version), |
158 | .field_name = "version", | ||
159 | .item = &LONG_it, | ||
160 | }, | ||
161 | { | ||
162 | .flags = 0, | ||
163 | .tag = 0, | ||
164 | .offset = offsetof(NETSCAPE_PKEY, algor), | ||
165 | .field_name = "algor", | ||
166 | .item = &X509_ALGOR_it, | ||
167 | }, | ||
168 | { | ||
169 | .flags = 0, | ||
170 | .tag = 0, | ||
171 | .offset = offsetof(NETSCAPE_PKEY, private_key), | ||
172 | .field_name = "private_key", | ||
173 | .item = &ASN1_OCTET_STRING_it, | ||
174 | }, | ||
175 | }; | ||
176 | |||
177 | const ASN1_ITEM NETSCAPE_PKEY_it = { | ||
178 | .itype = ASN1_ITYPE_SEQUENCE, | ||
179 | .utype = V_ASN1_SEQUENCE, | ||
180 | .templates = NETSCAPE_PKEY_seq_tt, | ||
181 | .tcount = sizeof(NETSCAPE_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
182 | .funcs = NULL, | ||
183 | .size = sizeof(NETSCAPE_PKEY), | ||
184 | .sname = "NETSCAPE_PKEY", | ||
185 | }; | ||
128 | 186 | ||
129 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_PKEY) | 187 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_PKEY) |
130 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_PKEY, NETSCAPE_PKEY) | 188 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_PKEY, NETSCAPE_PKEY) |
diff --git a/src/lib/libssl/src/crypto/asn1/nsseq.c b/src/lib/libssl/src/crypto/asn1/nsseq.c index ceab3992fd..dff9b189d9 100644 --- a/src/lib/libssl/src/crypto/asn1/nsseq.c +++ b/src/lib/libssl/src/crypto/asn1/nsseq.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: nsseq.c,v 1.8 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: nsseq.c,v 1.9 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -75,10 +75,40 @@ nsseq_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
75 | 75 | ||
76 | /* Netscape certificate sequence structure */ | 76 | /* Netscape certificate sequence structure */ |
77 | 77 | ||
78 | ASN1_SEQUENCE_cb(NETSCAPE_CERT_SEQUENCE, nsseq_cb) = { | 78 | static const ASN1_AUX NETSCAPE_CERT_SEQUENCE_aux = { |
79 | ASN1_SIMPLE(NETSCAPE_CERT_SEQUENCE, type, ASN1_OBJECT), | 79 | .app_data = NULL, |
80 | ASN1_EXP_SEQUENCE_OF_OPT(NETSCAPE_CERT_SEQUENCE, certs, X509, 0) | 80 | .flags = 0, |
81 | } ASN1_SEQUENCE_END_cb(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) | 81 | .ref_offset = 0, |
82 | .ref_lock = 0, | ||
83 | .asn1_cb = nsseq_cb, | ||
84 | .enc_offset = 0, | ||
85 | }; | ||
86 | static const ASN1_TEMPLATE NETSCAPE_CERT_SEQUENCE_seq_tt[] = { | ||
87 | { | ||
88 | .flags = 0, | ||
89 | .tag = 0, | ||
90 | .offset = offsetof(NETSCAPE_CERT_SEQUENCE, type), | ||
91 | .field_name = "type", | ||
92 | .item = &ASN1_OBJECT_it, | ||
93 | }, | ||
94 | { | ||
95 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
96 | .tag = 0, | ||
97 | .offset = offsetof(NETSCAPE_CERT_SEQUENCE, certs), | ||
98 | .field_name = "certs", | ||
99 | .item = &X509_it, | ||
100 | }, | ||
101 | }; | ||
102 | |||
103 | const ASN1_ITEM NETSCAPE_CERT_SEQUENCE_it = { | ||
104 | .itype = ASN1_ITYPE_SEQUENCE, | ||
105 | .utype = V_ASN1_SEQUENCE, | ||
106 | .templates = NETSCAPE_CERT_SEQUENCE_seq_tt, | ||
107 | .tcount = sizeof(NETSCAPE_CERT_SEQUENCE_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
108 | .funcs = &NETSCAPE_CERT_SEQUENCE_aux, | ||
109 | .size = sizeof(NETSCAPE_CERT_SEQUENCE), | ||
110 | .sname = "NETSCAPE_CERT_SEQUENCE", | ||
111 | }; | ||
82 | 112 | ||
83 | 113 | ||
84 | NETSCAPE_CERT_SEQUENCE * | 114 | NETSCAPE_CERT_SEQUENCE * |
diff --git a/src/lib/libssl/src/crypto/asn1/p5_pbe.c b/src/lib/libssl/src/crypto/asn1/p5_pbe.c index 7491a5bdc7..6d08cb28a1 100644 --- a/src/lib/libssl/src/crypto/asn1/p5_pbe.c +++ b/src/lib/libssl/src/crypto/asn1/p5_pbe.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p5_pbe.c,v 1.18 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: p5_pbe.c,v 1.19 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -66,10 +66,32 @@ | |||
66 | 66 | ||
67 | /* PKCS#5 password based encryption structure */ | 67 | /* PKCS#5 password based encryption structure */ |
68 | 68 | ||
69 | ASN1_SEQUENCE(PBEPARAM) = { | 69 | static const ASN1_TEMPLATE PBEPARAM_seq_tt[] = { |
70 | ASN1_SIMPLE(PBEPARAM, salt, ASN1_OCTET_STRING), | 70 | { |
71 | ASN1_SIMPLE(PBEPARAM, iter, ASN1_INTEGER) | 71 | .flags = 0, |
72 | } ASN1_SEQUENCE_END(PBEPARAM) | 72 | .tag = 0, |
73 | .offset = offsetof(PBEPARAM, salt), | ||
74 | .field_name = "salt", | ||
75 | .item = &ASN1_OCTET_STRING_it, | ||
76 | }, | ||
77 | { | ||
78 | .flags = 0, | ||
79 | .tag = 0, | ||
80 | .offset = offsetof(PBEPARAM, iter), | ||
81 | .field_name = "iter", | ||
82 | .item = &ASN1_INTEGER_it, | ||
83 | }, | ||
84 | }; | ||
85 | |||
86 | const ASN1_ITEM PBEPARAM_it = { | ||
87 | .itype = ASN1_ITYPE_SEQUENCE, | ||
88 | .utype = V_ASN1_SEQUENCE, | ||
89 | .templates = PBEPARAM_seq_tt, | ||
90 | .tcount = sizeof(PBEPARAM_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
91 | .funcs = NULL, | ||
92 | .size = sizeof(PBEPARAM), | ||
93 | .sname = "PBEPARAM", | ||
94 | }; | ||
73 | 95 | ||
74 | 96 | ||
75 | PBEPARAM * | 97 | PBEPARAM * |
diff --git a/src/lib/libssl/src/crypto/asn1/p5_pbev2.c b/src/lib/libssl/src/crypto/asn1/p5_pbev2.c index 1189e7e26b..f967f25d3d 100644 --- a/src/lib/libssl/src/crypto/asn1/p5_pbev2.c +++ b/src/lib/libssl/src/crypto/asn1/p5_pbev2.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p5_pbev2.c,v 1.19 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: p5_pbev2.c,v 1.20 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999-2004. | 3 | * project 1999-2004. |
4 | */ | 4 | */ |
@@ -66,10 +66,32 @@ | |||
66 | 66 | ||
67 | /* PKCS#5 v2.0 password based encryption structures */ | 67 | /* PKCS#5 v2.0 password based encryption structures */ |
68 | 68 | ||
69 | ASN1_SEQUENCE(PBE2PARAM) = { | 69 | static const ASN1_TEMPLATE PBE2PARAM_seq_tt[] = { |
70 | ASN1_SIMPLE(PBE2PARAM, keyfunc, X509_ALGOR), | 70 | { |
71 | ASN1_SIMPLE(PBE2PARAM, encryption, X509_ALGOR) | 71 | .flags = 0, |
72 | } ASN1_SEQUENCE_END(PBE2PARAM) | 72 | .tag = 0, |
73 | .offset = offsetof(PBE2PARAM, keyfunc), | ||
74 | .field_name = "keyfunc", | ||
75 | .item = &X509_ALGOR_it, | ||
76 | }, | ||
77 | { | ||
78 | .flags = 0, | ||
79 | .tag = 0, | ||
80 | .offset = offsetof(PBE2PARAM, encryption), | ||
81 | .field_name = "encryption", | ||
82 | .item = &X509_ALGOR_it, | ||
83 | }, | ||
84 | }; | ||
85 | |||
86 | const ASN1_ITEM PBE2PARAM_it = { | ||
87 | .itype = ASN1_ITYPE_SEQUENCE, | ||
88 | .utype = V_ASN1_SEQUENCE, | ||
89 | .templates = PBE2PARAM_seq_tt, | ||
90 | .tcount = sizeof(PBE2PARAM_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
91 | .funcs = NULL, | ||
92 | .size = sizeof(PBE2PARAM), | ||
93 | .sname = "PBE2PARAM", | ||
94 | }; | ||
73 | 95 | ||
74 | 96 | ||
75 | PBE2PARAM * | 97 | PBE2PARAM * |
@@ -97,12 +119,46 @@ PBE2PARAM_free(PBE2PARAM *a) | |||
97 | ASN1_item_free((ASN1_VALUE *)a, &PBE2PARAM_it); | 119 | ASN1_item_free((ASN1_VALUE *)a, &PBE2PARAM_it); |
98 | } | 120 | } |
99 | 121 | ||
100 | ASN1_SEQUENCE(PBKDF2PARAM) = { | 122 | static const ASN1_TEMPLATE PBKDF2PARAM_seq_tt[] = { |
101 | ASN1_SIMPLE(PBKDF2PARAM, salt, ASN1_ANY), | 123 | { |
102 | ASN1_SIMPLE(PBKDF2PARAM, iter, ASN1_INTEGER), | 124 | .flags = 0, |
103 | ASN1_OPT(PBKDF2PARAM, keylength, ASN1_INTEGER), | 125 | .tag = 0, |
104 | ASN1_OPT(PBKDF2PARAM, prf, X509_ALGOR) | 126 | .offset = offsetof(PBKDF2PARAM, salt), |
105 | } ASN1_SEQUENCE_END(PBKDF2PARAM) | 127 | .field_name = "salt", |
128 | .item = &ASN1_ANY_it, | ||
129 | }, | ||
130 | { | ||
131 | .flags = 0, | ||
132 | .tag = 0, | ||
133 | .offset = offsetof(PBKDF2PARAM, iter), | ||
134 | .field_name = "iter", | ||
135 | .item = &ASN1_INTEGER_it, | ||
136 | }, | ||
137 | { | ||
138 | .flags = ASN1_TFLG_OPTIONAL, | ||
139 | .tag = 0, | ||
140 | .offset = offsetof(PBKDF2PARAM, keylength), | ||
141 | .field_name = "keylength", | ||
142 | .item = &ASN1_INTEGER_it, | ||
143 | }, | ||
144 | { | ||
145 | .flags = ASN1_TFLG_OPTIONAL, | ||
146 | .tag = 0, | ||
147 | .offset = offsetof(PBKDF2PARAM, prf), | ||
148 | .field_name = "prf", | ||
149 | .item = &X509_ALGOR_it, | ||
150 | }, | ||
151 | }; | ||
152 | |||
153 | const ASN1_ITEM PBKDF2PARAM_it = { | ||
154 | .itype = ASN1_ITYPE_SEQUENCE, | ||
155 | .utype = V_ASN1_SEQUENCE, | ||
156 | .templates = PBKDF2PARAM_seq_tt, | ||
157 | .tcount = sizeof(PBKDF2PARAM_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
158 | .funcs = NULL, | ||
159 | .size = sizeof(PBKDF2PARAM), | ||
160 | .sname = "PBKDF2PARAM", | ||
161 | }; | ||
106 | 162 | ||
107 | 163 | ||
108 | PBKDF2PARAM * | 164 | PBKDF2PARAM * |
diff --git a/src/lib/libssl/src/crypto/asn1/p8_pkey.c b/src/lib/libssl/src/crypto/asn1/p8_pkey.c index f8688ebc17..486aa8d42c 100644 --- a/src/lib/libssl/src/crypto/asn1/p8_pkey.c +++ b/src/lib/libssl/src/crypto/asn1/p8_pkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p8_pkey.c,v 1.13 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: p8_pkey.c,v 1.14 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -75,12 +75,54 @@ pkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
75 | return 1; | 75 | return 1; |
76 | } | 76 | } |
77 | 77 | ||
78 | ASN1_SEQUENCE_cb(PKCS8_PRIV_KEY_INFO, pkey_cb) = { | 78 | static const ASN1_AUX PKCS8_PRIV_KEY_INFO_aux = { |
79 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, version, ASN1_INTEGER), | 79 | .app_data = NULL, |
80 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkeyalg, X509_ALGOR), | 80 | .flags = 0, |
81 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkey, ASN1_ANY), | 81 | .ref_offset = 0, |
82 | ASN1_IMP_SET_OF_OPT(PKCS8_PRIV_KEY_INFO, attributes, X509_ATTRIBUTE, 0) | 82 | .ref_lock = 0, |
83 | } ASN1_SEQUENCE_END_cb(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) | 83 | .asn1_cb = pkey_cb, |
84 | .enc_offset = 0, | ||
85 | }; | ||
86 | static const ASN1_TEMPLATE PKCS8_PRIV_KEY_INFO_seq_tt[] = { | ||
87 | { | ||
88 | .flags = 0, | ||
89 | .tag = 0, | ||
90 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, version), | ||
91 | .field_name = "version", | ||
92 | .item = &ASN1_INTEGER_it, | ||
93 | }, | ||
94 | { | ||
95 | .flags = 0, | ||
96 | .tag = 0, | ||
97 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, pkeyalg), | ||
98 | .field_name = "pkeyalg", | ||
99 | .item = &X509_ALGOR_it, | ||
100 | }, | ||
101 | { | ||
102 | .flags = 0, | ||
103 | .tag = 0, | ||
104 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, pkey), | ||
105 | .field_name = "pkey", | ||
106 | .item = &ASN1_ANY_it, | ||
107 | }, | ||
108 | { | ||
109 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SET_OF | ASN1_TFLG_OPTIONAL, | ||
110 | .tag = 0, | ||
111 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, attributes), | ||
112 | .field_name = "attributes", | ||
113 | .item = &X509_ATTRIBUTE_it, | ||
114 | }, | ||
115 | }; | ||
116 | |||
117 | const ASN1_ITEM PKCS8_PRIV_KEY_INFO_it = { | ||
118 | .itype = ASN1_ITYPE_SEQUENCE, | ||
119 | .utype = V_ASN1_SEQUENCE, | ||
120 | .templates = PKCS8_PRIV_KEY_INFO_seq_tt, | ||
121 | .tcount = sizeof(PKCS8_PRIV_KEY_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
122 | .funcs = &PKCS8_PRIV_KEY_INFO_aux, | ||
123 | .size = sizeof(PKCS8_PRIV_KEY_INFO), | ||
124 | .sname = "PKCS8_PRIV_KEY_INFO", | ||
125 | }; | ||
84 | 126 | ||
85 | 127 | ||
86 | PKCS8_PRIV_KEY_INFO * | 128 | PKCS8_PRIV_KEY_INFO * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_algor.c b/src/lib/libssl/src/crypto/asn1/x_algor.c index f7cae9499a..c10e114318 100644 --- a/src/lib/libssl/src/crypto/asn1/x_algor.c +++ b/src/lib/libssl/src/crypto/asn1/x_algor.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_algor.c,v 1.18 2015/02/10 08:33:10 jsing Exp $ */ | 1 | /* $OpenBSD: x_algor.c,v 1.19 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
@@ -61,10 +61,32 @@ | |||
61 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
62 | #include <openssl/asn1t.h> | 62 | #include <openssl/asn1t.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_ALGOR) = { | 64 | static const ASN1_TEMPLATE X509_ALGOR_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_ALGOR, algorithm, ASN1_OBJECT), | 65 | { |
66 | ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY) | 66 | .flags = 0, |
67 | } ASN1_SEQUENCE_END(X509_ALGOR) | 67 | .tag = 0, |
68 | .offset = offsetof(X509_ALGOR, algorithm), | ||
69 | .field_name = "algorithm", | ||
70 | .item = &ASN1_OBJECT_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = ASN1_TFLG_OPTIONAL, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_ALGOR, parameter), | ||
76 | .field_name = "parameter", | ||
77 | .item = &ASN1_ANY_it, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | const ASN1_ITEM X509_ALGOR_it = { | ||
82 | .itype = ASN1_ITYPE_SEQUENCE, | ||
83 | .utype = V_ASN1_SEQUENCE, | ||
84 | .templates = X509_ALGOR_seq_tt, | ||
85 | .tcount = sizeof(X509_ALGOR_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
86 | .funcs = NULL, | ||
87 | .size = sizeof(X509_ALGOR), | ||
88 | .sname = "X509_ALGOR", | ||
89 | }; | ||
68 | 90 | ||
69 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = | 91 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = |
70 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) | 92 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) |
diff --git a/src/lib/libssl/src/crypto/asn1/x_crl.c b/src/lib/libssl/src/crypto/asn1/x_crl.c index 536aa74e00..338a784189 100644 --- a/src/lib/libssl/src/crypto/asn1/x_crl.c +++ b/src/lib/libssl/src/crypto/asn1/x_crl.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_crl.c,v 1.22 2015/02/10 08:33:10 jsing Exp $ */ | 1 | /* $OpenBSD: x_crl.c,v 1.23 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -71,11 +71,39 @@ static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | |||
71 | const X509_REVOKED * const *b); | 71 | const X509_REVOKED * const *b); |
72 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); | 72 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); |
73 | 73 | ||
74 | ASN1_SEQUENCE(X509_REVOKED) = { | 74 | static const ASN1_TEMPLATE X509_REVOKED_seq_tt[] = { |
75 | ASN1_SIMPLE(X509_REVOKED, serialNumber, ASN1_INTEGER), | 75 | { |
76 | ASN1_SIMPLE(X509_REVOKED, revocationDate, ASN1_TIME), | 76 | .flags = 0, |
77 | ASN1_SEQUENCE_OF_OPT(X509_REVOKED, extensions, X509_EXTENSION) | 77 | .tag = 0, |
78 | } ASN1_SEQUENCE_END(X509_REVOKED) | 78 | .offset = offsetof(X509_REVOKED, serialNumber), |
79 | .field_name = "serialNumber", | ||
80 | .item = &ASN1_INTEGER_it, | ||
81 | }, | ||
82 | { | ||
83 | .flags = 0, | ||
84 | .tag = 0, | ||
85 | .offset = offsetof(X509_REVOKED, revocationDate), | ||
86 | .field_name = "revocationDate", | ||
87 | .item = &ASN1_TIME_it, | ||
88 | }, | ||
89 | { | ||
90 | .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
91 | .tag = 0, | ||
92 | .offset = offsetof(X509_REVOKED, extensions), | ||
93 | .field_name = "extensions", | ||
94 | .item = &X509_EXTENSION_it, | ||
95 | }, | ||
96 | }; | ||
97 | |||
98 | const ASN1_ITEM X509_REVOKED_it = { | ||
99 | .itype = ASN1_ITYPE_SEQUENCE, | ||
100 | .utype = V_ASN1_SEQUENCE, | ||
101 | .templates = X509_REVOKED_seq_tt, | ||
102 | .tcount = sizeof(X509_REVOKED_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
103 | .funcs = NULL, | ||
104 | .size = sizeof(X509_REVOKED), | ||
105 | .sname = "X509_REVOKED", | ||
106 | }; | ||
79 | 107 | ||
80 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); | 108 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); |
81 | static int def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, | 109 | static int def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, |
@@ -111,15 +139,75 @@ crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
111 | } | 139 | } |
112 | 140 | ||
113 | 141 | ||
114 | ASN1_SEQUENCE_enc(X509_CRL_INFO, enc, crl_inf_cb) = { | 142 | static const ASN1_AUX X509_CRL_INFO_aux = { |
115 | ASN1_OPT(X509_CRL_INFO, version, ASN1_INTEGER), | 143 | .app_data = NULL, |
116 | ASN1_SIMPLE(X509_CRL_INFO, sig_alg, X509_ALGOR), | 144 | .flags = ASN1_AFLG_ENCODING, |
117 | ASN1_SIMPLE(X509_CRL_INFO, issuer, X509_NAME), | 145 | .ref_offset = 0, |
118 | ASN1_SIMPLE(X509_CRL_INFO, lastUpdate, ASN1_TIME), | 146 | .ref_lock = 0, |
119 | ASN1_OPT(X509_CRL_INFO, nextUpdate, ASN1_TIME), | 147 | .asn1_cb = crl_inf_cb, |
120 | ASN1_SEQUENCE_OF_OPT(X509_CRL_INFO, revoked, X509_REVOKED), | 148 | .enc_offset = offsetof(X509_CRL_INFO, enc), |
121 | ASN1_EXP_SEQUENCE_OF_OPT(X509_CRL_INFO, extensions, X509_EXTENSION, 0) | 149 | }; |
122 | } ASN1_SEQUENCE_END_enc(X509_CRL_INFO, X509_CRL_INFO) | 150 | static const ASN1_TEMPLATE X509_CRL_INFO_seq_tt[] = { |
151 | { | ||
152 | .flags = ASN1_TFLG_OPTIONAL, | ||
153 | .tag = 0, | ||
154 | .offset = offsetof(X509_CRL_INFO, version), | ||
155 | .field_name = "version", | ||
156 | .item = &ASN1_INTEGER_it, | ||
157 | }, | ||
158 | { | ||
159 | .flags = 0, | ||
160 | .tag = 0, | ||
161 | .offset = offsetof(X509_CRL_INFO, sig_alg), | ||
162 | .field_name = "sig_alg", | ||
163 | .item = &X509_ALGOR_it, | ||
164 | }, | ||
165 | { | ||
166 | .flags = 0, | ||
167 | .tag = 0, | ||
168 | .offset = offsetof(X509_CRL_INFO, issuer), | ||
169 | .field_name = "issuer", | ||
170 | .item = &X509_NAME_it, | ||
171 | }, | ||
172 | { | ||
173 | .flags = 0, | ||
174 | .tag = 0, | ||
175 | .offset = offsetof(X509_CRL_INFO, lastUpdate), | ||
176 | .field_name = "lastUpdate", | ||
177 | .item = &ASN1_TIME_it, | ||
178 | }, | ||
179 | { | ||
180 | .flags = ASN1_TFLG_OPTIONAL, | ||
181 | .tag = 0, | ||
182 | .offset = offsetof(X509_CRL_INFO, nextUpdate), | ||
183 | .field_name = "nextUpdate", | ||
184 | .item = &ASN1_TIME_it, | ||
185 | }, | ||
186 | { | ||
187 | .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
188 | .tag = 0, | ||
189 | .offset = offsetof(X509_CRL_INFO, revoked), | ||
190 | .field_name = "revoked", | ||
191 | .item = &X509_REVOKED_it, | ||
192 | }, | ||
193 | { | ||
194 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
195 | .tag = 0, | ||
196 | .offset = offsetof(X509_CRL_INFO, extensions), | ||
197 | .field_name = "extensions", | ||
198 | .item = &X509_EXTENSION_it, | ||
199 | }, | ||
200 | }; | ||
201 | |||
202 | const ASN1_ITEM X509_CRL_INFO_it = { | ||
203 | .itype = ASN1_ITYPE_SEQUENCE, | ||
204 | .utype = V_ASN1_SEQUENCE, | ||
205 | .templates = X509_CRL_INFO_seq_tt, | ||
206 | .tcount = sizeof(X509_CRL_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
207 | .funcs = &X509_CRL_INFO_aux, | ||
208 | .size = sizeof(X509_CRL_INFO), | ||
209 | .sname = "X509_CRL_INFO", | ||
210 | }; | ||
123 | 211 | ||
124 | /* Set CRL entry issuer according to CRL certificate issuer extension. | 212 | /* Set CRL entry issuer according to CRL certificate issuer extension. |
125 | * Check for unhandled critical CRL entry extensions. | 213 | * Check for unhandled critical CRL entry extensions. |
@@ -331,11 +419,47 @@ setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) | |||
331 | DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl)); | 419 | DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl)); |
332 | } | 420 | } |
333 | 421 | ||
334 | ASN1_SEQUENCE_ref(X509_CRL, crl_cb, CRYPTO_LOCK_X509_CRL) = { | 422 | static const ASN1_AUX X509_CRL_aux = { |
335 | ASN1_SIMPLE(X509_CRL, crl, X509_CRL_INFO), | 423 | .app_data = NULL, |
336 | ASN1_SIMPLE(X509_CRL, sig_alg, X509_ALGOR), | 424 | .flags = ASN1_AFLG_REFCOUNT, |
337 | ASN1_SIMPLE(X509_CRL, signature, ASN1_BIT_STRING) | 425 | .ref_offset = offsetof(X509_CRL, references), |
338 | } ASN1_SEQUENCE_END_ref(X509_CRL, X509_CRL) | 426 | .ref_lock = CRYPTO_LOCK_X509_CRL, |
427 | .asn1_cb = crl_cb, | ||
428 | .enc_offset = 0, | ||
429 | }; | ||
430 | static const ASN1_TEMPLATE X509_CRL_seq_tt[] = { | ||
431 | { | ||
432 | .flags = 0, | ||
433 | .tag = 0, | ||
434 | .offset = offsetof(X509_CRL, crl), | ||
435 | .field_name = "crl", | ||
436 | .item = &X509_CRL_INFO_it, | ||
437 | }, | ||
438 | { | ||
439 | .flags = 0, | ||
440 | .tag = 0, | ||
441 | .offset = offsetof(X509_CRL, sig_alg), | ||
442 | .field_name = "sig_alg", | ||
443 | .item = &X509_ALGOR_it, | ||
444 | }, | ||
445 | { | ||
446 | .flags = 0, | ||
447 | .tag = 0, | ||
448 | .offset = offsetof(X509_CRL, signature), | ||
449 | .field_name = "signature", | ||
450 | .item = &ASN1_BIT_STRING_it, | ||
451 | }, | ||
452 | }; | ||
453 | |||
454 | const ASN1_ITEM X509_CRL_it = { | ||
455 | .itype = ASN1_ITYPE_SEQUENCE, | ||
456 | .utype = V_ASN1_SEQUENCE, | ||
457 | .templates = X509_CRL_seq_tt, | ||
458 | .tcount = sizeof(X509_CRL_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
459 | .funcs = &X509_CRL_aux, | ||
460 | .size = sizeof(X509_CRL), | ||
461 | .sname = "X509_CRL", | ||
462 | }; | ||
339 | 463 | ||
340 | 464 | ||
341 | X509_REVOKED * | 465 | X509_REVOKED * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_exten.c b/src/lib/libssl/src/crypto/asn1/x_exten.c index 755faebeba..6f82a71d68 100644 --- a/src/lib/libssl/src/crypto/asn1/x_exten.c +++ b/src/lib/libssl/src/crypto/asn1/x_exten.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_exten.c,v 1.13 2015/02/10 06:36:30 jsing Exp $ */ | 1 | /* $OpenBSD: x_exten.c,v 1.14 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
@@ -61,11 +61,39 @@ | |||
61 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
62 | #include <openssl/asn1t.h> | 62 | #include <openssl/asn1t.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_EXTENSION) = { | 64 | static const ASN1_TEMPLATE X509_EXTENSION_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_EXTENSION, object, ASN1_OBJECT), | 65 | { |
66 | ASN1_OPT(X509_EXTENSION, critical, ASN1_BOOLEAN), | 66 | .flags = 0, |
67 | ASN1_SIMPLE(X509_EXTENSION, value, ASN1_OCTET_STRING) | 67 | .tag = 0, |
68 | } ASN1_SEQUENCE_END(X509_EXTENSION) | 68 | .offset = offsetof(X509_EXTENSION, object), |
69 | .field_name = "object", | ||
70 | .item = &ASN1_OBJECT_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = ASN1_TFLG_OPTIONAL, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_EXTENSION, critical), | ||
76 | .field_name = "critical", | ||
77 | .item = &ASN1_BOOLEAN_it, | ||
78 | }, | ||
79 | { | ||
80 | .flags = 0, | ||
81 | .tag = 0, | ||
82 | .offset = offsetof(X509_EXTENSION, value), | ||
83 | .field_name = "value", | ||
84 | .item = &ASN1_OCTET_STRING_it, | ||
85 | }, | ||
86 | }; | ||
87 | |||
88 | const ASN1_ITEM X509_EXTENSION_it = { | ||
89 | .itype = ASN1_ITYPE_SEQUENCE, | ||
90 | .utype = V_ASN1_SEQUENCE, | ||
91 | .templates = X509_EXTENSION_seq_tt, | ||
92 | .tcount = sizeof(X509_EXTENSION_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
93 | .funcs = NULL, | ||
94 | .size = sizeof(X509_EXTENSION), | ||
95 | .sname = "X509_EXTENSION", | ||
96 | }; | ||
69 | 97 | ||
70 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = | 98 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = |
71 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) | 99 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) |
diff --git a/src/lib/libssl/src/crypto/asn1/x_name.c b/src/lib/libssl/src/crypto/asn1/x_name.c index a985cf19ce..d6d5bea369 100644 --- a/src/lib/libssl/src/crypto/asn1/x_name.c +++ b/src/lib/libssl/src/crypto/asn1/x_name.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_name.c,v 1.24 2015/02/10 08:33:10 jsing Exp $ */ | 1 | /* $OpenBSD: x_name.c,v 1.25 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -87,10 +87,32 @@ static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname, | |||
87 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, | 87 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, |
88 | const char *fname, const ASN1_PCTX *pctx); | 88 | const char *fname, const ASN1_PCTX *pctx); |
89 | 89 | ||
90 | ASN1_SEQUENCE(X509_NAME_ENTRY) = { | 90 | static const ASN1_TEMPLATE X509_NAME_ENTRY_seq_tt[] = { |
91 | ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT), | 91 | { |
92 | ASN1_SIMPLE(X509_NAME_ENTRY, value, ASN1_PRINTABLE) | 92 | .flags = 0, |
93 | } ASN1_SEQUENCE_END(X509_NAME_ENTRY) | 93 | .tag = 0, |
94 | .offset = offsetof(X509_NAME_ENTRY, object), | ||
95 | .field_name = "object", | ||
96 | .item = &ASN1_OBJECT_it, | ||
97 | }, | ||
98 | { | ||
99 | .flags = 0, | ||
100 | .tag = 0, | ||
101 | .offset = offsetof(X509_NAME_ENTRY, value), | ||
102 | .field_name = "value", | ||
103 | .item = &ASN1_PRINTABLE_it, | ||
104 | }, | ||
105 | }; | ||
106 | |||
107 | const ASN1_ITEM X509_NAME_ENTRY_it = { | ||
108 | .itype = ASN1_ITYPE_SEQUENCE, | ||
109 | .utype = V_ASN1_SEQUENCE, | ||
110 | .templates = X509_NAME_ENTRY_seq_tt, | ||
111 | .tcount = sizeof(X509_NAME_ENTRY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
112 | .funcs = NULL, | ||
113 | .size = sizeof(X509_NAME_ENTRY), | ||
114 | .sname = "X509_NAME_ENTRY", | ||
115 | }; | ||
94 | 116 | ||
95 | 117 | ||
96 | X509_NAME_ENTRY * | 118 | X509_NAME_ENTRY * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_nx509.c b/src/lib/libssl/src/crypto/asn1/x_nx509.c index 9738560c19..f36f1d9eca 100644 --- a/src/lib/libssl/src/crypto/asn1/x_nx509.c +++ b/src/lib/libssl/src/crypto/asn1/x_nx509.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_nx509.c,v 1.4 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_nx509.c,v 1.5 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2005. | 3 | * project 2005. |
4 | */ | 4 | */ |
@@ -63,10 +63,32 @@ | |||
63 | 63 | ||
64 | /* Old netscape certificate wrapper format */ | 64 | /* Old netscape certificate wrapper format */ |
65 | 65 | ||
66 | ASN1_SEQUENCE(NETSCAPE_X509) = { | 66 | static const ASN1_TEMPLATE NETSCAPE_X509_seq_tt[] = { |
67 | ASN1_SIMPLE(NETSCAPE_X509, header, ASN1_OCTET_STRING), | 67 | { |
68 | ASN1_OPT(NETSCAPE_X509, cert, X509) | 68 | .flags = 0, |
69 | } ASN1_SEQUENCE_END(NETSCAPE_X509) | 69 | .tag = 0, |
70 | .offset = offsetof(NETSCAPE_X509, header), | ||
71 | .field_name = "header", | ||
72 | .item = &ASN1_OCTET_STRING_it, | ||
73 | }, | ||
74 | { | ||
75 | .flags = ASN1_TFLG_OPTIONAL, | ||
76 | .tag = 0, | ||
77 | .offset = offsetof(NETSCAPE_X509, cert), | ||
78 | .field_name = "cert", | ||
79 | .item = &X509_it, | ||
80 | }, | ||
81 | }; | ||
82 | |||
83 | const ASN1_ITEM NETSCAPE_X509_it = { | ||
84 | .itype = ASN1_ITYPE_SEQUENCE, | ||
85 | .utype = V_ASN1_SEQUENCE, | ||
86 | .templates = NETSCAPE_X509_seq_tt, | ||
87 | .tcount = sizeof(NETSCAPE_X509_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
88 | .funcs = NULL, | ||
89 | .size = sizeof(NETSCAPE_X509), | ||
90 | .sname = "NETSCAPE_X509", | ||
91 | }; | ||
70 | 92 | ||
71 | 93 | ||
72 | NETSCAPE_X509 * | 94 | NETSCAPE_X509 * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_pubkey.c b/src/lib/libssl/src/crypto/asn1/x_pubkey.c index 0c7d01e60d..55084182cc 100644 --- a/src/lib/libssl/src/crypto/asn1/x_pubkey.c +++ b/src/lib/libssl/src/crypto/asn1/x_pubkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_pubkey.c,v 1.23 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_pubkey.c,v 1.24 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -84,10 +84,40 @@ pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
84 | return 1; | 84 | return 1; |
85 | } | 85 | } |
86 | 86 | ||
87 | ASN1_SEQUENCE_cb(X509_PUBKEY, pubkey_cb) = { | 87 | static const ASN1_AUX X509_PUBKEY_aux = { |
88 | ASN1_SIMPLE(X509_PUBKEY, algor, X509_ALGOR), | 88 | .app_data = NULL, |
89 | ASN1_SIMPLE(X509_PUBKEY, public_key, ASN1_BIT_STRING) | 89 | .flags = 0, |
90 | } ASN1_SEQUENCE_END_cb(X509_PUBKEY, X509_PUBKEY) | 90 | .ref_offset = 0, |
91 | .ref_lock = 0, | ||
92 | .asn1_cb = pubkey_cb, | ||
93 | .enc_offset = 0, | ||
94 | }; | ||
95 | static const ASN1_TEMPLATE X509_PUBKEY_seq_tt[] = { | ||
96 | { | ||
97 | .flags = 0, | ||
98 | .tag = 0, | ||
99 | .offset = offsetof(X509_PUBKEY, algor), | ||
100 | .field_name = "algor", | ||
101 | .item = &X509_ALGOR_it, | ||
102 | }, | ||
103 | { | ||
104 | .flags = 0, | ||
105 | .tag = 0, | ||
106 | .offset = offsetof(X509_PUBKEY, public_key), | ||
107 | .field_name = "public_key", | ||
108 | .item = &ASN1_BIT_STRING_it, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | const ASN1_ITEM X509_PUBKEY_it = { | ||
113 | .itype = ASN1_ITYPE_SEQUENCE, | ||
114 | .utype = V_ASN1_SEQUENCE, | ||
115 | .templates = X509_PUBKEY_seq_tt, | ||
116 | .tcount = sizeof(X509_PUBKEY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
117 | .funcs = &X509_PUBKEY_aux, | ||
118 | .size = sizeof(X509_PUBKEY), | ||
119 | .sname = "X509_PUBKEY", | ||
120 | }; | ||
91 | 121 | ||
92 | 122 | ||
93 | X509_PUBKEY * | 123 | X509_PUBKEY * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_req.c b/src/lib/libssl/src/crypto/asn1/x_req.c index 6ffcb9d03c..5e8aa21b0d 100644 --- a/src/lib/libssl/src/crypto/asn1/x_req.c +++ b/src/lib/libssl/src/crypto/asn1/x_req.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_req.c,v 1.13 2015/02/10 05:25:45 jsing Exp $ */ | 1 | /* $OpenBSD: x_req.c,v 1.14 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -92,15 +92,57 @@ rinf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
92 | return 1; | 92 | return 1; |
93 | } | 93 | } |
94 | 94 | ||
95 | ASN1_SEQUENCE_enc(X509_REQ_INFO, enc, rinf_cb) = { | 95 | static const ASN1_AUX X509_REQ_INFO_aux = { |
96 | ASN1_SIMPLE(X509_REQ_INFO, version, ASN1_INTEGER), | 96 | .app_data = NULL, |
97 | ASN1_SIMPLE(X509_REQ_INFO, subject, X509_NAME), | 97 | .flags = ASN1_AFLG_ENCODING, |
98 | ASN1_SIMPLE(X509_REQ_INFO, pubkey, X509_PUBKEY), | 98 | .ref_offset = 0, |
99 | .ref_lock = 0, | ||
100 | .asn1_cb = rinf_cb, | ||
101 | .enc_offset = offsetof(X509_REQ_INFO, enc), | ||
102 | }; | ||
103 | static const ASN1_TEMPLATE X509_REQ_INFO_seq_tt[] = { | ||
104 | { | ||
105 | .flags = 0, | ||
106 | .tag = 0, | ||
107 | .offset = offsetof(X509_REQ_INFO, version), | ||
108 | .field_name = "version", | ||
109 | .item = &ASN1_INTEGER_it, | ||
110 | }, | ||
111 | { | ||
112 | .flags = 0, | ||
113 | .tag = 0, | ||
114 | .offset = offsetof(X509_REQ_INFO, subject), | ||
115 | .field_name = "subject", | ||
116 | .item = &X509_NAME_it, | ||
117 | }, | ||
118 | { | ||
119 | .flags = 0, | ||
120 | .tag = 0, | ||
121 | .offset = offsetof(X509_REQ_INFO, pubkey), | ||
122 | .field_name = "pubkey", | ||
123 | .item = &X509_PUBKEY_it, | ||
124 | }, | ||
99 | /* This isn't really OPTIONAL but it gets round invalid | 125 | /* This isn't really OPTIONAL but it gets round invalid |
100 | * encodings | 126 | * encodings |
101 | */ | 127 | */ |
102 | ASN1_IMP_SET_OF_OPT(X509_REQ_INFO, attributes, X509_ATTRIBUTE, 0) | 128 | { |
103 | } ASN1_SEQUENCE_END_enc(X509_REQ_INFO, X509_REQ_INFO) | 129 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SET_OF | ASN1_TFLG_OPTIONAL, |
130 | .tag = 0, | ||
131 | .offset = offsetof(X509_REQ_INFO, attributes), | ||
132 | .field_name = "attributes", | ||
133 | .item = &X509_ATTRIBUTE_it, | ||
134 | }, | ||
135 | }; | ||
136 | |||
137 | const ASN1_ITEM X509_REQ_INFO_it = { | ||
138 | .itype = ASN1_ITYPE_SEQUENCE, | ||
139 | .utype = V_ASN1_SEQUENCE, | ||
140 | .templates = X509_REQ_INFO_seq_tt, | ||
141 | .tcount = sizeof(X509_REQ_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
142 | .funcs = &X509_REQ_INFO_aux, | ||
143 | .size = sizeof(X509_REQ_INFO), | ||
144 | .sname = "X509_REQ_INFO", | ||
145 | }; | ||
104 | 146 | ||
105 | 147 | ||
106 | X509_REQ_INFO * | 148 | X509_REQ_INFO * |
@@ -128,11 +170,47 @@ X509_REQ_INFO_free(X509_REQ_INFO *a) | |||
128 | ASN1_item_free((ASN1_VALUE *)a, &X509_REQ_INFO_it); | 170 | ASN1_item_free((ASN1_VALUE *)a, &X509_REQ_INFO_it); |
129 | } | 171 | } |
130 | 172 | ||
131 | ASN1_SEQUENCE_ref(X509_REQ, 0, CRYPTO_LOCK_X509_REQ) = { | 173 | static const ASN1_AUX X509_REQ_aux = { |
132 | ASN1_SIMPLE(X509_REQ, req_info, X509_REQ_INFO), | 174 | .app_data = NULL, |
133 | ASN1_SIMPLE(X509_REQ, sig_alg, X509_ALGOR), | 175 | .flags = ASN1_AFLG_REFCOUNT, |
134 | ASN1_SIMPLE(X509_REQ, signature, ASN1_BIT_STRING) | 176 | .ref_offset = offsetof(X509_REQ, references), |
135 | } ASN1_SEQUENCE_END_ref(X509_REQ, X509_REQ) | 177 | .ref_lock = CRYPTO_LOCK_X509_REQ, |
178 | .asn1_cb = 0, | ||
179 | .enc_offset = 0, | ||
180 | }; | ||
181 | static const ASN1_TEMPLATE X509_REQ_seq_tt[] = { | ||
182 | { | ||
183 | .flags = 0, | ||
184 | .tag = 0, | ||
185 | .offset = offsetof(X509_REQ, req_info), | ||
186 | .field_name = "req_info", | ||
187 | .item = &X509_REQ_INFO_it, | ||
188 | }, | ||
189 | { | ||
190 | .flags = 0, | ||
191 | .tag = 0, | ||
192 | .offset = offsetof(X509_REQ, sig_alg), | ||
193 | .field_name = "sig_alg", | ||
194 | .item = &X509_ALGOR_it, | ||
195 | }, | ||
196 | { | ||
197 | .flags = 0, | ||
198 | .tag = 0, | ||
199 | .offset = offsetof(X509_REQ, signature), | ||
200 | .field_name = "signature", | ||
201 | .item = &ASN1_BIT_STRING_it, | ||
202 | }, | ||
203 | }; | ||
204 | |||
205 | const ASN1_ITEM X509_REQ_it = { | ||
206 | .itype = ASN1_ITYPE_SEQUENCE, | ||
207 | .utype = V_ASN1_SEQUENCE, | ||
208 | .templates = X509_REQ_seq_tt, | ||
209 | .tcount = sizeof(X509_REQ_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
210 | .funcs = &X509_REQ_aux, | ||
211 | .size = sizeof(X509_REQ), | ||
212 | .sname = "X509_REQ", | ||
213 | }; | ||
136 | 214 | ||
137 | 215 | ||
138 | X509_REQ * | 216 | X509_REQ * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_sig.c b/src/lib/libssl/src/crypto/asn1/x_sig.c index 7c4c8c9c55..090a454ffb 100644 --- a/src/lib/libssl/src/crypto/asn1/x_sig.c +++ b/src/lib/libssl/src/crypto/asn1/x_sig.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_sig.c,v 1.9 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_sig.c,v 1.10 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -61,10 +61,32 @@ | |||
61 | #include <openssl/asn1t.h> | 61 | #include <openssl/asn1t.h> |
62 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_SIG) = { | 64 | static const ASN1_TEMPLATE X509_SIG_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_SIG, algor, X509_ALGOR), | 65 | { |
66 | ASN1_SIMPLE(X509_SIG, digest, ASN1_OCTET_STRING) | 66 | .flags = 0, |
67 | } ASN1_SEQUENCE_END(X509_SIG) | 67 | .tag = 0, |
68 | .offset = offsetof(X509_SIG, algor), | ||
69 | .field_name = "algor", | ||
70 | .item = &X509_ALGOR_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = 0, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_SIG, digest), | ||
76 | .field_name = "digest", | ||
77 | .item = &ASN1_OCTET_STRING_it, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | const ASN1_ITEM X509_SIG_it = { | ||
82 | .itype = ASN1_ITYPE_SEQUENCE, | ||
83 | .utype = V_ASN1_SEQUENCE, | ||
84 | .templates = X509_SIG_seq_tt, | ||
85 | .tcount = sizeof(X509_SIG_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
86 | .funcs = NULL, | ||
87 | .size = sizeof(X509_SIG), | ||
88 | .sname = "X509_SIG", | ||
89 | }; | ||
68 | 90 | ||
69 | 91 | ||
70 | X509_SIG * | 92 | X509_SIG * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_spki.c b/src/lib/libssl/src/crypto/asn1/x_spki.c index fc056ff53b..6250c1343b 100644 --- a/src/lib/libssl/src/crypto/asn1/x_spki.c +++ b/src/lib/libssl/src/crypto/asn1/x_spki.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_spki.c,v 1.9 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_spki.c,v 1.10 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -65,10 +65,32 @@ | |||
65 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
66 | #include <openssl/asn1t.h> | 66 | #include <openssl/asn1t.h> |
67 | 67 | ||
68 | ASN1_SEQUENCE(NETSCAPE_SPKAC) = { | 68 | static const ASN1_TEMPLATE NETSCAPE_SPKAC_seq_tt[] = { |
69 | ASN1_SIMPLE(NETSCAPE_SPKAC, pubkey, X509_PUBKEY), | 69 | { |
70 | ASN1_SIMPLE(NETSCAPE_SPKAC, challenge, ASN1_IA5STRING) | 70 | .flags = 0, |
71 | } ASN1_SEQUENCE_END(NETSCAPE_SPKAC) | 71 | .tag = 0, |
72 | .offset = offsetof(NETSCAPE_SPKAC, pubkey), | ||
73 | .field_name = "pubkey", | ||
74 | .item = &X509_PUBKEY_it, | ||
75 | }, | ||
76 | { | ||
77 | .flags = 0, | ||
78 | .tag = 0, | ||
79 | .offset = offsetof(NETSCAPE_SPKAC, challenge), | ||
80 | .field_name = "challenge", | ||
81 | .item = &ASN1_IA5STRING_it, | ||
82 | }, | ||
83 | }; | ||
84 | |||
85 | const ASN1_ITEM NETSCAPE_SPKAC_it = { | ||
86 | .itype = ASN1_ITYPE_SEQUENCE, | ||
87 | .utype = V_ASN1_SEQUENCE, | ||
88 | .templates = NETSCAPE_SPKAC_seq_tt, | ||
89 | .tcount = sizeof(NETSCAPE_SPKAC_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
90 | .funcs = NULL, | ||
91 | .size = sizeof(NETSCAPE_SPKAC), | ||
92 | .sname = "NETSCAPE_SPKAC", | ||
93 | }; | ||
72 | 94 | ||
73 | 95 | ||
74 | NETSCAPE_SPKAC * | 96 | NETSCAPE_SPKAC * |
@@ -96,11 +118,39 @@ NETSCAPE_SPKAC_free(NETSCAPE_SPKAC *a) | |||
96 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_SPKAC_it); | 118 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_SPKAC_it); |
97 | } | 119 | } |
98 | 120 | ||
99 | ASN1_SEQUENCE(NETSCAPE_SPKI) = { | 121 | static const ASN1_TEMPLATE NETSCAPE_SPKI_seq_tt[] = { |
100 | ASN1_SIMPLE(NETSCAPE_SPKI, spkac, NETSCAPE_SPKAC), | 122 | { |
101 | ASN1_SIMPLE(NETSCAPE_SPKI, sig_algor, X509_ALGOR), | 123 | .flags = 0, |
102 | ASN1_SIMPLE(NETSCAPE_SPKI, signature, ASN1_BIT_STRING) | 124 | .tag = 0, |
103 | } ASN1_SEQUENCE_END(NETSCAPE_SPKI) | 125 | .offset = offsetof(NETSCAPE_SPKI, spkac), |
126 | .field_name = "spkac", | ||
127 | .item = &NETSCAPE_SPKAC_it, | ||
128 | }, | ||
129 | { | ||
130 | .flags = 0, | ||
131 | .tag = 0, | ||
132 | .offset = offsetof(NETSCAPE_SPKI, sig_algor), | ||
133 | .field_name = "sig_algor", | ||
134 | .item = &X509_ALGOR_it, | ||
135 | }, | ||
136 | { | ||
137 | .flags = 0, | ||
138 | .tag = 0, | ||
139 | .offset = offsetof(NETSCAPE_SPKI, signature), | ||
140 | .field_name = "signature", | ||
141 | .item = &ASN1_BIT_STRING_it, | ||
142 | }, | ||
143 | }; | ||
144 | |||
145 | const ASN1_ITEM NETSCAPE_SPKI_it = { | ||
146 | .itype = ASN1_ITYPE_SEQUENCE, | ||
147 | .utype = V_ASN1_SEQUENCE, | ||
148 | .templates = NETSCAPE_SPKI_seq_tt, | ||
149 | .tcount = sizeof(NETSCAPE_SPKI_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
150 | .funcs = NULL, | ||
151 | .size = sizeof(NETSCAPE_SPKI), | ||
152 | .sname = "NETSCAPE_SPKI", | ||
153 | }; | ||
104 | 154 | ||
105 | 155 | ||
106 | NETSCAPE_SPKI * | 156 | NETSCAPE_SPKI * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_val.c b/src/lib/libssl/src/crypto/asn1/x_val.c index 27835e94da..3f1d830d3e 100644 --- a/src/lib/libssl/src/crypto/asn1/x_val.c +++ b/src/lib/libssl/src/crypto/asn1/x_val.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_val.c,v 1.9 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_val.c,v 1.10 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -61,10 +61,32 @@ | |||
61 | #include <openssl/asn1t.h> | 61 | #include <openssl/asn1t.h> |
62 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_VAL) = { | 64 | static const ASN1_TEMPLATE X509_VAL_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_VAL, notBefore, ASN1_TIME), | 65 | { |
66 | ASN1_SIMPLE(X509_VAL, notAfter, ASN1_TIME) | 66 | .flags = 0, |
67 | } ASN1_SEQUENCE_END(X509_VAL) | 67 | .tag = 0, |
68 | .offset = offsetof(X509_VAL, notBefore), | ||
69 | .field_name = "notBefore", | ||
70 | .item = &ASN1_TIME_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = 0, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_VAL, notAfter), | ||
76 | .field_name = "notAfter", | ||
77 | .item = &ASN1_TIME_it, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | const ASN1_ITEM X509_VAL_it = { | ||
82 | .itype = ASN1_ITYPE_SEQUENCE, | ||
83 | .utype = V_ASN1_SEQUENCE, | ||
84 | .templates = X509_VAL_seq_tt, | ||
85 | .tcount = sizeof(X509_VAL_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
86 | .funcs = NULL, | ||
87 | .size = sizeof(X509_VAL), | ||
88 | .sname = "X509_VAL", | ||
89 | }; | ||
68 | 90 | ||
69 | 91 | ||
70 | X509_VAL * | 92 | X509_VAL * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_x509.c b/src/lib/libssl/src/crypto/asn1/x_x509.c index 756848fe19..1f29d5498a 100644 --- a/src/lib/libssl/src/crypto/asn1/x_x509.c +++ b/src/lib/libssl/src/crypto/asn1/x_x509.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_x509.c,v 1.21 2015/02/10 13:28:17 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509.c,v 1.22 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -65,18 +65,96 @@ | |||
65 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
66 | #include <openssl/x509v3.h> | 66 | #include <openssl/x509v3.h> |
67 | 67 | ||
68 | ASN1_SEQUENCE_enc(X509_CINF, enc, 0) = { | 68 | static const ASN1_AUX X509_CINF_aux = { |
69 | ASN1_EXP_OPT(X509_CINF, version, ASN1_INTEGER, 0), | 69 | .app_data = NULL, |
70 | ASN1_SIMPLE(X509_CINF, serialNumber, ASN1_INTEGER), | 70 | .flags = ASN1_AFLG_ENCODING, |
71 | ASN1_SIMPLE(X509_CINF, signature, X509_ALGOR), | 71 | .ref_offset = 0, |
72 | ASN1_SIMPLE(X509_CINF, issuer, X509_NAME), | 72 | .ref_lock = 0, |
73 | ASN1_SIMPLE(X509_CINF, validity, X509_VAL), | 73 | .asn1_cb = 0, |
74 | ASN1_SIMPLE(X509_CINF, subject, X509_NAME), | 74 | .enc_offset = offsetof(X509_CINF, enc), |
75 | ASN1_SIMPLE(X509_CINF, key, X509_PUBKEY), | 75 | }; |
76 | ASN1_IMP_OPT(X509_CINF, issuerUID, ASN1_BIT_STRING, 1), | 76 | static const ASN1_TEMPLATE X509_CINF_seq_tt[] = { |
77 | ASN1_IMP_OPT(X509_CINF, subjectUID, ASN1_BIT_STRING, 2), | 77 | { |
78 | ASN1_EXP_SEQUENCE_OF_OPT(X509_CINF, extensions, X509_EXTENSION, 3) | 78 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL, |
79 | } ASN1_SEQUENCE_END_enc(X509_CINF, X509_CINF) | 79 | .tag = 0, |
80 | .offset = offsetof(X509_CINF, version), | ||
81 | .field_name = "version", | ||
82 | .item = &ASN1_INTEGER_it, | ||
83 | }, | ||
84 | { | ||
85 | .flags = 0, | ||
86 | .tag = 0, | ||
87 | .offset = offsetof(X509_CINF, serialNumber), | ||
88 | .field_name = "serialNumber", | ||
89 | .item = &ASN1_INTEGER_it, | ||
90 | }, | ||
91 | { | ||
92 | .flags = 0, | ||
93 | .tag = 0, | ||
94 | .offset = offsetof(X509_CINF, signature), | ||
95 | .field_name = "signature", | ||
96 | .item = &X509_ALGOR_it, | ||
97 | }, | ||
98 | { | ||
99 | .flags = 0, | ||
100 | .tag = 0, | ||
101 | .offset = offsetof(X509_CINF, issuer), | ||
102 | .field_name = "issuer", | ||
103 | .item = &X509_NAME_it, | ||
104 | }, | ||
105 | { | ||
106 | .flags = 0, | ||
107 | .tag = 0, | ||
108 | .offset = offsetof(X509_CINF, validity), | ||
109 | .field_name = "validity", | ||
110 | .item = &X509_VAL_it, | ||
111 | }, | ||
112 | { | ||
113 | .flags = 0, | ||
114 | .tag = 0, | ||
115 | .offset = offsetof(X509_CINF, subject), | ||
116 | .field_name = "subject", | ||
117 | .item = &X509_NAME_it, | ||
118 | }, | ||
119 | { | ||
120 | .flags = 0, | ||
121 | .tag = 0, | ||
122 | .offset = offsetof(X509_CINF, key), | ||
123 | .field_name = "key", | ||
124 | .item = &X509_PUBKEY_it, | ||
125 | }, | ||
126 | { | ||
127 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL, | ||
128 | .tag = 1, | ||
129 | .offset = offsetof(X509_CINF, issuerUID), | ||
130 | .field_name = "issuerUID", | ||
131 | .item = &ASN1_BIT_STRING_it, | ||
132 | }, | ||
133 | { | ||
134 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL, | ||
135 | .tag = 2, | ||
136 | .offset = offsetof(X509_CINF, subjectUID), | ||
137 | .field_name = "subjectUID", | ||
138 | .item = &ASN1_BIT_STRING_it, | ||
139 | }, | ||
140 | { | ||
141 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
142 | .tag = 3, | ||
143 | .offset = offsetof(X509_CINF, extensions), | ||
144 | .field_name = "extensions", | ||
145 | .item = &X509_EXTENSION_it, | ||
146 | }, | ||
147 | }; | ||
148 | |||
149 | const ASN1_ITEM X509_CINF_it = { | ||
150 | .itype = ASN1_ITYPE_SEQUENCE, | ||
151 | .utype = V_ASN1_SEQUENCE, | ||
152 | .templates = X509_CINF_seq_tt, | ||
153 | .tcount = sizeof(X509_CINF_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
154 | .funcs = &X509_CINF_aux, | ||
155 | .size = sizeof(X509_CINF), | ||
156 | .sname = "X509_CINF", | ||
157 | }; | ||
80 | 158 | ||
81 | 159 | ||
82 | X509_CINF * | 160 | X509_CINF * |
@@ -148,11 +226,47 @@ x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
148 | return 1; | 226 | return 1; |
149 | } | 227 | } |
150 | 228 | ||
151 | ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { | 229 | static const ASN1_AUX X509_aux = { |
152 | ASN1_SIMPLE(X509, cert_info, X509_CINF), | 230 | .app_data = NULL, |
153 | ASN1_SIMPLE(X509, sig_alg, X509_ALGOR), | 231 | .flags = ASN1_AFLG_REFCOUNT, |
154 | ASN1_SIMPLE(X509, signature, ASN1_BIT_STRING) | 232 | .ref_offset = offsetof(X509, references), |
155 | } ASN1_SEQUENCE_END_ref(X509, X509) | 233 | .ref_lock = CRYPTO_LOCK_X509, |
234 | .asn1_cb = x509_cb, | ||
235 | .enc_offset = 0, | ||
236 | }; | ||
237 | static const ASN1_TEMPLATE X509_seq_tt[] = { | ||
238 | { | ||
239 | .flags = 0, | ||
240 | .tag = 0, | ||
241 | .offset = offsetof(X509, cert_info), | ||
242 | .field_name = "cert_info", | ||
243 | .item = &X509_CINF_it, | ||
244 | }, | ||
245 | { | ||
246 | .flags = 0, | ||
247 | .tag = 0, | ||
248 | .offset = offsetof(X509, sig_alg), | ||
249 | .field_name = "sig_alg", | ||
250 | .item = &X509_ALGOR_it, | ||
251 | }, | ||
252 | { | ||
253 | .flags = 0, | ||
254 | .tag = 0, | ||
255 | .offset = offsetof(X509, signature), | ||
256 | .field_name = "signature", | ||
257 | .item = &ASN1_BIT_STRING_it, | ||
258 | }, | ||
259 | }; | ||
260 | |||
261 | const ASN1_ITEM X509_it = { | ||
262 | .itype = ASN1_ITYPE_SEQUENCE, | ||
263 | .utype = V_ASN1_SEQUENCE, | ||
264 | .templates = X509_seq_tt, | ||
265 | .tcount = sizeof(X509_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
266 | .funcs = &X509_aux, | ||
267 | .size = sizeof(X509), | ||
268 | .sname = "X509", | ||
269 | }; | ||
156 | 270 | ||
157 | 271 | ||
158 | X509 * | 272 | X509 * |
diff --git a/src/lib/libssl/src/crypto/asn1/x_x509a.c b/src/lib/libssl/src/crypto/asn1/x_x509a.c index 8a3561e882..be8ebbdcbb 100644 --- a/src/lib/libssl/src/crypto/asn1/x_x509a.c +++ b/src/lib/libssl/src/crypto/asn1/x_x509a.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_x509a.c,v 1.11 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509a.c,v 1.12 2015/02/11 03:39:51 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -71,13 +71,53 @@ | |||
71 | 71 | ||
72 | static X509_CERT_AUX *aux_get(X509 *x); | 72 | static X509_CERT_AUX *aux_get(X509 *x); |
73 | 73 | ||
74 | ASN1_SEQUENCE(X509_CERT_AUX) = { | 74 | static const ASN1_TEMPLATE X509_CERT_AUX_seq_tt[] = { |
75 | ASN1_SEQUENCE_OF_OPT(X509_CERT_AUX, trust, ASN1_OBJECT), | 75 | { |
76 | ASN1_IMP_SEQUENCE_OF_OPT(X509_CERT_AUX, reject, ASN1_OBJECT, 0), | 76 | .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, |
77 | ASN1_OPT(X509_CERT_AUX, alias, ASN1_UTF8STRING), | 77 | .tag = 0, |
78 | ASN1_OPT(X509_CERT_AUX, keyid, ASN1_OCTET_STRING), | 78 | .offset = offsetof(X509_CERT_AUX, trust), |
79 | ASN1_IMP_SEQUENCE_OF_OPT(X509_CERT_AUX, other, X509_ALGOR, 1) | 79 | .field_name = "trust", |
80 | } ASN1_SEQUENCE_END(X509_CERT_AUX) | 80 | .item = &ASN1_OBJECT_it, |
81 | }, | ||
82 | { | ||
83 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
84 | .tag = 0, | ||
85 | .offset = offsetof(X509_CERT_AUX, reject), | ||
86 | .field_name = "reject", | ||
87 | .item = &ASN1_OBJECT_it, | ||
88 | }, | ||
89 | { | ||
90 | .flags = ASN1_TFLG_OPTIONAL, | ||
91 | .tag = 0, | ||
92 | .offset = offsetof(X509_CERT_AUX, alias), | ||
93 | .field_name = "alias", | ||
94 | .item = &ASN1_UTF8STRING_it, | ||
95 | }, | ||
96 | { | ||
97 | .flags = ASN1_TFLG_OPTIONAL, | ||
98 | .tag = 0, | ||
99 | .offset = offsetof(X509_CERT_AUX, keyid), | ||
100 | .field_name = "keyid", | ||
101 | .item = &ASN1_OCTET_STRING_it, | ||
102 | }, | ||
103 | { | ||
104 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
105 | .tag = 1, | ||
106 | .offset = offsetof(X509_CERT_AUX, other), | ||
107 | .field_name = "other", | ||
108 | .item = &X509_ALGOR_it, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | const ASN1_ITEM X509_CERT_AUX_it = { | ||
113 | .itype = ASN1_ITYPE_SEQUENCE, | ||
114 | .utype = V_ASN1_SEQUENCE, | ||
115 | .templates = X509_CERT_AUX_seq_tt, | ||
116 | .tcount = sizeof(X509_CERT_AUX_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
117 | .funcs = NULL, | ||
118 | .size = sizeof(X509_CERT_AUX), | ||
119 | .sname = "X509_CERT_AUX", | ||
120 | }; | ||
81 | 121 | ||
82 | 122 | ||
83 | X509_CERT_AUX * | 123 | X509_CERT_AUX * |
@@ -217,10 +257,32 @@ X509_reject_clear(X509 *x) | |||
217 | } | 257 | } |
218 | } | 258 | } |
219 | 259 | ||
220 | ASN1_SEQUENCE(X509_CERT_PAIR) = { | 260 | static const ASN1_TEMPLATE X509_CERT_PAIR_seq_tt[] = { |
221 | ASN1_EXP_OPT(X509_CERT_PAIR, forward, X509, 0), | 261 | { |
222 | ASN1_EXP_OPT(X509_CERT_PAIR, reverse, X509, 1) | 262 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL, |
223 | } ASN1_SEQUENCE_END(X509_CERT_PAIR) | 263 | .tag = 0, |
264 | .offset = offsetof(X509_CERT_PAIR, forward), | ||
265 | .field_name = "forward", | ||
266 | .item = &X509_it, | ||
267 | }, | ||
268 | { | ||
269 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL, | ||
270 | .tag = 1, | ||
271 | .offset = offsetof(X509_CERT_PAIR, reverse), | ||
272 | .field_name = "reverse", | ||
273 | .item = &X509_it, | ||
274 | }, | ||
275 | }; | ||
276 | |||
277 | const ASN1_ITEM X509_CERT_PAIR_it = { | ||
278 | .itype = ASN1_ITYPE_SEQUENCE, | ||
279 | .utype = V_ASN1_SEQUENCE, | ||
280 | .templates = X509_CERT_PAIR_seq_tt, | ||
281 | .tcount = sizeof(X509_CERT_PAIR_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
282 | .funcs = NULL, | ||
283 | .size = sizeof(X509_CERT_PAIR), | ||
284 | .sname = "X509_CERT_PAIR", | ||
285 | }; | ||
224 | 286 | ||
225 | 287 | ||
226 | X509_CERT_PAIR * | 288 | X509_CERT_PAIR * |