summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dh
diff options
context:
space:
mode:
authortb <>2018-11-05 23:54:27 +0000
committertb <>2018-11-05 23:54:27 +0000
commit9fe67d92c844ca96428126668ee46195c6fdb009 (patch)
tree78a9bc333df72424887ef3936cbdf13c338b303d /src/lib/libcrypto/dh
parent22e9d4df59dc9b4792b5eb914b97092ddfae8096 (diff)
downloadopenbsd-9fe67d92c844ca96428126668ee46195c6fdb009.tar.gz
openbsd-9fe67d92c844ca96428126668ee46195c6fdb009.tar.bz2
openbsd-9fe67d92c844ca96428126668ee46195c6fdb009.zip
Make use of bn_rand_interval() where appropriate.
ok beck jsing
Diffstat (limited to 'src/lib/libcrypto/dh')
-rw-r--r--src/lib/libcrypto/dh/dh_key.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/lib/libcrypto/dh/dh_key.c b/src/lib/libcrypto/dh/dh_key.c
index 2cbf128d80..17df620ec5 100644
--- a/src/lib/libcrypto/dh/dh_key.c
+++ b/src/lib/libcrypto/dh/dh_key.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dh_key.c,v 1.31 2018/11/05 23:50:05 tb Exp $ */ 1/* $OpenBSD: dh_key.c,v 1.32 2018/11/05 23:54:27 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 *
@@ -106,7 +106,7 @@ generate_key(DH *dh)
106 unsigned l; 106 unsigned l;
107 BN_CTX *ctx; 107 BN_CTX *ctx;
108 BN_MONT_CTX *mont = NULL; 108 BN_MONT_CTX *mont = NULL;
109 BIGNUM *pub_key = dh->pub_key, *priv_key = dh->priv_key; 109 BIGNUM *pub_key = dh->pub_key, *priv_key = dh->priv_key, *two = NULL;
110 110
111 if (BN_num_bits(dh->p) > OPENSSL_DH_MAX_MODULUS_BITS) { 111 if (BN_num_bits(dh->p) > OPENSSL_DH_MAX_MODULUS_BITS) {
112 DHerror(DH_R_MODULUS_TOO_LARGE); 112 DHerror(DH_R_MODULUS_TOO_LARGE);
@@ -137,10 +137,12 @@ generate_key(DH *dh)
137 137
138 if (generate_new_key) { 138 if (generate_new_key) {
139 if (dh->q) { 139 if (dh->q) {
140 do { 140 if ((two = BN_new()) == NULL)
141 if (!BN_rand_range(priv_key, dh->q)) 141 goto err;
142 goto err; 142 if (!BN_add(two, BN_value_one(), BN_value_one()))
143 } while (BN_is_zero(priv_key) || BN_is_one(priv_key)); 143 goto err;
144 if (!bn_rand_interval(priv_key, two, dh->q))
145 goto err;
144 } else { 146 } else {
145 /* secret exponent length */ 147 /* secret exponent length */
146 l = dh->length ? dh->length : BN_num_bits(dh->p) - 1; 148 l = dh->length ? dh->length : BN_num_bits(dh->p) - 1;
@@ -165,6 +167,7 @@ generate_key(DH *dh)
165 if (dh->priv_key == NULL) 167 if (dh->priv_key == NULL)
166 BN_free(priv_key); 168 BN_free(priv_key);
167 BN_CTX_free(ctx); 169 BN_CTX_free(ctx);
170 BN_free(two);
168 return ok; 171 return ok;
169} 172}
170 173