summaryrefslogtreecommitdiff
path: root/src/crypto/rsa_extra/rsa_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypto/rsa_extra/rsa_test.cc')
-rw-r--r--src/crypto/rsa_extra/rsa_test.cc65
1 files changed, 15 insertions, 50 deletions
diff --git a/src/crypto/rsa_extra/rsa_test.cc b/src/crypto/rsa_extra/rsa_test.cc
index fdd5e497..a6bfb87b 100644
--- a/src/crypto/rsa_extra/rsa_test.cc
+++ b/src/crypto/rsa_extra/rsa_test.cc
@@ -826,6 +826,21 @@ TEST(RSATest, CheckKey) {
ASSERT_TRUE(BN_hex2bn(&rsa->d, kDEuler));
EXPECT_TRUE(RSA_check_key(rsa.get()));
+ // If d is completely out of range but otherwise valid, it is rejected.
+ static const char kDTooLarge[] =
+ "f2c885128cf04101c283553617c210d8ffd14cde98dc420c3c9892b55606cbedcda24298"
+ "7655b3f7b9433c2c316293a1cf1a2b034f197aeec1de8d81a67d94cc902b9fce1712d5a4"
+ "9c257ff705725cd77338d23535d3b87c8f4cecc15a6b72641ffd81aea106839d216b5fcd"
+ "7d415751d27255e540dd1638a8389721e9d0807d65d24d7b8c2f60e4b2c0bf250544ce68"
+ "b5ddbc1463d5a4638b2816b0f033dacdc0162f329af9e4d142352521fbd2fe14af824ef3"
+ "1601fe843c79cc3efbcb8eafd79262bdd25e2bdf21440f774e26d88ed7df938c5cf6982d"
+ "e9fa635b8ca36ce5c5fbd579a53cbb0348ceae752d4bc5621c5acc922ca2082494633337"
+ "42e770c1";
+ ASSERT_TRUE(BN_hex2bn(&rsa->d, kDTooLarge));
+ EXPECT_FALSE(RSA_check_key(rsa.get()));
+ ERR_clear_error();
+ ASSERT_TRUE(BN_hex2bn(&rsa->d, kD));
+
// CRT value must either all be provided or all missing.
ASSERT_TRUE(BN_hex2bn(&rsa->dmp1, kDMP1));
EXPECT_FALSE(RSA_check_key(rsa.get()));
@@ -909,54 +924,4 @@ TEST(RSATest, SqrtTwo) {
// Check the kBoringSSLRSASqrtTwo is sized for a 3072-bit RSA key.
EXPECT_EQ(3072u / 2u, bits);
}
-
-TEST(RSATest, GreaterThanPow2) {
- bssl::UniquePtr<BIGNUM> b(BN_new());
- BN_zero(b.get());
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 0));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 1));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20));
-
- ASSERT_TRUE(BN_set_word(b.get(), 1));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 0));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 1));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20));
-
- ASSERT_TRUE(BN_set_word(b.get(), 2));
- EXPECT_TRUE(rsa_greater_than_pow2(b.get(), 0));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 1));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20));
-
- ASSERT_TRUE(BN_set_word(b.get(), 3));
- EXPECT_TRUE(rsa_greater_than_pow2(b.get(), 0));
- EXPECT_TRUE(rsa_greater_than_pow2(b.get(), 1));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 2));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20));
-
- BN_set_negative(b.get(), 1);
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 0));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 1));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 2));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20));
-
- // Check all bit lengths mod 64.
- for (int n = 1024; n < 1024 + 64; n++) {
- SCOPED_TRACE(n);
- ASSERT_TRUE(BN_set_word(b.get(), 1));
- ASSERT_TRUE(BN_lshift(b.get(), b.get(), n));
- EXPECT_TRUE(rsa_greater_than_pow2(b.get(), n - 1));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n + 1));
-
- ASSERT_TRUE(BN_sub_word(b.get(), 1));
- EXPECT_TRUE(rsa_greater_than_pow2(b.get(), n - 1));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n + 1));
-
- ASSERT_TRUE(BN_add_word(b.get(), 2));
- EXPECT_TRUE(rsa_greater_than_pow2(b.get(), n - 1));
- EXPECT_TRUE(rsa_greater_than_pow2(b.get(), n));
- EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n + 1));
- }
-}
#endif // !BORINGSSL_SHARED_LIBRARY