summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dh/dh_key.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libcrypto/dh/dh_key.c28
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;
163err: 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);
223err: 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);