| Index: crypto/hmac_unittest.cc
|
| diff --git a/crypto/hmac_unittest.cc b/crypto/hmac_unittest.cc
|
| index 0f8f0ecc69bd44bbfad7d91e27bf20bf818f28e4..1978705934daa1ed563be12387adf8cfab637442 100644
|
| --- a/crypto/hmac_unittest.cc
|
| +++ b/crypto/hmac_unittest.cc
|
| @@ -10,6 +10,28 @@
|
| static const size_t kSHA1DigestSize = 20;
|
| static const size_t kSHA256DigestSize = 32;
|
|
|
| +static const char* kSimpleKey =
|
| + "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
|
| + "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
|
| + "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
|
| + "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
|
| + "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA";
|
| +static const int kSimpleKeyLength = 80;
|
| +
|
| +static const struct {
|
| + const char *data;
|
| + const int data_len;
|
| + const char *digest;
|
| +} kSimpleHmacCases[] = {
|
| + { "Test Using Larger Than Block-Size Key - Hash Key First", 54,
|
| + "\xAA\x4A\xE5\xE1\x52\x72\xD0\x0E\x95\x70\x56\x37\xCE\x8A\x3B\x55"
|
| + "\xED\x40\x21\x12" },
|
| + { "Test Using Larger Than Block-Size Key and Larger "
|
| + "Than One Block-Size Data", 73,
|
| + "\xE8\xE9\x9D\x0F\x45\x23\x7D\x78\x6D\x6B\xBA\xA7\x96\x5C\x78\x08"
|
| + "\xBB\xFF\x1A\x91" }
|
| +};
|
| +
|
| TEST(HMACTest, HmacSafeBrowsingResponseTest) {
|
| const int kKeySize = 16;
|
|
|
| @@ -195,6 +217,10 @@ TEST(HMACTest, NSSFIPSPowerUpSelfTest) {
|
| EXPECT_EQ(kSHA1DigestSize, hmac.DigestLength());
|
| EXPECT_TRUE(hmac.Sign(message_data, calculated_hmac, kSHA1DigestSize));
|
| EXPECT_EQ(0, memcmp(kKnownHMACSHA1, calculated_hmac, kSHA1DigestSize));
|
| + EXPECT_TRUE(hmac.Verify(
|
| + message_data,
|
| + base::StringPiece(reinterpret_cast<const char*>(kKnownHMACSHA1),
|
| + kSHA1DigestSize)));
|
|
|
| crypto::HMAC hmac2(crypto::HMAC::SHA256);
|
| ASSERT_TRUE(hmac2.Init(kKnownSecretKey, kKnownSecretKeySize));
|
| @@ -205,34 +231,43 @@ TEST(HMACTest, NSSFIPSPowerUpSelfTest) {
|
| }
|
|
|
| TEST(HMACTest, HMACObjectReuse) {
|
| - const char *key =
|
| - "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
|
| - "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
|
| - "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
|
| - "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
|
| - "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA";
|
| - const int key_len = 80;
|
| -
|
| - const struct {
|
| - const char *data;
|
| - const int data_len;
|
| - const char *digest;
|
| - } cases[] = {
|
| - { "Test Using Larger Than Block-Size Key - Hash Key First", 54,
|
| - "\xAA\x4A\xE5\xE1\x52\x72\xD0\x0E\x95\x70\x56\x37\xCE\x8A\x3B\x55"
|
| - "\xED\x40\x21\x12" },
|
| - { "Test Using Larger Than Block-Size Key and Larger "
|
| - "Than One Block-Size Data", 73,
|
| - "\xE8\xE9\x9D\x0F\x45\x23\x7D\x78\x6D\x6B\xBA\xA7\x96\x5C\x78\x08"
|
| - "\xBB\xFF\x1A\x91" }
|
| - };
|
| -
|
| crypto::HMAC hmac(crypto::HMAC::SHA1);
|
| - ASSERT_TRUE(hmac.Init(reinterpret_cast<const unsigned char*>(key), key_len));
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
|
| - std::string data_string(cases[i].data, cases[i].data_len);
|
| + ASSERT_TRUE(
|
| + hmac.Init(reinterpret_cast<const unsigned char*>(kSimpleKey),
|
| + kSimpleKeyLength));
|
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kSimpleHmacCases); ++i) {
|
| + std::string data_string(kSimpleHmacCases[i].data,
|
| + kSimpleHmacCases[i].data_len);
|
| unsigned char digest[kSHA1DigestSize];
|
| EXPECT_TRUE(hmac.Sign(data_string, digest, kSHA1DigestSize));
|
| - EXPECT_EQ(0, memcmp(cases[i].digest, digest, kSHA1DigestSize));
|
| + EXPECT_EQ(0, memcmp(kSimpleHmacCases[i].digest, digest, kSHA1DigestSize));
|
| + }
|
| +}
|
| +
|
| +TEST(HMACTest, Verify) {
|
| + crypto::HMAC hmac(crypto::HMAC::SHA1);
|
| + ASSERT_TRUE(
|
| + hmac.Init(reinterpret_cast<const unsigned char*>(kSimpleKey),
|
| + kSimpleKeyLength));
|
| + const char empty_digest[kSHA1DigestSize] = { 0 };
|
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kSimpleHmacCases); ++i) {
|
| + // Expected results
|
| + EXPECT_TRUE(hmac.Verify(
|
| + base::StringPiece(kSimpleHmacCases[i].data,
|
| + kSimpleHmacCases[i].data_len),
|
| + base::StringPiece(kSimpleHmacCases[i].digest,
|
| + kSHA1DigestSize)));
|
| + // Mismatched size
|
| + EXPECT_FALSE(hmac.Verify(
|
| + base::StringPiece(kSimpleHmacCases[i].data,
|
| + kSimpleHmacCases[i].data_len),
|
| + base::StringPiece(kSimpleHmacCases[i].data,
|
| + kSimpleHmacCases[i].data_len)));
|
| +
|
| + // Expected size, mismatched data
|
| + EXPECT_FALSE(hmac.Verify(
|
| + base::StringPiece(kSimpleHmacCases[i].data,
|
| + kSimpleHmacCases[i].data_len),
|
| + base::StringPiece(empty_digest, kSHA1DigestSize)));
|
| }
|
| }
|
|
|