Index: LayoutTests/crypto/clone-rsaKeyPair.html |
diff --git a/LayoutTests/crypto/clone-rsaKeyPair.html b/LayoutTests/crypto/clone-rsaKeyPair.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9d96483c2d88ffe0386ffc7fd91f2a3dbe1fdee2 |
--- /dev/null |
+++ b/LayoutTests/crypto/clone-rsaKeyPair.html |
@@ -0,0 +1,97 @@ |
+<!DOCTYPE html> |
+<html> |
+<head> |
+<script src="../resources/js-test.js"></script> |
+<script src="resources/common.js"></script> |
+<script src="resources/keys.js"></script> |
+</head> |
+<body> |
+<p id="description"></p> |
+<div id="console"></div> |
+ |
+<script> |
+description("Tests structured cloning of a generated RSA KeyPair."); |
+ |
+jsTestIsAsync = true; |
+ |
+function exportKeyPairData(keyPair) |
+{ |
+ var results = {}; |
+ |
+ return crypto.subtle.exportKey('pkcs8', keyPair.privateKey).then(function(result) { |
+ results.pkcs8Hex = bytesToHexString(result); |
+ return crypto.subtle.exportKey('spki', keyPair.publicKey); |
+ }).then(function(result) { |
+ results.spkiHex = bytesToHexString(result); |
+ return result; |
+ }); |
+} |
+ |
+function runTest(algorithmName, extractable, keyUsages, spkiData, pkcs8Data) |
+{ |
+ var extractable = true; |
+ var usages = ['encrypt', 'decrypt']; |
+ // Note that the modulus length is unusually small in order to speed up |
+ // the test (1024 or 2048 would be more typical). |
+ var algorithm = {name: "RSAES-PKCS1-v1_5", modulusLength: 256, publicExponent: hexStringToUint8Array("010001")}; |
+ |
+ var results = {}; |
+ |
+ return crypto.subtle.generateKey(algorithm, extractable, usages).then(function(result) { |
+ results.generatedKeyPair = result; |
+ result.extraProperty = 'hi'; |
+ return cloneObject(result); |
+ }).then(function(result) { |
+ results.clonedKeyPair = result; |
+ |
+ return exportKeyPairData(results.generatedKeyPair); |
+ }).then(function(result) { |
+ results.generatedKeyPairData = result; |
+ |
+ return exportKeyPairData(results.clonedKeyPair); |
+ }).then(function(result) { |
+ results.clonedKeyPairData = result; |
+ |
+ generatedKeyPair = results.generatedKeyPair; |
+ clonedKeyPair = results.clonedKeyPair; |
+ |
+ shouldEvaluateAs("generatedKeyPair.publicKey.type", "public"); |
+ shouldEvaluateAs("generatedKeyPair.publicKey.extractable", true); |
+ shouldEvaluateAs("generatedKeyPair.publicKey.algorithm.name", algorithm.name); |
+ shouldEvaluateAs("generatedKeyPair.publicKey.algorithm.modulusLength", algorithm.modulusLength); |
+ shouldEvaluateAs("bytesToHexString(generatedKeyPair.publicKey.algorithm.publicExponent)", "010001"); |
+ shouldEvaluateAs("generatedKeyPair.privateKey.type", "private"); |
+ shouldEvaluateAs("generatedKeyPair.privateKey.extractable", true); |
+ shouldEvaluateAs("generatedKeyPair.privateKey.algorithm.name", algorithm.name); |
+ shouldEvaluateAs("generatedKeyPair.privateKey.algorithm.modulusLength", algorithm.modulusLength); |
+ shouldEvaluateAs("bytesToHexString(generatedKeyPair.privateKey.algorithm.publicExponent)", "010001"); |
+ |
+ shouldEvaluateAs("clonedKeyPair.publicKey.type", "public"); |
+ shouldEvaluateAs("clonedKeyPair.publicKey.extractable", true); |
+ shouldEvaluateAs("clonedKeyPair.publicKey.algorithm.name", algorithm.name); |
+ shouldEvaluateAs("clonedKeyPair.publicKey.algorithm.modulusLength", algorithm.modulusLength); |
+ shouldEvaluateAs("bytesToHexString(clonedKeyPair.publicKey.algorithm.publicExponent)", "010001"); |
+ shouldEvaluateAs("clonedKeyPair.privateKey.type", "private"); |
+ shouldEvaluateAs("clonedKeyPair.privateKey.extractable", true); |
+ shouldEvaluateAs("clonedKeyPair.privateKey.algorithm.name", algorithm.name); |
+ shouldEvaluateAs("clonedKeyPair.privateKey.algorithm.modulusLength", algorithm.modulusLength); |
+ shouldEvaluateAs("bytesToHexString(clonedKeyPair.privateKey.algorithm.publicExponent)", "010001"); |
+ |
+ shouldNotBe("generatedKeyPair", "clonedKeyPair"); |
+ |
+ shouldBeUndefined("clonedKeyPair.extraProperty"); |
+ |
+ generatedKeyPairData = results.generatedKeyPairData; |
+ clonedKeyPairData = results.clonedKeyPairData; |
+ |
+ shouldBe("generatedKeyPairData.spkiHex", "clonedKeyPairData.spkiHex") |
+ shouldBe("generatedKeyPairData.pkcs8Hex", "clonedKeyPairData.pkcs8Hex"); |
+ }); |
+} |
+ |
+runTest().then(finishJSTest, failAndFinishJSTest); |
+ |
+</script> |
+ |
+</body> |
+</html> |