summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dh
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/dh')
-rw-r--r--src/lib/libcrypto/dh/Makefile.ssl3
-rw-r--r--src/lib/libcrypto/dh/dh_key.c11
-rw-r--r--src/lib/libcrypto/dh/dh_lib.c8
3 files changed, 9 insertions, 13 deletions
diff --git a/src/lib/libcrypto/dh/Makefile.ssl b/src/lib/libcrypto/dh/Makefile.ssl
index 88d0d1748b..bf4b47ca9a 100644
--- a/src/lib/libcrypto/dh/Makefile.ssl
+++ b/src/lib/libcrypto/dh/Makefile.ssl
@@ -39,7 +39,8 @@ all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(AR) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) 42 @echo You may get an error following this line. Please ignore.
43 - $(RANLIB) $(LIB)
43 @touch lib 44 @touch lib
44 45
45files: 46files:
diff --git a/src/lib/libcrypto/dh/dh_key.c b/src/lib/libcrypto/dh/dh_key.c
index 6915d79dcc..22b087b778 100644
--- a/src/lib/libcrypto/dh/dh_key.c
+++ b/src/lib/libcrypto/dh/dh_key.c
@@ -100,7 +100,6 @@ DH_METHOD *DH_OpenSSL(void)
100static int generate_key(DH *dh) 100static int generate_key(DH *dh)
101 { 101 {
102 int ok=0; 102 int ok=0;
103 unsigned int i;
104 BN_CTX ctx; 103 BN_CTX ctx;
105 BN_MONT_CTX *mont; 104 BN_MONT_CTX *mont;
106 BIGNUM *pub_key=NULL,*priv_key=NULL; 105 BIGNUM *pub_key=NULL,*priv_key=NULL;
@@ -109,15 +108,11 @@ static int generate_key(DH *dh)
109 108
110 if (dh->priv_key == NULL) 109 if (dh->priv_key == NULL)
111 { 110 {
112 i=dh->length;
113 if (i == 0)
114 {
115 /* Make the number p-1 bits long */
116 i=BN_num_bits(dh->p)-1;
117 }
118 priv_key=BN_new(); 111 priv_key=BN_new();
119 if (priv_key == NULL) goto err; 112 if (priv_key == NULL) goto err;
120 if (!BN_rand(priv_key,i,0,0)) goto err; 113 do
114 if (!BN_rand_range(priv_key, dh->p)) goto err;
115 while (BN_is_zero(priv_key));
121 } 116 }
122 else 117 else
123 priv_key=dh->priv_key; 118 priv_key=dh->priv_key;
diff --git a/src/lib/libcrypto/dh/dh_lib.c b/src/lib/libcrypto/dh/dh_lib.c
index 66803b5565..96f118c153 100644
--- a/src/lib/libcrypto/dh/dh_lib.c
+++ b/src/lib/libcrypto/dh/dh_lib.c
@@ -168,13 +168,13 @@ DH *DH_new_method(ENGINE *engine)
168 ret->method_mont_p=NULL; 168 ret->method_mont_p=NULL;
169 ret->references = 1; 169 ret->references = 1;
170 ret->flags=meth->flags; 170 ret->flags=meth->flags;
171 CRYPTO_new_ex_data(dh_meth,ret,&ret->ex_data);
171 if ((meth->init != NULL) && !meth->init(ret)) 172 if ((meth->init != NULL) && !meth->init(ret))
172 { 173 {
174 CRYPTO_free_ex_data(dh_meth,ret,&ret->ex_data);
173 OPENSSL_free(ret); 175 OPENSSL_free(ret);
174 ret=NULL; 176 ret=NULL;
175 } 177 }
176 else
177 CRYPTO_new_ex_data(dh_meth,ret,&ret->ex_data);
178 return(ret); 178 return(ret);
179 } 179 }
180 180
@@ -196,12 +196,12 @@ void DH_free(DH *r)
196 } 196 }
197#endif 197#endif
198 198
199 CRYPTO_free_ex_data(dh_meth, r, &r->ex_data);
200
201 meth = ENGINE_get_DH(r->engine); 199 meth = ENGINE_get_DH(r->engine);
202 if(meth->finish) meth->finish(r); 200 if(meth->finish) meth->finish(r);
203 ENGINE_finish(r->engine); 201 ENGINE_finish(r->engine);
204 202
203 CRYPTO_free_ex_data(dh_meth, r, &r->ex_data);
204
205 if (r->p != NULL) BN_clear_free(r->p); 205 if (r->p != NULL) BN_clear_free(r->p);
206 if (r->g != NULL) BN_clear_free(r->g); 206 if (r->g != NULL) BN_clear_free(r->g);
207 if (r->q != NULL) BN_clear_free(r->q); 207 if (r->q != NULL) BN_clear_free(r->q);