71 lines
2.3 KiB
HTML
71 lines
2.3 KiB
HTML
<!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("This test tries to test whether the JWK format exporting/importing methods work as expected." +
|
|
"To do so, it first generates an EC Key Pair, then exports them into JWKs, then imports them back, and finally uses them to do signature verification.");
|
|
|
|
jsTestIsAsync = true;
|
|
|
|
var extractable = true;
|
|
var ecKeyParams = {
|
|
name: "ECDSA",
|
|
namedCurve: "P-256",
|
|
}
|
|
var ecdsaParams = {
|
|
name: "ECDSA",
|
|
hash: "SHA-256",
|
|
}
|
|
var data = asciiToUint8Array("Hello, World!");
|
|
|
|
debug("Generating a key pair...");
|
|
crypto.subtle.generateKey(ecKeyParams, extractable, ["verify", "sign"]).then(function(result) {
|
|
keyPair = result;
|
|
|
|
debug("Exporting the private key in Jwk format...");
|
|
return crypto.subtle.exportKey("jwk", keyPair.privateKey);
|
|
}, failAndFinishJSTest).then(function(result) {
|
|
jwkPrivateKey = result;
|
|
shouldBeDefined("jwkPrivateKey.x");
|
|
shouldBeDefined("jwkPrivateKey.y");
|
|
shouldBeDefined("jwkPrivateKey.d");
|
|
|
|
debug("Importing the JWK private key...");
|
|
return crypto.subtle.importKey("jwk", jwkPrivateKey, ecKeyParams, extractable, ["sign"]);
|
|
}, failAndFinishJSTest).then(function(privateKey) {
|
|
debug("Signing the data...");
|
|
return crypto.subtle.sign(ecdsaParams, privateKey, data);
|
|
}, failAndFinishJSTest).then(function(result) {
|
|
signature = result;
|
|
shouldBe("signature.byteLength", "64");
|
|
|
|
debug("Exporting the public key in Jwk format...");
|
|
return crypto.subtle.exportKey("jwk", keyPair.publicKey);
|
|
}, failAndFinishJSTest).then(function(result) {
|
|
jwkPublicKey = result;
|
|
shouldBeDefined("jwkPublicKey.x");
|
|
shouldBeDefined("jwkPublicKey.y");
|
|
|
|
debug("Importing the JWK public key...");
|
|
return crypto.subtle.importKey("jwk", jwkPublicKey, ecKeyParams, extractable, ["verify"]);
|
|
}, failAndFinishJSTest).then(function(publicKey) {
|
|
debug("Verifying the signature...");
|
|
return crypto.subtle.verify(ecdsaParams, publicKey, signature, data);
|
|
}, failAndFinishJSTest).then(function(result) {
|
|
verified = result;
|
|
|
|
shouldBeTrue("verified");
|
|
|
|
finishJSTest();
|
|
}, failAndFinishJSTest);
|
|
</script>
|
|
</body>
|
|
</html>
|