summaryrefslogtreecommitdiff
path: root/src/usr.bin/openssl/gendh.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr.bin/openssl/gendh.c')
-rw-r--r--src/usr.bin/openssl/gendh.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/usr.bin/openssl/gendh.c b/src/usr.bin/openssl/gendh.c
index facc9248f3..c6564e047b 100644
--- a/src/usr.bin/openssl/gendh.c
+++ b/src/usr.bin/openssl/gendh.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: gendh.c,v 1.11 2019/07/14 03:30:45 guenther Exp $ */ 1/* $OpenBSD: gendh.c,v 1.12 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 *
@@ -84,7 +84,7 @@
84 84
85#define DEFBITS 512 85#define DEFBITS 512
86 86
87static int dh_cb(int p, int n, BN_GENCB * cb); 87static int dh_cb(int p, int n, BN_GENCB *cb);
88 88
89static struct { 89static struct {
90 int g; 90 int g;
@@ -128,7 +128,7 @@ gendh_usage(void)
128int 128int
129gendh_main(int argc, char **argv) 129gendh_main(int argc, char **argv)
130{ 130{
131 BN_GENCB cb; 131 BN_GENCB *cb = NULL;
132 DH *dh = NULL; 132 DH *dh = NULL;
133 int ret = 1, numbits = DEFBITS; 133 int ret = 1, numbits = DEFBITS;
134 BIO *out = NULL; 134 BIO *out = NULL;
@@ -141,7 +141,12 @@ gendh_main(int argc, char **argv)
141 } 141 }
142 } 142 }
143 143
144 BN_GENCB_set(&cb, dh_cb, bio_err); 144 if ((cb = BN_GENCB_new()) == NULL) {
145 BIO_printf(bio_err, "Error allocating BN_GENCB object\n");
146 goto end;
147 }
148
149 BN_GENCB_set(cb, dh_cb, bio_err);
145 150
146 memset(&gendh_config, 0, sizeof(gendh_config)); 151 memset(&gendh_config, 0, sizeof(gendh_config));
147 152
@@ -180,7 +185,7 @@ gendh_main(int argc, char **argv)
180 BIO_printf(bio_err, "This is going to take a long time\n"); 185 BIO_printf(bio_err, "This is going to take a long time\n");
181 186
182 if (((dh = DH_new()) == NULL) || 187 if (((dh = DH_new()) == NULL) ||
183 !DH_generate_parameters_ex(dh, numbits, gendh_config.g, &cb)) 188 !DH_generate_parameters_ex(dh, numbits, gendh_config.g, cb))
184 goto end; 189 goto end;
185 190
186 if (!PEM_write_bio_DHparams(out, dh)) 191 if (!PEM_write_bio_DHparams(out, dh))
@@ -190,13 +195,14 @@ gendh_main(int argc, char **argv)
190 if (ret != 0) 195 if (ret != 0)
191 ERR_print_errors(bio_err); 196 ERR_print_errors(bio_err);
192 BIO_free_all(out); 197 BIO_free_all(out);
198 BN_GENCB_free(cb);
193 DH_free(dh); 199 DH_free(dh);
194 200
195 return (ret); 201 return (ret);
196} 202}
197 203
198static int 204static int
199dh_cb(int p, int n, BN_GENCB * cb) 205dh_cb(int p, int n, BN_GENCB *cb)
200{ 206{
201 char c = '*'; 207 char c = '*';
202 208
@@ -208,8 +214,8 @@ dh_cb(int p, int n, BN_GENCB * cb)
208 c = '*'; 214 c = '*';
209 if (p == 3) 215 if (p == 3)
210 c = '\n'; 216 c = '\n';
211 BIO_write(cb->arg, &c, 1); 217 BIO_write(BN_GENCB_get_arg(cb), &c, 1);
212 (void) BIO_flush(cb->arg); 218 (void) BIO_flush(BN_GENCB_get_arg(cb));
213 return 1; 219 return 1;
214} 220}
215#endif 221#endif