chromium/third_party/blink/web_tests/crypto/subtle/ec-export-public-key.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("Test exporting a public EC key.");

jsTestIsAsync = true;

var extractable = true;

var publicKeySpkiHex = "3059301306072A8648CE3D020106082A8648CE3D030107034200049CB0CF69303DAFC761D4E4687B4ECF039E6D34AB964AF80810D8D558A4A8D6F72D51233A1788920A86EE08A1962C79EFA317FB7879E297DAD2146DB995FA1C78";

debug("\nImporting a SPKI key...");
crypto.subtle.importKey("spki", hexStringToUint8Array(publicKeySpkiHex), {name: "ECDSA", namedCurve: "P-256"}, extractable, ['verify']).then(function(result) {
    key = result;

    debug("\nExporting the key as JWK...");
    return crypto.subtle.exportKey("jwk", key);
}).then(function(result) {
    exportedJWK = result;

    shouldEvaluateAs("exportedJWK.kty", "EC");
    shouldEvaluateAs("exportedJWK.crv", "P-256");
    shouldEvaluateAs("exportedJWK.x", "nLDPaTA9r8dh1ORoe07PA55tNKuWSvgIENjVWKSo1vc");
    shouldEvaluateAs("exportedJWK.y", "LVEjOheIkgqG7gihlix576MX-3h54pfa0hRtuZX6HHg");
    shouldBe("exportedJWK.alg", "undefined");
    shouldBe("exportedJWK.ext", "true");
    shouldBe("exportedJWK.key_ops", "['verify']");
    shouldBe("exportedJWK.use", "undefined");

    debug("\nExporting the key as SPKI...");
    return crypto.subtle.exportKey("spki", key);
}).then(function(result) {
    exportedSpki = result;

    bytesShouldMatchHexString("exportedSpki", publicKeySpkiHex, exportedSpki);
}).then(finishJSTest, failAndFinishJSTest);

</script>

</body>
</html>