diff options
Diffstat (limited to 'src/usr.bin/openssl/ecparam.c')
| -rw-r--r-- | src/usr.bin/openssl/ecparam.c | 152 |
1 files changed, 2 insertions, 150 deletions
diff --git a/src/usr.bin/openssl/ecparam.c b/src/usr.bin/openssl/ecparam.c index 2d2755acfc..285f5d563e 100644 --- a/src/usr.bin/openssl/ecparam.c +++ b/src/usr.bin/openssl/ecparam.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ecparam.c,v 1.24 2025/01/19 07:41:52 tb Exp $ */ | 1 | /* $OpenBSD: ecparam.c,v 1.25 2025/01/19 10:24:17 tb Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Written by Nils Larsch for the OpenSSL project. | 3 | * Written by Nils Larsch for the OpenSSL project. |
| 4 | */ | 4 | */ |
| @@ -87,11 +87,7 @@ | |||
| 87 | #include <openssl/pem.h> | 87 | #include <openssl/pem.h> |
| 88 | #include <openssl/x509.h> | 88 | #include <openssl/x509.h> |
| 89 | 89 | ||
| 90 | static int ecparam_print_var(BIO *, BIGNUM *, const char *, int, | ||
| 91 | unsigned char *); | ||
| 92 | |||
| 93 | static struct { | 90 | static struct { |
| 94 | int C; | ||
| 95 | int asn1_flag; | 91 | int asn1_flag; |
| 96 | int check; | 92 | int check; |
| 97 | char *curve_name; | 93 | char *curve_name; |
| @@ -141,12 +137,6 @@ ecparam_opt_enctype(char *arg) | |||
| 141 | 137 | ||
| 142 | static const struct option ecparam_options[] = { | 138 | static const struct option ecparam_options[] = { |
| 143 | { | 139 | { |
| 144 | .name = "C", | ||
| 145 | .desc = "Convert the EC parameters into C code", | ||
| 146 | .type = OPTION_FLAG, | ||
| 147 | .opt.flag = &cfg.C, | ||
| 148 | }, | ||
| 149 | { | ||
| 150 | .name = "check", | 140 | .name = "check", |
| 151 | .desc = "Validate the elliptic curve parameters", | 141 | .desc = "Validate the elliptic curve parameters", |
| 152 | .type = OPTION_FLAG, | 142 | .type = OPTION_FLAG, |
| @@ -241,7 +231,7 @@ static const struct option ecparam_options[] = { | |||
| 241 | static void | 231 | static void |
| 242 | ecparam_usage(void) | 232 | ecparam_usage(void) |
| 243 | { | 233 | { |
| 244 | fprintf(stderr, "usage: ecparam [-C] [-check] [-conv_form arg] " | 234 | fprintf(stderr, "usage: ecparam [-check] [-conv_form arg] " |
| 245 | " [-genkey]\n" | 235 | " [-genkey]\n" |
| 246 | " [-in file] [-inform DER | PEM] [-list_curves] [-name arg]\n" | 236 | " [-in file] [-inform DER | PEM] [-list_curves] [-name arg]\n" |
| 247 | " [-no_seed] [-noout] [-out file] [-outform DER | PEM]\n" | 237 | " [-no_seed] [-noout] [-out file] [-outform DER | PEM]\n" |
| @@ -252,10 +242,7 @@ ecparam_usage(void) | |||
| 252 | int | 242 | int |
| 253 | ecparam_main(int argc, char **argv) | 243 | ecparam_main(int argc, char **argv) |
| 254 | { | 244 | { |
| 255 | BIGNUM *ec_p = NULL, *ec_a = NULL, *ec_b = NULL, *ec_gen = NULL; | ||
| 256 | BIGNUM *ec_order = NULL, *ec_cofactor = NULL; | ||
| 257 | EC_GROUP *group = NULL; | 245 | EC_GROUP *group = NULL; |
| 258 | unsigned char *buffer = NULL; | ||
| 259 | BIO *in = NULL, *out = NULL; | 246 | BIO *in = NULL, *out = NULL; |
| 260 | int i, ret = 1; | 247 | int i, ret = 1; |
| 261 | 248 | ||
| @@ -403,109 +390,6 @@ ecparam_main(int argc, char **argv) | |||
| 403 | BIO_printf(bio_err, "ok\n"); | 390 | BIO_printf(bio_err, "ok\n"); |
| 404 | 391 | ||
| 405 | } | 392 | } |
| 406 | if (cfg.C) { | ||
| 407 | size_t buf_len = 0, tmp_len = 0; | ||
| 408 | const EC_POINT *point; | ||
| 409 | int len = 0; | ||
| 410 | |||
| 411 | if ((ec_p = BN_new()) == NULL || (ec_a = BN_new()) == NULL || | ||
| 412 | (ec_b = BN_new()) == NULL || (ec_gen = BN_new()) == NULL || | ||
| 413 | (ec_order = BN_new()) == NULL || | ||
| 414 | (ec_cofactor = BN_new()) == NULL) { | ||
| 415 | perror("malloc"); | ||
| 416 | goto end; | ||
| 417 | } | ||
| 418 | |||
| 419 | if (!EC_GROUP_get_curve(group, ec_p, ec_a, ec_b, NULL)) | ||
| 420 | goto end; | ||
| 421 | |||
| 422 | if ((point = EC_GROUP_get0_generator(group)) == NULL) | ||
| 423 | goto end; | ||
| 424 | if (!EC_POINT_point2bn(group, point, | ||
| 425 | EC_GROUP_get_point_conversion_form(group), ec_gen, | ||
| 426 | NULL)) | ||
| 427 | goto end; | ||
| 428 | if (!EC_GROUP_get_order(group, ec_order, NULL)) | ||
| 429 | goto end; | ||
| 430 | if (!EC_GROUP_get_cofactor(group, ec_cofactor, NULL)) | ||
| 431 | goto end; | ||
| 432 | |||
| 433 | len = BN_num_bits(ec_order); | ||
| 434 | |||
| 435 | if ((tmp_len = (size_t) BN_num_bytes(ec_p)) > buf_len) | ||
| 436 | buf_len = tmp_len; | ||
| 437 | if ((tmp_len = (size_t) BN_num_bytes(ec_a)) > buf_len) | ||
| 438 | buf_len = tmp_len; | ||
| 439 | if ((tmp_len = (size_t) BN_num_bytes(ec_b)) > buf_len) | ||
| 440 | buf_len = tmp_len; | ||
| 441 | if ((tmp_len = (size_t) BN_num_bytes(ec_gen)) > buf_len) | ||
| 442 | buf_len = tmp_len; | ||
| 443 | if ((tmp_len = (size_t) BN_num_bytes(ec_order)) > buf_len) | ||
| 444 | buf_len = tmp_len; | ||
| 445 | if ((tmp_len = (size_t) BN_num_bytes(ec_cofactor)) > buf_len) | ||
| 446 | buf_len = tmp_len; | ||
| 447 | |||
| 448 | buffer = malloc(buf_len); | ||
| 449 | |||
| 450 | if (buffer == NULL) { | ||
| 451 | perror("malloc"); | ||
| 452 | goto end; | ||
| 453 | } | ||
| 454 | ecparam_print_var(out, ec_p, "ec_p", len, buffer); | ||
| 455 | ecparam_print_var(out, ec_a, "ec_a", len, buffer); | ||
| 456 | ecparam_print_var(out, ec_b, "ec_b", len, buffer); | ||
| 457 | ecparam_print_var(out, ec_gen, "ec_gen", len, buffer); | ||
| 458 | ecparam_print_var(out, ec_order, "ec_order", len, buffer); | ||
| 459 | ecparam_print_var(out, ec_cofactor, "ec_cofactor", len, | ||
| 460 | buffer); | ||
| 461 | |||
| 462 | BIO_printf(out, "\n\n"); | ||
| 463 | |||
| 464 | BIO_printf(out, "EC_GROUP *get_ec_group_%d(void)\n\t{\n", len); | ||
| 465 | BIO_printf(out, "\tint ok=0;\n"); | ||
| 466 | BIO_printf(out, "\tEC_GROUP *group = NULL;\n"); | ||
| 467 | BIO_printf(out, "\tEC_POINT *point = NULL;\n"); | ||
| 468 | BIO_printf(out, "\tBIGNUM *tmp_1 = NULL, *tmp_2 = NULL, " | ||
| 469 | "*tmp_3 = NULL;\n\n"); | ||
| 470 | BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_p_%d, " | ||
| 471 | "sizeof(ec_p_%d), NULL)) == NULL)\n\t\t" | ||
| 472 | "goto err;\n", len, len); | ||
| 473 | BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_a_%d, " | ||
| 474 | "sizeof(ec_a_%d), NULL)) == NULL)\n\t\t" | ||
| 475 | "goto err;\n", len, len); | ||
| 476 | BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_b_%d, " | ||
| 477 | "sizeof(ec_b_%d), NULL)) == NULL)\n\t\t" | ||
| 478 | "goto err;\n", len, len); | ||
| 479 | BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_GFp" | ||
| 480 | "(tmp_1, tmp_2, tmp_3, NULL)) == NULL)\n\t\tgoto err;\n\n"); | ||
| 481 | BIO_printf(out, "\t/* build generator */\n"); | ||
| 482 | BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_gen_%d, " | ||
| 483 | "sizeof(ec_gen_%d), tmp_1)) == NULL)" | ||
| 484 | "\n\t\tgoto err;\n", len, len); | ||
| 485 | BIO_printf(out, "\tpoint = EC_POINT_bn2point(group, tmp_1, " | ||
| 486 | "NULL, NULL);\n"); | ||
| 487 | BIO_printf(out, "\tif (point == NULL)\n\t\tgoto err;\n"); | ||
| 488 | BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_order_%d, " | ||
| 489 | "sizeof(ec_order_%d), tmp_2)) == NULL)" | ||
| 490 | "\n\t\tgoto err;\n", len, len); | ||
| 491 | BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_cofactor_%d, " | ||
| 492 | "sizeof(ec_cofactor_%d), tmp_3)) == NULL)" | ||
| 493 | "\n\t\tgoto err;\n", len, len); | ||
| 494 | BIO_printf(out, "\tif (!EC_GROUP_set_generator(group, point," | ||
| 495 | " tmp_2, tmp_3))\n\t\tgoto err;\n"); | ||
| 496 | BIO_printf(out, "\n\tok=1;\n"); | ||
| 497 | BIO_printf(out, "err:\n"); | ||
| 498 | BIO_printf(out, "\tif (tmp_1)\n\t\tBN_free(tmp_1);\n"); | ||
| 499 | BIO_printf(out, "\tif (tmp_2)\n\t\tBN_free(tmp_2);\n"); | ||
| 500 | BIO_printf(out, "\tif (tmp_3)\n\t\tBN_free(tmp_3);\n"); | ||
| 501 | BIO_printf(out, "\tif (point)\n\t\tEC_POINT_free(point);\n"); | ||
| 502 | BIO_printf(out, "\tif (!ok)\n"); | ||
| 503 | BIO_printf(out, "\t\t{\n"); | ||
| 504 | BIO_printf(out, "\t\tEC_GROUP_free(group);\n"); | ||
| 505 | BIO_printf(out, "\t\tgroup = NULL;\n"); | ||
| 506 | BIO_printf(out, "\t\t}\n"); | ||
| 507 | BIO_printf(out, "\treturn(group);\n\t}\n"); | ||
| 508 | } | ||
| 509 | if (!cfg.noout) { | 393 | if (!cfg.noout) { |
| 510 | if (cfg.outformat == FORMAT_ASN1) | 394 | if (cfg.outformat == FORMAT_ASN1) |
| 511 | i = i2d_ECPKParameters_bio(out, group); | 395 | i = i2d_ECPKParameters_bio(out, group); |
| @@ -554,15 +438,6 @@ ecparam_main(int argc, char **argv) | |||
| 554 | ret = 0; | 438 | ret = 0; |
| 555 | 439 | ||
| 556 | end: | 440 | end: |
| 557 | BN_free(ec_p); | ||
| 558 | BN_free(ec_a); | ||
| 559 | BN_free(ec_b); | ||
| 560 | BN_free(ec_gen); | ||
| 561 | BN_free(ec_order); | ||
| 562 | BN_free(ec_cofactor); | ||
| 563 | |||
| 564 | free(buffer); | ||
| 565 | |||
| 566 | BIO_free(in); | 441 | BIO_free(in); |
| 567 | BIO_free_all(out); | 442 | BIO_free_all(out); |
| 568 | EC_GROUP_free(group); | 443 | EC_GROUP_free(group); |
| @@ -570,27 +445,4 @@ ecparam_main(int argc, char **argv) | |||
| 570 | return (ret); | 445 | return (ret); |
| 571 | } | 446 | } |
| 572 | 447 | ||
| 573 | static int | ||
| 574 | ecparam_print_var(BIO * out, BIGNUM * in, const char *var, | ||
| 575 | int len, unsigned char *buffer) | ||
| 576 | { | ||
| 577 | BIO_printf(out, "static unsigned char %s_%d[] = {", var, len); | ||
| 578 | if (BN_is_zero(in)) | ||
| 579 | BIO_printf(out, "\n\t0x00"); | ||
| 580 | else { | ||
| 581 | int i, l; | ||
| 582 | |||
| 583 | l = BN_bn2bin(in, buffer); | ||
| 584 | for (i = 0; i < l - 1; i++) { | ||
| 585 | if ((i % 12) == 0) | ||
| 586 | BIO_printf(out, "\n\t"); | ||
| 587 | BIO_printf(out, "0x%02X,", buffer[i]); | ||
| 588 | } | ||
| 589 | if ((i % 12) == 0) | ||
| 590 | BIO_printf(out, "\n\t"); | ||
| 591 | BIO_printf(out, "0x%02X", buffer[i]); | ||
| 592 | } | ||
| 593 | BIO_printf(out, "\n\t};\n\n"); | ||
| 594 | return 1; | ||
| 595 | } | ||
| 596 | #endif | 448 | #endif |
