diff options
author | tb <> | 2021-11-20 18:10:48 +0000 |
---|---|---|
committer | tb <> | 2021-11-20 18:10:48 +0000 |
commit | 4541acfc7d43d097ced3da574e8f80ec2529ee55 (patch) | |
tree | 3b802e89fdcb5de312935cb76899b338d6c0999d /src/usr.bin/openssl/dhparam.c | |
parent | 8e14ae7de26c61b00f26ed3704578c591fe6ae43 (diff) | |
download | openbsd-4541acfc7d43d097ced3da574e8f80ec2529ee55.tar.gz openbsd-4541acfc7d43d097ced3da574e8f80ec2529ee55.tar.bz2 openbsd-4541acfc7d43d097ced3da574e8f80ec2529ee55.zip |
Convert openssl(1) to using BN_GENCB on the heap
This is three times the same thing while genrsa needs some extra steps
to deal with opaque BIGNUMs. We can also garbage collect some Win 3.1
contortions and use the conversion routines directly instead of doing
them manually.
ok jsing
Diffstat (limited to 'src/usr.bin/openssl/dhparam.c')
-rw-r--r-- | src/usr.bin/openssl/dhparam.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/usr.bin/openssl/dhparam.c b/src/usr.bin/openssl/dhparam.c index b0dd510949..55263274b6 100644 --- a/src/usr.bin/openssl/dhparam.c +++ b/src/usr.bin/openssl/dhparam.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: dhparam.c,v 1.12 2019/07/14 03:30:45 guenther Exp $ */ | 1 | /* $OpenBSD: dhparam.c,v 1.13 2021/11/20 18:10:48 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -231,12 +231,13 @@ dhparam_usage() | |||
231 | options_usage(dhparam_options); | 231 | options_usage(dhparam_options); |
232 | } | 232 | } |
233 | 233 | ||
234 | static int dh_cb(int p, int n, BN_GENCB * cb); | 234 | static int dh_cb(int p, int n, BN_GENCB *cb); |
235 | 235 | ||
236 | int | 236 | int |
237 | dhparam_main(int argc, char **argv) | 237 | dhparam_main(int argc, char **argv) |
238 | { | 238 | { |
239 | BIO *in = NULL, *out = NULL; | 239 | BIO *in = NULL, *out = NULL; |
240 | BN_GENCB *cb = NULL; | ||
240 | char *num_bits = NULL; | 241 | char *num_bits = NULL; |
241 | DH *dh = NULL; | 242 | DH *dh = NULL; |
242 | int num = 0; | 243 | int num = 0; |
@@ -283,15 +284,19 @@ dhparam_main(int argc, char **argv) | |||
283 | } | 284 | } |
284 | 285 | ||
285 | if (num) { | 286 | if (num) { |
287 | if ((cb = BN_GENCB_new()) == NULL) { | ||
288 | BIO_printf(bio_err, | ||
289 | "Error allocating BN_GENCB object\n"); | ||
290 | goto end; | ||
291 | } | ||
286 | 292 | ||
287 | BN_GENCB cb; | 293 | BN_GENCB_set(cb, dh_cb, bio_err); |
288 | BN_GENCB_set(&cb, dh_cb, bio_err); | ||
289 | if (dhparam_config.dsaparam) { | 294 | if (dhparam_config.dsaparam) { |
290 | DSA *dsa = DSA_new(); | 295 | DSA *dsa = DSA_new(); |
291 | 296 | ||
292 | BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", num); | 297 | BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", num); |
293 | if (!dsa || !DSA_generate_parameters_ex(dsa, num, | 298 | if (!dsa || !DSA_generate_parameters_ex(dsa, num, |
294 | NULL, 0, NULL, NULL, &cb)) { | 299 | NULL, 0, NULL, NULL, cb)) { |
295 | DSA_free(dsa); | 300 | DSA_free(dsa); |
296 | ERR_print_errors(bio_err); | 301 | ERR_print_errors(bio_err); |
297 | goto end; | 302 | goto end; |
@@ -306,7 +311,7 @@ dhparam_main(int argc, char **argv) | |||
306 | dh = DH_new(); | 311 | dh = DH_new(); |
307 | BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime, generator %d\n", num, dhparam_config.g); | 312 | BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime, generator %d\n", num, dhparam_config.g); |
308 | BIO_printf(bio_err, "This is going to take a long time\n"); | 313 | BIO_printf(bio_err, "This is going to take a long time\n"); |
309 | if (!dh || !DH_generate_parameters_ex(dh, num, dhparam_config.g, &cb)) { | 314 | if (!dh || !DH_generate_parameters_ex(dh, num, dhparam_config.g, cb)) { |
310 | ERR_print_errors(bio_err); | 315 | ERR_print_errors(bio_err); |
311 | goto end; | 316 | goto end; |
312 | } | 317 | } |
@@ -469,6 +474,7 @@ dhparam_main(int argc, char **argv) | |||
469 | end: | 474 | end: |
470 | BIO_free(in); | 475 | BIO_free(in); |
471 | BIO_free_all(out); | 476 | BIO_free_all(out); |
477 | BN_GENCB_free(cb); | ||
472 | DH_free(dh); | 478 | DH_free(dh); |
473 | 479 | ||
474 | return (ret); | 480 | return (ret); |
@@ -476,7 +482,7 @@ dhparam_main(int argc, char **argv) | |||
476 | 482 | ||
477 | /* dh_cb is identical to dsa_cb in apps/dsaparam.c */ | 483 | /* dh_cb is identical to dsa_cb in apps/dsaparam.c */ |
478 | static int | 484 | static int |
479 | dh_cb(int p, int n, BN_GENCB * cb) | 485 | dh_cb(int p, int n, BN_GENCB *cb) |
480 | { | 486 | { |
481 | char c = '*'; | 487 | char c = '*'; |
482 | 488 | ||
@@ -488,8 +494,8 @@ dh_cb(int p, int n, BN_GENCB * cb) | |||
488 | c = '*'; | 494 | c = '*'; |
489 | if (p == 3) | 495 | if (p == 3) |
490 | c = '\n'; | 496 | c = '\n'; |
491 | BIO_write(cb->arg, &c, 1); | 497 | BIO_write(BN_GENCB_get_arg(cb), &c, 1); |
492 | (void) BIO_flush(cb->arg); | 498 | (void) BIO_flush(BN_GENCB_get_arg(cb)); |
493 | return 1; | 499 | return 1; |
494 | } | 500 | } |
495 | 501 | ||