Index: content/renderer/webcrypto_impl_unittest.cc |
diff --git a/content/renderer/webcrypto_impl_unittest.cc b/content/renderer/webcrypto_impl_unittest.cc |
index 170c39d11e5230dcaf144d8930ba45e735ae418e..696d88745dcd0f9481628b0925019fdef81c0b6d 100644 |
--- a/content/renderer/webcrypto_impl_unittest.cc |
+++ b/content/renderer/webcrypto_impl_unittest.cc |
@@ -105,6 +105,23 @@ class WebCryptoImplTest : public testing::Test { |
return crypto_.SignInternal(algorithm, key, data, data_size, buffer); |
} |
+ bool VerifySignatureInternal( |
+ const WebKit::WebCryptoAlgorithm& algorithm, |
+ const WebKit::WebCryptoKey& key, |
+ const unsigned char* signature, |
+ unsigned signature_size, |
+ const unsigned char* data, |
+ unsigned data_size, |
+ bool* signature_match) { |
+ return crypto_.VerifySignatureInternal(algorithm, |
+ key, |
+ signature, |
+ signature_size, |
+ data, |
+ data_size, |
+ signature_match); |
+ } |
+ |
private: |
WebCryptoImpl crypto_; |
}; |
@@ -296,6 +313,40 @@ TEST_F(WebCryptoImplTest, HMACSampleSets) { |
algorithm, key, message_raw.data(), message_raw.size(), &output)); |
ExpectArrayBufferMatchesHex(test.mac, output); |
+ |
+ bool signature_match = false; |
+ EXPECT_TRUE(VerifySignatureInternal( |
+ algorithm, |
+ key, |
+ static_cast<const unsigned char*>(output.data()), |
+ output.byteLength(), |
+ message_raw.data(), |
+ message_raw.size(), |
+ &signature_match)); |
+ EXPECT_TRUE(signature_match); |
+ |
+ // Ensure truncated signature does not verify by passing one less byte. |
+ EXPECT_TRUE(VerifySignatureInternal( |
+ algorithm, |
+ key, |
+ static_cast<const unsigned char*>(output.data()), |
+ output.byteLength() - 1, |
+ message_raw.data(), |
+ message_raw.size(), |
+ &signature_match)); |
+ EXPECT_FALSE(signature_match); |
+ |
+ // Ensure extra long signature does not cause issues and fails. |
+ const unsigned char kLongSignature[1024] = { 0 }; |
+ EXPECT_TRUE(VerifySignatureInternal( |
+ algorithm, |
+ key, |
+ kLongSignature, |
+ sizeof(kLongSignature), |
+ message_raw.data(), |
+ message_raw.size(), |
+ &signature_match)); |
+ EXPECT_FALSE(signature_match); |
} |
} |