| 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>
|
|
|