diff options
Diffstat (limited to '')
| -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 | ||
