diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/ec/ec_asn1.c | 406 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/ec/ec_asn1.c | 406 |
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 */ |
201 | ASN1_SEQUENCE(X9_62_PENTANOMIAL) = { | 201 | static 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 | |||
225 | const 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 | ||
207 | DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_PENTANOMIAL) | 235 | DECLARE_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 | ||
221 | ASN1_ADB_TEMPLATE(char_two_def) = ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.other, ASN1_ANY); | 249 | static const ASN1_TEMPLATE char_two_def_tt = { |
222 | 250 | .flags = 0, | |
223 | ASN1_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 | ||
229 | ASN1_SEQUENCE(X9_62_CHARACTERISTIC_TWO) = { | 257 | static 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 | |||
293 | static 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 | |||
303 | static 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 | |||
327 | const 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 | }; | ||
234 | DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_CHARACTERISTIC_TWO) | 336 | DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_CHARACTERISTIC_TWO) |
235 | 337 | ||
236 | X9_62_CHARACTERISTIC_TWO * | 338 | X9_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 | } |
247 | ASN1_ADB_TEMPLATE(fieldID_def) = ASN1_SIMPLE(X9_62_FIELDID, p.other, ASN1_ANY); | 349 | static const ASN1_TEMPLATE fieldID_def_tt = { |
248 | 350 | .flags = 0, | |
249 | ASN1_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 | }; | |
254 | ASN1_SEQUENCE(X9_62_FIELDID) = { | 356 | |
255 | ASN1_SIMPLE(X9_62_FIELDID, fieldType, ASN1_OBJECT), | 357 | static 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 = { | |
259 | ASN1_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 | }, | |
265 | ASN1_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 | |||
382 | static 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 | |||
392 | static 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 | |||
409 | const 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 | |||
419 | static 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 | |||
443 | const 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 | |||
453 | static 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 | |||
498 | const 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 | }; | ||
273 | DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) | 507 | DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) |
274 | 508 | ||
275 | ECPARAMETERS * | 509 | ECPARAMETERS * |
@@ -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 | ||
287 | ASN1_CHOICE(ECPKPARAMETERS) = { | 521 | static 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 | |||
545 | const 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 | }; | ||
292 | DECLARE_ASN1_FUNCTIONS_const(ECPKPARAMETERS) | 554 | DECLARE_ASN1_FUNCTIONS_const(ECPKPARAMETERS) |
293 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECPKPARAMETERS, ECPKPARAMETERS) | 555 | DECLARE_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 | ||
320 | ASN1_SEQUENCE(EC_PRIVATEKEY) = { | 582 | static 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 | |||
613 | const 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 | }; | ||
326 | DECLARE_ASN1_FUNCTIONS_const(EC_PRIVATEKEY) | 622 | DECLARE_ASN1_FUNCTIONS_const(EC_PRIVATEKEY) |
327 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(EC_PRIVATEKEY, EC_PRIVATEKEY) | 623 | DECLARE_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 */ |
201 | ASN1_SEQUENCE(X9_62_PENTANOMIAL) = { | 201 | static 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 | |||
225 | const 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 | ||
207 | DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_PENTANOMIAL) | 235 | DECLARE_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 | ||
221 | ASN1_ADB_TEMPLATE(char_two_def) = ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, p.other, ASN1_ANY); | 249 | static const ASN1_TEMPLATE char_two_def_tt = { |
222 | 250 | .flags = 0, | |
223 | ASN1_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 | ||
229 | ASN1_SEQUENCE(X9_62_CHARACTERISTIC_TWO) = { | 257 | static 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 | |||
293 | static 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 | |||
303 | static 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 | |||
327 | const 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 | }; | ||
234 | DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_CHARACTERISTIC_TWO) | 336 | DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_CHARACTERISTIC_TWO) |
235 | 337 | ||
236 | X9_62_CHARACTERISTIC_TWO * | 338 | X9_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 | } |
247 | ASN1_ADB_TEMPLATE(fieldID_def) = ASN1_SIMPLE(X9_62_FIELDID, p.other, ASN1_ANY); | 349 | static const ASN1_TEMPLATE fieldID_def_tt = { |
248 | 350 | .flags = 0, | |
249 | ASN1_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 | }; | |
254 | ASN1_SEQUENCE(X9_62_FIELDID) = { | 356 | |
255 | ASN1_SIMPLE(X9_62_FIELDID, fieldType, ASN1_OBJECT), | 357 | static 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 = { | |
259 | ASN1_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 | }, | |
265 | ASN1_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 | |||
382 | static 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 | |||
392 | static 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 | |||
409 | const 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 | |||
419 | static 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 | |||
443 | const 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 | |||
453 | static 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 | |||
498 | const 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 | }; | ||
273 | DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) | 507 | DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) |
274 | 508 | ||
275 | ECPARAMETERS * | 509 | ECPARAMETERS * |
@@ -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 | ||
287 | ASN1_CHOICE(ECPKPARAMETERS) = { | 521 | static 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 | |||
545 | const 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 | }; | ||
292 | DECLARE_ASN1_FUNCTIONS_const(ECPKPARAMETERS) | 554 | DECLARE_ASN1_FUNCTIONS_const(ECPKPARAMETERS) |
293 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECPKPARAMETERS, ECPKPARAMETERS) | 555 | DECLARE_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 | ||
320 | ASN1_SEQUENCE(EC_PRIVATEKEY) = { | 582 | static 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 | |||
613 | const 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 | }; | ||
326 | DECLARE_ASN1_FUNCTIONS_const(EC_PRIVATEKEY) | 622 | DECLARE_ASN1_FUNCTIONS_const(EC_PRIVATEKEY) |
327 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(EC_PRIVATEKEY, EC_PRIVATEKEY) | 623 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(EC_PRIVATEKEY, EC_PRIVATEKEY) |
328 | 624 | ||