Index: content/child/webcrypto/shared_crypto_unittest.cc |
diff --git a/content/child/webcrypto/shared_crypto_unittest.cc b/content/child/webcrypto/shared_crypto_unittest.cc |
index 821945fb800bb70c7cb84b27d7ae94dc29c70568..6f18fe6e8cc47cec2bb9f0bf0a662ecc2263ce23 100644 |
--- a/content/child/webcrypto/shared_crypto_unittest.cc |
+++ b/content/child/webcrypto/shared_crypto_unittest.cc |
@@ -649,6 +649,43 @@ TEST_F(SharedCryptoTest, DigestSampleSets) { |
} |
} |
+TEST_F(SharedCryptoTest, DigestSampleSetsInChunks) { |
+ scoped_ptr<base::ListValue> tests; |
+ ASSERT_TRUE(ReadJsonTestFileToList("digest.json", &tests)); |
+ |
+ for (size_t test_index = 0; test_index < tests->GetSize(); ++test_index) { |
+ SCOPED_TRACE(test_index); |
+ base::DictionaryValue* test; |
+ ASSERT_TRUE(tests->GetDictionary(test_index, &test)); |
+ |
+ blink::WebCryptoAlgorithm test_algorithm = |
+ GetDigestAlgorithm(test, "algorithm"); |
+ std::vector<uint8> test_input = GetBytesFromHexString(test, "input"); |
+ std::vector<uint8> test_output = GetBytesFromHexString(test, "output"); |
+ |
+ // Test the chunk version of the digest functions. Test with 129 byte chunks |
+ // because the SHA-512 chunk size is 128 bytes. |
+ unsigned char* output; |
+ unsigned int output_length; |
+ static const size_t CHUNK_SIZE = 129; |
eroman
2014/03/25 23:26:23
kChunkSizeBytes
jww
2014/03/26 00:42:31
Done.
|
+ size_t length = test_input.size(); |
+ scoped_ptr<blink::WebCryptoDigestor> digestor( |
+ CreateDigestor(test_algorithm)); |
+ std::vector<uint8>::iterator begin = test_input.begin(); |
+ size_t chunk_index = 0; |
+ while (begin != test_input.end()) { |
+ size_t chunk_length = std::min(CHUNK_SIZE, length - chunk_index); |
+ std::vector<uint8> chunk(begin, begin + chunk_length); |
+ EXPECT_TRUE(digestor->consume(chunk.data(), chunk.size())); |
+ chunk_index = chunk_index + chunk_length; |
+ begin = begin + chunk_length; |
+ } |
+ EXPECT_TRUE(digestor->finish(output, output_length)); |
+ ExpectVectorMatches(test_output, |
+ std::vector<uint8>(output, output + output_length)); |
+ } |
+} |
+ |
TEST_F(SharedCryptoTest, HMACSampleSets) { |
scoped_ptr<base::ListValue> tests; |
ASSERT_TRUE(ReadJsonTestFileToList("hmac.json", &tests)); |