OLD | NEW |
---|---|
(Empty) | |
1 <!DOCTYPE html> | |
2 <html> | |
3 <head> | |
4 <script src="../resources/js-test.js"></script> | |
5 <script src="resources/common.js"></script> | |
6 <script src="resources/keys.js"></script> | |
7 </head> | |
8 <body> | |
9 <p id="description"></p> | |
10 <div id="console"></div> | |
11 | |
12 <script> | |
13 description("Tests structured cloning of a generated RSA KeyPair."); | |
14 | |
15 jsTestIsAsync = true; | |
16 | |
17 function exportKeyPairData(keyPair) | |
18 { | |
19 var results = {}; | |
20 | |
21 return crypto.subtle.exportKey('pkcs8', keyPair.privateKey).then(function(re sult) { | |
22 results.pkcs8Hex = bytesToHexString(result); | |
23 return crypto.subtle.exportKey('spki', keyPair.publicKey); | |
24 }).then(function(result) { | |
25 results.spkiHex = bytesToHexString(result); | |
26 return result; | |
27 }); | |
28 } | |
29 | |
30 function runTest(algorithmName, extractable, keyUsages, spkiData, pkcs8Data) | |
31 { | |
32 var extractable = true; | |
33 var usages = ['encrypt', 'decrypt']; | |
34 // Note that the modulus length is unsually small, in order to speed up the test. | |
jsbell
2014/05/06 20:38:09
typo: unusually
| |
35 var algorithm = {name: "RSAES-PKCS1-v1_5", modulusLength: 256, publicExponen t: hexStringToUint8Array("010001")}; | |
36 | |
37 var results = {}; | |
38 | |
39 return crypto.subtle.generateKey(algorithm, extractable, usages).then(functi on(result) { | |
40 results.generatedKeyPair = result; | |
41 result.extraProperty = 'hi'; | |
42 return cloneObject(result); | |
43 }).then(function(result) { | |
44 results.clonedKeyPair = result; | |
45 | |
46 return exportKeyPairData(results.generatedKeyPair); | |
47 }).then(function(result) { | |
48 results.generatedKeyPairData = result; | |
49 | |
50 return exportKeyPairData(results.clonedKeyPair); | |
51 }).then(function(result) { | |
52 results.clonedKeyPairData = result; | |
53 | |
54 generatedKeyPair = results.generatedKeyPair; | |
55 clonedKeyPair = results.clonedKeyPair; | |
56 | |
57 shouldEvaluateAs("generatedKeyPair.publicKey.type", "public"); | |
58 shouldEvaluateAs("generatedKeyPair.publicKey.extractable", true); | |
59 shouldEvaluateAs("generatedKeyPair.publicKey.algorithm.name", algorithm. name); | |
60 shouldEvaluateAs("generatedKeyPair.publicKey.algorithm.modulusLength", a lgorithm.modulusLength); | |
61 shouldEvaluateAs("bytesToHexString(generatedKeyPair.publicKey.algorithm. publicExponent)", "010001"); | |
62 shouldEvaluateAs("generatedKeyPair.privateKey.type", "private"); | |
63 shouldEvaluateAs("generatedKeyPair.privateKey.extractable", true); | |
64 shouldEvaluateAs("generatedKeyPair.privateKey.algorithm.name", algorithm .name); | |
65 shouldEvaluateAs("generatedKeyPair.privateKey.algorithm.modulusLength", algorithm.modulusLength); | |
66 shouldEvaluateAs("bytesToHexString(generatedKeyPair.privateKey.algorithm .publicExponent)", "010001"); | |
67 | |
68 shouldEvaluateAs("clonedKeyPair.publicKey.type", "public"); | |
69 shouldEvaluateAs("clonedKeyPair.publicKey.extractable", true); | |
70 shouldEvaluateAs("clonedKeyPair.publicKey.algorithm.name", algorithm.nam e); | |
71 shouldEvaluateAs("clonedKeyPair.publicKey.algorithm.modulusLength", algo rithm.modulusLength); | |
72 shouldEvaluateAs("bytesToHexString(clonedKeyPair.publicKey.algorithm.pub licExponent)", "010001"); | |
73 shouldEvaluateAs("clonedKeyPair.privateKey.type", "private"); | |
74 shouldEvaluateAs("clonedKeyPair.privateKey.extractable", true); | |
75 shouldEvaluateAs("clonedKeyPair.privateKey.algorithm.name", algorithm.na me); | |
76 shouldEvaluateAs("clonedKeyPair.privateKey.algorithm.modulusLength", alg orithm.modulusLength); | |
77 shouldEvaluateAs("bytesToHexString(clonedKeyPair.privateKey.algorithm.pu blicExponent)", "010001"); | |
78 | |
79 shouldBeTrue("generatedKeyPair != clonedKeyPair"); | |
jsbell
2014/05/06 20:38:09
nit: shouldNotBe("generatedKeyPair", "clonedKeyPai
eroman
2014/05/06 21:35:17
Done.
| |
80 | |
81 shouldBeUndefined("clonedKeyPair.extraProperty"); | |
82 | |
83 generatedKeyPairData = results.generatedKeyPairData; | |
84 clonedKeyPairData = results.clonedKeyPairData; | |
85 | |
86 shouldBeTrue("generatedKeyPairData.spkiHex == clonedKeyPairData.spkiHex" ) | |
jsbell
2014/05/06 20:38:09
nit: shouldBe("generatedKeyPairData.spkiHex", "clo
eroman
2014/05/06 21:35:17
Done.
| |
87 shouldBeTrue("generatedKeyPairData.pkcs8Hex == clonedKeyPairData.pkcs8He x"); | |
jsbell
2014/05/06 20:38:09
nit: shouldBeTrue("generatedKeyPairData.pkcs8Hex",
eroman
2014/05/06 21:35:17
Done.
| |
88 }); | |
89 } | |
90 | |
91 runTest().then(finishJSTest, failAndFinishJSTest); | |
92 | |
93 </script> | |
94 | |
95 </body> | |
96 </html> | |
OLD | NEW |