diff --git a/crypto/constant_time_test.cc b/crypto/constant_time_test.cc index 3cb5866a..59a7bb18 100644 --- a/crypto/constant_time_test.cc +++ b/crypto/constant_time_test.cc @@ -53,6 +53,9 @@ #include +#include +#include + static uint8_t FromBool8(bool b) { return b ? CONSTTIME_TRUE_8 : CONSTTIME_FALSE_8; @@ -134,3 +137,19 @@ TEST(ConstantTimeTest, Test) { } } } + +TEST(ConstantTimeTest, MemCmp) { + uint8_t buf[256], copy[256]; + RAND_bytes(buf, sizeof(buf)); + + OPENSSL_memcpy(copy, buf, sizeof(buf)); + EXPECT_EQ(0, CRYPTO_memcmp(buf, copy, sizeof(buf))); + + for (size_t i = 0; i < sizeof(buf); i++) { + for (uint8_t bit = 1; bit != 0; bit <<= 1) { + OPENSSL_memcpy(copy, buf, sizeof(buf)); + copy[i] ^= bit; + EXPECT_NE(0, CRYPTO_memcmp(buf, copy, sizeof(buf))); + } + } +}