From: Dr. Stephen Henson Date: Fri, 11 Feb 2011 15:19:54 +0000 (+0000) Subject: In FIPS mode only use "Generation by Testing Candidates" equivalent. X-Git-Tag: OpenSSL-fips-2_0-rc1~764 X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff_plain;h=ed12c2f7cab57a31c153df4408763f7fca6ae64b In FIPS mode only use "Generation by Testing Candidates" equivalent. --- 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 */