| 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 31f23c1424f93e963c2fa785c1ef5f5a4a3fe90e..34037309a77055c96aae6ee6eb76fb3b62a0dd26 100644
|
| --- a/content/child/webcrypto/test/rsa_ssa_unittest.cc
|
| +++ b/content/child/webcrypto/test/rsa_ssa_unittest.cc
|
| @@ -58,26 +58,6 @@ TEST(WebCryptoRsaSsaTest, ImportExportSpki) {
|
| "010001",
|
| CryptoData(key.algorithm().rsaHashedParams()->publicExponent()));
|
|
|
| - // Failing case: Empty SPKI data
|
| - EXPECT_EQ(
|
| - Status::ErrorImportEmptyKeyData(),
|
| - ImportKey(blink::WebCryptoKeyFormatSpki,
|
| - CryptoData(std::vector<uint8_t>()),
|
| - CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5),
|
| - true,
|
| - blink::WebCryptoKeyUsageVerify,
|
| - &key));
|
| -
|
| - // Failing case: Bad DER encoding.
|
| - EXPECT_EQ(
|
| - Status::DataError(),
|
| - ImportKey(blink::WebCryptoKeyFormatSpki,
|
| - CryptoData(HexStringToBytes("618333c4cb")),
|
| - CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5),
|
| - true,
|
| - blink::WebCryptoKeyUsageVerify,
|
| - &key));
|
| -
|
| // Failing case: Import RSA key but provide an inconsistent input algorithm.
|
| EXPECT_EQ(Status::ErrorUnsupportedImportKeyFormat(),
|
| ImportKey(blink::WebCryptoKeyFormatSpki,
|
| @@ -154,27 +134,6 @@ TEST(WebCryptoRsaSsaTest, ImportExportPkcs8) {
|
| ExportKey(blink::WebCryptoKeyFormatPkcs8, key, &exported_key));
|
| EXPECT_BYTES_EQ_HEX(kPrivateKeyPkcs8DerHex, exported_key);
|
|
|
| - // Failing case: Empty PKCS#8 data
|
| - EXPECT_EQ(Status::ErrorImportEmptyKeyData(),
|
| - ImportKey(blink::WebCryptoKeyFormatPkcs8,
|
| - CryptoData(std::vector<uint8_t>()),
|
| - CreateRsaHashedImportAlgorithm(
|
| - blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
|
| - blink::WebCryptoAlgorithmIdSha1),
|
| - true,
|
| - blink::WebCryptoKeyUsageSign,
|
| - &key));
|
| -
|
| - // Failing case: Bad DER encoding.
|
| - EXPECT_EQ(
|
| - Status::DataError(),
|
| - ImportKey(blink::WebCryptoKeyFormatPkcs8,
|
| - CryptoData(HexStringToBytes("618333c4cb")),
|
| - CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5),
|
| - true,
|
| - blink::WebCryptoKeyUsageSign,
|
| - &key));
|
| -
|
| // Failing case: Import RSA key but provide an inconsistent input algorithm
|
| // and usage. Several issues here:
|
| // * AES-CBC doesn't support PKCS8 key format
|
| @@ -189,6 +148,7 @@ TEST(WebCryptoRsaSsaTest, ImportExportPkcs8) {
|
| }
|
|
|
| // Tests importing of PKCS8 data that does not define a valid RSA key.
|
| +// TODO(eroman): Move to bad_rsa_keys.json
|
| TEST(WebCryptoRsaSsaTest, ImportInvalidPkcs8) {
|
| if (!SupportsRsaPrivateKeyImport())
|
| return;
|
| @@ -431,6 +391,7 @@ TEST(WebCryptoRsaSsaTest, ImportJwkExistingModulusAndInvalid) {
|
| //
|
| // This fails because JWA says that producers must include either ALL optional
|
| // parameters or NONE.
|
| +// TODO(eroman): Move to bad_rsa_keys.json
|
| TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkMissingOptionalParams) {
|
| blink::WebCryptoKey key;
|
|
|
| @@ -471,6 +432,7 @@ TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkMissingOptionalParams) {
|
| // include all the parameters when sending, and recipients MAY
|
| // accept them, but are not required to. Chromium's WebCrypto does
|
| // not allow such degenerate keys.
|
| +// TODO(eroman): Move to bad_rsa_keys.json
|
| TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkIncorrectOptionalEmpty) {
|
| if (!SupportsRsaPrivateKeyImport())
|
| return;
|
| @@ -504,6 +466,7 @@ TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkIncorrectOptionalEmpty) {
|
| }
|
|
|
| // Tries importing a public RSA key whose exponent contains leading zeros.
|
| +// TODO(eroman): Move to bad_rsa_keys.json
|
| TEST(WebCryptoRsaSsaTest, ImportJwkRsaNonMinimalExponent) {
|
| base::DictionaryValue dict;
|
|
|
| @@ -1226,6 +1189,64 @@ TEST(WebCryptoRsaSsaTest, ImportRsaSsaJwkBadUsageFailFast) {
|
| &key));
|
| }
|
|
|
| +// Reads a key format string as used in bad_rsa_keys.json, and converts to a
|
| +// WebCryptoKeyFormat.
|
| +blink::WebCryptoKeyFormat GetKeyFormatForTestCase(
|
| + const base::DictionaryValue* test) {
|
| + std::string format;
|
| + EXPECT_TRUE(test->GetString("format", &format));
|
| + if (format == "jwk")
|
| + return blink::WebCryptoKeyFormatJwk;
|
| + else if (format == "pkcs8")
|
| + return blink::WebCryptoKeyFormatPkcs8;
|
| + else if (format == "spki")
|
| + return blink::WebCryptoKeyFormatSpki;
|
| +
|
| + EXPECT_TRUE(false) << "Unrecognized key format: " << format;
|
| + return blink::WebCryptoKeyFormatRaw;
|
| +}
|
| +
|
| +// Extracts the key data bytes from |test|, as it appears in bad_rsa_keys.json.
|
| +std::vector<uint8_t> GetKeyDataForTestCase(
|
| + const base::DictionaryValue* test,
|
| + blink::WebCryptoKeyFormat key_format) {
|
| + if (key_format == blink::WebCryptoKeyFormatJwk) {
|
| + const base::DictionaryValue* json;
|
| + EXPECT_TRUE(test->GetDictionary("data", &json));
|
| + return MakeJsonVector(*json);
|
| + }
|
| + return GetBytesFromHexString(test, "data");
|
| +}
|
| +
|
| +// Imports invalid JWK/SPKI/PKCS8 data and verifies that it fails as expected.
|
| +TEST(WebCryptoRsaSsaTest, ImportInvalidKeyData) {
|
| + if (!SupportsRsaPrivateKeyImport())
|
| + return;
|
| +
|
| + scoped_ptr<base::ListValue> tests;
|
| + ASSERT_TRUE(ReadJsonTestFileToList("bad_rsa_keys.json", &tests));
|
| +
|
| + for (size_t test_index = 0; test_index < tests->GetSize(); ++test_index) {
|
| + SCOPED_TRACE(test_index);
|
| +
|
| + const base::DictionaryValue* test;
|
| + ASSERT_TRUE(tests->GetDictionary(test_index, &test));
|
| +
|
| + blink::WebCryptoKeyFormat key_format = GetKeyFormatForTestCase(test);
|
| + std::vector<uint8_t> key_data = GetKeyDataForTestCase(test, key_format);
|
| + std::string test_error;
|
| + ASSERT_TRUE(test->GetString("error", &test_error));
|
| +
|
| + blink::WebCryptoKey key;
|
| + Status status = ImportKey(key_format, CryptoData(key_data),
|
| + CreateRsaHashedImportAlgorithm(
|
| + blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
|
| + blink::WebCryptoAlgorithmIdSha256),
|
| + true, 0, &key);
|
| + EXPECT_EQ(test_error, StatusToString(status));
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| } // namespace webcrypto
|
|
|