diff options
Diffstat (limited to 'src/lib/libcrypto/dh')
-rw-r--r-- | src/lib/libcrypto/dh/Makefile.ssl | 3 | ||||
-rw-r--r-- | src/lib/libcrypto/dh/dh_key.c | 11 | ||||
-rw-r--r-- | src/lib/libcrypto/dh/dh_lib.c | 8 |
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 | ||
40 | lib: $(LIBOBJ) | 40 | lib: $(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 | ||
45 | files: | 46 | files: |
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) | |||
100 | static int generate_key(DH *dh) | 100 | static 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); |