Index: third_party/WebKit/LayoutTests/crypto/subtle/modify-verify-data-during-normalization.html |
diff --git a/third_party/WebKit/LayoutTests/crypto/subtle/modify-verify-data-during-normalization.html b/third_party/WebKit/LayoutTests/crypto/subtle/modify-verify-data-during-normalization.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9b12e17f56e45dd2510fd1693648d3e612289e37 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/crypto/subtle/modify-verify-data-during-normalization.html |
@@ -0,0 +1,68 @@ |
+<!DOCTYPE html> |
+<html> |
+<head> |
+<script src="../../resources/js-test.js"></script> |
+<script src="resources/common.js"></script> |
+</head> |
+<body> |
+<p id="description"></p> |
+<div id="console"></div> |
+ |
+<script> |
+description("Tests crypto.subtle.verify() using a BufferSource that is modified during algorithm normalization"); |
+ |
+jsTestIsAsync = true; |
+ |
+var publicKeyJSON = { |
+ kty: "RSA", |
+ alg: "RS256", |
+ n: Base64URL.stringify(hexStringToUint8Array("ADC0940AFECE7351D56A6D432210B3AA49D38566B03A9F102E4F198B2DA9D740728D01426A3A058B2B805A5F91D565D969FE318AD2D1ADA713F5A829CC8CDCF8C6CB4872068164063B6D651A2226CB97ED67E0FC6C702A473DB2D79A730F8738084A2EED74922C3A119D1D101B932C0E10FAB36815F66C0792BB640B1B4C59D062FBBEDAB3CC069A535195D70E4A06432CAF149C24A00353A0B99F7CF5B17273CB4E38421BD315127CF4B3DCB3D20A7C98CFAF1A0E398A55E347FA283CE7B39273259B1B2132DC18B0EB8AAE9F78EE525356B09DF39E090E76D7985B2B71E50AF85CA36CE91F8CCB2ABBD8A529D369890D98A2CA2825C4C2FF8B7FBF09E79C0B")), |
+ e: Base64URL.stringify(hexStringToUint8Array("010001")), |
+}; |
+ |
+var data = asciiToUint8Array("Hello, world!"); |
+ |
+var signature = hexStringToUint8Array("0fd9a8aef4cc1876c0b762545336c6d1fb315ae16ae4b5e4bf34d384d8585ea7a01e76ea09ee7f7ee8d1c122e7dd15b7c94a573b2aa07203e8d13bc6fd16156cd8e5f0c15a15dccb62d152127fca09882fb53bc3e60ab586d15b95cf411e3aab4a1c231a7e91aab09ee3d4b13d11e97505ddff77683470da510ee76e8bd530c56a85f901626a5a710f716f113dfe9cf6c473ee16fa248aea3480a1033abe30f4c1243289a661e64d7818b55698280688097135968c6d4b029496d85cab2a67e4696737781f70e4392c7df71bbd6c92465947f029a1de48160aced11b5721b1cd25039fe2c16c2b38de73df3b9a83e3ea755fd0cfe51ca06b61fadf6d84677f95"); |
+ |
+var publicKey = null; |
+ |
+function corruptData() |
+{ |
+ debug("Corrupting data..."); |
+ data[0] = 0; |
+ data[1] = 0; |
+} |
+ |
+var extractable = true; |
+ |
+debug("Importing RSA public key..."); |
+crypto.subtle.importKey("jwk", publicKeyJSON, { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }, extractable, ["verify"]).then(function(result) { |
+ publicKey = result; |
+ |
+ // This algorithm has a custom getter that modifies |data|. |
+ var algorithm = { |
+ get name() { |
+ debug("Accessed name property"); |
+ corruptData(); |
+ return "RSASSA-PKCS1-v1_5"; |
+ } |
+ }; |
+ |
+ debug("\nVerifying the signature..."); |
+ return crypto.subtle.verify(algorithm, publicKey, signature, data); |
+}).then(function(result) { |
+ // Despite modifying the data, verification should succeed. |
+ verificationResult = result; |
+ shouldBe("verificationResult", "true"); |
+ |
+ debug("\nVerifying the signature (again)..."); |
+ return crypto.subtle.verify("RSASSA-PKCS1-v1_5", publicKey, signature, data); |
+}).then(function(result) { |
+ // This time around expect verification to have failed. |
+ verificationResult = result; |
+ shouldBe("verificationResult", "false"); |
+}).then(finishJSTest, failAndFinishJSTest); |
+</script> |
+ |
+</body> |
+</html> |