From ed12c2f7cab57a31c153df4408763f7fca6ae64b Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Fri, 11 Feb 2011 15:19:54 +0000 Subject: In FIPS mode only use "Generation by Testing Candidates" equivalent. --- crypto/bn/bn_rand.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'crypto/bn/bn_rand.c') diff --git a/crypto/bn/bn_rand.c b/crypto/bn/bn_rand.c index 215285b90f..30cc929ff6 100644 --- a/crypto/bn/bn_rand.c +++ b/crypto/bn/bn_rand.c @@ -247,7 +247,15 @@ static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range) if (n == 1) BN_zero(r); +#ifdef OPENSSL_FIPS + /* FIPS 186-3 is picky about how random numbers for keys etc are + * generated. So we just use the second case which is equivalent to + * "Generation by Testing Candidates" mentioned in B.1.2 et al. + */ + else if (!FIPS_mode() && !BN_is_bit_set(range, n - 2) && !BN_is_bit_set(range, n - 3)) +#else else if (!BN_is_bit_set(range, n - 2) && !BN_is_bit_set(range, n - 3)) +#endif { /* range = 100..._2, * so 3*range (= 11..._2) is exactly one bit longer than range */ -- cgit v1.2.3