summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dsa/dsa_gen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/dsa/dsa_gen.c')
-rw-r--r--src/lib/libcrypto/dsa/dsa_gen.c45
1 files changed, 18 insertions, 27 deletions
diff --git a/src/lib/libcrypto/dsa/dsa_gen.c b/src/lib/libcrypto/dsa/dsa_gen.c
index e40afeea51..dc9c249310 100644
--- a/src/lib/libcrypto/dsa/dsa_gen.c
+++ b/src/lib/libcrypto/dsa/dsa_gen.c
@@ -80,7 +80,6 @@
80#include <openssl/rand.h> 80#include <openssl/rand.h>
81#include <openssl/sha.h> 81#include <openssl/sha.h>
82 82
83#ifndef OPENSSL_FIPS
84DSA *DSA_generate_parameters(int bits, 83DSA *DSA_generate_parameters(int bits,
85 unsigned char *seed_in, int seed_len, 84 unsigned char *seed_in, int seed_len,
86 int *counter_ret, unsigned long *h_ret, 85 int *counter_ret, unsigned long *h_ret,
@@ -128,9 +127,8 @@ DSA *DSA_generate_parameters(int bits,
128 c = BN_CTX_get(ctx2); 127 c = BN_CTX_get(ctx2);
129 p = BN_CTX_get(ctx2); 128 p = BN_CTX_get(ctx2);
130 test = BN_CTX_get(ctx2); 129 test = BN_CTX_get(ctx2);
131 if (test == NULL) goto err;
132 130
133 if (!BN_lshift(test,BN_value_one(),bits-1)) goto err; 131 BN_lshift(test,BN_value_one(),bits-1);
134 132
135 for (;;) 133 for (;;)
136 { 134 {
@@ -198,7 +196,7 @@ DSA *DSA_generate_parameters(int bits,
198 callback(0,counter,cb_arg); 196 callback(0,counter,cb_arg);
199 197
200 /* step 7 */ 198 /* step 7 */
201 if (!BN_zero(W)) goto err; 199 BN_zero(W);
202 /* now 'buf' contains "SEED + offset - 1" */ 200 /* now 'buf' contains "SEED + offset - 1" */
203 for (k=0; k<=n; k++) 201 for (k=0; k<=n; k++)
204 { 202 {
@@ -214,20 +212,20 @@ DSA *DSA_generate_parameters(int bits,
214 /* step 8 */ 212 /* step 8 */
215 if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0)) 213 if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0))
216 goto err; 214 goto err;
217 if (!BN_lshift(r0,r0,160*k)) goto err; 215 BN_lshift(r0,r0,160*k);
218 if (!BN_add(W,W,r0)) goto err; 216 BN_add(W,W,r0);
219 } 217 }
220 218
221 /* more of step 8 */ 219 /* more of step 8 */
222 if (!BN_mask_bits(W,bits-1)) goto err; 220 BN_mask_bits(W,bits-1);
223 if (!BN_copy(X,W)) goto err; 221 BN_copy(X,W); /* this should be ok */
224 if (!BN_add(X,X,test)) goto err; 222 BN_add(X,X,test); /* this should be ok */
225 223
226 /* step 9 */ 224 /* step 9 */
227 if (!BN_lshift1(r0,q)) goto err; 225 BN_lshift1(r0,q);
228 if (!BN_mod(c,X,r0,ctx)) goto err; 226 BN_mod(c,X,r0,ctx);
229 if (!BN_sub(r0,c,BN_value_one())) goto err; 227 BN_sub(r0,c,BN_value_one());
230 if (!BN_sub(p,X,r0)) goto err; 228 BN_sub(p,X,r0);
231 229
232 /* step 10 */ 230 /* step 10 */
233 if (BN_cmp(p,test) >= 0) 231 if (BN_cmp(p,test) >= 0)
@@ -253,18 +251,18 @@ end:
253 251
254 /* We now need to generate g */ 252 /* We now need to generate g */
255 /* Set r0=(p-1)/q */ 253 /* Set r0=(p-1)/q */
256 if (!BN_sub(test,p,BN_value_one())) goto err; 254 BN_sub(test,p,BN_value_one());
257 if (!BN_div(r0,NULL,test,q,ctx)) goto err; 255 BN_div(r0,NULL,test,q,ctx);
258 256
259 if (!BN_set_word(test,h)) goto err; 257 BN_set_word(test,h);
260 if (!BN_MONT_CTX_set(mont,p,ctx)) goto err; 258 BN_MONT_CTX_set(mont,p,ctx);
261 259
262 for (;;) 260 for (;;)
263 { 261 {
264 /* g=test^r0%p */ 262 /* g=test^r0%p */
265 if (!BN_mod_exp_mont(g,test,r0,p,ctx,mont)) goto err; 263 BN_mod_exp_mont(g,test,r0,p,ctx,mont);
266 if (!BN_is_one(g)) break; 264 if (!BN_is_one(g)) break;
267 if (!BN_add(test,test,BN_value_one())) goto err; 265 BN_add(test,test,BN_value_one());
268 h++; 266 h++;
269 } 267 }
270 268
@@ -281,11 +279,6 @@ err:
281 ret->p=BN_dup(p); 279 ret->p=BN_dup(p);
282 ret->q=BN_dup(q); 280 ret->q=BN_dup(q);
283 ret->g=BN_dup(g); 281 ret->g=BN_dup(g);
284 if (ret->p == NULL || ret->q == NULL || ret->g == NULL)
285 {
286 ok=0;
287 goto err;
288 }
289 if ((m > 1) && (seed_in != NULL)) memcpy(seed_in,seed,20); 282 if ((m > 1) && (seed_in != NULL)) memcpy(seed_in,seed,20);
290 if (counter_ret != NULL) *counter_ret=counter; 283 if (counter_ret != NULL) *counter_ret=counter;
291 if (h_ret != NULL) *h_ret=h; 284 if (h_ret != NULL) *h_ret=h;
@@ -300,6 +293,4 @@ err:
300 if (mont != NULL) BN_MONT_CTX_free(mont); 293 if (mont != NULL) BN_MONT_CTX_free(mont);
301 return(ok?ret:NULL); 294 return(ok?ret:NULL);
302 } 295 }
303#endif /* ndef OPENSSL_FIPS */ 296#endif
304#endif /* ndef OPENSSL_NO_SHA */
305