summaryrefslogtreecommitdiffstats
path: root/crypto/dh/dh_key.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/dh/dh_key.c')
-rw-r--r--crypto/dh/dh_key.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/crypto/dh/dh_key.c b/crypto/dh/dh_key.c
index df0300402e..4a2b75a992 100644
--- a/crypto/dh/dh_key.c
+++ b/crypto/dh/dh_key.c
@@ -101,6 +101,7 @@ const DH_METHOD *DH_OpenSSL(void)
static int generate_key(DH *dh)
{
int ok=0;
+ int generate_new_key=0;
unsigned l;
BN_CTX *ctx;
BN_MONT_CTX *mont;
@@ -113,6 +114,7 @@ static int generate_key(DH *dh)
{
priv_key=BN_new();
if (priv_key == NULL) goto err;
+ generate_new_key=1;
}
else
priv_key=dh->priv_key;
@@ -135,7 +137,10 @@ static int generate_key(DH *dh)
l = dh->length ? dh->length : BN_num_bits(dh->p)-1; /* secret exponent length */
- if (!BN_rand(priv_key, l, 0, 0)) goto err;
+ if (generate_new_key)
+ {
+ if (!BN_rand(priv_key, l, 0, 0)) goto err;
+ }
if (!ENGINE_get_DH(dh->engine)->bn_mod_exp(dh, pub_key, dh->g,
priv_key,dh->p,ctx,mont)) goto err;