forked from rachanon/stdbWeb
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.
254 lines
14 KiB
254 lines
14 KiB
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
|
"http://www.w3.org/TR/html4/loose.dtd"> |
|
<html> |
|
<head> |
|
<title>QUnit for X.509 Certificate 'x509.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 src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/core-min.js"></script> |
|
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/sha1.js"></script> |
|
|
|
<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/rsa.js"></script> |
|
<script language="JavaScript" type="text/javascript" src="../ext/rsa2.js"></script> |
|
<script language="JavaScript" type="text/javascript" src="../ext/sha1.js"></script> |
|
<script language="JavaScript" type="text/javascript" src="../ext/base64.js"></script> |
|
<script language="JavaScript" type="text/javascript" src="../ext/yahoo.js"></script> |
|
|
|
<script language="JavaScript" type="text/javascript" src="../crypto-1.1.js"></script> |
|
<script language="JavaScript" type="text/javascript" src="../asn1hex-1.1.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="../x509-1.1.js"></script> |
|
<script language="JavaScript" type="text/javascript" src="../asn1-1.0.js"></script> |
|
<script language="JavaScript" type="text/javascript" src="../asn1x509-1.0.js"></script> |
|
|
|
<script type="text/javascript"> |
|
$(document).ready(function(){ |
|
|
|
// z2 self |
|
var sCer1PEM = "" + |
|
"-----BEGIN CERTIFICATE-----\n" + |
|
"MIIBqDCCAVKgAwIBAgIJAJ53Xn2fQ6vJMA0GCSqGSIb3DQEBBQUAMBoxCzAJBgNV\n" + |
|
"BAYTAkpQMQswCQYDVQQKEwJ6MjAeFw0xMDA1MzEwNjE3NTZaFw0yMDA1MjgwNjE3\n" + |
|
"NTZaMBoxCzAJBgNVBAYTAkpQMQswCQYDVQQKEwJ6MjBcMA0GCSqGSIb3DQEBAQUA\n" + |
|
"A0sAMEgCQQC5sAMpUF/i7WDsVondzfW5TQWrQW4WQ7HKP5b8Ry7rH2LtR2iX8Vmu\n" + |
|
"mLfzrezseXHetfZNmiWQHE3HpJdy5aArAgMBAAGjezB5MB0GA1UdDgQWBBS7MIUo\n" + |
|
"gYmDIf2DOqOcwYCKCb3GjDBKBgNVHSMEQzBBgBS7MIUogYmDIf2DOqOcwYCKCb3G\n" + |
|
"jKEepBwwGjELMAkGA1UEBhMCSlAxCzAJBgNVBAoTAnoyggkAnndefZ9Dq8kwDAYD\n" + |
|
"VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAFhZ88q7ZS7THEcPJ8ogQ+78nyAn\n" + |
|
"DN7F1FsLp7jE9oM3kYQl6KYy0pwch6Wd6ypW86pel4JFOEr+LnVGODaoxFE=\n" + |
|
"-----END CERTIFICATE-----\n"; |
|
|
|
var sCer1B64 = "MIIBqDCCAVKgAwIBAgIJAJ53Xn2fQ6vJMA0GCSqGSIb3DQEBBQUAMBoxCzAJBgNVBAYTAkpQMQswCQYDVQQKEwJ6MjAeFw0xMDA1MzEwNjE3NTZaFw0yMDA1MjgwNjE3NTZaMBoxCzAJBgNVBAYTAkpQMQswCQYDVQQKEwJ6MjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5sAMpUF/i7WDsVondzfW5TQWrQW4WQ7HKP5b8Ry7rH2LtR2iX8VmumLfzrezseXHetfZNmiWQHE3HpJdy5aArAgMBAAGjezB5MB0GA1UdDgQWBBS7MIUogYmDIf2DOqOcwYCKCb3GjDBKBgNVHSMEQzBBgBS7MIUogYmDIf2DOqOcwYCKCb3GjKEepBwwGjELMAkGA1UEBhMCSlAxCzAJBgNVBAoTAnoyggkAnndefZ9Dq8kwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAFhZ88q7ZS7THEcPJ8ogQ+78nyAnDN7F1FsLp7jE9oM3kYQl6KYy0pwch6Wd6ypW86pel4JFOEr+LnVGODaoxFE="; |
|
|
|
var hCer1 = "308201a830820152a0030201020209009e775e7d9f43abc9300d06092a864886f70d0101050500301a310b3009060355040613024a50310b3009060355040a13027a32301e170d3130303533313036313735365a170d3230303532383036313735365a301a310b3009060355040613024a50310b3009060355040a13027a32305c300d06092a864886f70d0101010500034b003048024100b9b00329505fe2ed60ec5689ddcdf5b94d05ab416e1643b1ca3f96fc472eeb1f62ed476897f159ae98b7f3adecec7971deb5f64d9a25901c4dc7a49772e5a02b0203010001a37b3079301d0603551d0e04160414bb30852881898321fd833aa39cc1808a09bdc68c304a0603551d23044330418014bb30852881898321fd833aa39cc1808a09bdc68ca11ea41c301a310b3009060355040613024a50310b3009060355040a13027a328209009e775e7d9f43abc9300c0603551d13040530030101ff300d06092a864886f70d01010505000341005859f3cabb652ed31c470f27ca2043eefc9f20270cdec5d45b0ba7b8c4f68337918425e8a632d29c1c87a59deb2a56f3aa5e978245384afe2e75463836a8c451"; |
|
|
|
var sCer2PEM = "" + |
|
"-----BEGIN CERTIFICATE-----\n" + |
|
"MIIBvTCCASYCCQD55fNzc0WF7TANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJK\n" + |
|
"UDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwHhcNMTAwNTI4MDIwODUxWhcNMjAwNTI1\n" + |
|
"MDIwODUxWjAjMQswCQYDVQQGEwJKUDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwgZ8w\n" + |
|
"DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANGEYXtfgDRlWUSDn3haY4NVVQiKI9Cz\n" + |
|
"Thoua9+DxJuiseyzmBBe7Roh1RPqdvmtOHmEPbJ+kXZYhbozzPRbFGHCJyBfCLzQ\n" + |
|
"fVos9/qUQ88u83b0SFA2MGmQWQAlRtLy66EkR4rDRwTj2DzR4EEXgEKpIvo8VBs/\n" + |
|
"3+sHLF3ESgAhAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAEZ6mXFFq3AzfaqWHmCy1\n" + |
|
"ARjlauYAa8ZmUFnLm0emg9dkVBJ63aEqARhtok6bDQDzSJxiLpCEF6G4b/Nv/M/M\n" + |
|
"LyhP+OoOTmETMegAVQMq71choVJyOFE5BtQa6M/lCHEOya5QUfoRF2HF9EjRF44K\n" + |
|
"3OK+u3ivTSj3zwjtpudY5Xo=\n" + |
|
"-----END CERTIFICATE-----\n"; |
|
|
|
var sCer2B64 = "MIIBvTCCASYCCQD55fNzc0WF7TANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJKUDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwHhcNMTAwNTI4MDIwODUxWhcNMjAwNTI1MDIwODUxWjAjMQswCQYDVQQGEwJKUDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANGEYXtfgDRlWUSDn3haY4NVVQiKI9CzThoua9+DxJuiseyzmBBe7Roh1RPqdvmtOHmEPbJ+kXZYhbozzPRbFGHCJyBfCLzQfVos9/qUQ88u83b0SFA2MGmQWQAlRtLy66EkR4rDRwTj2DzR4EEXgEKpIvo8VBs/3+sHLF3ESgAhAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAEZ6mXFFq3AzfaqWHmCy1ARjlauYAa8ZmUFnLm0emg9dkVBJ63aEqARhtok6bDQDzSJxiLpCEF6G4b/Nv/M/MLyhP+OoOTmETMegAVQMq71choVJyOFE5BtQa6M/lCHEOya5QUfoRF2HF9EjRF44K3OK+u3ivTSj3zwjtpudY5Xo="; |
|
|
|
var hCer2 = "308201bd30820126020900f9e5f373734585ed300d06092a864886f70d01010505003023310b3009060355040613024a5031143012060355040a130b30302d544553542d525341301e170d3130303532383032303835315a170d3230303532353032303835315a3023310b3009060355040613024a5031143012060355040a130b30302d544553542d52534130819f300d06092a864886f70d010101050003818d0030818902818100d184617b5f8034655944839f785a63835555088a23d0b34e1a2e6bdf83c49ba2b1ecb398105eed1a21d513ea76f9ad3879843db27e91765885ba33ccf45b1461c227205f08bcd07d5a2cf7fa9443cf2ef376f448503630699059002546d2f2eba124478ac34704e3d83cd1e041178042a922fa3c541b3fdfeb072c5dc44a00210203010001300d06092a864886f70d010105050003818100119ea65c516adc0cdf6aa587982cb50118e56ae6006bc6665059cb9b47a683d76454127adda12a01186da24e9b0d00f3489c622e908417a1b86ff36ffccfcc2f284ff8ea0e4e611331e80055032aef5721a1527238513906d41ae8cfe508710ec9ae5051fa111761c5f448d1178e0adce2bebb78af4d28f7cf08eda6e758e57a"; |
|
|
|
var sCer3PEM = "" + // z0512.cer |
|
"-----BEGIN CERTIFICATE-----\n" + |
|
"MIIBqDCCAVKgAwIBAgIJAJ53Xn2fQ6vJMA0GCSqGSIb3DQEBBQUAMBoxCzAJBgNV\n" + |
|
"BAYTAkpQMQswCQYDVQQKEwJ6MjAeFw0xMDA1MzEwNjE3NTZaFw0yMDA1MjgwNjE3\n" + |
|
"NTZaMBoxCzAJBgNVBAYTAkpQMQswCQYDVQQKEwJ6MjBcMA0GCSqGSIb3DQEBAQUA\n" + |
|
"A0sAMEgCQQC5sAMpUF/i7WDsVondzfW5TQWrQW4WQ7HKP5b8Ry7rH2LtR2iX8Vmu\n" + |
|
"mLfzrezseXHetfZNmiWQHE3HpJdy5aArAgMBAAGjezB5MB0GA1UdDgQWBBS7MIUo\n" + |
|
"gYmDIf2DOqOcwYCKCb3GjDBKBgNVHSMEQzBBgBS7MIUogYmDIf2DOqOcwYCKCb3G\n" + |
|
"jKEepBwwGjELMAkGA1UEBhMCSlAxCzAJBgNVBAoTAnoyggkAnndefZ9Dq8kwDAYD\n" + |
|
"VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAFhZ88q7ZS7THEcPJ8ogQ+78nyAn\n" + |
|
"DN7F1FsLp7jE9oM3kYQl6KYy0pwch6Wd6ypW86pel4JFOEr+LnVGODaoxFE=\n" + |
|
"-----END CERTIFICATE-----\n"; |
|
|
|
var hSig3 = "" + |
|
"a30ea363514246b686a25529e6446d79ed3081b9709c6213f0611a495456b5b5\n" + |
|
"6efb33e92ad1c00348c84c6335d01425a1033e0c5006b377ab0d6b34c9322d62\n"; |
|
|
|
// _gitpg/jsrsasign/test/eckey/k1.self.cer |
|
var k1CertPEM = "" + |
|
"-----BEGIN CERTIFICATE-----\n" + |
|
"MIIBfDCCASGgAwIBAgIJAKbxELQvSUDNMAoGCCqGSM49BAMCMBoxCzAJBgNVBAYT\n" + |
|
"AlVTMQswCQYDVQQKDAJLMTAeFw0xMzA3MTQwMjE3MTdaFw0yMzA3MTIwMjE3MTda\n" + |
|
"MBoxCzAJBgNVBAYTAlVTMQswCQYDVQQKDAJLMTBZMBMGByqGSM49AgEGCCqGSM49\n" + |
|
"AwEHA0IABKAVMqPAkABT3mD77+/MpYeTMBWY0wi0Hm9ONk44jCcRvvQyxZkUjJQU\n" + |
|
"PU/0bCy3Pj5qQdfu8jwEfqEeYGZ95CWjUDBOMB0GA1UdDgQWBBTIR74yfMz/Y4hw\n" + |
|
"dXSW4r42bESo/DAfBgNVHSMEGDAWgBTIR74yfMz/Y4hwdXSW4r42bESo/DAMBgNV\n" + |
|
"HRMEBTADAQH/MAoGCCqGSM49BAMCA0kAMEYCIQDfAcS/WKBrP6JBgksQVpp4jdq4\n" + |
|
"C53Yu4F5NkaMgthAHgIhANGRdWAP1QdW9l6tiglQwdqJs4T0e8+NYv+RcAb3VYwn\n" + |
|
"-----END CERTIFICATE-----\n"; |
|
var k1CertHex = X509.pemToHex(k1CertPEM); |
|
|
|
test("pemToBase64", function() { |
|
var sResult = X509.pemToBase64(sCer1PEM); |
|
equal(sResult, sCer1B64, "testing pem-base64 conversion."); |
|
}); |
|
|
|
test("pemToHex", function() { |
|
var sResult = X509.pemToHex(sCer1PEM); |
|
equal(sResult, hCer1, "testing pem-hex conversion."); |
|
}); |
|
|
|
test("getSubjectPublicKeyInfoPosFromCertHex", function() { |
|
var pSPK = X509.getSubjectPublicKeyInfoPosFromCertHex(hCer1); |
|
equal(pSPK, 127 * 2, "check position of subject public key info."); |
|
}); |
|
|
|
test("getSubjectPublicKeyPosFromCertHex", function() { |
|
var pSPK = X509.getSubjectPublicKeyPosFromCertHex(hCer1); |
|
equal(pSPK, 147 * 2, "check position of subject public key without encapsulation."); |
|
}); |
|
|
|
test("getPublicKeyHexArrayFromCertHex", function() { |
|
var a = X509.getPublicKeyHexArrayFromCertHex(hCer1); |
|
expect(3); |
|
equal(a.length, 2, "check array length."); |
|
equal(a[0], "00b9b00329505fe2ed60ec5689ddcdf5b94d05ab416e1643b1ca3f96fc472eeb1f62ed476897f159ae98b7f3adecec7971deb5f64d9a25901c4dc7a49772e5a02b", "check N"); |
|
equal(a[1], "010001", "check E"); |
|
}); |
|
|
|
test("getPublicKeyHexArrayFromCertPEM", function() { |
|
var a = X509.getPublicKeyHexArrayFromCertPEM(sCer1PEM); |
|
expect(3); |
|
equal(a.length, 2, "check array length."); |
|
equal(a[0], "00b9b00329505fe2ed60ec5689ddcdf5b94d05ab416e1643b1ca3f96fc472eeb1f62ed476897f159ae98b7f3adecec7971deb5f64d9a25901c4dc7a49772e5a02b", "check N"); |
|
equal(a[1], "010001", "check E"); |
|
}); |
|
|
|
test("getPublicKeyHexArrayFromCertPEM sCer2PEM", function() { |
|
expect(8); |
|
equal(X509.pemToBase64(sCer2PEM), sCer2B64, "check pem to base64."); |
|
equal(X509.pemToHex(sCer2PEM), hCer2, "check pem to hex."); |
|
var pTbsCert = X509.getHexTbsCertificateFromCert(hCer2); |
|
equal(pTbsCert, 8, "check tbsCert position."); |
|
equal(X509.getSubjectPublicKeyInfoPosFromCertHex(hCer2), 280, |
|
"check subjectPublicKeyInfo position."); |
|
var a = ASN1HEX.getPosArrayOfChildren_AtObj(hCer2, pTbsCert); |
|
equal(a.join("/"), "16/38/68/142/206/280", "check postion array of tbsCert."); |
|
|
|
var a = X509.getPublicKeyHexArrayFromCertPEM(sCer2PEM); |
|
equal(a.length, 2, "check array length."); |
|
equal(a[0], "00d184617b5f8034655944839f785a63835555088a23d0b34e1a2e6bdf83c49ba2b1ecb398105eed1a21d513ea76f9ad3879843db27e91765885ba33ccf45b1461c227205f08bcd07d5a2cf7fa9443cf2ef376f448503630699059002546d2f2eba124478ac34704e3d83cd1e041178042a922fa3c541b3fdfeb072c5dc44a0021", "check N"); |
|
equal(a[1], "010001", "check E"); |
|
}); |
|
|
|
test("X509.readCertPEM", function() { |
|
var c = new X509(); |
|
c.readCertPEM(sCer1PEM); |
|
expect(4); |
|
equal(c.subjectPublicKeyRSA_hN, "00b9b00329505fe2ed60ec5689ddcdf5b94d05ab416e1643b1ca3f96fc472eeb1f62ed476897f159ae98b7f3adecec7971deb5f64d9a25901c4dc7a49772e5a02b", "check N"); |
|
equal(c.subjectPublicKeyRSA_hE, "010001", "check E"); |
|
equal(c.subjectPublicKeyRSA.n.toString(16), "b9b00329505fe2ed60ec5689ddcdf5b94d05ab416e1643b1ca3f96fc472eeb1f62ed476897f159ae98b7f3adecec7971deb5f64d9a25901c4dc7a49772e5a02b", "check N"); |
|
equal(c.subjectPublicKeyRSA.e.toString(16), "10001", "check E"); |
|
}); |
|
|
|
test("X509.subjectPublicKeyRSA.verifyString integration test", function() { |
|
RSAKey.prototype.verifyString = _rsasign_verifyString; |
|
var c = new X509(); |
|
c.readCertPEM(sCer1PEM); |
|
expect(2); |
|
equal(c.subjectPublicKeyRSA.verifyString("aaa", hSig3), true, "check sig is valid"); |
|
equal(c.subjectPublicKeyRSA.verifyString("aab", hSig3), false, "check sig is invalid."); |
|
}); |
|
|
|
test("new X509(PEM).getSerialNumber/Issuer/Subject/NotBefore/NotAfter test", function() { |
|
RSAKey.prototype.verifyString = _rsasign_verifyString; |
|
var c = new X509(); |
|
c.readCertPEM(sCer1PEM); |
|
expect(8); |
|
equal(c.getSerialNumberHex(), "009e775e7d9f43abc9", "sn = 02"); |
|
equal(c.getIssuerHex(), "301a310b3009060355040613024a50310b3009060355040a13027a32", "issuer"); |
|
equal(c.getSubjectHex(), "301a310b3009060355040613024a50310b3009060355040a13027a32", "subject"); |
|
equal(c.getNotBefore(), "100531061756Z", "notbefore"); |
|
equal(c.getNotAfter(), "200528061756Z", "notafter"); |
|
equal(X509.hex2dn(c.getSubjectHex()), "/C=JP/O=z2", "subjecthex2str"); |
|
equal(c.getIssuerString(), "/C=JP/O=z2", "issuer str"); |
|
equal(c.getSubjectString(), "/C=JP/O=z2", "subject str"); |
|
}); |
|
|
|
test("X509.getSerialNumber(hCert)", function() { |
|
equal(X509.getSerialNumberHex(hCer1), "009e775e7d9f43abc9", "sn = 02"); |
|
}); |
|
|
|
/* |
|
test("hoge", function() { |
|
RSAKey.prototype.verifyString = _rsasign_verifyString; |
|
var r = new RSAKey(); |
|
expect(4); |
|
equal(hex2b64, null, "check 4"); |
|
equal(_rsasign_verifyString, null, "check 3"); |
|
equal(r.signString, null, "check signString function"); |
|
equal(r.verifyString, null, "check verifyString function"); |
|
}); |
|
*/ |
|
|
|
test("getPublicKeyInfoPropOfCertPEM sCer1PEM", function() { |
|
var r = X509.getPublicKeyInfoPropOfCertPEM(sCer1PEM); |
|
expect(3); |
|
equal(r.algoid, "2a864886f70d010101", "algoid"); |
|
equal(r.algparam, null, "algparam"); |
|
equal(r.keyhex, "3048024100b9b00329505fe2ed60ec5689ddcdf5b94d05ab416e1643b1ca3f96fc472eeb1f62ed476897f159ae98b7f3adecec7971deb5f64d9a25901c4dc7a49772e5a02b0203010001", "keyhex"); |
|
}); |
|
|
|
test("getPublicKeyInfoPropOfCertPEM k1(ECC)", function() { |
|
var r = X509.getPublicKeyInfoPropOfCertPEM(k1CertPEM); |
|
expect(3); |
|
equal(r.algoid, "2a8648ce3d0201", "algoid"); // ecPublicKey |
|
equal(r.algparam, "2a8648ce3d030107", "algparam"); // secp256r1 |
|
equal(r.keyhex, "04a01532a3c0900053de60fbefefcca58793301598d308b41e6f4e364e388c2711bef432c599148c94143d4ff46c2cb73e3e6a41d7eef23c047ea11e60667de425", "keyhex"); |
|
}); |
|
|
|
test("getSignatureAlgorithmName k1(ECC)", function() { |
|
var r = X509.getSignatureAlgorithmName(k1CertHex); |
|
equal(r, "SHA256withECDSA", "k1(ECC) SHA256withECDSA"); |
|
}); |
|
|
|
test("getSignatureAlgorithmName z2(RSA)", function() { |
|
var r = X509.getSignatureAlgorithmName(hCer1); |
|
equal(r, "SHA1withRSA", "z2(RSA) SHA1withRSA"); |
|
}); |
|
|
|
test("getSignatureValueHex k1(ECC)", function() { |
|
var r = X509.getSignatureValueHex(k1CertHex); |
|
equal(r, "3046022100df01c4bf58a06b3fa241824b10569a788ddab80b9dd8bb817936468c82d8401e022100d19175600fd50756f65ead8a0950c1da89b384f47bcf8d62ff917006f7558c27", "k1(ECC) SHA256withECDSA"); |
|
}); |
|
|
|
}); |
|
</script> |
|
|
|
</head> |
|
<body> |
|
<div id="qunit"></div> |
|
<div id="qunit-fixture">test markup</div> |
|
|
|
<p> |
|
<a href="../">TOP</a> | |
|
<a href="index.html">TEST INDEX</a> | |
|
<a href="qunit-do-x509.html">x509</a> | |
|
<a href="qunit-do-x509-ext.html">x509-ext</a> | |
|
<a href="qunit-do-x509-key.html">x509-key</a> | |
|
<a href="qunit-do-x509-kid.html">x509-kid</a> | |
|
<a href="qunit-do-x509-getinfo.html">x509-getinfo</a> | |
|
</p> |
|
|
|
</body> |
|
<center><p>© 2010-2016 Kenji Urushima</p></center> |
|
</html> |
|
|
|
|