summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bn/bn_prime.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/bn/bn_prime.c')
-rw-r--r--src/lib/libcrypto/bn/bn_prime.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/lib/libcrypto/bn/bn_prime.c b/src/lib/libcrypto/bn/bn_prime.c
index b1aba663df..fb39756de2 100644
--- a/src/lib/libcrypto/bn/bn_prime.c
+++ b/src/lib/libcrypto/bn/bn_prime.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bn_prime.c,v 1.14 2015/10/21 19:02:22 miod Exp $ */ 1/* $OpenBSD: bn_prime.c,v 1.15 2016/07/05 02:54:35 bcook 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 *
@@ -277,9 +277,13 @@ BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx_passed,
277 /* a is even => a is prime if and only if a == 2 */ 277 /* a is even => a is prime if and only if a == 2 */
278 return BN_is_word(a, 2); 278 return BN_is_word(a, 2);
279 if (do_trial_division) { 279 if (do_trial_division) {
280 for (i = 1; i < NUMPRIMES; i++) 280 for (i = 1; i < NUMPRIMES; i++) {
281 if (BN_mod_word(a, primes[i]) == 0) 281 BN_ULONG mod = BN_mod_word(a, primes[i]);
282 if (mod == (BN_ULONG)-1)
283 goto err;
284 if (mod == 0)
282 return 0; 285 return 0;
286 }
283 if (!BN_GENCB_call(cb, 1, -1)) 287 if (!BN_GENCB_call(cb, 1, -1))
284 goto err; 288 goto err;
285 } 289 }
@@ -398,8 +402,12 @@ again:
398 if (!BN_rand(rnd, bits, 1, 1)) 402 if (!BN_rand(rnd, bits, 1, 1))
399 return (0); 403 return (0);
400 /* we now have a random number 'rand' to test. */ 404 /* we now have a random number 'rand' to test. */
401 for (i = 1; i < NUMPRIMES; i++) 405 for (i = 1; i < NUMPRIMES; i++) {
402 mods[i] = (prime_t)BN_mod_word(rnd, (BN_ULONG)primes[i]); 406 BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]);
407 if (mod == (BN_ULONG)-1)
408 return (0);
409 mods[i] = (prime_t)mod;
410 }
403 maxdelta = BN_MASK2 - primes[NUMPRIMES - 1]; 411 maxdelta = BN_MASK2 - primes[NUMPRIMES - 1];
404 delta = 0; 412 delta = 0;
405loop: 413loop:
@@ -452,7 +460,10 @@ probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add, const BIGNUM *rem,
452loop: 460loop:
453 for (i = 1; i < NUMPRIMES; i++) { 461 for (i = 1; i < NUMPRIMES; i++) {
454 /* check that rnd is a prime */ 462 /* check that rnd is a prime */
455 if (BN_mod_word(rnd, (BN_ULONG)primes[i]) <= 1) { 463 BN_LONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]);
464 if (mod == (BN_ULONG)-1)
465 goto err;
466 if (mod <= 1) {
456 if (!BN_add(rnd, rnd, add)) 467 if (!BN_add(rnd, rnd, add))
457 goto err; 468 goto err;
458 goto loop; 469 goto loop;
@@ -514,8 +525,11 @@ loop:
514 /* check that p and q are prime */ 525 /* check that p and q are prime */
515 /* check that for p and q 526 /* check that for p and q
516 * gcd(p-1,primes) == 1 (except for 2) */ 527 * gcd(p-1,primes) == 1 (except for 2) */
517 if ((BN_mod_word(p, (BN_ULONG)primes[i]) == 0) || 528 BN_ULONG pmod = BN_mod_word(p, (BN_ULONG)primes[i]);
518 (BN_mod_word(q, (BN_ULONG)primes[i]) == 0)) { 529 BN_ULONG qmod = BN_mod_word(q, (BN_ULONG)primes[i]);
530 if (pmod == (BN_ULONG)-1 || qmod == (BN_ULONG)-1)
531 goto err;
532 if (pmod == 0 || qmod == 0) {
519 if (!BN_add(p, p, padd)) 533 if (!BN_add(p, p, padd))
520 goto err; 534 goto err;
521 if (!BN_add(q, q, qadd)) 535 if (!BN_add(q, q, qadd))