api-console-assets
Version:
This repo only exists to publish api console components to npm
243 lines (207 loc) • 12.1 kB
HTML
<html>
<head>
<meta charset="utf-8">
<title>QUnit 'ecdsamod.js' test</title>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="qunit.js"></script>
<link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
<script src="../ext/cj/cryptojs-312-core-fix.js"></script>
<script src="../ext/cj/x64-core.js"></script>
<script src="../ext/cj/cipher-core_min.js"></script>
<script src="../ext/cj/aes_min.js"></script>
<script src="../ext/cj/tripledes_min.js"></script>
<script src="../ext/cj/enc-base64_min.js"></script>
<script src="../ext/cj/md5_min.js"></script>
<script src="../ext/cj/sha1_min.js"></script>
<script src="../ext/cj/sha256_min.js"></script>
<script src="../ext/cj/sha224_min.js"></script>
<script src="../ext/cj/sha512_min.js"></script>
<script src="../ext/cj/sha384_min.js"></script>
<script src="../ext/cj/ripemd160_min.js"></script>
<script src="../ext/cj/hmac_min.js"></script>
<script src="../ext/cj/pbkdf2_min.js"></script>
<script src="../ext/yahoo.js"></script>
<script src="../ext/jsbn.js"></script>
<script src="../ext/jsbn2.js"></script>
<script src="../ext/prng4.js"></script>
<script src="../ext/rng.js"></script>
<script src="../ext/ec.js"></script>
<script src="../ext/ec-patch.js"></script>
<script src="../src/asn1hex-1.1.js"></script>
<script src="../src/asn1-1.0.js"></script>
<script src="../src/crypto-1.1.js"></script>
<script src="../src/ecdsa-modified-1.0.js"></script>
<script src="../src/ecparam-1.0.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var hashAAA256Hex = KJUR.crypto.Util.sha256("aaa"); // SHA256 hash value of string "aaa"
var hashAAB256Hex = KJUR.crypto.Util.sha256("aab"); // SHA256 hash value of string "aab"
var ECK1PUBHEX = "04a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425"; // k1.pub.pem
var ECK1PRVRAWHEX = "11b5737cf9d93f17c0cb1a84655d3995a02824097effa5edd8ee26381eb5d6c3";
var ECK1PRVP5HEX = "3077020101042011b5737cf9d93f17c0cb1a84655d3995a02824097effa5edd8ee26381eb5d6c3a00a06082a8648ce3d030107a14403420004a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425"; // k1.prv.p5p.der
var ECK1PRVP8HEX = "308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b020101042011b5737cf9d93f17c0cb1a84655d3995a02824097effa5edd8ee26381eb5d6c3a14403420004a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425"; // k1.prv.p8p.der
var ECK1PUBP8HEX = "3059301306072a8648ce3d020106082a8648ce3d03010703420004a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425"; // k1.pub.der
var ECK1CERTHEX = "3082017c30820121a003020102020900a6f110b42f4940cd300a06082a8648ce3d040302301a310b3009060355040613025553310b3009060355040a0c024b31301e170d3133303731343032313731375a170d3233303731323032313731375a301a310b3009060355040613025553310b3009060355040a0c024b313059301306072a8648ce3d020106082a8648ce3d03010703420004a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425a350304e301d0603551d0e04160414c847be327cccff638870757496e2be366c44a8fc301f0603551d23041830168014c847be327cccff638870757496e2be366c44a8fc300c0603551d13040530030101ff300a06082a8648ce3d0403020349003046022100df01c4bf58a06b3fa241824b10569a788ddab80b9dd8bb817936468c82d8401e022100d19175600fd50756f65ead8a0950c1da89b384f47bcf8d62ff917006f7558c27"; // k1.self.cer.der
test("default(secp256r1) sign and verify aaa", function() {
// signing a message
var prv = "11b5737cf9d93f17c0cb1a84655d3995a02824097effa5edd8ee26381eb5d6c3";
var ec1 = new KJUR.crypto.ECDSA({'prv': prv});
var sigHex = ec1.signWithMessageHash(hashAAA256Hex);
// signature validation
var pub = "04a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425";
var ec2 = new KJUR.crypto.ECDSA({'pub': pub});
var result2 = ec2.verifyWithMessageHash(hashAAA256Hex, sigHex);
equal(result2, true, "ecdsa sign");
});
test("secp192k1 sign and verify aaa", function() {
// signing a message
var prv = "5e83d67ee4592c673eab19d3db98d541f15e2145188b81ca";
var ec1 = new KJUR.crypto.ECDSA({'curve': 'secp192k1', 'prv': prv});
var sigHex = ec1.signWithMessageHash(hashAAA256Hex);
// signature validation
var pub = "04874ca64f193b1080847bf3950366ed6bc05c884185574e21ac17dbd2e63a93d9bfff14a8e251da592bc4677de25458c0";
var ec2 = new KJUR.crypto.ECDSA({'curve': 'secp192k1', 'pub': pub});
var result2 = ec2.verifyWithMessageHash(hashAAA256Hex, sigHex);
equal(result2, true, "ecdsa sign");
});
test("default(secp256r1) sign and verify aaa<>aab", function() {
// signing a message
var prv = "11b5737cf9d93f17c0cb1a84655d3995a02824097effa5edd8ee26381eb5d6c3";
var ec1 = new KJUR.crypto.ECDSA({'prv': prv});
var sigHex = ec1.signWithMessageHash(hashAAA256Hex);
// signature validation
var pub = "04a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425";
var ec2 = new KJUR.crypto.ECDSA({'pub': pub});
var result2 = ec2.verifyWithMessageHash(hashAAB256Hex, sigHex);
equal(result2, false, "ecdsa sign");
});
test("k1.sig.aaa.1 secp256r1 sha256", function() {
// signature validation
var pub = "04a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425"; // k1.pub.pem
var ec2 = new KJUR.crypto.ECDSA({'pub': pub});
var sigHex = "3045022100f729843c8bb5f285380ef5e4d708608d7449dadfa50129112668e972d30f210b0220051c589f0ebdad7a41370e9d9ce405734e854788387f21997028312a305ddae8"; // k1.sig.aaa.1
var result2 = ec2.verifyWithMessageHash(hashAAA256Hex, sigHex);
equal(result2, true, "ecdsa sign");
});
test("k1.sig.aaa.2 secp256r1 sha256", function() {
// signature validation
var pub = "04a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425"; // k1.pub.pem
var ec2 = new KJUR.crypto.ECDSA({curve: 'secp256r1', 'pub': pub});
var sigHex = "304502202241c432b03179b65f63ac66ed9273531a7f5c00feab5e55a7921c81a8f74275022100a51a260c76a33718e77b0459b239cc709209a7da7ba9a7311059413546598ec0"; // k1.sig.aaa.2
var result2 = ec2.verifyWithMessageHash(hashAAA256Hex, sigHex);
equal(result2, true, "ecdsa sign");
});
test("k4.sig.aaa.1 secp256k1 sha256", function() {
// signature validation
var pub = "0422353f380062b2bde67712091386faa369ec5ef1a244d06c459fe3de1fb0a5d8ad23a3878be75e375546f14ca6e42755fee04bd78c0343ac8038f5a218e1fbc5"; // k4.pub.pem
var ec2 = new KJUR.crypto.ECDSA({"curve": "secp256k1", "pub": pub});
var sigHex = "30450220350cc4ac81e68fce3cd134ab1cf4ae0e853a297be0f5f0508b0abc3681ba3364022100a601afe06571a95554f722f4fd0114a3335e9e3c155b390aba53dffbb3eedfec"; // k4.sig.aaa.1
var result2 = ec2.verifyWithMessageHash(hashAAA256Hex, sigHex);
equal(result2, true, "ecdsa sign");
});
test("k6.sig.aaa.1 secp384r1 sha256", function() {
// signature validation
var pub = "04543526abdfc47394a3f2645b0d48651a9f3a4d46d8740be322915107f050250c730ca40b37e1dc85e082b4bb181b8847bd6d0fa278bae5eb1c05474c9a4e2beec28c970be49c1949f09e96979a277a514830e32a5b9de1ec68ab99f492dd300a";
var ec2 = new KJUR.crypto.ECDSA({"curve": "secp384r1", "pub": pub});
var sigHex = "306502303725858ae53a59a71b0d48553d5c3b0d450a4a76c1da2fd5b508cdb598607a418d7bc622006afe0655e894c2ac6b2b03023100dfffc7d84c02d0e3625a19c9305a1a8caa01fab7da4c4f847086774d5a9205f3de2fe041c76aca429c0229d3c74769b0"; // k6.sig.aaa.1
var result2 = ec2.verifyWithMessageHash(hashAAA256Hex, sigHex);
equal(result2, true, "ecdsa sign");
});
// === ECC KEY GENERATION ===============================================================
test("generate ECC key for secp256r1 curve", function() {
var ec = new KJUR.crypto.ECDSA({"curve": "secp256r1"});
var keypair = ec.generateKeyPairHex();
expect(2);
equal(keypair['ecprvhex'].length, 256 / 4, "private key hexstr length");
equal(keypair['ecpubhex'].length, (256 / 4) * 2 + 2, "public key hexstr length");
});
test("generate ECC key for secp384r1 curve", function() {
var ec = new KJUR.crypto.ECDSA({"curve": "secp384r1"});
var keypair = ec.generateKeyPairHex();
expect(2);
equal(keypair['ecprvhex'].length, 384 / 4, "private key hexstr length");
equal(keypair['ecpubhex'].length, (384 / 4) * 2 + 2, "public key hexstr length");
});
test("key generation, signing and verification for secp256r1 curve", function() {
// key generation
var ec0 = new KJUR.crypto.ECDSA({'curve': 'secp256r1'});
var keypair = ec0.generateKeyPairHex();
// signing
var ec1 = new KJUR.crypto.ECDSA({'curve': 'secp256r1'});
var sigHex = ec1.signHex(hashAAA256Hex, keypair.ecprvhex);
// signature validation
var ec2 = new KJUR.crypto.ECDSA({'curve': 'secp256r1'});
var result2 = ec2.verifyHex(hashAAA256Hex, sigHex, keypair.ecpubhex);
equal(result2, true, "ecdsa sign");
});
test("getPublicKeyXYHex() method test", function() {
var ec1 = new KJUR.crypto.ECDSA({'curve': 'secp256r1', 'pub': ECK1PUBHEX});
var xy = ec1.getPublicKeyXYHex();
equal(xy.x, "a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711", "k1 x");
equal(xy.y, "bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425", "k1 y");
});
test("getShortNISTPCurveName() method test", function() {
var ec1 = new KJUR.crypto.ECDSA({'curve': 'secp256r1', 'pub': ECK1PUBHEX});
equal(ec1.getShortNISTPCurveName(), "P-256", "secp256r1 - P-256");
var ec1 = new KJUR.crypto.ECDSA({'curve': 'secp256k1', 'pub': ECK1PUBHEX});
equal(ec1.getShortNISTPCurveName(), null, "secp256k1 - null");
});
test("readPKCS5PrvKeyHex k1", function() {
var ec1 = new KJUR.crypto.ECDSA();
ec1.readPKCS5PrvKeyHex(ECK1PRVP5HEX);
equal(ec1.isPublic, false, "isPublic");
equal(ec1.isPrivate, true, "isPrivate");
equal(ec1.curveName, "secp256r1", "curveName");
equal(ec1.pubKeyHex, ECK1PUBHEX, "pubKeyHex");
equal(ec1.prvKeyHex, ECK1PRVRAWHEX, "prvKeyHex");
});
test("readPKCS8PrvKeyHex k1", function() {
var ec1 = new KJUR.crypto.ECDSA();
ec1.readPKCS8PrvKeyHex(ECK1PRVP8HEX);
equal(ec1.isPublic, false, "isPublic");
equal(ec1.isPrivate, true, "isPrivate");
equal(ec1.curveName, "secp256r1", "curveName");
equal(ec1.pubKeyHex, ECK1PUBHEX, "pubKeyHex");
equal(ec1.prvKeyHex, ECK1PRVRAWHEX, "prvKeyHex");
});
test("readPKCS8PubKeyHex k1", function() {
var ec1 = new KJUR.crypto.ECDSA();
ec1.readPKCS8PubKeyHex(ECK1PUBP8HEX);
equal(ec1.isPublic, true, "isPublic");
equal(ec1.isPrivate, false, "isPrivate");
equal(ec1.curveName, "secp256r1", "curveName");
equal(ec1.pubKeyHex, ECK1PUBHEX, "pubKeyHex");
});
test("readCertPubKeyHex k1", function() {
//equal(ASN1HEX.getVbyList(ECK1CERTHEX, 0, [0, 6]), "00", "00");
var ec1 = new KJUR.crypto.ECDSA();
ec1.readCertPubKeyHex(ECK1CERTHEX);
equal(ec1.isPublic, true, "isPublic");
equal(ec1.isPrivate, false, "isPrivate");
equal(ec1.curveName, "secp256r1", "curveName");
equal(ec1.pubKeyHex, ECK1PUBHEX, "pubKeyHex");
});
});
</script>
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture">test markup</div>
<b>NOTE:</b>
<p>
Currently this library works for only secp256r1, secp256k1 and secp384r1 EC curves
besides some other curves are pre-defined.
</p>
<p>
<a href="index.html">INDEX</a> |
ECC related QUnit test pages:
<a href="qunit-do-crypto.html">crypto.js</a> |
<a href="qunit-do-crypto-ecdsa.html">crypto.js Signature class for ECDSA</a> |
<a href="qunit-do-ecdsamod.html">ecdsa-modified.js</a> |
<a href="qunit-do-ecdsamod-unsupport.html">ecdsa-modified unsupported curve</a> |
<a href="qunit-do-ecparam.html">ecparam.js</a> |
</p>
</body>
</html>