diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib/libcrypto/dh/dh_key.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/src/lib/libcrypto/dh/dh_key.c b/src/lib/libcrypto/dh/dh_key.c index dd3a3af3ab..2cbf128d80 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.30 2018/11/05 23:46:16 tb Exp $ */ | 1 | /* $OpenBSD: dh_key.c,v 1.31 2018/11/05 23:50:05 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 = NULL, *priv_key = NULL; | 109 | BIGNUM *pub_key = dh->pub_key, *priv_key = dh->priv_key; |
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); |
@@ -117,20 +117,16 @@ generate_key(DH *dh) | |||
117 | if (ctx == NULL) | 117 | if (ctx == NULL) |
118 | goto err; | 118 | goto err; |
119 | 119 | ||
120 | if (dh->priv_key == NULL) { | 120 | if (priv_key == NULL) { |
121 | priv_key = BN_new(); | 121 | if ((priv_key = BN_new()) == NULL) |
122 | if (priv_key == NULL) | ||
123 | goto err; | 122 | goto err; |
124 | generate_new_key = 1; | 123 | generate_new_key = 1; |
125 | } else | 124 | } |
126 | priv_key = dh->priv_key; | ||
127 | 125 | ||
128 | if (dh->pub_key == NULL) { | 126 | if (pub_key == NULL) { |
129 | pub_key = BN_new(); | 127 | if ((pub_key = BN_new()) == NULL) |
130 | if (pub_key == NULL) | ||
131 | goto err; | 128 | goto err; |
132 | } else | 129 | } |
133 | pub_key = dh->pub_key; | ||
134 | 130 | ||
135 | if (dh->flags & DH_FLAG_CACHE_MONT_P) { | 131 | if (dh->flags & DH_FLAG_CACHE_MONT_P) { |
136 | mont = BN_MONT_CTX_set_locked(&dh->method_mont_p, | 132 | mont = BN_MONT_CTX_set_locked(&dh->method_mont_p, |
@@ -160,13 +156,13 @@ generate_key(DH *dh) | |||
160 | dh->pub_key = pub_key; | 156 | dh->pub_key = pub_key; |
161 | dh->priv_key = priv_key; | 157 | dh->priv_key = priv_key; |
162 | ok = 1; | 158 | ok = 1; |
163 | err: | 159 | err: |
164 | if (ok != 1) | 160 | if (ok != 1) |
165 | DHerror(ERR_R_BN_LIB); | 161 | DHerror(ERR_R_BN_LIB); |
166 | 162 | ||
167 | if (pub_key != NULL && dh->pub_key == NULL) | 163 | if (dh->pub_key == NULL) |
168 | BN_free(pub_key); | 164 | BN_free(pub_key); |
169 | if (priv_key != NULL && dh->priv_key == NULL) | 165 | if (dh->priv_key == NULL) |
170 | BN_free(priv_key); | 166 | BN_free(priv_key); |
171 | BN_CTX_free(ctx); | 167 | BN_CTX_free(ctx); |
172 | return ok; | 168 | return ok; |
@@ -220,7 +216,7 @@ compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) | |||
220 | } | 216 | } |
221 | 217 | ||
222 | ret = BN_bn2bin(tmp, key); | 218 | ret = BN_bn2bin(tmp, key); |
223 | err: | 219 | err: |
224 | if (ctx != NULL) { | 220 | if (ctx != NULL) { |
225 | BN_CTX_end(ctx); | 221 | BN_CTX_end(ctx); |
226 | BN_CTX_free(ctx); | 222 | BN_CTX_free(ctx); |