summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2015-02-14 15:06:55 +0000
committerjsing <>2015-02-14 15:06:55 +0000
commit5e65bc8b3214d70ba366a05d9640e405be041e6e (patch)
tree93d9f5d18362f93abc7e5fc8236fd6b1b970e861
parentdd33b182f2b43795910c8105f9def46b8ed87cb9 (diff)
downloadopenbsd-5e65bc8b3214d70ba366a05d9640e405be041e6e.tar.gz
openbsd-5e65bc8b3214d70ba366a05d9640e405be041e6e.tar.bz2
openbsd-5e65bc8b3214d70ba366a05d9640e405be041e6e.zip
Expand ASN1_CHOICE*, 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 there is no change to the generated assembly. Discussed with beck@ miod@ tedu@
Diffstat (limited to '')
-rw-r--r--src/lib/libcrypto/dh/dh_asn1.c48
-rw-r--r--src/lib/libcrypto/dsa/dsa_asn1.c242
-rw-r--r--src/lib/libcrypto/rsa/rsa_asn1.c186
-rw-r--r--src/lib/libssl/src/crypto/dh/dh_asn1.c48
-rw-r--r--src/lib/libssl/src/crypto/dsa/dsa_asn1.c242
-rw-r--r--src/lib/libssl/src/crypto/rsa/rsa_asn1.c186
6 files changed, 832 insertions, 120 deletions
diff --git a/src/lib/libcrypto/dh/dh_asn1.c b/src/lib/libcrypto/dh/dh_asn1.c
index 9d76974659..7060130ed8 100644
--- a/src/lib/libcrypto/dh/dh_asn1.c
+++ b/src/lib/libcrypto/dh/dh_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dh_asn1.c,v 1.7 2015/02/10 05:12:23 jsing Exp $ */ 1/* $OpenBSD: dh_asn1.c,v 1.8 2015/02/14 15:06:55 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 */
@@ -80,11 +80,47 @@ dh_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
80 return 1; 80 return 1;
81} 81}
82 82
83ASN1_SEQUENCE_cb(DHparams, dh_cb) = { 83static const ASN1_AUX DHparams_aux = {
84 ASN1_SIMPLE(DH, p, BIGNUM), 84 .app_data = NULL,
85 ASN1_SIMPLE(DH, g, BIGNUM), 85 .flags = 0,
86 ASN1_OPT(DH, length, ZLONG), 86 .ref_offset = 0,
87} ASN1_SEQUENCE_END_cb(DH, DHparams) 87 .ref_lock = 0,
88 .asn1_cb = dh_cb,
89 .enc_offset = 0,
90};
91static const ASN1_TEMPLATE DHparams_seq_tt[] = {
92 {
93 .flags = 0,
94 .tag = 0,
95 .offset = offsetof(DH, p),
96 .field_name = "p",
97 .item = &BIGNUM_it,
98 },
99 {
100 .flags = 0,
101 .tag = 0,
102 .offset = offsetof(DH, g),
103 .field_name = "g",
104 .item = &BIGNUM_it,
105 },
106 {
107 .flags = ASN1_TFLG_OPTIONAL,
108 .tag = 0,
109 .offset = offsetof(DH, length),
110 .field_name = "length",
111 .item = &ZLONG_it,
112 },
113};
114
115const ASN1_ITEM DHparams_it = {
116 .itype = ASN1_ITYPE_SEQUENCE,
117 .utype = V_ASN1_SEQUENCE,
118 .templates = DHparams_seq_tt,
119 .tcount = sizeof(DHparams_seq_tt) / sizeof(ASN1_TEMPLATE),
120 .funcs = &DHparams_aux,
121 .size = sizeof(DH),
122 .sname = "DH",
123};
88 124
89 125
90DH * 126DH *
diff --git a/src/lib/libcrypto/dsa/dsa_asn1.c b/src/lib/libcrypto/dsa/dsa_asn1.c
index c6b00923fc..8c5d93105c 100644
--- a/src/lib/libcrypto/dsa/dsa_asn1.c
+++ b/src/lib/libcrypto/dsa/dsa_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dsa_asn1.c,v 1.15 2015/02/10 05:12:23 jsing Exp $ */ 1/* $OpenBSD: dsa_asn1.c,v 1.16 2015/02/14 15:06:55 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 */
@@ -84,10 +84,40 @@ sig_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
84 return 1; 84 return 1;
85} 85}
86 86
87ASN1_SEQUENCE_cb(DSA_SIG, sig_cb) = { 87static const ASN1_AUX DSA_SIG_aux = {
88 ASN1_SIMPLE(DSA_SIG, r, CBIGNUM), 88 .app_data = NULL,
89 ASN1_SIMPLE(DSA_SIG, s, CBIGNUM) 89 .flags = 0,
90} ASN1_SEQUENCE_END_cb(DSA_SIG, DSA_SIG) 90 .ref_offset = 0,
91 .ref_lock = 0,
92 .asn1_cb = sig_cb,
93 .enc_offset = 0,
94};
95static const ASN1_TEMPLATE DSA_SIG_seq_tt[] = {
96 {
97 .flags = 0,
98 .tag = 0,
99 .offset = offsetof(DSA_SIG, r),
100 .field_name = "r",
101 .item = &CBIGNUM_it,
102 },
103 {
104 .flags = 0,
105 .tag = 0,
106 .offset = offsetof(DSA_SIG, s),
107 .field_name = "s",
108 .item = &CBIGNUM_it,
109 },
110};
111
112const ASN1_ITEM DSA_SIG_it = {
113 .itype = ASN1_ITYPE_SEQUENCE,
114 .utype = V_ASN1_SEQUENCE,
115 .templates = DSA_SIG_seq_tt,
116 .tcount = sizeof(DSA_SIG_seq_tt) / sizeof(ASN1_TEMPLATE),
117 .funcs = &DSA_SIG_aux,
118 .size = sizeof(DSA_SIG),
119 .sname = "DSA_SIG",
120};
91 121
92 122
93DSA_SIG * 123DSA_SIG *
@@ -120,14 +150,68 @@ dsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
120 return 1; 150 return 1;
121} 151}
122 152
123ASN1_SEQUENCE_cb(DSAPrivateKey, dsa_cb) = { 153static const ASN1_AUX DSAPrivateKey_aux = {
124 ASN1_SIMPLE(DSA, version, LONG), 154 .app_data = NULL,
125 ASN1_SIMPLE(DSA, p, BIGNUM), 155 .flags = 0,
126 ASN1_SIMPLE(DSA, q, BIGNUM), 156 .ref_offset = 0,
127 ASN1_SIMPLE(DSA, g, BIGNUM), 157 .ref_lock = 0,
128 ASN1_SIMPLE(DSA, pub_key, BIGNUM), 158 .asn1_cb = dsa_cb,
129 ASN1_SIMPLE(DSA, priv_key, BIGNUM) 159 .enc_offset = 0,
130} ASN1_SEQUENCE_END_cb(DSA, DSAPrivateKey) 160};
161static const ASN1_TEMPLATE DSAPrivateKey_seq_tt[] = {
162 {
163 .flags = 0,
164 .tag = 0,
165 .offset = offsetof(DSA, version),
166 .field_name = "version",
167 .item = &LONG_it,
168 },
169 {
170 .flags = 0,
171 .tag = 0,
172 .offset = offsetof(DSA, p),
173 .field_name = "p",
174 .item = &BIGNUM_it,
175 },
176 {
177 .flags = 0,
178 .tag = 0,
179 .offset = offsetof(DSA, q),
180 .field_name = "q",
181 .item = &BIGNUM_it,
182 },
183 {
184 .flags = 0,
185 .tag = 0,
186 .offset = offsetof(DSA, g),
187 .field_name = "g",
188 .item = &BIGNUM_it,
189 },
190 {
191 .flags = 0,
192 .tag = 0,
193 .offset = offsetof(DSA, pub_key),
194 .field_name = "pub_key",
195 .item = &BIGNUM_it,
196 },
197 {
198 .flags = 0,
199 .tag = 0,
200 .offset = offsetof(DSA, priv_key),
201 .field_name = "priv_key",
202 .item = &BIGNUM_it,
203 },
204};
205
206const ASN1_ITEM DSAPrivateKey_it = {
207 .itype = ASN1_ITYPE_SEQUENCE,
208 .utype = V_ASN1_SEQUENCE,
209 .templates = DSAPrivateKey_seq_tt,
210 .tcount = sizeof(DSAPrivateKey_seq_tt) / sizeof(ASN1_TEMPLATE),
211 .funcs = &DSAPrivateKey_aux,
212 .size = sizeof(DSA),
213 .sname = "DSA",
214};
131 215
132 216
133DSA * 217DSA *
@@ -143,11 +227,47 @@ i2d_DSAPrivateKey(const DSA *a, unsigned char **out)
143 return ASN1_item_i2d((ASN1_VALUE *)a, out, &DSAPrivateKey_it); 227 return ASN1_item_i2d((ASN1_VALUE *)a, out, &DSAPrivateKey_it);
144} 228}
145 229
146ASN1_SEQUENCE_cb(DSAparams, dsa_cb) = { 230static const ASN1_AUX DSAparams_aux = {
147 ASN1_SIMPLE(DSA, p, BIGNUM), 231 .app_data = NULL,
148 ASN1_SIMPLE(DSA, q, BIGNUM), 232 .flags = 0,
149 ASN1_SIMPLE(DSA, g, BIGNUM), 233 .ref_offset = 0,
150} ASN1_SEQUENCE_END_cb(DSA, DSAparams) 234 .ref_lock = 0,
235 .asn1_cb = dsa_cb,
236 .enc_offset = 0,
237};
238static const ASN1_TEMPLATE DSAparams_seq_tt[] = {
239 {
240 .flags = 0,
241 .tag = 0,
242 .offset = offsetof(DSA, p),
243 .field_name = "p",
244 .item = &BIGNUM_it,
245 },
246 {
247 .flags = 0,
248 .tag = 0,
249 .offset = offsetof(DSA, q),
250 .field_name = "q",
251 .item = &BIGNUM_it,
252 },
253 {
254 .flags = 0,
255 .tag = 0,
256 .offset = offsetof(DSA, g),
257 .field_name = "g",
258 .item = &BIGNUM_it,
259 },
260};
261
262const ASN1_ITEM DSAparams_it = {
263 .itype = ASN1_ITYPE_SEQUENCE,
264 .utype = V_ASN1_SEQUENCE,
265 .templates = DSAparams_seq_tt,
266 .tcount = sizeof(DSAparams_seq_tt) / sizeof(ASN1_TEMPLATE),
267 .funcs = &DSAparams_aux,
268 .size = sizeof(DSA),
269 .sname = "DSA",
270};
151 271
152 272
153DSA * 273DSA *
@@ -170,17 +290,81 @@ i2d_DSAparams(const DSA *a, unsigned char **out)
170 * in a SEQUENCE 290 * in a SEQUENCE
171 */ 291 */
172 292
173ASN1_SEQUENCE(dsa_pub_internal) = { 293static const ASN1_TEMPLATE dsa_pub_internal_seq_tt[] = {
174 ASN1_SIMPLE(DSA, pub_key, BIGNUM), 294 {
175 ASN1_SIMPLE(DSA, p, BIGNUM), 295 .flags = 0,
176 ASN1_SIMPLE(DSA, q, BIGNUM), 296 .tag = 0,
177 ASN1_SIMPLE(DSA, g, BIGNUM) 297 .offset = offsetof(DSA, pub_key),
178} ASN1_SEQUENCE_END_name(DSA, dsa_pub_internal) 298 .field_name = "pub_key",
179 299 .item = &BIGNUM_it,
180ASN1_CHOICE_cb(DSAPublicKey, dsa_cb) = { 300 },
181 ASN1_SIMPLE(DSA, pub_key, BIGNUM), 301 {
182 ASN1_EX_COMBINE(0, 0, dsa_pub_internal) 302 .flags = 0,
183} ASN1_CHOICE_END_cb(DSA, DSAPublicKey, write_params) 303 .tag = 0,
304 .offset = offsetof(DSA, p),
305 .field_name = "p",
306 .item = &BIGNUM_it,
307 },
308 {
309 .flags = 0,
310 .tag = 0,
311 .offset = offsetof(DSA, q),
312 .field_name = "q",
313 .item = &BIGNUM_it,
314 },
315 {
316 .flags = 0,
317 .tag = 0,
318 .offset = offsetof(DSA, g),
319 .field_name = "g",
320 .item = &BIGNUM_it,
321 },
322};
323
324const ASN1_ITEM dsa_pub_internal_it = {
325 .itype = ASN1_ITYPE_SEQUENCE,
326 .utype = V_ASN1_SEQUENCE,
327 .templates = dsa_pub_internal_seq_tt,
328 .tcount = sizeof(dsa_pub_internal_seq_tt) / sizeof(ASN1_TEMPLATE),
329 .funcs = NULL,
330 .size = sizeof(DSA),
331 .sname = "DSA",
332};
333
334static const ASN1_AUX DSAPublicKey_aux = {
335 .app_data = NULL,
336 .flags = 0,
337 .ref_offset = 0,
338 .ref_lock = 0,
339 .asn1_cb = dsa_cb,
340 .enc_offset = 0,
341};
342static const ASN1_TEMPLATE DSAPublicKey_ch_tt[] = {
343 {
344 .flags = 0,
345 .tag = 0,
346 .offset = offsetof(DSA, pub_key),
347 .field_name = "pub_key",
348 .item = &BIGNUM_it,
349 },
350 {
351 .flags = 0 | ASN1_TFLG_COMBINE,
352 .tag = 0,
353 .offset = 0,
354 .field_name = NULL,
355 .item = &dsa_pub_internal_it,
356 },
357};
358
359const ASN1_ITEM DSAPublicKey_it = {
360 .itype = ASN1_ITYPE_CHOICE,
361 .utype = offsetof(DSA, write_params),
362 .templates = DSAPublicKey_ch_tt,
363 .tcount = sizeof(DSAPublicKey_ch_tt) / sizeof(ASN1_TEMPLATE),
364 .funcs = &DSAPublicKey_aux,
365 .size = sizeof(DSA),
366 .sname = "DSA",
367};
184 368
185 369
186DSA * 370DSA *
diff --git a/src/lib/libcrypto/rsa/rsa_asn1.c b/src/lib/libcrypto/rsa/rsa_asn1.c
index 525c9455bd..27afdece00 100644
--- a/src/lib/libcrypto/rsa/rsa_asn1.c
+++ b/src/lib/libcrypto/rsa/rsa_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: rsa_asn1.c,v 1.11 2015/02/10 05:12:23 jsing Exp $ */ 1/* $OpenBSD: rsa_asn1.c,v 1.12 2015/02/14 15:06:55 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 */
@@ -80,30 +80,166 @@ rsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
80 return 1; 80 return 1;
81} 81}
82 82
83ASN1_SEQUENCE_cb(RSAPrivateKey, rsa_cb) = { 83static const ASN1_AUX RSAPrivateKey_aux = {
84 ASN1_SIMPLE(RSA, version, LONG), 84 .app_data = NULL,
85 ASN1_SIMPLE(RSA, n, BIGNUM), 85 .flags = 0,
86 ASN1_SIMPLE(RSA, e, BIGNUM), 86 .ref_offset = 0,
87 ASN1_SIMPLE(RSA, d, BIGNUM), 87 .ref_lock = 0,
88 ASN1_SIMPLE(RSA, p, BIGNUM), 88 .asn1_cb = rsa_cb,
89 ASN1_SIMPLE(RSA, q, BIGNUM), 89 .enc_offset = 0,
90 ASN1_SIMPLE(RSA, dmp1, BIGNUM), 90};
91 ASN1_SIMPLE(RSA, dmq1, BIGNUM), 91static const ASN1_TEMPLATE RSAPrivateKey_seq_tt[] = {
92 ASN1_SIMPLE(RSA, iqmp, BIGNUM) 92 {
93} ASN1_SEQUENCE_END_cb(RSA, RSAPrivateKey) 93 .flags = 0,
94 94 .tag = 0,
95 95 .offset = offsetof(RSA, version),
96ASN1_SEQUENCE_cb(RSAPublicKey, rsa_cb) = { 96 .field_name = "version",
97 ASN1_SIMPLE(RSA, n, BIGNUM), 97 .item = &LONG_it,
98 ASN1_SIMPLE(RSA, e, BIGNUM), 98 },
99} ASN1_SEQUENCE_END_cb(RSA, RSAPublicKey) 99 {
100 100 .flags = 0,
101ASN1_SEQUENCE(RSA_PSS_PARAMS) = { 101 .tag = 0,
102 ASN1_EXP_OPT(RSA_PSS_PARAMS, hashAlgorithm, X509_ALGOR, 0), 102 .offset = offsetof(RSA, n),
103 ASN1_EXP_OPT(RSA_PSS_PARAMS, maskGenAlgorithm, X509_ALGOR, 1), 103 .field_name = "n",
104 ASN1_EXP_OPT(RSA_PSS_PARAMS, saltLength, ASN1_INTEGER, 2), 104 .item = &BIGNUM_it,
105 ASN1_EXP_OPT(RSA_PSS_PARAMS, trailerField, ASN1_INTEGER, 3) 105 },
106} ASN1_SEQUENCE_END(RSA_PSS_PARAMS) 106 {
107 .flags = 0,
108 .tag = 0,
109 .offset = offsetof(RSA, e),
110 .field_name = "e",
111 .item = &BIGNUM_it,
112 },
113 {
114 .flags = 0,
115 .tag = 0,
116 .offset = offsetof(RSA, d),
117 .field_name = "d",
118 .item = &BIGNUM_it,
119 },
120 {
121 .flags = 0,
122 .tag = 0,
123 .offset = offsetof(RSA, p),
124 .field_name = "p",
125 .item = &BIGNUM_it,
126 },
127 {
128 .flags = 0,
129 .tag = 0,
130 .offset = offsetof(RSA, q),
131 .field_name = "q",
132 .item = &BIGNUM_it,
133 },
134 {
135 .flags = 0,
136 .tag = 0,
137 .offset = offsetof(RSA, dmp1),
138 .field_name = "dmp1",
139 .item = &BIGNUM_it,
140 },
141 {
142 .flags = 0,
143 .tag = 0,
144 .offset = offsetof(RSA, dmq1),
145 .field_name = "dmq1",
146 .item = &BIGNUM_it,
147 },
148 {
149 .flags = 0,
150 .tag = 0,
151 .offset = offsetof(RSA, iqmp),
152 .field_name = "iqmp",
153 .item = &BIGNUM_it,
154 },
155};
156
157const ASN1_ITEM RSAPrivateKey_it = {
158 .itype = ASN1_ITYPE_SEQUENCE,
159 .utype = V_ASN1_SEQUENCE,
160 .templates = RSAPrivateKey_seq_tt,
161 .tcount = sizeof(RSAPrivateKey_seq_tt) / sizeof(ASN1_TEMPLATE),
162 .funcs = &RSAPrivateKey_aux,
163 .size = sizeof(RSA),
164 .sname = "RSA",
165};
166
167
168static const ASN1_AUX RSAPublicKey_aux = {
169 .app_data = NULL,
170 .flags = 0,
171 .ref_offset = 0,
172 .ref_lock = 0,
173 .asn1_cb = rsa_cb,
174 .enc_offset = 0,
175};
176static const ASN1_TEMPLATE RSAPublicKey_seq_tt[] = {
177 {
178 .flags = 0,
179 .tag = 0,
180 .offset = offsetof(RSA, n),
181 .field_name = "n",
182 .item = &BIGNUM_it,
183 },
184 {
185 .flags = 0,
186 .tag = 0,
187 .offset = offsetof(RSA, e),
188 .field_name = "e",
189 .item = &BIGNUM_it,
190 },
191};
192
193const ASN1_ITEM RSAPublicKey_it = {
194 .itype = ASN1_ITYPE_SEQUENCE,
195 .utype = V_ASN1_SEQUENCE,
196 .templates = RSAPublicKey_seq_tt,
197 .tcount = sizeof(RSAPublicKey_seq_tt) / sizeof(ASN1_TEMPLATE),
198 .funcs = &RSAPublicKey_aux,
199 .size = sizeof(RSA),
200 .sname = "RSA",
201};
202
203static const ASN1_TEMPLATE RSA_PSS_PARAMS_seq_tt[] = {
204 {
205 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
206 .tag = 0,
207 .offset = offsetof(RSA_PSS_PARAMS, hashAlgorithm),
208 .field_name = "hashAlgorithm",
209 .item = &X509_ALGOR_it,
210 },
211 {
212 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
213 .tag = 1,
214 .offset = offsetof(RSA_PSS_PARAMS, maskGenAlgorithm),
215 .field_name = "maskGenAlgorithm",
216 .item = &X509_ALGOR_it,
217 },
218 {
219 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
220 .tag = 2,
221 .offset = offsetof(RSA_PSS_PARAMS, saltLength),
222 .field_name = "saltLength",
223 .item = &ASN1_INTEGER_it,
224 },
225 {
226 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
227 .tag = 3,
228 .offset = offsetof(RSA_PSS_PARAMS, trailerField),
229 .field_name = "trailerField",
230 .item = &ASN1_INTEGER_it,
231 },
232};
233
234const ASN1_ITEM RSA_PSS_PARAMS_it = {
235 .itype = ASN1_ITYPE_SEQUENCE,
236 .utype = V_ASN1_SEQUENCE,
237 .templates = RSA_PSS_PARAMS_seq_tt,
238 .tcount = sizeof(RSA_PSS_PARAMS_seq_tt) / sizeof(ASN1_TEMPLATE),
239 .funcs = NULL,
240 .size = sizeof(RSA_PSS_PARAMS),
241 .sname = "RSA_PSS_PARAMS",
242};
107 243
108 244
109RSA_PSS_PARAMS * 245RSA_PSS_PARAMS *
diff --git a/src/lib/libssl/src/crypto/dh/dh_asn1.c b/src/lib/libssl/src/crypto/dh/dh_asn1.c
index 9d76974659..7060130ed8 100644
--- a/src/lib/libssl/src/crypto/dh/dh_asn1.c
+++ b/src/lib/libssl/src/crypto/dh/dh_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dh_asn1.c,v 1.7 2015/02/10 05:12:23 jsing Exp $ */ 1/* $OpenBSD: dh_asn1.c,v 1.8 2015/02/14 15:06:55 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 */
@@ -80,11 +80,47 @@ dh_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
80 return 1; 80 return 1;
81} 81}
82 82
83ASN1_SEQUENCE_cb(DHparams, dh_cb) = { 83static const ASN1_AUX DHparams_aux = {
84 ASN1_SIMPLE(DH, p, BIGNUM), 84 .app_data = NULL,
85 ASN1_SIMPLE(DH, g, BIGNUM), 85 .flags = 0,
86 ASN1_OPT(DH, length, ZLONG), 86 .ref_offset = 0,
87} ASN1_SEQUENCE_END_cb(DH, DHparams) 87 .ref_lock = 0,
88 .asn1_cb = dh_cb,
89 .enc_offset = 0,
90};
91static const ASN1_TEMPLATE DHparams_seq_tt[] = {
92 {
93 .flags = 0,
94 .tag = 0,
95 .offset = offsetof(DH, p),
96 .field_name = "p",
97 .item = &BIGNUM_it,
98 },
99 {
100 .flags = 0,
101 .tag = 0,
102 .offset = offsetof(DH, g),
103 .field_name = "g",
104 .item = &BIGNUM_it,
105 },
106 {
107 .flags = ASN1_TFLG_OPTIONAL,
108 .tag = 0,
109 .offset = offsetof(DH, length),
110 .field_name = "length",
111 .item = &ZLONG_it,
112 },
113};
114
115const ASN1_ITEM DHparams_it = {
116 .itype = ASN1_ITYPE_SEQUENCE,
117 .utype = V_ASN1_SEQUENCE,
118 .templates = DHparams_seq_tt,
119 .tcount = sizeof(DHparams_seq_tt) / sizeof(ASN1_TEMPLATE),
120 .funcs = &DHparams_aux,
121 .size = sizeof(DH),
122 .sname = "DH",
123};
88 124
89 125
90DH * 126DH *
diff --git a/src/lib/libssl/src/crypto/dsa/dsa_asn1.c b/src/lib/libssl/src/crypto/dsa/dsa_asn1.c
index c6b00923fc..8c5d93105c 100644
--- a/src/lib/libssl/src/crypto/dsa/dsa_asn1.c
+++ b/src/lib/libssl/src/crypto/dsa/dsa_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dsa_asn1.c,v 1.15 2015/02/10 05:12:23 jsing Exp $ */ 1/* $OpenBSD: dsa_asn1.c,v 1.16 2015/02/14 15:06:55 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 */
@@ -84,10 +84,40 @@ sig_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
84 return 1; 84 return 1;
85} 85}
86 86
87ASN1_SEQUENCE_cb(DSA_SIG, sig_cb) = { 87static const ASN1_AUX DSA_SIG_aux = {
88 ASN1_SIMPLE(DSA_SIG, r, CBIGNUM), 88 .app_data = NULL,
89 ASN1_SIMPLE(DSA_SIG, s, CBIGNUM) 89 .flags = 0,
90} ASN1_SEQUENCE_END_cb(DSA_SIG, DSA_SIG) 90 .ref_offset = 0,
91 .ref_lock = 0,
92 .asn1_cb = sig_cb,
93 .enc_offset = 0,
94};
95static const ASN1_TEMPLATE DSA_SIG_seq_tt[] = {
96 {
97 .flags = 0,
98 .tag = 0,
99 .offset = offsetof(DSA_SIG, r),
100 .field_name = "r",
101 .item = &CBIGNUM_it,
102 },
103 {
104 .flags = 0,
105 .tag = 0,
106 .offset = offsetof(DSA_SIG, s),
107 .field_name = "s",
108 .item = &CBIGNUM_it,
109 },
110};
111
112const ASN1_ITEM DSA_SIG_it = {
113 .itype = ASN1_ITYPE_SEQUENCE,
114 .utype = V_ASN1_SEQUENCE,
115 .templates = DSA_SIG_seq_tt,
116 .tcount = sizeof(DSA_SIG_seq_tt) / sizeof(ASN1_TEMPLATE),
117 .funcs = &DSA_SIG_aux,
118 .size = sizeof(DSA_SIG),
119 .sname = "DSA_SIG",
120};
91 121
92 122
93DSA_SIG * 123DSA_SIG *
@@ -120,14 +150,68 @@ dsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
120 return 1; 150 return 1;
121} 151}
122 152
123ASN1_SEQUENCE_cb(DSAPrivateKey, dsa_cb) = { 153static const ASN1_AUX DSAPrivateKey_aux = {
124 ASN1_SIMPLE(DSA, version, LONG), 154 .app_data = NULL,
125 ASN1_SIMPLE(DSA, p, BIGNUM), 155 .flags = 0,
126 ASN1_SIMPLE(DSA, q, BIGNUM), 156 .ref_offset = 0,
127 ASN1_SIMPLE(DSA, g, BIGNUM), 157 .ref_lock = 0,
128 ASN1_SIMPLE(DSA, pub_key, BIGNUM), 158 .asn1_cb = dsa_cb,
129 ASN1_SIMPLE(DSA, priv_key, BIGNUM) 159 .enc_offset = 0,
130} ASN1_SEQUENCE_END_cb(DSA, DSAPrivateKey) 160};
161static const ASN1_TEMPLATE DSAPrivateKey_seq_tt[] = {
162 {
163 .flags = 0,
164 .tag = 0,
165 .offset = offsetof(DSA, version),
166 .field_name = "version",
167 .item = &LONG_it,
168 },
169 {
170 .flags = 0,
171 .tag = 0,
172 .offset = offsetof(DSA, p),
173 .field_name = "p",
174 .item = &BIGNUM_it,
175 },
176 {
177 .flags = 0,
178 .tag = 0,
179 .offset = offsetof(DSA, q),
180 .field_name = "q",
181 .item = &BIGNUM_it,
182 },
183 {
184 .flags = 0,
185 .tag = 0,
186 .offset = offsetof(DSA, g),
187 .field_name = "g",
188 .item = &BIGNUM_it,
189 },
190 {
191 .flags = 0,
192 .tag = 0,
193 .offset = offsetof(DSA, pub_key),
194 .field_name = "pub_key",
195 .item = &BIGNUM_it,
196 },
197 {
198 .flags = 0,
199 .tag = 0,
200 .offset = offsetof(DSA, priv_key),
201 .field_name = "priv_key",
202 .item = &BIGNUM_it,
203 },
204};
205
206const ASN1_ITEM DSAPrivateKey_it = {
207 .itype = ASN1_ITYPE_SEQUENCE,
208 .utype = V_ASN1_SEQUENCE,
209 .templates = DSAPrivateKey_seq_tt,
210 .tcount = sizeof(DSAPrivateKey_seq_tt) / sizeof(ASN1_TEMPLATE),
211 .funcs = &DSAPrivateKey_aux,
212 .size = sizeof(DSA),
213 .sname = "DSA",
214};
131 215
132 216
133DSA * 217DSA *
@@ -143,11 +227,47 @@ i2d_DSAPrivateKey(const DSA *a, unsigned char **out)
143 return ASN1_item_i2d((ASN1_VALUE *)a, out, &DSAPrivateKey_it); 227 return ASN1_item_i2d((ASN1_VALUE *)a, out, &DSAPrivateKey_it);
144} 228}
145 229
146ASN1_SEQUENCE_cb(DSAparams, dsa_cb) = { 230static const ASN1_AUX DSAparams_aux = {
147 ASN1_SIMPLE(DSA, p, BIGNUM), 231 .app_data = NULL,
148 ASN1_SIMPLE(DSA, q, BIGNUM), 232 .flags = 0,
149 ASN1_SIMPLE(DSA, g, BIGNUM), 233 .ref_offset = 0,
150} ASN1_SEQUENCE_END_cb(DSA, DSAparams) 234 .ref_lock = 0,
235 .asn1_cb = dsa_cb,
236 .enc_offset = 0,
237};
238static const ASN1_TEMPLATE DSAparams_seq_tt[] = {
239 {
240 .flags = 0,
241 .tag = 0,
242 .offset = offsetof(DSA, p),
243 .field_name = "p",
244 .item = &BIGNUM_it,
245 },
246 {
247 .flags = 0,
248 .tag = 0,
249 .offset = offsetof(DSA, q),
250 .field_name = "q",
251 .item = &BIGNUM_it,
252 },
253 {
254 .flags = 0,
255 .tag = 0,
256 .offset = offsetof(DSA, g),
257 .field_name = "g",
258 .item = &BIGNUM_it,
259 },
260};
261
262const ASN1_ITEM DSAparams_it = {
263 .itype = ASN1_ITYPE_SEQUENCE,
264 .utype = V_ASN1_SEQUENCE,
265 .templates = DSAparams_seq_tt,
266 .tcount = sizeof(DSAparams_seq_tt) / sizeof(ASN1_TEMPLATE),
267 .funcs = &DSAparams_aux,
268 .size = sizeof(DSA),
269 .sname = "DSA",
270};
151 271
152 272
153DSA * 273DSA *
@@ -170,17 +290,81 @@ i2d_DSAparams(const DSA *a, unsigned char **out)
170 * in a SEQUENCE 290 * in a SEQUENCE
171 */ 291 */
172 292
173ASN1_SEQUENCE(dsa_pub_internal) = { 293static const ASN1_TEMPLATE dsa_pub_internal_seq_tt[] = {
174 ASN1_SIMPLE(DSA, pub_key, BIGNUM), 294 {
175 ASN1_SIMPLE(DSA, p, BIGNUM), 295 .flags = 0,
176 ASN1_SIMPLE(DSA, q, BIGNUM), 296 .tag = 0,
177 ASN1_SIMPLE(DSA, g, BIGNUM) 297 .offset = offsetof(DSA, pub_key),
178} ASN1_SEQUENCE_END_name(DSA, dsa_pub_internal) 298 .field_name = "pub_key",
179 299 .item = &BIGNUM_it,
180ASN1_CHOICE_cb(DSAPublicKey, dsa_cb) = { 300 },
181 ASN1_SIMPLE(DSA, pub_key, BIGNUM), 301 {
182 ASN1_EX_COMBINE(0, 0, dsa_pub_internal) 302 .flags = 0,
183} ASN1_CHOICE_END_cb(DSA, DSAPublicKey, write_params) 303 .tag = 0,
304 .offset = offsetof(DSA, p),
305 .field_name = "p",
306 .item = &BIGNUM_it,
307 },
308 {
309 .flags = 0,
310 .tag = 0,
311 .offset = offsetof(DSA, q),
312 .field_name = "q",
313 .item = &BIGNUM_it,
314 },
315 {
316 .flags = 0,
317 .tag = 0,
318 .offset = offsetof(DSA, g),
319 .field_name = "g",
320 .item = &BIGNUM_it,
321 },
322};
323
324const ASN1_ITEM dsa_pub_internal_it = {
325 .itype = ASN1_ITYPE_SEQUENCE,
326 .utype = V_ASN1_SEQUENCE,
327 .templates = dsa_pub_internal_seq_tt,
328 .tcount = sizeof(dsa_pub_internal_seq_tt) / sizeof(ASN1_TEMPLATE),
329 .funcs = NULL,
330 .size = sizeof(DSA),
331 .sname = "DSA",
332};
333
334static const ASN1_AUX DSAPublicKey_aux = {
335 .app_data = NULL,
336 .flags = 0,
337 .ref_offset = 0,
338 .ref_lock = 0,
339 .asn1_cb = dsa_cb,
340 .enc_offset = 0,
341};
342static const ASN1_TEMPLATE DSAPublicKey_ch_tt[] = {
343 {
344 .flags = 0,
345 .tag = 0,
346 .offset = offsetof(DSA, pub_key),
347 .field_name = "pub_key",
348 .item = &BIGNUM_it,
349 },
350 {
351 .flags = 0 | ASN1_TFLG_COMBINE,
352 .tag = 0,
353 .offset = 0,
354 .field_name = NULL,
355 .item = &dsa_pub_internal_it,
356 },
357};
358
359const ASN1_ITEM DSAPublicKey_it = {
360 .itype = ASN1_ITYPE_CHOICE,
361 .utype = offsetof(DSA, write_params),
362 .templates = DSAPublicKey_ch_tt,
363 .tcount = sizeof(DSAPublicKey_ch_tt) / sizeof(ASN1_TEMPLATE),
364 .funcs = &DSAPublicKey_aux,
365 .size = sizeof(DSA),
366 .sname = "DSA",
367};
184 368
185 369
186DSA * 370DSA *
diff --git a/src/lib/libssl/src/crypto/rsa/rsa_asn1.c b/src/lib/libssl/src/crypto/rsa/rsa_asn1.c
index 525c9455bd..27afdece00 100644
--- a/src/lib/libssl/src/crypto/rsa/rsa_asn1.c
+++ b/src/lib/libssl/src/crypto/rsa/rsa_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: rsa_asn1.c,v 1.11 2015/02/10 05:12:23 jsing Exp $ */ 1/* $OpenBSD: rsa_asn1.c,v 1.12 2015/02/14 15:06:55 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 */
@@ -80,30 +80,166 @@ rsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
80 return 1; 80 return 1;
81} 81}
82 82
83ASN1_SEQUENCE_cb(RSAPrivateKey, rsa_cb) = { 83static const ASN1_AUX RSAPrivateKey_aux = {
84 ASN1_SIMPLE(RSA, version, LONG), 84 .app_data = NULL,
85 ASN1_SIMPLE(RSA, n, BIGNUM), 85 .flags = 0,
86 ASN1_SIMPLE(RSA, e, BIGNUM), 86 .ref_offset = 0,
87 ASN1_SIMPLE(RSA, d, BIGNUM), 87 .ref_lock = 0,
88 ASN1_SIMPLE(RSA, p, BIGNUM), 88 .asn1_cb = rsa_cb,
89 ASN1_SIMPLE(RSA, q, BIGNUM), 89 .enc_offset = 0,
90 ASN1_SIMPLE(RSA, dmp1, BIGNUM), 90};
91 ASN1_SIMPLE(RSA, dmq1, BIGNUM), 91static const ASN1_TEMPLATE RSAPrivateKey_seq_tt[] = {
92 ASN1_SIMPLE(RSA, iqmp, BIGNUM) 92 {
93} ASN1_SEQUENCE_END_cb(RSA, RSAPrivateKey) 93 .flags = 0,
94 94 .tag = 0,
95 95 .offset = offsetof(RSA, version),
96ASN1_SEQUENCE_cb(RSAPublicKey, rsa_cb) = { 96 .field_name = "version",
97 ASN1_SIMPLE(RSA, n, BIGNUM), 97 .item = &LONG_it,
98 ASN1_SIMPLE(RSA, e, BIGNUM), 98 },
99} ASN1_SEQUENCE_END_cb(RSA, RSAPublicKey) 99 {
100 100 .flags = 0,
101ASN1_SEQUENCE(RSA_PSS_PARAMS) = { 101 .tag = 0,
102 ASN1_EXP_OPT(RSA_PSS_PARAMS, hashAlgorithm, X509_ALGOR, 0), 102 .offset = offsetof(RSA, n),
103 ASN1_EXP_OPT(RSA_PSS_PARAMS, maskGenAlgorithm, X509_ALGOR, 1), 103 .field_name = "n",
104 ASN1_EXP_OPT(RSA_PSS_PARAMS, saltLength, ASN1_INTEGER, 2), 104 .item = &BIGNUM_it,
105 ASN1_EXP_OPT(RSA_PSS_PARAMS, trailerField, ASN1_INTEGER, 3) 105 },
106} ASN1_SEQUENCE_END(RSA_PSS_PARAMS) 106 {
107 .flags = 0,
108 .tag = 0,
109 .offset = offsetof(RSA, e),
110 .field_name = "e",
111 .item = &BIGNUM_it,
112 },
113 {
114 .flags = 0,
115 .tag = 0,
116 .offset = offsetof(RSA, d),
117 .field_name = "d",
118 .item = &BIGNUM_it,
119 },
120 {
121 .flags = 0,
122 .tag = 0,
123 .offset = offsetof(RSA, p),
124 .field_name = "p",
125 .item = &BIGNUM_it,
126 },
127 {
128 .flags = 0,
129 .tag = 0,
130 .offset = offsetof(RSA, q),
131 .field_name = "q",
132 .item = &BIGNUM_it,
133 },
134 {
135 .flags = 0,
136 .tag = 0,
137 .offset = offsetof(RSA, dmp1),
138 .field_name = "dmp1",
139 .item = &BIGNUM_it,
140 },
141 {
142 .flags = 0,
143 .tag = 0,
144 .offset = offsetof(RSA, dmq1),
145 .field_name = "dmq1",
146 .item = &BIGNUM_it,
147 },
148 {
149 .flags = 0,
150 .tag = 0,
151 .offset = offsetof(RSA, iqmp),
152 .field_name = "iqmp",
153 .item = &BIGNUM_it,
154 },
155};
156
157const ASN1_ITEM RSAPrivateKey_it = {
158 .itype = ASN1_ITYPE_SEQUENCE,
159 .utype = V_ASN1_SEQUENCE,
160 .templates = RSAPrivateKey_seq_tt,
161 .tcount = sizeof(RSAPrivateKey_seq_tt) / sizeof(ASN1_TEMPLATE),
162 .funcs = &RSAPrivateKey_aux,
163 .size = sizeof(RSA),
164 .sname = "RSA",
165};
166
167
168static const ASN1_AUX RSAPublicKey_aux = {
169 .app_data = NULL,
170 .flags = 0,
171 .ref_offset = 0,
172 .ref_lock = 0,
173 .asn1_cb = rsa_cb,
174 .enc_offset = 0,
175};
176static const ASN1_TEMPLATE RSAPublicKey_seq_tt[] = {
177 {
178 .flags = 0,
179 .tag = 0,
180 .offset = offsetof(RSA, n),
181 .field_name = "n",
182 .item = &BIGNUM_it,
183 },
184 {
185 .flags = 0,
186 .tag = 0,
187 .offset = offsetof(RSA, e),
188 .field_name = "e",
189 .item = &BIGNUM_it,
190 },
191};
192
193const ASN1_ITEM RSAPublicKey_it = {
194 .itype = ASN1_ITYPE_SEQUENCE,
195 .utype = V_ASN1_SEQUENCE,
196 .templates = RSAPublicKey_seq_tt,
197 .tcount = sizeof(RSAPublicKey_seq_tt) / sizeof(ASN1_TEMPLATE),
198 .funcs = &RSAPublicKey_aux,
199 .size = sizeof(RSA),
200 .sname = "RSA",
201};
202
203static const ASN1_TEMPLATE RSA_PSS_PARAMS_seq_tt[] = {
204 {
205 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
206 .tag = 0,
207 .offset = offsetof(RSA_PSS_PARAMS, hashAlgorithm),
208 .field_name = "hashAlgorithm",
209 .item = &X509_ALGOR_it,
210 },
211 {
212 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
213 .tag = 1,
214 .offset = offsetof(RSA_PSS_PARAMS, maskGenAlgorithm),
215 .field_name = "maskGenAlgorithm",
216 .item = &X509_ALGOR_it,
217 },
218 {
219 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
220 .tag = 2,
221 .offset = offsetof(RSA_PSS_PARAMS, saltLength),
222 .field_name = "saltLength",
223 .item = &ASN1_INTEGER_it,
224 },
225 {
226 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
227 .tag = 3,
228 .offset = offsetof(RSA_PSS_PARAMS, trailerField),
229 .field_name = "trailerField",
230 .item = &ASN1_INTEGER_it,
231 },
232};
233
234const ASN1_ITEM RSA_PSS_PARAMS_it = {
235 .itype = ASN1_ITYPE_SEQUENCE,
236 .utype = V_ASN1_SEQUENCE,
237 .templates = RSA_PSS_PARAMS_seq_tt,
238 .tcount = sizeof(RSA_PSS_PARAMS_seq_tt) / sizeof(ASN1_TEMPLATE),
239 .funcs = NULL,
240 .size = sizeof(RSA_PSS_PARAMS),
241 .sname = "RSA_PSS_PARAMS",
242};
107 243
108 244
109RSA_PSS_PARAMS * 245RSA_PSS_PARAMS *