1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

263 lines
16 KiB

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>QUnit for RSAKey signing add-on 'rsa-sign.js'</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 language="JavaScript" type="text/javascript" src="../ext/jsbn.js"></script>
<script language="JavaScript" type="text/javascript" src="../ext/jsbn2.js"></script>
<script language="JavaScript" type="text/javascript" src="../ext/prng4.js"></script>
<script language="JavaScript" type="text/javascript" src="../ext/rng.js"></script>
<script language="JavaScript" type="text/javascript" src="../ext/rsa.js"></script>
<script language="JavaScript" type="text/javascript" src="../ext/rsa2.js"></script>
<script language="JavaScript" type="text/javascript" src="../ext/base64.js"></script>
<script src="http://yui.yahooapis.com/2.9.0/build/yahoo/yahoo-min.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/core.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/sha1.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/sha256.js"></script>
<script language="JavaScript" type="text/javascript" src="../rsapem-1.1.js"></script>
<script language="JavaScript" type="text/javascript" src="../rsasign-1.2.js"></script>
<script language="JavaScript" type="text/javascript" src="../asn1hex-1.1.js"></script>
<script language="JavaScript" type="text/javascript" src="../crypto-1.1.js"></script>
<script>
$(document).ready(function(){
var k_n = "00d184617b5f8034655944839f785a63835555088a23d0b34e1a2e6bdf83c49ba2b1ecb398105eed1a21d513ea76f9ad3879843db27e91765885ba33ccf45b1461c227205f08bcd07d5a2cf7fa9443cf2ef376f448503630699059002546d2f2eba124478ac34704e3d83cd1e041178042a922fa3c541b3fdfeb072c5dc44a0021";
var k_e = "010001";
var k_d = "03dfeadd993a89bd86151a4a0cb3bf3b628c9c07d1f9be1727accc19ea19ecb6e98b7316d0d6b093d72455a5f46551aac5b4885f90afa7fca31c7a70c3e41b505af0fe00a32e28988ccf44f02dee005e40289d2be0604f978bbc2b86e96d7792c5207ad3fc0f40589000955c039c61655cea36e177123b8a747b30f9d93e74f1";
var k_p = "00ee6d7fe55461600ffc58b9c873e7a61ced51d7fb9f015243527b04b3c0945b72e7aa9275d15b08fded25eaa6761f2aa66aefc767105d74496b2bfcd30a8beed7";
var k_q = "00e0f56a0effce6406d6af8b325d936ffcca65e2be6cbb360c3140fd53c076248467ae198664fccbc76dcdf49e21109f9787cb5229573cd233a4aef1a54aff81c7";
var k_dp = "6933ad8c0dd84d5fa053b1ddcdae77b029d2c3ff0560bae073a34e26d6215fdc6a75ebdbca7d65914d333ebf263d883f17ce26e8c5e2c66da2b92cfc1d9a32cf";
var k_dq = "462da9698679ff9076970ae8aa729d64124c18a1695039fb31be618928287319ef324bfa3634fae97b22de261a909208f6af0231ad6a66f4ff72282675b021ef";
var k_co = "40d5f2a22cee18496d8926815f1e07dbd11d5cd6160c9f524b97f4ef40516c022576a461deb70dbe963a04a26a15aa5d6b50e375c9dc64408c8b34ff18cadcd7";
var hSigAAA = "6f7df91d8f973a0619d525c319337741130b77b21f9667dc7d1d74853b644cbe5e6b0e84aacc2faee883d43affb811fc653b67c38203d4f206d1b838c4714b6b2cf17cd621303c21bac96090df3883e58784a0576e501c10cdefb12b6bf887e548f6b07b09ae80d8416151d7dab7066d645e2eee57ac5f7af2a70ee0724c8e47";
var hSigAAAkZ1SHA256 = "c27ebd5c0193244f7d3f08405b6821c2085ee522c630aad3e1a14e4ae2dee034f47e480fb37a729e074f98fb8b70dd387666b4b9def14c3b5e2a814cf13bc6fca24f252f396fdcf0aca55c0ca7782e9d07ca887714761ee0bdb8364a1816c2e43b0ceef5a507b8a939d8bbad1f38ee5dfdd30f04b21eeeb406b9d2d5478fac87";
// "z1.pkcs1.pem"
var sKey1PEM = "" +
"-----BEGIN RSA PRIVATE KEY-----\n" +
"MIICWwIBAAKBgQDRhGF7X4A0ZVlEg594WmODVVUIiiPQs04aLmvfg8SborHss5gQ\n" +
"Xu0aIdUT6nb5rTh5hD2yfpF2WIW6M8z0WxRhwicgXwi80H1aLPf6lEPPLvN29EhQ\n" +
"NjBpkFkAJUbS8uuhJEeKw0cE49g80eBBF4BCqSL6PFQbP9/rByxdxEoAIQIDAQAB\n" +
"AoGAA9/q3Zk6ib2GFRpKDLO/O2KMnAfR+b4XJ6zMGeoZ7Lbpi3MW0Nawk9ckVaX0\n" +
"ZVGqxbSIX5Cvp/yjHHpww+QbUFrw/gCjLiiYjM9E8C3uAF5AKJ0r4GBPl4u8K4bp\n" +
"bXeSxSB60/wPQFiQAJVcA5xhZVzqNuF3EjuKdHsw+dk+dPECQQDubX/lVGFgD/xY\n" +
"uchz56Yc7VHX+58BUkNSewSzwJRbcueqknXRWwj97SXqpnYfKqZq78dnEF10SWsr\n" +
"/NMKi+7XAkEA4PVqDv/OZAbWr4syXZNv/Mpl4r5suzYMMUD9U8B2JIRnrhmGZPzL\n" +
"x23N9J4hEJ+Xh8tSKVc80jOkrvGlSv+BxwJAaTOtjA3YTV+gU7Hdza53sCnSw/8F\n" +
"YLrgc6NOJtYhX9xqdevbyn1lkU0zPr8mPYg/F84m6MXixm2iuSz8HZoyzwJARi2p\n" +
"aYZ5/5B2lwroqnKdZBJMGKFpUDn7Mb5hiSgocxnvMkv6NjT66Xsi3iYakJII9q8C\n" +
"Ma1qZvT/cigmdbAh7wJAQNXyoizuGEltiSaBXx4H29EdXNYWDJ9SS5f070BRbAIl\n" +
"dqRh3rcNvpY6BKJqFapda1DjdcncZECMizT/GMrc1w==\n" +
"-----END RSA PRIVATE KEY-----\n";
//=========================================================================
module("Padding Test");
test("charCodeAt test", function() {
expect(1);
var s = new String("aaa");
equal(s.charCodeAt(0), 97, "aaa 0 61");
});
test("_rsasign_getHexPaddedDigestInfoForString aaa 1024/sha1", function() {
var hExpected = "0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003021300906052b0e03021a050004147e240de74fb1ed08fa08d38063f6a6a91462a815";
var hPM = _rsasign_getHexPaddedDigestInfoForString("aaa", 1024, 'sha1');
expect(2);
equal(hPM.length, 256, "check padded message length 128byte*2chars=256chars");
equal(hPM, hExpected,
"check padded message for string aaa with SHA1withRSA 1024bit" );
});
test("_rsasign_getHexPaddedDigestInfoForString aaa 1024/sha256", function() {
var hExpected = "0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003031300d0609608648016503040201050004209834876dcfb05cb167a5c24953eba58c4ac89b1adf57f28f2f9d09af107ee8f0";
var hPM = _rsasign_getHexPaddedDigestInfoForString("aaa", 1024, 'sha256');
expect(2);
equal(hPM.length, 256, "check padded message length 128byte*2chars=256chars");
equal(hPM, hExpected,
"check padded message for string aaa with SHA256withRSA 1024bit" );
});
test("_rsasign_getHexPaddedDigestInfoForString aaa 512/sha1", function() {
var hExpected = "0001ffffffffffffffffffffffffffffffffffffffffffffffffffff003021300906052b0e03021a050004147e240de74fb1ed08fa08d38063f6a6a91462a815";
var hPM = _rsasign_getHexPaddedDigestInfoForString("aaa", 512, 'sha1');
expect(2);
equal(hPM.length, 128, "check padded message length 64byte*2chars=128chars");
equal(hPM, hExpected,
"check padded message for string aaa with SHA1withRSA 512bit" );
});
test("_rsasign_getHexPaddedDigestInfoForString aaa 2048/sha1", function() {
var hExpected = "0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003021300906052b0e03021a050004147e240de74fb1ed08fa08d38063f6a6a91462a815";
var hPM = _rsasign_getHexPaddedDigestInfoForString("aaa", 2048, 'sha1');
expect(2);
equal(hPM.length, 512, "check padded message length 256byte*2chars=512chars");
equal(hPM, hExpected,
"check padded message for string aaa with SHA1withRSA 2048bit" );
});
test("_rsasign_getHexPaddedDigestInfoForString aaa 4096/sha1", function() {
var hExpected = "0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003021300906052b0e03021a050004147e240de74fb1ed08fa08d38063f6a6a91462a815";
var hPM = _rsasign_getHexPaddedDigestInfoForString("aaa", 4096, 'sha1');
expect(2);
equal(hPM.length, 1024, "check padded message length 512byte*2chars=1024chars");
equal(hPM, hExpected,
"check padded message for string aaa with SHA1withRSA 4096bit" );
});
//=========================================================================
module("Signature Test");
test("RSAKey.signString(aaa,sha1)", function() {
expect(2);
var rsa = new RSAKey();
rsa.setPrivateEx(k_n, k_e, k_d, k_p, k_q, k_dp, k_dq, k_co);
equal(rsa.n.bitLength(), 1024, "check key size");
//var hSig = rsa.signStringWithSHA1("aaa");
var hSig = rsa.signString("aaa", 'sha1');
equal(hSig, hSigAAA,
"String 'aaa' is signed properly with SHA1withRSA algorithm." );
});
test("RSAKey.signString(aaa,sha1) via readPEM", function() {
expect(2);
var rsa = new RSAKey();
rsa.readPrivateKeyFromPEMString(sKey1PEM);
equal(rsa.n.bitLength(), 1024, "check key size");
//var hSig = rsa.signStringWithSHA1("aaa");
var hSig = rsa.signString("aaa", 'sha1');
equal(hSig, hSigAAA,
"String 'aaa' is signed properly with SHA1withRSA algorithm. (2)" );
});
test("RSAKey.signString(aaa,sha256) via readPEM", function() {
expect(2);
var rsa = new RSAKey();
rsa.readPrivateKeyFromPEMString(sKey1PEM);
equal(rsa.n.bitLength(), 1024, "check key size");
//var hSig = rsa.signStringWithSHA256("aaa");
var hSig = rsa.signString("aaa", 'sha256');
equal(hSig, hSigAAAkZ1SHA256,
"String 'aaa' is signed properly with SHA256withRSA algorithm. (2)" );
});
//=========================================================================
module("Verifier Test");
test("_rsasign_getDecryptSignatureBI", function() {
var hSig = "6f7df91d8f973a0619d525c319337741130b77b21f9667dc7d1d74853b644cbe5e6b0e84aacc2faee883d43affb811fc653b67c38203d4f206d1b838c4714b6b2cf17cd621303c21bac96090df3883e58784a0576e501c10cdefb12b6bf887e548f6b07b09ae80d8416151d7dab7066d645e2eee57ac5f7af2a70ee0724c8e47";
var biSig = parseBigInt(hSig, 16);
var k_n = "00d184617b5f8034655944839f785a63835555088a23d0b34e1a2e6bdf83c49ba2b1ecb398105eed1a21d513ea76f9ad3879843db27e91765885ba33ccf45b1461c227205f08bcd07d5a2cf7fa9443cf2ef376f448503630699059002546d2f2eba124478ac34704e3d83cd1e041178042a922fa3c541b3fdfeb072c5dc44a0021";
var k_e = "010001";
var biDecSig = _rsasign_getDecryptSignatureBI(biSig, k_n, k_e);
var hSigExpected = "1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003021300906052b0e03021a050004147e240de74fb1ed08fa08d38063f6a6a91462a815";
expect(2);
equal(biDecSig.toString(16), hSigExpected, "checking decrypted signature.");
equal(biDecSig.toString(16).length, (1024 / 4) - 3, "check bitLength of decrypted signature.");
});
test("_rsasign_getHexDigestInfoFromSig", function() {
var hSig = "6f7df91d8f973a0619d525c319337741130b77b21f9667dc7d1d74853b644cbe5e6b0e84aacc2faee883d43affb811fc653b67c38203d4f206d1b838c4714b6b2cf17cd621303c21bac96090df3883e58784a0576e501c10cdefb12b6bf887e548f6b07b09ae80d8416151d7dab7066d645e2eee57ac5f7af2a70ee0724c8e47";
var biSig = parseBigInt(hSig, 16);
var k_n = "00d184617b5f8034655944839f785a63835555088a23d0b34e1a2e6bdf83c49ba2b1ecb398105eed1a21d513ea76f9ad3879843db27e91765885ba33ccf45b1461c227205f08bcd07d5a2cf7fa9443cf2ef376f448503630699059002546d2f2eba124478ac34704e3d83cd1e041178042a922fa3c541b3fdfeb072c5dc44a0021";
var k_e = "010001";
var hDi = _rsasign_getHexDigestInfoFromSig(biSig, k_n, k_e);
var hDiExpected = "3021300906052b0e03021a050004147e240de74fb1ed08fa08d38063f6a6a91462a815";
equal(hDi, hDiExpected, "checking digestInfo.");
});
test("_rsasign_getAlgNameAndHashFromHexDisgestInfo", function() {
var hDigestInfo = "3021300906052b0e03021a050004147e240de74fb1ed08fa08d38063f6a6a91462a815";
var a = _rsasign_getAlgNameAndHashFromHexDisgestInfo(hDigestInfo);
expect(3);
equal(a.length, 2, "check result length.");
equal(a[0], 'sha1', "check algName");
equal(a[1], '7e240de74fb1ed08fa08d38063f6a6a91462a815', 'check hash value');
});
test("_rsasign_verifySignatureWithArgs", function() {
var hSig = "6f7df91d8f973a0619d525c319337741130b77b21f9667dc7d1d74853b644cbe5e6b0e84aacc2faee883d43affb811fc653b67c38203d4f206d1b838c4714b6b2cf17cd621303c21bac96090df3883e58784a0576e501c10cdefb12b6bf887e548f6b07b09ae80d8416151d7dab7066d645e2eee57ac5f7af2a70ee0724c8e47";
var biSig = parseBigInt(hSig, 16);
var k_n = "00d184617b5f8034655944839f785a63835555088a23d0b34e1a2e6bdf83c49ba2b1ecb398105eed1a21d513ea76f9ad3879843db27e91765885ba33ccf45b1461c227205f08bcd07d5a2cf7fa9443cf2ef376f448503630699059002546d2f2eba124478ac34704e3d83cd1e041178042a922fa3c541b3fdfeb072c5dc44a0021";
var k_e = "010001";
var sMsg = "aaa";
var result = _rsasign_verifySignatureWithArgs(sMsg, biSig, k_n, k_e);
expect(2);
equal(KJUR.crypto.Util.sha1("aaa"), '7e240de74fb1ed08fa08d38063f6a6a91462a815',
'check hex_sha1 works properly.');
equal(result, true, 'check signature verification result');
});
test("RSAKey.verifyHexSignatureForMessage aaa hSig", function() {
var hSig = "6f7df91d8f973a0619d525c319337741130b77b21f9667dc7d1d74853b644cbe5e6b0e84aacc2faee883d43affb811fc653b67c38203d4f206d1b838c4714b6b2cf17cd621303c21bac96090df3883e58784a0576e501c10cdefb12b6bf887e548f6b07b09ae80d8416151d7dab7066d645e2eee57ac5f7af2a70ee0724c8e47";
var k_n = "00d184617b5f8034655944839f785a63835555088a23d0b34e1a2e6bdf83c49ba2b1ecb398105eed1a21d513ea76f9ad3879843db27e91765885ba33ccf45b1461c227205f08bcd07d5a2cf7fa9443cf2ef376f448503630699059002546d2f2eba124478ac34704e3d83cd1e041178042a922fa3c541b3fdfeb072c5dc44a0021";
var k_e = "010001";
var sMsg = "aaa";
var rsa = new RSAKey();
rsa.setPublic(k_n, k_e);
var result = rsa.verifyHexSignatureForMessage(hSig, sMsg);
//var result = true;
equal(result, true, 'check signature verification result');
});
test("RSAKey.verifyHexSignatureForMessage aaa ByteArray hSig", function() {
var hSig = "6f7df91d8f973a0619d525c319337741130b77b21f9667dc7d1d74853b644cbe5e6b0e84aacc2faee883d43affb811fc653b67c38203d4f206d1b838c4714b6b2cf17cd621303c21bac96090df3883e58784a0576e501c10cdefb12b6bf887e548f6b07b09ae80d8416151d7dab7066d645e2eee57ac5f7af2a70ee0724c8e47";
var k_n = "00d184617b5f8034655944839f785a63835555088a23d0b34e1a2e6bdf83c49ba2b1ecb398105eed1a21d513ea76f9ad3879843db27e91765885ba33ccf45b1461c227205f08bcd07d5a2cf7fa9443cf2ef376f448503630699059002546d2f2eba124478ac34704e3d83cd1e041178042a922fa3c541b3fdfeb072c5dc44a0021";
var k_e = "010001";
var sMsg = String.fromCharCode(97, 97, 97);
var rsa = new RSAKey();
rsa.setPublic(k_n, k_e);
var result = rsa.verifyHexSignatureForMessage(hSig, sMsg);
equal(result, true, 'signature of message ByteArray aaa is successfully verified.');
});
//=========================================================================
/*
module("Misc");
test("array test 1", function() {
// a .. code97
var a1 = Array(97, 97, 97);
var a2 = Array(97, 97, 98);
expect(4);
equal(a1, a1, "test1");
equal(a1, a2, "test2");
equal(a1 == a2, true, "test3");
equal(a1 == a1, true, "test4");
});
*/
});
</script>
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture">test markup</div>
</body>
</html>