summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2015-07-25 14:36:39 +0000
committerjsing <>2015-07-25 14:36:39 +0000
commit803d578ff8ba6027ffddbc4f6037a9bd5e2d0590 (patch)
tree741b7f9c48e0cb282f7feb6cd89b5bce494a3960 /src/lib
parent82aa6bf66c75dde9769f9c2eea0a9e7a9502d70c (diff)
downloadopenbsd-803d578ff8ba6027ffddbc4f6037a9bd5e2d0590.tar.gz
openbsd-803d578ff8ba6027ffddbc4f6037a9bd5e2d0590.tar.bz2
openbsd-803d578ff8ba6027ffddbc4f6037a9bd5e2d0590.zip
Expand ASN.1 template macros - the generated assembly only differs by
changes to line numbers.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/ec/ec_asn1.c406
-rw-r--r--src/lib/libssl/src/crypto/ec/ec_asn1.c406
2 files changed, 702 insertions, 110 deletions
diff --git a/src/lib/libcrypto/ec/ec_asn1.c b/src/lib/libcrypto/ec/ec_asn1.c
index e1d3f6bad7..0ee949134e 100644
--- a/src/lib/libcrypto/ec/ec_asn1.c
+++ b/src/lib/libcrypto/ec/ec_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ec_asn1.c,v 1.14 2015/03/20 03:02:51 doug Exp $ */ 1/* $OpenBSD: ec_asn1.c,v 1.15 2015/07/25 14:36:39 jsing Exp $ */
2/* 2/*
3 * Written by Nils Larsch for the OpenSSL project. 3 * Written by Nils Larsch for the OpenSSL project.
4 */ 4 */
@@ -198,11 +198,39 @@ typedef struct ec_privatekey_st {
198} EC_PRIVATEKEY; 198} EC_PRIVATEKEY;
199 199
200/* the OpenSSL ASN.1 definitions */ 200/* the OpenSSL ASN.1 definitions */
201ASN1_SEQUENCE(X9_62_PENTANOMIAL) = { 201static const ASN1_TEMPLATE X9_62_PENTANOMIAL_seq_tt[] = {
202 ASN1_SIMPLE(X9_62_PENTANOMIAL, k1, LONG), 202 {
203 ASN1_SIMPLE(X9_62_PENTANOMIAL, k2, LONG), 203 .flags = 0,
204 ASN1_SIMPLE(X9_62_PENTANOMIAL, k3, LONG) 204 .tag = 0,
205} ASN1_SEQUENCE_END(X9_62_PENTANOMIAL) 205 .offset = offsetof(X9_62_PENTANOMIAL, k1),
206 .field_name = "k1",
207 .item = &LONG_it,
208 },
209 {
210 .flags = 0,
211 .tag = 0,
212 .offset = offsetof(X9_62_PENTANOMIAL, k2),
213 .field_name = "k2",
214 .item = &LONG_it,
215 },
216 {
217 .flags = 0,
218 .tag = 0,
219 .offset = offsetof(X9_62_PENTANOMIAL, k3),
220 .field_name = "k3",
221 .item = &LONG_it,
222 },
223};
224
225const ASN1_ITEM X9_62_PENTANOMIAL_it = {
226 .itype = ASN1_ITYPE_SEQUENCE,
227 .utype = V_ASN1_SEQUENCE,
228 .templates = X9_62_PENTANOMIAL_seq_tt,
229 .tcount = sizeof(X9_62_PENTANOMIAL_seq_tt) / sizeof(ASN1_TEMPLATE),
230 .funcs = NULL,
231 .size = sizeof(X9_62_PENTANOMIAL),
232 .sname = "X9_62_PENTANOMIAL",
233};
206 234
207DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_PENTANOMIAL) 235DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_PENTANOMIAL)
208 236
@@ -218,19 +246,93 @@ X9_62_PENTANOMIAL_free(X9_62_PENTANOMIAL *a)
218 ASN1_item_free((ASN1_VALUE *)a, &X9_62_PENTANOMIAL_it); 246 ASN1_item_free((ASN1_VALUE *)a, &X9_62_PENTANOMIAL_it);
219} 247}
220 248
221ASN1_ADB_TEMPLATE(char_two_def) = ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.other, ASN1_ANY); 249static const ASN1_TEMPLATE char_two_def_tt = {
222 250 .flags = 0,
223ASN1_ADB(X9_62_CHARACTERISTIC_TWO) = { 251 .tag = 0,
224 ADB_ENTRY(NID_X9_62_onBasis, ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.onBasis, ASN1_NULL)), 252 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, p.other),
225 ADB_ENTRY(NID_X9_62_tpBasis, ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.tpBasis, ASN1_INTEGER)), 253 .field_name = "p.other",
226 ADB_ENTRY(NID_X9_62_ppBasis, ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.ppBasis, X9_62_PENTANOMIAL)) 254 .item = &ASN1_ANY_it,
227} ASN1_ADB_END(X9_62_CHARACTERISTIC_TWO, 0, type, 0, &char_two_def_tt, NULL); 255};
228 256
229ASN1_SEQUENCE(X9_62_CHARACTERISTIC_TWO) = { 257static const ASN1_ADB_TABLE X9_62_CHARACTERISTIC_TWO_adbtbl[] = {
230 ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, m, LONG), 258 {
231 ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, type, ASN1_OBJECT), 259 .value = NID_X9_62_onBasis,
232 ASN1_ADB_OBJECT(X9_62_CHARACTERISTIC_TWO) 260 .tt = {
233} ASN1_SEQUENCE_END(X9_62_CHARACTERISTIC_TWO) 261 .flags = 0,
262 .tag = 0,
263 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, p.onBasis),
264 .field_name = "p.onBasis",
265 .item = &ASN1_NULL_it,
266 },
267
268 },
269 {
270 .value = NID_X9_62_tpBasis,
271 .tt = {
272 .flags = 0,
273 .tag = 0,
274 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, p.tpBasis),
275 .field_name = "p.tpBasis",
276 .item = &ASN1_INTEGER_it,
277 },
278
279 },
280 {
281 .value = NID_X9_62_ppBasis,
282 .tt = {
283 .flags = 0,
284 .tag = 0,
285 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, p.ppBasis),
286 .field_name = "p.ppBasis",
287 .item = &X9_62_PENTANOMIAL_it,
288 },
289
290 },
291};
292
293static const ASN1_ADB X9_62_CHARACTERISTIC_TWO_adb = {
294 .flags = 0,
295 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, type),
296 .app_items = 0,
297 .tbl = X9_62_CHARACTERISTIC_TWO_adbtbl,
298 .tblcount = sizeof(X9_62_CHARACTERISTIC_TWO_adbtbl) / sizeof(ASN1_ADB_TABLE),
299 .default_tt = &char_two_def_tt,
300 .null_tt = NULL,
301};
302
303static const ASN1_TEMPLATE X9_62_CHARACTERISTIC_TWO_seq_tt[] = {
304 {
305 .flags = 0,
306 .tag = 0,
307 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, m),
308 .field_name = "m",
309 .item = &LONG_it,
310 },
311 {
312 .flags = 0,
313 .tag = 0,
314 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, type),
315 .field_name = "type",
316 .item = &ASN1_OBJECT_it,
317 },
318 {
319 .flags = ASN1_TFLG_ADB_OID,
320 .tag = -1,
321 .offset = 0,
322 .field_name = "X9_62_CHARACTERISTIC_TWO",
323 .item = (const ASN1_ITEM *)&X9_62_CHARACTERISTIC_TWO_adb,
324 },
325};
326
327const ASN1_ITEM X9_62_CHARACTERISTIC_TWO_it = {
328 .itype = ASN1_ITYPE_SEQUENCE,
329 .utype = V_ASN1_SEQUENCE,
330 .templates = X9_62_CHARACTERISTIC_TWO_seq_tt,
331 .tcount = sizeof(X9_62_CHARACTERISTIC_TWO_seq_tt) / sizeof(ASN1_TEMPLATE),
332 .funcs = NULL,
333 .size = sizeof(X9_62_CHARACTERISTIC_TWO),
334 .sname = "X9_62_CHARACTERISTIC_TWO",
335};
234DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_CHARACTERISTIC_TWO) 336DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_CHARACTERISTIC_TWO)
235 337
236X9_62_CHARACTERISTIC_TWO * 338X9_62_CHARACTERISTIC_TWO *
@@ -244,32 +346,164 @@ X9_62_CHARACTERISTIC_TWO_free(X9_62_CHARACTERISTIC_TWO *a)
244{ 346{
245 ASN1_item_free((ASN1_VALUE *)a, &X9_62_CHARACTERISTIC_TWO_it); 347 ASN1_item_free((ASN1_VALUE *)a, &X9_62_CHARACTERISTIC_TWO_it);
246} 348}
247ASN1_ADB_TEMPLATE(fieldID_def) = ASN1_SIMPLE(X9_62_FIELDID, p.other, ASN1_ANY); 349static const ASN1_TEMPLATE fieldID_def_tt = {
248 350 .flags = 0,
249ASN1_ADB(X9_62_FIELDID) = { 351 .tag = 0,
250 ADB_ENTRY(NID_X9_62_prime_field, ASN1_SIMPLE(X9_62_FIELDID, p.prime, ASN1_INTEGER)), 352 .offset = offsetof(X9_62_FIELDID, p.other),
251 ADB_ENTRY(NID_X9_62_characteristic_two_field, ASN1_SIMPLE(X9_62_FIELDID, p.char_two, X9_62_CHARACTERISTIC_TWO)) 353 .field_name = "p.other",
252} ASN1_ADB_END(X9_62_FIELDID, 0, fieldType, 0, &fieldID_def_tt, NULL); 354 .item = &ASN1_ANY_it,
253 355};
254ASN1_SEQUENCE(X9_62_FIELDID) = { 356
255 ASN1_SIMPLE(X9_62_FIELDID, fieldType, ASN1_OBJECT), 357static const ASN1_ADB_TABLE X9_62_FIELDID_adbtbl[] = {
256 ASN1_ADB_OBJECT(X9_62_FIELDID) 358 {
257} ASN1_SEQUENCE_END(X9_62_FIELDID) 359 .value = NID_X9_62_prime_field,
258 360 .tt = {
259ASN1_SEQUENCE(X9_62_CURVE) = { 361 .flags = 0,
260 ASN1_SIMPLE(X9_62_CURVE, a, ASN1_OCTET_STRING), 362 .tag = 0,
261 ASN1_SIMPLE(X9_62_CURVE, b, ASN1_OCTET_STRING), 363 .offset = offsetof(X9_62_FIELDID, p.prime),
262 ASN1_OPT(X9_62_CURVE, seed, ASN1_BIT_STRING) 364 .field_name = "p.prime",
263} ASN1_SEQUENCE_END(X9_62_CURVE) 365 .item = &ASN1_INTEGER_it,
264 366 },
265ASN1_SEQUENCE(ECPARAMETERS) = { 367
266 ASN1_SIMPLE(ECPARAMETERS, version, LONG), 368 },
267 ASN1_SIMPLE(ECPARAMETERS, fieldID, X9_62_FIELDID), 369 {
268 ASN1_SIMPLE(ECPARAMETERS, curve, X9_62_CURVE), 370 .value = NID_X9_62_characteristic_two_field,
269 ASN1_SIMPLE(ECPARAMETERS, base, ASN1_OCTET_STRING), 371 .tt = {
270 ASN1_SIMPLE(ECPARAMETERS, order, ASN1_INTEGER), 372 .flags = 0,
271 ASN1_OPT(ECPARAMETERS, cofactor, ASN1_INTEGER) 373 .tag = 0,
272} ASN1_SEQUENCE_END(ECPARAMETERS) 374 .offset = offsetof(X9_62_FIELDID, p.char_two),
375 .field_name = "p.char_two",
376 .item = &X9_62_CHARACTERISTIC_TWO_it,
377 },
378
379 },
380};
381
382static const ASN1_ADB X9_62_FIELDID_adb = {
383 .flags = 0,
384 .offset = offsetof(X9_62_FIELDID, fieldType),
385 .app_items = 0,
386 .tbl = X9_62_FIELDID_adbtbl,
387 .tblcount = sizeof(X9_62_FIELDID_adbtbl) / sizeof(ASN1_ADB_TABLE),
388 .default_tt = &fieldID_def_tt,
389 .null_tt = NULL,
390};
391
392static const ASN1_TEMPLATE X9_62_FIELDID_seq_tt[] = {
393 {
394 .flags = 0,
395 .tag = 0,
396 .offset = offsetof(X9_62_FIELDID, fieldType),
397 .field_name = "fieldType",
398 .item = &ASN1_OBJECT_it,
399 },
400 {
401 .flags = ASN1_TFLG_ADB_OID,
402 .tag = -1,
403 .offset = 0,
404 .field_name = "X9_62_FIELDID",
405 .item = (const ASN1_ITEM *)&X9_62_FIELDID_adb,
406 },
407};
408
409const ASN1_ITEM X9_62_FIELDID_it = {
410 .itype = ASN1_ITYPE_SEQUENCE,
411 .utype = V_ASN1_SEQUENCE,
412 .templates = X9_62_FIELDID_seq_tt,
413 .tcount = sizeof(X9_62_FIELDID_seq_tt) / sizeof(ASN1_TEMPLATE),
414 .funcs = NULL,
415 .size = sizeof(X9_62_FIELDID),
416 .sname = "X9_62_FIELDID",
417};
418
419static const ASN1_TEMPLATE X9_62_CURVE_seq_tt[] = {
420 {
421 .flags = 0,
422 .tag = 0,
423 .offset = offsetof(X9_62_CURVE, a),
424 .field_name = "a",
425 .item = &ASN1_OCTET_STRING_it,
426 },
427 {
428 .flags = 0,
429 .tag = 0,
430 .offset = offsetof(X9_62_CURVE, b),
431 .field_name = "b",
432 .item = &ASN1_OCTET_STRING_it,
433 },
434 {
435 .flags = ASN1_TFLG_OPTIONAL,
436 .tag = 0,
437 .offset = offsetof(X9_62_CURVE, seed),
438 .field_name = "seed",
439 .item = &ASN1_BIT_STRING_it,
440 },
441};
442
443const ASN1_ITEM X9_62_CURVE_it = {
444 .itype = ASN1_ITYPE_SEQUENCE,
445 .utype = V_ASN1_SEQUENCE,
446 .templates = X9_62_CURVE_seq_tt,
447 .tcount = sizeof(X9_62_CURVE_seq_tt) / sizeof(ASN1_TEMPLATE),
448 .funcs = NULL,
449 .size = sizeof(X9_62_CURVE),
450 .sname = "X9_62_CURVE",
451};
452
453static const ASN1_TEMPLATE ECPARAMETERS_seq_tt[] = {
454 {
455 .flags = 0,
456 .tag = 0,
457 .offset = offsetof(ECPARAMETERS, version),
458 .field_name = "version",
459 .item = &LONG_it,
460 },
461 {
462 .flags = 0,
463 .tag = 0,
464 .offset = offsetof(ECPARAMETERS, fieldID),
465 .field_name = "fieldID",
466 .item = &X9_62_FIELDID_it,
467 },
468 {
469 .flags = 0,
470 .tag = 0,
471 .offset = offsetof(ECPARAMETERS, curve),
472 .field_name = "curve",
473 .item = &X9_62_CURVE_it,
474 },
475 {
476 .flags = 0,
477 .tag = 0,
478 .offset = offsetof(ECPARAMETERS, base),
479 .field_name = "base",
480 .item = &ASN1_OCTET_STRING_it,
481 },
482 {
483 .flags = 0,
484 .tag = 0,
485 .offset = offsetof(ECPARAMETERS, order),
486 .field_name = "order",
487 .item = &ASN1_INTEGER_it,
488 },
489 {
490 .flags = ASN1_TFLG_OPTIONAL,
491 .tag = 0,
492 .offset = offsetof(ECPARAMETERS, cofactor),
493 .field_name = "cofactor",
494 .item = &ASN1_INTEGER_it,
495 },
496};
497
498const ASN1_ITEM ECPARAMETERS_it = {
499 .itype = ASN1_ITYPE_SEQUENCE,
500 .utype = V_ASN1_SEQUENCE,
501 .templates = ECPARAMETERS_seq_tt,
502 .tcount = sizeof(ECPARAMETERS_seq_tt) / sizeof(ASN1_TEMPLATE),
503 .funcs = NULL,
504 .size = sizeof(ECPARAMETERS),
505 .sname = "ECPARAMETERS",
506};
273DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) 507DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS)
274 508
275ECPARAMETERS * 509ECPARAMETERS *
@@ -284,11 +518,39 @@ ECPARAMETERS_free(ECPARAMETERS *a)
284 ASN1_item_free((ASN1_VALUE *)a, &ECPARAMETERS_it); 518 ASN1_item_free((ASN1_VALUE *)a, &ECPARAMETERS_it);
285} 519}
286 520
287ASN1_CHOICE(ECPKPARAMETERS) = { 521static const ASN1_TEMPLATE ECPKPARAMETERS_ch_tt[] = {
288 ASN1_SIMPLE(ECPKPARAMETERS, value.named_curve, ASN1_OBJECT), 522 {
289 ASN1_SIMPLE(ECPKPARAMETERS, value.parameters, ECPARAMETERS), 523 .flags = 0,
290 ASN1_SIMPLE(ECPKPARAMETERS, value.implicitlyCA, ASN1_NULL) 524 .tag = 0,
291} ASN1_CHOICE_END(ECPKPARAMETERS) 525 .offset = offsetof(ECPKPARAMETERS, value.named_curve),
526 .field_name = "value.named_curve",
527 .item = &ASN1_OBJECT_it,
528 },
529 {
530 .flags = 0,
531 .tag = 0,
532 .offset = offsetof(ECPKPARAMETERS, value.parameters),
533 .field_name = "value.parameters",
534 .item = &ECPARAMETERS_it,
535 },
536 {
537 .flags = 0,
538 .tag = 0,
539 .offset = offsetof(ECPKPARAMETERS, value.implicitlyCA),
540 .field_name = "value.implicitlyCA",
541 .item = &ASN1_NULL_it,
542 },
543};
544
545const ASN1_ITEM ECPKPARAMETERS_it = {
546 .itype = ASN1_ITYPE_CHOICE,
547 .utype = offsetof(ECPKPARAMETERS, type),
548 .templates = ECPKPARAMETERS_ch_tt,
549 .tcount = sizeof(ECPKPARAMETERS_ch_tt) / sizeof(ASN1_TEMPLATE),
550 .funcs = NULL,
551 .size = sizeof(ECPKPARAMETERS),
552 .sname = "ECPKPARAMETERS",
553};
292DECLARE_ASN1_FUNCTIONS_const(ECPKPARAMETERS) 554DECLARE_ASN1_FUNCTIONS_const(ECPKPARAMETERS)
293DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECPKPARAMETERS, ECPKPARAMETERS) 555DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECPKPARAMETERS, ECPKPARAMETERS)
294 556
@@ -317,12 +579,46 @@ ECPKPARAMETERS_free(ECPKPARAMETERS *a)
317 ASN1_item_free((ASN1_VALUE *)a, &ECPKPARAMETERS_it); 579 ASN1_item_free((ASN1_VALUE *)a, &ECPKPARAMETERS_it);
318} 580}
319 581
320ASN1_SEQUENCE(EC_PRIVATEKEY) = { 582static const ASN1_TEMPLATE EC_PRIVATEKEY_seq_tt[] = {
321 ASN1_SIMPLE(EC_PRIVATEKEY, version, LONG), 583 {
322 ASN1_SIMPLE(EC_PRIVATEKEY, privateKey, ASN1_OCTET_STRING), 584 .flags = 0,
323 ASN1_EXP_OPT(EC_PRIVATEKEY, parameters, ECPKPARAMETERS, 0), 585 .tag = 0,
324 ASN1_EXP_OPT(EC_PRIVATEKEY, publicKey, ASN1_BIT_STRING, 1) 586 .offset = offsetof(EC_PRIVATEKEY, version),
325} ASN1_SEQUENCE_END(EC_PRIVATEKEY) 587 .field_name = "version",
588 .item = &LONG_it,
589 },
590 {
591 .flags = 0,
592 .tag = 0,
593 .offset = offsetof(EC_PRIVATEKEY, privateKey),
594 .field_name = "privateKey",
595 .item = &ASN1_OCTET_STRING_it,
596 },
597 {
598 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
599 .tag = 0,
600 .offset = offsetof(EC_PRIVATEKEY, parameters),
601 .field_name = "parameters",
602 .item = &ECPKPARAMETERS_it,
603 },
604 {
605 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
606 .tag = 1,
607 .offset = offsetof(EC_PRIVATEKEY, publicKey),
608 .field_name = "publicKey",
609 .item = &ASN1_BIT_STRING_it,
610 },
611};
612
613const ASN1_ITEM EC_PRIVATEKEY_it = {
614 .itype = ASN1_ITYPE_SEQUENCE,
615 .utype = V_ASN1_SEQUENCE,
616 .templates = EC_PRIVATEKEY_seq_tt,
617 .tcount = sizeof(EC_PRIVATEKEY_seq_tt) / sizeof(ASN1_TEMPLATE),
618 .funcs = NULL,
619 .size = sizeof(EC_PRIVATEKEY),
620 .sname = "EC_PRIVATEKEY",
621};
326DECLARE_ASN1_FUNCTIONS_const(EC_PRIVATEKEY) 622DECLARE_ASN1_FUNCTIONS_const(EC_PRIVATEKEY)
327DECLARE_ASN1_ENCODE_FUNCTIONS_const(EC_PRIVATEKEY, EC_PRIVATEKEY) 623DECLARE_ASN1_ENCODE_FUNCTIONS_const(EC_PRIVATEKEY, EC_PRIVATEKEY)
328 624
diff --git a/src/lib/libssl/src/crypto/ec/ec_asn1.c b/src/lib/libssl/src/crypto/ec/ec_asn1.c
index e1d3f6bad7..0ee949134e 100644
--- a/src/lib/libssl/src/crypto/ec/ec_asn1.c
+++ b/src/lib/libssl/src/crypto/ec/ec_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ec_asn1.c,v 1.14 2015/03/20 03:02:51 doug Exp $ */ 1/* $OpenBSD: ec_asn1.c,v 1.15 2015/07/25 14:36:39 jsing Exp $ */
2/* 2/*
3 * Written by Nils Larsch for the OpenSSL project. 3 * Written by Nils Larsch for the OpenSSL project.
4 */ 4 */
@@ -198,11 +198,39 @@ typedef struct ec_privatekey_st {
198} EC_PRIVATEKEY; 198} EC_PRIVATEKEY;
199 199
200/* the OpenSSL ASN.1 definitions */ 200/* the OpenSSL ASN.1 definitions */
201ASN1_SEQUENCE(X9_62_PENTANOMIAL) = { 201static const ASN1_TEMPLATE X9_62_PENTANOMIAL_seq_tt[] = {
202 ASN1_SIMPLE(X9_62_PENTANOMIAL, k1, LONG), 202 {
203 ASN1_SIMPLE(X9_62_PENTANOMIAL, k2, LONG), 203 .flags = 0,
204 ASN1_SIMPLE(X9_62_PENTANOMIAL, k3, LONG) 204 .tag = 0,
205} ASN1_SEQUENCE_END(X9_62_PENTANOMIAL) 205 .offset = offsetof(X9_62_PENTANOMIAL, k1),
206 .field_name = "k1",
207 .item = &LONG_it,
208 },
209 {
210 .flags = 0,
211 .tag = 0,
212 .offset = offsetof(X9_62_PENTANOMIAL, k2),
213 .field_name = "k2",
214 .item = &LONG_it,
215 },
216 {
217 .flags = 0,
218 .tag = 0,
219 .offset = offsetof(X9_62_PENTANOMIAL, k3),
220 .field_name = "k3",
221 .item = &LONG_it,
222 },
223};
224
225const ASN1_ITEM X9_62_PENTANOMIAL_it = {
226 .itype = ASN1_ITYPE_SEQUENCE,
227 .utype = V_ASN1_SEQUENCE,
228 .templates = X9_62_PENTANOMIAL_seq_tt,
229 .tcount = sizeof(X9_62_PENTANOMIAL_seq_tt) / sizeof(ASN1_TEMPLATE),
230 .funcs = NULL,
231 .size = sizeof(X9_62_PENTANOMIAL),
232 .sname = "X9_62_PENTANOMIAL",
233};
206 234
207DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_PENTANOMIAL) 235DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_PENTANOMIAL)
208 236
@@ -218,19 +246,93 @@ X9_62_PENTANOMIAL_free(X9_62_PENTANOMIAL *a)
218 ASN1_item_free((ASN1_VALUE *)a, &X9_62_PENTANOMIAL_it); 246 ASN1_item_free((ASN1_VALUE *)a, &X9_62_PENTANOMIAL_it);
219} 247}
220 248
221ASN1_ADB_TEMPLATE(char_two_def) = ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.other, ASN1_ANY); 249static const ASN1_TEMPLATE char_two_def_tt = {
222 250 .flags = 0,
223ASN1_ADB(X9_62_CHARACTERISTIC_TWO) = { 251 .tag = 0,
224 ADB_ENTRY(NID_X9_62_onBasis, ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.onBasis, ASN1_NULL)), 252 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, p.other),
225 ADB_ENTRY(NID_X9_62_tpBasis, ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.tpBasis, ASN1_INTEGER)), 253 .field_name = "p.other",
226 ADB_ENTRY(NID_X9_62_ppBasis, ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.ppBasis, X9_62_PENTANOMIAL)) 254 .item = &ASN1_ANY_it,
227} ASN1_ADB_END(X9_62_CHARACTERISTIC_TWO, 0, type, 0, &char_two_def_tt, NULL); 255};
228 256
229ASN1_SEQUENCE(X9_62_CHARACTERISTIC_TWO) = { 257static const ASN1_ADB_TABLE X9_62_CHARACTERISTIC_TWO_adbtbl[] = {
230 ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, m, LONG), 258 {
231 ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, type, ASN1_OBJECT), 259 .value = NID_X9_62_onBasis,
232 ASN1_ADB_OBJECT(X9_62_CHARACTERISTIC_TWO) 260 .tt = {
233} ASN1_SEQUENCE_END(X9_62_CHARACTERISTIC_TWO) 261 .flags = 0,
262 .tag = 0,
263 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, p.onBasis),
264 .field_name = "p.onBasis",
265 .item = &ASN1_NULL_it,
266 },
267
268 },
269 {
270 .value = NID_X9_62_tpBasis,
271 .tt = {
272 .flags = 0,
273 .tag = 0,
274 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, p.tpBasis),
275 .field_name = "p.tpBasis",
276 .item = &ASN1_INTEGER_it,
277 },
278
279 },
280 {
281 .value = NID_X9_62_ppBasis,
282 .tt = {
283 .flags = 0,
284 .tag = 0,
285 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, p.ppBasis),
286 .field_name = "p.ppBasis",
287 .item = &X9_62_PENTANOMIAL_it,
288 },
289
290 },
291};
292
293static const ASN1_ADB X9_62_CHARACTERISTIC_TWO_adb = {
294 .flags = 0,
295 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, type),
296 .app_items = 0,
297 .tbl = X9_62_CHARACTERISTIC_TWO_adbtbl,
298 .tblcount = sizeof(X9_62_CHARACTERISTIC_TWO_adbtbl) / sizeof(ASN1_ADB_TABLE),
299 .default_tt = &char_two_def_tt,
300 .null_tt = NULL,
301};
302
303static const ASN1_TEMPLATE X9_62_CHARACTERISTIC_TWO_seq_tt[] = {
304 {
305 .flags = 0,
306 .tag = 0,
307 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, m),
308 .field_name = "m",
309 .item = &LONG_it,
310 },
311 {
312 .flags = 0,
313 .tag = 0,
314 .offset = offsetof(X9_62_CHARACTERISTIC_TWO, type),
315 .field_name = "type",
316 .item = &ASN1_OBJECT_it,
317 },
318 {
319 .flags = ASN1_TFLG_ADB_OID,
320 .tag = -1,
321 .offset = 0,
322 .field_name = "X9_62_CHARACTERISTIC_TWO",
323 .item = (const ASN1_ITEM *)&X9_62_CHARACTERISTIC_TWO_adb,
324 },
325};
326
327const ASN1_ITEM X9_62_CHARACTERISTIC_TWO_it = {
328 .itype = ASN1_ITYPE_SEQUENCE,
329 .utype = V_ASN1_SEQUENCE,
330 .templates = X9_62_CHARACTERISTIC_TWO_seq_tt,
331 .tcount = sizeof(X9_62_CHARACTERISTIC_TWO_seq_tt) / sizeof(ASN1_TEMPLATE),
332 .funcs = NULL,
333 .size = sizeof(X9_62_CHARACTERISTIC_TWO),
334 .sname = "X9_62_CHARACTERISTIC_TWO",
335};
234DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_CHARACTERISTIC_TWO) 336DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_CHARACTERISTIC_TWO)
235 337
236X9_62_CHARACTERISTIC_TWO * 338X9_62_CHARACTERISTIC_TWO *
@@ -244,32 +346,164 @@ X9_62_CHARACTERISTIC_TWO_free(X9_62_CHARACTERISTIC_TWO *a)
244{ 346{
245 ASN1_item_free((ASN1_VALUE *)a, &X9_62_CHARACTERISTIC_TWO_it); 347 ASN1_item_free((ASN1_VALUE *)a, &X9_62_CHARACTERISTIC_TWO_it);
246} 348}
247ASN1_ADB_TEMPLATE(fieldID_def) = ASN1_SIMPLE(X9_62_FIELDID, p.other, ASN1_ANY); 349static const ASN1_TEMPLATE fieldID_def_tt = {
248 350 .flags = 0,
249ASN1_ADB(X9_62_FIELDID) = { 351 .tag = 0,
250 ADB_ENTRY(NID_X9_62_prime_field, ASN1_SIMPLE(X9_62_FIELDID, p.prime, ASN1_INTEGER)), 352 .offset = offsetof(X9_62_FIELDID, p.other),
251 ADB_ENTRY(NID_X9_62_characteristic_two_field, ASN1_SIMPLE(X9_62_FIELDID, p.char_two, X9_62_CHARACTERISTIC_TWO)) 353 .field_name = "p.other",
252} ASN1_ADB_END(X9_62_FIELDID, 0, fieldType, 0, &fieldID_def_tt, NULL); 354 .item = &ASN1_ANY_it,
253 355};
254ASN1_SEQUENCE(X9_62_FIELDID) = { 356
255 ASN1_SIMPLE(X9_62_FIELDID, fieldType, ASN1_OBJECT), 357static const ASN1_ADB_TABLE X9_62_FIELDID_adbtbl[] = {
256 ASN1_ADB_OBJECT(X9_62_FIELDID) 358 {
257} ASN1_SEQUENCE_END(X9_62_FIELDID) 359 .value = NID_X9_62_prime_field,
258 360 .tt = {
259ASN1_SEQUENCE(X9_62_CURVE) = { 361 .flags = 0,
260 ASN1_SIMPLE(X9_62_CURVE, a, ASN1_OCTET_STRING), 362 .tag = 0,
261 ASN1_SIMPLE(X9_62_CURVE, b, ASN1_OCTET_STRING), 363 .offset = offsetof(X9_62_FIELDID, p.prime),
262 ASN1_OPT(X9_62_CURVE, seed, ASN1_BIT_STRING) 364 .field_name = "p.prime",
263} ASN1_SEQUENCE_END(X9_62_CURVE) 365 .item = &ASN1_INTEGER_it,
264 366 },
265ASN1_SEQUENCE(ECPARAMETERS) = { 367
266 ASN1_SIMPLE(ECPARAMETERS, version, LONG), 368 },
267 ASN1_SIMPLE(ECPARAMETERS, fieldID, X9_62_FIELDID), 369 {
268 ASN1_SIMPLE(ECPARAMETERS, curve, X9_62_CURVE), 370 .value = NID_X9_62_characteristic_two_field,
269 ASN1_SIMPLE(ECPARAMETERS, base, ASN1_OCTET_STRING), 371 .tt = {
270 ASN1_SIMPLE(ECPARAMETERS, order, ASN1_INTEGER), 372 .flags = 0,
271 ASN1_OPT(ECPARAMETERS, cofactor, ASN1_INTEGER) 373 .tag = 0,
272} ASN1_SEQUENCE_END(ECPARAMETERS) 374 .offset = offsetof(X9_62_FIELDID, p.char_two),
375 .field_name = "p.char_two",
376 .item = &X9_62_CHARACTERISTIC_TWO_it,
377 },
378
379 },
380};
381
382static const ASN1_ADB X9_62_FIELDID_adb = {
383 .flags = 0,
384 .offset = offsetof(X9_62_FIELDID, fieldType),
385 .app_items = 0,
386 .tbl = X9_62_FIELDID_adbtbl,
387 .tblcount = sizeof(X9_62_FIELDID_adbtbl) / sizeof(ASN1_ADB_TABLE),
388 .default_tt = &fieldID_def_tt,
389 .null_tt = NULL,
390};
391
392static const ASN1_TEMPLATE X9_62_FIELDID_seq_tt[] = {
393 {
394 .flags = 0,
395 .tag = 0,
396 .offset = offsetof(X9_62_FIELDID, fieldType),
397 .field_name = "fieldType",
398 .item = &ASN1_OBJECT_it,
399 },
400 {
401 .flags = ASN1_TFLG_ADB_OID,
402 .tag = -1,
403 .offset = 0,
404 .field_name = "X9_62_FIELDID",
405 .item = (const ASN1_ITEM *)&X9_62_FIELDID_adb,
406 },
407};
408
409const ASN1_ITEM X9_62_FIELDID_it = {
410 .itype = ASN1_ITYPE_SEQUENCE,
411 .utype = V_ASN1_SEQUENCE,
412 .templates = X9_62_FIELDID_seq_tt,
413 .tcount = sizeof(X9_62_FIELDID_seq_tt) / sizeof(ASN1_TEMPLATE),
414 .funcs = NULL,
415 .size = sizeof(X9_62_FIELDID),
416 .sname = "X9_62_FIELDID",
417};
418
419static const ASN1_TEMPLATE X9_62_CURVE_seq_tt[] = {
420 {
421 .flags = 0,
422 .tag = 0,
423 .offset = offsetof(X9_62_CURVE, a),
424 .field_name = "a",
425 .item = &ASN1_OCTET_STRING_it,
426 },
427 {
428 .flags = 0,
429 .tag = 0,
430 .offset = offsetof(X9_62_CURVE, b),
431 .field_name = "b",
432 .item = &ASN1_OCTET_STRING_it,
433 },
434 {
435 .flags = ASN1_TFLG_OPTIONAL,
436 .tag = 0,
437 .offset = offsetof(X9_62_CURVE, seed),
438 .field_name = "seed",
439 .item = &ASN1_BIT_STRING_it,
440 },
441};
442
443const ASN1_ITEM X9_62_CURVE_it = {
444 .itype = ASN1_ITYPE_SEQUENCE,
445 .utype = V_ASN1_SEQUENCE,
446 .templates = X9_62_CURVE_seq_tt,
447 .tcount = sizeof(X9_62_CURVE_seq_tt) / sizeof(ASN1_TEMPLATE),
448 .funcs = NULL,
449 .size = sizeof(X9_62_CURVE),
450 .sname = "X9_62_CURVE",
451};
452
453static const ASN1_TEMPLATE ECPARAMETERS_seq_tt[] = {
454 {
455 .flags = 0,
456 .tag = 0,
457 .offset = offsetof(ECPARAMETERS, version),
458 .field_name = "version",
459 .item = &LONG_it,
460 },
461 {
462 .flags = 0,
463 .tag = 0,
464 .offset = offsetof(ECPARAMETERS, fieldID),
465 .field_name = "fieldID",
466 .item = &X9_62_FIELDID_it,
467 },
468 {
469 .flags = 0,
470 .tag = 0,
471 .offset = offsetof(ECPARAMETERS, curve),
472 .field_name = "curve",
473 .item = &X9_62_CURVE_it,
474 },
475 {
476 .flags = 0,
477 .tag = 0,
478 .offset = offsetof(ECPARAMETERS, base),
479 .field_name = "base",
480 .item = &ASN1_OCTET_STRING_it,
481 },
482 {
483 .flags = 0,
484 .tag = 0,
485 .offset = offsetof(ECPARAMETERS, order),
486 .field_name = "order",
487 .item = &ASN1_INTEGER_it,
488 },
489 {
490 .flags = ASN1_TFLG_OPTIONAL,
491 .tag = 0,
492 .offset = offsetof(ECPARAMETERS, cofactor),
493 .field_name = "cofactor",
494 .item = &ASN1_INTEGER_it,
495 },
496};
497
498const ASN1_ITEM ECPARAMETERS_it = {
499 .itype = ASN1_ITYPE_SEQUENCE,
500 .utype = V_ASN1_SEQUENCE,
501 .templates = ECPARAMETERS_seq_tt,
502 .tcount = sizeof(ECPARAMETERS_seq_tt) / sizeof(ASN1_TEMPLATE),
503 .funcs = NULL,
504 .size = sizeof(ECPARAMETERS),
505 .sname = "ECPARAMETERS",
506};
273DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) 507DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS)
274 508
275ECPARAMETERS * 509ECPARAMETERS *
@@ -284,11 +518,39 @@ ECPARAMETERS_free(ECPARAMETERS *a)
284 ASN1_item_free((ASN1_VALUE *)a, &ECPARAMETERS_it); 518 ASN1_item_free((ASN1_VALUE *)a, &ECPARAMETERS_it);
285} 519}
286 520
287ASN1_CHOICE(ECPKPARAMETERS) = { 521static const ASN1_TEMPLATE ECPKPARAMETERS_ch_tt[] = {
288 ASN1_SIMPLE(ECPKPARAMETERS, value.named_curve, ASN1_OBJECT), 522 {
289 ASN1_SIMPLE(ECPKPARAMETERS, value.parameters, ECPARAMETERS), 523 .flags = 0,
290 ASN1_SIMPLE(ECPKPARAMETERS, value.implicitlyCA, ASN1_NULL) 524 .tag = 0,
291} ASN1_CHOICE_END(ECPKPARAMETERS) 525 .offset = offsetof(ECPKPARAMETERS, value.named_curve),
526 .field_name = "value.named_curve",
527 .item = &ASN1_OBJECT_it,
528 },
529 {
530 .flags = 0,
531 .tag = 0,
532 .offset = offsetof(ECPKPARAMETERS, value.parameters),
533 .field_name = "value.parameters",
534 .item = &ECPARAMETERS_it,
535 },
536 {
537 .flags = 0,
538 .tag = 0,
539 .offset = offsetof(ECPKPARAMETERS, value.implicitlyCA),
540 .field_name = "value.implicitlyCA",
541 .item = &ASN1_NULL_it,
542 },
543};
544
545const ASN1_ITEM ECPKPARAMETERS_it = {
546 .itype = ASN1_ITYPE_CHOICE,
547 .utype = offsetof(ECPKPARAMETERS, type),
548 .templates = ECPKPARAMETERS_ch_tt,
549 .tcount = sizeof(ECPKPARAMETERS_ch_tt) / sizeof(ASN1_TEMPLATE),
550 .funcs = NULL,
551 .size = sizeof(ECPKPARAMETERS),
552 .sname = "ECPKPARAMETERS",
553};
292DECLARE_ASN1_FUNCTIONS_const(ECPKPARAMETERS) 554DECLARE_ASN1_FUNCTIONS_const(ECPKPARAMETERS)
293DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECPKPARAMETERS, ECPKPARAMETERS) 555DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECPKPARAMETERS, ECPKPARAMETERS)
294 556
@@ -317,12 +579,46 @@ ECPKPARAMETERS_free(ECPKPARAMETERS *a)
317 ASN1_item_free((ASN1_VALUE *)a, &ECPKPARAMETERS_it); 579 ASN1_item_free((ASN1_VALUE *)a, &ECPKPARAMETERS_it);
318} 580}
319 581
320ASN1_SEQUENCE(EC_PRIVATEKEY) = { 582static const ASN1_TEMPLATE EC_PRIVATEKEY_seq_tt[] = {
321 ASN1_SIMPLE(EC_PRIVATEKEY, version, LONG), 583 {
322 ASN1_SIMPLE(EC_PRIVATEKEY, privateKey, ASN1_OCTET_STRING), 584 .flags = 0,
323 ASN1_EXP_OPT(EC_PRIVATEKEY, parameters, ECPKPARAMETERS, 0), 585 .tag = 0,
324 ASN1_EXP_OPT(EC_PRIVATEKEY, publicKey, ASN1_BIT_STRING, 1) 586 .offset = offsetof(EC_PRIVATEKEY, version),
325} ASN1_SEQUENCE_END(EC_PRIVATEKEY) 587 .field_name = "version",
588 .item = &LONG_it,
589 },
590 {
591 .flags = 0,
592 .tag = 0,
593 .offset = offsetof(EC_PRIVATEKEY, privateKey),
594 .field_name = "privateKey",
595 .item = &ASN1_OCTET_STRING_it,
596 },
597 {
598 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
599 .tag = 0,
600 .offset = offsetof(EC_PRIVATEKEY, parameters),
601 .field_name = "parameters",
602 .item = &ECPKPARAMETERS_it,
603 },
604 {
605 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
606 .tag = 1,
607 .offset = offsetof(EC_PRIVATEKEY, publicKey),
608 .field_name = "publicKey",
609 .item = &ASN1_BIT_STRING_it,
610 },
611};
612
613const ASN1_ITEM EC_PRIVATEKEY_it = {
614 .itype = ASN1_ITYPE_SEQUENCE,
615 .utype = V_ASN1_SEQUENCE,
616 .templates = EC_PRIVATEKEY_seq_tt,
617 .tcount = sizeof(EC_PRIVATEKEY_seq_tt) / sizeof(ASN1_TEMPLATE),
618 .funcs = NULL,
619 .size = sizeof(EC_PRIVATEKEY),
620 .sname = "EC_PRIVATEKEY",
621};
326DECLARE_ASN1_FUNCTIONS_const(EC_PRIVATEKEY) 622DECLARE_ASN1_FUNCTIONS_const(EC_PRIVATEKEY)
327DECLARE_ASN1_ENCODE_FUNCTIONS_const(EC_PRIVATEKEY, EC_PRIVATEKEY) 623DECLARE_ASN1_ENCODE_FUNCTIONS_const(EC_PRIVATEKEY, EC_PRIVATEKEY)
328 624