| 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 3beadc476170cd9b88ad1d7204d2ec19bf300580..20f1ad5027532741cdd0b9ba7cd228f8ac4b2521 100644
|
| --- a/content/child/webcrypto/shared_crypto_unittest.cc
|
| +++ b/content/child/webcrypto/shared_crypto_unittest.cc
|
| @@ -2785,9 +2785,7 @@ TEST_F(SharedCryptoTest, MAYBE(AesKwRawSymkeyWrapUnwrapKnownAnswer)) {
|
| EXPECT_FALSE(key.isNull());
|
| EXPECT_TRUE(key.handle());
|
| EXPECT_EQ(blink::WebCryptoKeyTypeSecret, key.type());
|
| - EXPECT_EQ(
|
| - webcrypto::CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc).id(),
|
| - key.algorithm().id());
|
| + EXPECT_EQ(blink::WebCryptoAlgorithmIdAesCbc, key.algorithm().id());
|
| EXPECT_EQ(true, key.extractable());
|
| EXPECT_EQ(blink::WebCryptoKeyUsageEncrypt, key.usages());
|
|
|
| @@ -2799,6 +2797,64 @@ TEST_F(SharedCryptoTest, MAYBE(AesKwRawSymkeyWrapUnwrapKnownAnswer)) {
|
| }
|
| }
|
|
|
| +// Unwrap a HMAC key using AES-KW, and then try doing a sign/verify with the
|
| +// unwrapped key
|
| +TEST_F(SharedCryptoTest, MAYBE(AesKwRawSymkeyUnwrapSignVerifyHmac)) {
|
| + scoped_ptr<base::ListValue> tests;
|
| + ASSERT_TRUE(ReadJsonTestFileToList("aes_kw.json", &tests));
|
| +
|
| + base::DictionaryValue* test;
|
| + ASSERT_TRUE(tests->GetDictionary(0, &test));
|
| + const std::vector<uint8> test_kek = GetBytesFromHexString(test, "kek");
|
| + const std::vector<uint8> test_ciphertext =
|
| + GetBytesFromHexString(test, "ciphertext");
|
| + const blink::WebCryptoAlgorithm wrapping_algorithm =
|
| + CreateAlgorithm(blink::WebCryptoAlgorithmIdAesKw);
|
| +
|
| + // Import the wrapping key.
|
| + blink::WebCryptoKey wrapping_key = ImportSecretKeyFromRaw(
|
| + test_kek, wrapping_algorithm, blink::WebCryptoKeyUsageUnwrapKey);
|
| +
|
| + // Unwrap the known ciphertext.
|
| + blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
|
| + ASSERT_EQ(
|
| + Status::Success(),
|
| + UnwrapKey(blink::WebCryptoKeyFormatRaw,
|
| + CryptoData(test_ciphertext),
|
| + wrapping_key,
|
| + wrapping_algorithm,
|
| + CreateHmacImportAlgorithm(blink::WebCryptoAlgorithmIdSha1),
|
| + false,
|
| + blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify,
|
| + &key));
|
| +
|
| + EXPECT_EQ(blink::WebCryptoKeyTypeSecret, key.type());
|
| + EXPECT_EQ(blink::WebCryptoAlgorithmIdHmac, key.algorithm().id());
|
| + EXPECT_FALSE(key.extractable());
|
| + EXPECT_EQ(blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify,
|
| + key.usages());
|
| +
|
| + // Sign an empty message and ensure it is verified.
|
| + std::vector<uint8> test_message;
|
| + std::vector<uint8> signature;
|
| +
|
| + ASSERT_EQ(Status::Success(),
|
| + Sign(CreateAlgorithm(blink::WebCryptoAlgorithmIdHmac),
|
| + key,
|
| + CryptoData(test_message),
|
| + &signature));
|
| +
|
| + EXPECT_GT(signature.size(), 0u);
|
| +
|
| + bool verify_result;
|
| + ASSERT_EQ(Status::Success(),
|
| + VerifySignature(CreateAlgorithm(blink::WebCryptoAlgorithmIdHmac),
|
| + key,
|
| + CryptoData(signature),
|
| + CryptoData(test_message),
|
| + &verify_result));
|
| +}
|
| +
|
| TEST_F(SharedCryptoTest, MAYBE(AesKwRawSymkeyWrapUnwrapErrors)) {
|
| scoped_ptr<base::ListValue> tests;
|
| ASSERT_TRUE(ReadJsonTestFileToList("aes_kw.json", &tests));
|
|
|