| Index: content/renderer/webcrypto/webcrypto_impl_unittest.cc | 
| diff --git a/content/renderer/webcrypto/webcrypto_impl_unittest.cc b/content/renderer/webcrypto/webcrypto_impl_unittest.cc | 
| index 864952e1ccac7a9806efbb0f4646a44369edfa3c..9540292b51c101e5538118d2e86e79456ef25150 100644 | 
| --- a/content/renderer/webcrypto/webcrypto_impl_unittest.cc | 
| +++ b/content/renderer/webcrypto/webcrypto_impl_unittest.cc | 
| @@ -789,7 +789,87 @@ TEST_F(WebCryptoImplTest, ImportExportSpki) { | 
| EXPECT_FALSE(key.extractable()); | 
| EXPECT_FALSE(ExportKeyInternal(blink::WebCryptoKeyFormatSpki, key, &output)); | 
|  | 
| -  // TODO(padolph): Import a RSA SPKI key and verify it works with an operation. | 
| +  // TODO(padolph): Use the imported key for a Known Answer Test (KAT). | 
| +} | 
| + | 
| +TEST_F(WebCryptoImplTest, ImportPkcs8) { | 
| + | 
| +  // The following is a DER-encoded PKCS#8 representation of the RSA key from | 
| +  // Example 1 of NIST's "Test vectors for RSA PKCS#1 v1.5 Signature". | 
| +  // ftp://ftp.rsa.com/pub/rsalabs/tmp/pkcs1v15sign-vectors.txt | 
| +  const std::string hex_rsa_pkcs8_der = | 
| +      "30820275020100300D06092A864886F70D01010105000482025F3082025B020100028181" | 
| +      "00A56E4A0E701017589A5187DC7EA841D156F2EC0E36AD52A44DFEB1E61F7AD991D8C510" | 
| +      "56FFEDB162B4C0F283A12A88A394DFF526AB7291CBB307CEABFCE0B1DFD5CD9508096D5B" | 
| +      "2B8B6DF5D671EF6377C0921CB23C270A70E2598E6FF89D19F105ACC2D3F0CB35F29280E1" | 
| +      "386B6F64C4EF22E1E1F20D0CE8CFFB2249BD9A2137020301000102818033A5042A90B27D" | 
| +      "4F5451CA9BBBD0B44771A101AF884340AEF9885F2A4BBE92E894A724AC3C568C8F97853A" | 
| +      "D07C0266C8C6A3CA0929F1E8F11231884429FC4D9AE55FEE896A10CE707C3ED7E734E447" | 
| +      "27A39574501A532683109C2ABACABA283C31B4BD2F53C3EE37E352CEE34F9E503BD80C06" | 
| +      "22AD79C6DCEE883547C6A3B325024100E7E8942720A877517273A356053EA2A1BC0C94AA" | 
| +      "72D55C6E86296B2DFC967948C0A72CBCCCA7EACB35706E09A1DF55A1535BD9B3CC34160B" | 
| +      "3B6DCD3EDA8E6443024100B69DCA1CF7D4D7EC81E75B90FCCA874ABCDE123FD2700180AA" | 
| +      "90479B6E48DE8D67ED24F9F19D85BA275874F542CD20DC723E6963364A1F9425452B269A" | 
| +      "6799FD024028FA13938655BE1F8A159CBACA5A72EA190C30089E19CD274A556F36C4F6E1" | 
| +      "9F554B34C077790427BBDD8DD3EDE2448328F385D81B30E8E43B2FFFA02786197902401A" | 
| +      "8B38F398FA712049898D7FB79EE0A77668791299CDFA09EFC0E507ACB21ED74301EF5BFD" | 
| +      "48BE455EAEB6E1678255827580A8E4E8E14151D1510A82A3F2E729024027156ABA4126D2" | 
| +      "4A81F3A528CBFB27F56886F840A9F6E86E17A44B94FE9319584B8E22FDDE1E5A2E3BD8AA" | 
| +      "5BA8D8584194EB2190ACF832B847F13A3D24A79F4D"; | 
| + | 
| +  // Passing case: Import a valid RSA key in PKCS#8 format. | 
| +  blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); | 
| +  ASSERT_TRUE(ImportKeyInternal( | 
| +      blink::WebCryptoKeyFormatPkcs8, | 
| +      HexStringToBytes(hex_rsa_pkcs8_der), | 
| +      CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5), | 
| +      true, | 
| +      blink::WebCryptoKeyUsageSign, | 
| +      &key)); | 
| +  EXPECT_TRUE(key.handle()); | 
| +  EXPECT_EQ(blink::WebCryptoKeyTypePrivate, key.type()); | 
| +  EXPECT_TRUE(key.extractable()); | 
| +  EXPECT_EQ(blink::WebCryptoKeyUsageSign, key.usages()); | 
| + | 
| +  // Failing case: Empty PKCS#8 data | 
| +  EXPECT_FALSE(ImportKeyInternal( | 
| +      blink::WebCryptoKeyFormatPkcs8, | 
| +      std::vector<uint8>(), | 
| +      blink::WebCryptoAlgorithm::createNull(), | 
| +      true, | 
| +      blink::WebCryptoKeyUsageSign, | 
| +      &key)); | 
| + | 
| +  // Failing case: Import RSA key with NULL input algorithm. This is not | 
| +  // allowed because the PKCS#8 ASN.1 format for RSA keys is not specific enough | 
| +  // to map to a Web Crypto algorithm. | 
| +  EXPECT_FALSE(ImportKeyInternal( | 
| +      blink::WebCryptoKeyFormatPkcs8, | 
| +      HexStringToBytes(hex_rsa_pkcs8_der), | 
| +      blink::WebCryptoAlgorithm::createNull(), | 
| +      true, | 
| +      blink::WebCryptoKeyUsageSign, | 
| +      &key)); | 
| + | 
| +  // Failing case: Bad DER encoding. | 
| +  EXPECT_FALSE(ImportKeyInternal( | 
| +      blink::WebCryptoKeyFormatPkcs8, | 
| +      HexStringToBytes("618333c4cb"), | 
| +      CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5), | 
| +      true, | 
| +      blink::WebCryptoKeyUsageSign, | 
| +      &key)); | 
| + | 
| +  // Failing case: Import RSA key but provide an inconsistent input algorithm. | 
| +  EXPECT_FALSE(ImportKeyInternal( | 
| +      blink::WebCryptoKeyFormatPkcs8, | 
| +      HexStringToBytes(hex_rsa_pkcs8_der), | 
| +      CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc), | 
| +      true, | 
| +      blink::WebCryptoKeyUsageSign, | 
| +      &key)); | 
| + | 
| +  // TODO(padolph): Use the imported key for a Known Answer Test (KAT). | 
| } | 
|  | 
| TEST_F(WebCryptoImplTest, GenerateKeyPairRsa) { | 
|  |