| <!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("Test importing and exporting an EC public key in raw format."); |
| |
| jsTestIsAsync = true; |
| |
| // P-256 key in uncompressed form |
| var kUncompressedHex = "044EA34391AA73885454BC45DF3FDCC4A70262FA4621FFE25B5790590C340A4BD9265EF2B3F9A86E2959A960D90323465D60CD4A90D314C5DE3F869AD0D4BF6C10"; |
| |
| // The same key as above but in compressed form. |
| var kCompressedHex = "024ea34391aa73885454bc45df3fdcc4a70262fa4621ffe25b5790590c340a4bd9"; |
| |
| var algorithm = {name: "ECDH", namedCurve: "P-256"}; |
| var extractable = true; |
| |
| debug("Importing raw (uncompressed) public key..."); |
| crypto.subtle.importKey("raw", hexStringToUint8Array(kUncompressedHex), algorithm, extractable, []).then(function(result) { |
| publicKey = result; |
| shouldBe("publicKey.toString()", "'[object CryptoKey]'"); |
| shouldBe("publicKey.type", "'public'"); |
| shouldBe("publicKey.usages", "[]"); |
| shouldBe("publicKey.algorithm.name", "'ECDH'"); |
| shouldBe("publicKey.algorithm.namedCurve", "'P-256'"); |
| |
| debug("Exporting to raw..."); |
| return crypto.subtle.exportKey("raw", publicKey); |
| }).then(function(result) { |
| bytesShouldMatchHexString("Exported to raw", kUncompressedHex, result) |
| |
| debug("Importing raw (compressed) public key..."); |
| return crypto.subtle.importKey("raw", hexStringToUint8Array(kCompressedHex), algorithm, extractable, []); |
| }).then(function(result) { |
| publicKey = result; |
| shouldBe("publicKey.toString()", "'[object CryptoKey]'"); |
| shouldBe("publicKey.type", "'public'"); |
| shouldBe("publicKey.usages", "[]"); |
| shouldBe("publicKey.algorithm.name", "'ECDH'"); |
| shouldBe("publicKey.algorithm.namedCurve", "'P-256'"); |
| |
| debug("Exporting to raw..."); |
| return crypto.subtle.exportKey("raw", publicKey); |
| }).then(function(result) { |
| bytesShouldMatchHexString("Exported to raw", kUncompressedHex, result) |
| |
| debug("Importing invalid raw public key..."); |
| return crypto.subtle.importKey("raw", hexStringToUint8Array("040708"), algorithm, extractable, []); |
| }).then(failAndFinishJSTest, function(result) { |
| logError(result); |
| }).then(finishJSTest, failAndFinishJSTest); |
| </script> |
| |
| </body> |
| </html> |