diff options
Diffstat (limited to 'src/lib/libcrypto/dh/dh_key.c')
| -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); |
