summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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 *