chromium/third_party/blink/web_tests/crypto/subtle/ecdsa/sign-verify.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 importing an EC key for ECDSA.");

jsTestIsAsync = true;

var extractable = true;

var publicKeyJSON = {
    "kty": "EC",
    "crv": "P-256",
    "x": "fBEMZtz9qAf25p5F3bPHT2mhSE0gPo3Frajpqd18s8c",
    "y": "DfRImG5RveXRV2-ZkB-cLGqAakf9kHZDpyuDVZfvyMY"
};

var privateKeyJSON = {
    "kty": "EC",
    "crv": "P-256",
    "d": "H-M5UMX0YRJK6ZLCvf3xxzsWFfVxvVZ-YNGaofSM30I",
    "x": "fBEMZtz9qAf25p5F3bPHT2mhSE0gPo3Frajpqd18s8c",
    "y": "DfRImG5RveXRV2-ZkB-cLGqAakf9kHZDpyuDVZfvyMY"
};

var data = asciiToUint8Array("Hello, world!");

debug("Importing a public key...");
crypto.subtle.importKey("jwk", publicKeyJSON, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"]).then(function(result) {
    publicKey = result;
    debug("\nImporting a private key...");
    return crypto.subtle.importKey("jwk", privateKeyJSON, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"]);
}).then(function(result) {
    privateKey = result;
    debug("\nSigning some text...");
    return crypto.subtle.sign({ name: "ECDSA", hash: { name: "SHA-1" } }, privateKey, data);
}).then(function(result) {
    signature = result;

    debug("\nVerifying the signature...");
    return crypto.subtle.verify({ name: "ECDSA", hash: { name: "SHA-1" } }, publicKey, signature, data);
}).then(function(result) {
    verificationResult = result;
    shouldBe("verificationResult", "true");
    debug("\nVerifying a bad signature...");
    return crypto.subtle.verify({ name: "ECDSA", hash: { name: "SHA-1" } }, publicKey, new Uint8Array(256), data);
}).then(function(result) {
    verificationResult = result;
    shouldBe("verificationResult", "false");
}).then(finishJSTest, failAndFinishJSTest);
</script>

</body>
</html>