UNPKG

api-console-assets

Version:

This repo only exists to publish api console components to npm

243 lines (207 loc) 12.1 kB
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <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>