<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="../resources/common.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>

<script>
description("Test exporting a SHA-1 RSASSA-PKCS1-v1_5 key pair with JWK format.");

jsTestIsAsync = true;

var algorithmKeyGen = {
    name: "RSASSA-PKCS1-v1_5",
    // RsaKeyGenParams
    modulusLength: 2048,
    publicExponent: new Uint8Array([0x01, 0x00, 0x01]),  // Equivalent to 65537
    hash: "sha-1",
};
var extractable = true;

var keyPair;
debug("Generating a key pair...");
crypto.subtle.generateKey(algorithmKeyGen, extractable, ["sign", "verify"]).then(function(result) {
    keyPair = result;
    debug("Exporting the public key...");
    return crypto.subtle.exportKey("jwk", keyPair.publicKey);
}).then(function(result) {
    publicKey = result;

    shouldBe("publicKey.kty", "'RSA'");
    shouldBe("publicKey.key_ops", "['verify']");
    shouldBe("publicKey.alg", "'RS1'");
    shouldBe("publicKey.ext", "true");
    shouldBe("Base64URL.parse(publicKey.n).byteLength", "256");
    shouldBe("bytesToHexString(Base64URL.parse(publicKey.e))", "'010001'");

    debug("Exporting the private key...");
    return crypto.subtle.exportKey("jwk", keyPair.privateKey);
}).then(function(result) {
    privateKey = result;

    shouldBe("privateKey.kty", "'RSA'");
    shouldBe("privateKey.key_ops", "['sign']");
    shouldBe("privateKey.alg", "'RS1'");
    shouldBe("privateKey.ext", "true");
    shouldBe("Base64URL.parse(privateKey.n).byteLength", "256");
    shouldBe("bytesToHexString(Base64URL.parse(privateKey.e))", "'010001'");
    shouldBeUndefined("privateKey.oth");

    finishJSTest();
});
</script>

<script src="../../resources/js-test-post.js"></script>
</body>
</html>
