Index: content/child/webcrypto/test/rsa_ssa_unittest.cc |
diff --git a/content/child/webcrypto/test/rsa_ssa_unittest.cc b/content/child/webcrypto/test/rsa_ssa_unittest.cc |
index 1733ae78e3a9ce92aef0d0e05bb9d6edd9f4399b..1a01a60400c9e3407e8e979cc91cb8dc23b1521a 100644 |
--- a/content/child/webcrypto/test/rsa_ssa_unittest.cc |
+++ b/content/child/webcrypto/test/rsa_ssa_unittest.cc |
@@ -823,6 +823,66 @@ TEST(WebCryptoRsaSsaTest, GenerateKeyPairEmptyUsages) { |
true, 0, &public_key, &private_key)); |
} |
+TEST(WebCryptoRsaSsaTest, ImportKeyEmptyUsages) { |
+ if (!SupportsRsaPrivateKeyImport()) |
+ return; |
+ |
+ blink::WebCryptoKey public_key; |
+ blink::WebCryptoKey private_key; |
+ |
+ // Public without usage does not throw an error. |
+ ASSERT_EQ(Status::Success(), |
+ ImportKey(blink::WebCryptoKeyFormatSpki, |
+ CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)), |
+ CreateRsaHashedImportAlgorithm( |
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, |
+ blink::WebCryptoAlgorithmIdSha256), |
+ true, 0, &public_key)); |
+ EXPECT_EQ(0, public_key.usages()); |
+ |
+ // Private empty usage will throw an error. |
+ ASSERT_EQ(Status::ErrorCreateKeyEmptyUsages(), |
+ ImportKey(blink::WebCryptoKeyFormatPkcs8, |
+ CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)), |
+ CreateRsaHashedImportAlgorithm( |
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, |
+ blink::WebCryptoAlgorithmIdSha1), |
+ true, 0, &private_key)); |
+ |
+ std::vector<uint8_t> public_jwk; |
+ ASSERT_EQ(Status::Success(), |
+ ExportKey(blink::WebCryptoKeyFormatJwk, public_key, &public_jwk)); |
+ |
+ ASSERT_EQ(Status::Success(), |
+ ImportKey(blink::WebCryptoKeyFormatJwk, |
+ CryptoData(public_jwk), |
+ CreateRsaHashedImportAlgorithm( |
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, |
+ blink::WebCryptoAlgorithmIdSha256), |
+ true, 0, &public_key)); |
+ EXPECT_EQ(0, public_key.usages()); |
+ |
+ // With correct usage to get correct imported private_key |
+ std::vector<uint8_t> private_jwk; |
+ ImportKey(blink::WebCryptoKeyFormatPkcs8, |
+ CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)), |
+ CreateRsaHashedImportAlgorithm( |
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, |
+ blink::WebCryptoAlgorithmIdSha1), |
+ true, blink::WebCryptoKeyUsageSign, &private_key); |
+ |
+ ASSERT_EQ(Status::Success(), |
+ ExportKey(blink::WebCryptoKeyFormatJwk, private_key, &private_jwk)); |
+ |
+ ASSERT_EQ(Status::ErrorCreateKeyEmptyUsages(), |
+ ImportKey(blink::WebCryptoKeyFormatJwk, |
+ CryptoData(private_jwk), |
+ CreateRsaHashedImportAlgorithm( |
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, |
+ blink::WebCryptoAlgorithmIdSha1), |
+ true, 0, &private_key)); |
+} |
+ |
TEST(WebCryptoRsaSsaTest, ImportExportJwkRsaPublicKey) { |
struct TestCase { |
const blink::WebCryptoAlgorithmId hash; |