summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dsa
diff options
context:
space:
mode:
authorjsing <>2015-02-14 15:06:55 +0000
committerjsing <>2015-02-14 15:06:55 +0000
commit5e65bc8b3214d70ba366a05d9640e405be041e6e (patch)
tree93d9f5d18362f93abc7e5fc8236fd6b1b970e861 /src/lib/libcrypto/dsa
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 'src/lib/libcrypto/dsa')
-rw-r--r--src/lib/libcrypto/dsa/dsa_asn1.c242
1 files changed, 213 insertions, 29 deletions
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 *