api-console-assets
Version:
This repo only exists to publish api console components to npm
528 lines (463 loc) • 25.3 kB
HTML
<html>
<head>
<title>QUnit for X.509 Certificate 'x509.js'</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<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/rsa.js"></script>
<script src="../ext/rsa2.js"></script>
<script src="../ext/base64.js"></script>
<script src="../src/base64x-1.1.js"></script>
<script src="../src/crypto-1.1.js"></script>
<script src="../src/asn1hex-1.1.js"></script>
<script src="../src/rsapem-1.1.js"></script>
<script src="../src/rsasign-1.2.js"></script>
<script src="../src/x509-1.1.js"></script>
<script src="../src/asn1-1.0.js"></script>
<script src="../src/asn1x509-1.0.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var certGithubPEM = "-----BEGIN CERTIFICATE-----\r\n" +
"MIIF4DCCBMigAwIBAgIQDACTENIG2+M3VTWAEY3chzANBgkqhkiG9w0BAQsFADB1\r\n" +
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\n" +
"d3cuZGlnaWNlcnQuY29tMTQwMgYDVQQDEytEaWdpQ2VydCBTSEEyIEV4dGVuZGVk\r\n" +
"IFZhbGlkYXRpb24gU2VydmVyIENBMB4XDTE0MDQwODAwMDAwMFoXDTE2MDQxMjEy\r\n" +
"MDAwMFowgfAxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYLKwYB\r\n" +
"BAGCNzwCAQMTAlVTMRkwFwYLKwYBBAGCNzwCAQITCERlbGF3YXJlMRAwDgYDVQQF\r\n" +
"Ewc1MTU3NTUwMRcwFQYDVQQJEw41NDggNHRoIFN0cmVldDEOMAwGA1UEERMFOTQx\r\n" +
"MDcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\r\n" +
"YW4gRnJhbmNpc2NvMRUwEwYDVQQKEwxHaXRIdWIsIEluYy4xEzARBgNVBAMTCmdp\r\n" +
"dGh1Yi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx1Nw8r/3z\r\n" +
"Tu3BZ63myyLot+KrKPL33GJwCNEMr9YWaiGwNksXDTZjBK6/6iBRlWVm8r+5TaQM\r\n" +
"Kev1FbHoNbNwEJTVG1m0Jg/Wg1dZneF8Cd3gE8pNb0Obzc+HOhWnhd1mg+2TDP4r\r\n" +
"bTgceYiQz61YGC1R0cKj8keMbzgJubjvTJMLy4OUh+rgo7XZe5trD0P5yu6ADSin\r\n" +
"dvEl9ME1PPZ0rd5qM4J73P1LdqfC7vJqv6kkpl/nLnwO28N0c/p+xtjPYOs2ViG2\r\n" +
"wYq4JIJNeCS66R2hiqeHvmYlab++O3JuT+DkhSUIsZGJuNZ0ZXabLE9iH6H6Or6c\r\n" +
"JL+fyrDFwGeNAgMBAAGjggHuMIIB6jAfBgNVHSMEGDAWgBQ901Cl1qCt7vNKYApl\r\n" +
"0yHU+PjWDzAdBgNVHQ4EFgQUakOQfTuYFHJSlTqqKApD+FF+06YwJQYDVR0RBB4w\r\n" +
"HIIKZ2l0aHViLmNvbYIOd3d3LmdpdGh1Yi5jb20wDgYDVR0PAQH/BAQDAgWgMB0G\r\n" +
"A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjB1BgNVHR8EbjBsMDSgMqAwhi5o\r\n" +
"dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vc2hhMi1ldi1zZXJ2ZXItZzEuY3JsMDSg\r\n" +
"MqAwhi5odHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1ldi1zZXJ2ZXItZzEu\r\n" +
"Y3JsMEIGA1UdIAQ7MDkwNwYJYIZIAYb9bAIBMCowKAYIKwYBBQUHAgEWHGh0dHBz\r\n" +
"Oi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgYgGCCsGAQUFBwEBBHwwejAkBggrBgEF\r\n" +
"BQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMFIGCCsGAQUFBzAChkZodHRw\r\n" +
"Oi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRTSEEyRXh0ZW5kZWRWYWxp\r\n" +
"ZGF0aW9uU2VydmVyQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQAD\r\n" +
"ggEBAG/nbcuC8++QhwnXDxUiLIz+06scipbbXRJd0XjAMbD/RciJ9wiYUhcfTEsg\r\n" +
"ZGpt21DXEL5+q/4vgNipSlhBaYFyGQiDm5IQTmIte0ZwQ26jUxMf4pOmI1v3kj43\r\n" +
"FHU7uUskQS6lPUgND5nqHkKXxv6V2qtHmssrA9YNQMEK93ga2rWDpK21mUkgLviT\r\n" +
"PB5sPdE7IzprOCp+Ynpf3RcFddAkXb6NqJoQRPrStMrv19C1dqUmJRwIQdhkkqev\r\n" +
"ff6IQDlhC8BIMKmCNK33cEYDfDWROtW7JNgBvBTwww8jO1gyug8SbGZ6bZ3k8OV8\r\n" +
"XX4C2NesiZcLYbc2n7B9O+63M2k=\r\n" +
"-----END CERTIFICATE-----\r\n";
// _test/0cert_sites/digicertevroot.cer
var digiCertEvRootPEM = (function() {/*
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----
*/}).toString().match(/\/\*([^]*)\*\//)[1];
// _test/0cert_sites/digicertevroot.cer
var pulseCioGovPEM = (function() {/*
-----BEGIN CERTIFICATE-----
MIIFJDCCBAygAwIBAgISA+A6XXjiqOEp6wsxRPSMihs9MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjA0MDMwMjM3MDBaFw0x
NjA3MDIwMjM3MDBaMBgxFjAUBgNVBAMTDXB1bHNlLmNpby5nb3YwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKvi1wLwoYDIa2pC+/3m/BdEm3iu6r7XpH
4+NtEjYvdZury/E3dmdCtU/sBIb/ZbE8MCFu9DCOWNOzkB8tke6z65a2xYqDdDNm
dWVyFimZfy3M2lsFb1ybw41XQ5xevmRTfpwnk2mRKEyzhuLxyy0J6G3dK7NAHyDA
UehokeYEBKJNtarhNDZvxR4lwJq2rUFWlVrEuAlqvI0s2SqCN1YEbJUGmuYnjkSp
LHbdmkXNb943bfKFUd8EbXQ3sAnZ1RMr99bJQxHJeJsBF7ZRSMcm5GFC0HtAPzyC
MKVTQLq0X5/pgUFfZXcq9NWlHCHDpdM/ReiYZgfyUVUHtQxzBH6NAgMBAAGjggI0
MIICMDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF
BwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPLrqSD0DOiBSUtQQOjbBShgdKgG
MB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAGCCsGAQUFBwEBBGQw
YjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0Lm9y
Zy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5v
cmcvMD4GA1UdEQQ3MDWCDWh0dHBzLmNpby5nb3aCDXB1bHNlLmNpby5nb3aCFXN0
YWdpbmcucHVsc2UuY2lvLmdvdjCB/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYL
KwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5
cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9u
bHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGlu
IGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0
IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMA0GCSqGSIb3DQEB
CwUAA4IBAQALdvLGTpz2/YXmGKfbKOF01bp1YWCLDa8Wha9VPnSFfNhMr4BDE1WU
25C4qWoK/aulDPKmic9wE5GB9wWtFgkNnYRKL1IRYIiTj4RNcObAKQ8UKn6nWY5J
QS6c083NC8kLp9bY+EUWJGImbXoSYo9kxdsmF7hMUXJwy2eGVDy8JRPl+s8hWGoO
WacFqZW/keeSiHxuja2t/r8SADVs41HnGIGrhLpAqgetunCOVOBf3/ukXi7I/99G
skSN1/Bs6kbCE//oDJHBGhHLrU8NCFHD3geyZ2M7fvl8NySvNmK401kdW8d0YlZ+
huwF7BwiYT9T3KZrcukwsj5BUinH75i4
-----END CERTIFICATE-----
*/}).toString().match(/\/\*([^]*)\*\//)[1];
// _test/0cert_sites/danmarksapotuser1.cer
var danmarksUser1PEM = (function() {/*
-----BEGIN CERTIFICATE-----
MIIGYDCCBUigAwIBAgIEU7s4dDANBgkqhkiG9w0BAQsFADBAMQswCQYDVQQGEwJE
SzESMBAGA1UECgwJVFJVU1QyNDA4MR0wGwYDVQQDDBRUUlVTVDI0MDggT0NFUyBD
QSBJSTAeFw0xNTEyMzAxMjE4MDNaFw0xODEyMzAxMjE2NTBaMIGeMQswCQYDVQQG
EwJESzEyMDAGA1UECgwpRGFubWFya3MgQXBvdGVrZXJmb3JlbmluZyAvLyBDVlI6
MjAxMjQ1MTIxWzAgBgNVBAUTGUNWUjoyMDEyNDUxMi1VSUQ6NjQyOTA2OTgwNwYD
VQQDDDBEYW5tYXJrcyBBcG90ZWtlcmZvcmVuaW5nIC0gRGFubWFya3MgQXBvdGVr
ZXJmb3IwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQNL1iA9kO241w
eNpuTm/OoU5i9kOpp+/Vi6OmY14aYEIpgDEWr6nfeGugrsFyR2crOxr7iRhngUyk
UnSsfSqPkhhGiXdcPtEplSubCzP08zf/0PyIyyV5LoBEZr60M7LmahPuQojb09sK
dCTEDMk46LCeISEQGI/ZggALH1SRSQiodctQvVN98okuaJDobgbTi/P2sMu3OK/J
SbQrI2kn5d4ShUlWIBkZqsRUBNRmrvfBQzZpv2+mkDMFGouYzSkYccPivzQCx8BV
9e2QdrB6KVnT6m/l5ND0d3qY41h0i/CffnjofQmoaQ1a3xO82+A6EF+Dl3QF5Wcm
fR2Z2C6rAgMBAAGjggMBMIIC/TAOBgNVHQ8BAf8EBAMCA7gwgYkGCCsGAQUFBwEB
BH0wezA1BggrBgEFBQcwAYYpaHR0cDovL29jc3AuaWNhMDIudHJ1c3QyNDA4LmNv
bS9yZXNwb25kZXIwQgYIKwYBBQUHMAKGNmh0dHA6Ly92LmFpYS5pY2EwMi50cnVz
dDI0MDguY29tL29jZXMtaXNzdWluZzAyLWNhLmNlcjCCAUMGA1UdIASCATowggE2
MIIBMgYKKoFQgSkBAQEDBDCCASIwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cudHJ1
c3QyNDA4LmNvbS9yZXBvc2l0b3J5MIHuBggrBgEFBQcCAjCB4TAQFglUUlVTVDI0
MDgwAwIBARqBzEZvciBhbnZlbmRlbHNlIGFmIGNlcnRpZmlrYXRldCBn5mxkZXIg
T0NFUyB2aWxr5XIsIENQUyBvZyBPQ0VTIENQLCBkZXIga2FuIGhlbnRlcyBmcmEg
d3d3LnRydXN0MjQwOC5jb20vcmVwb3NpdG9yeS4gQmVt5nJrLCBhdCBUUlVTVDI0
MDggZWZ0ZXIgdmlsa+VyZW5lIGhhciBldCBiZWdy5m5zZXQgYW5zdmFyIGlmdC4g
cHJvZmVzc2lvbmVsbGUgcGFydGVyLjAzBgNVHREELDAqgShhcG90ZWtlcmZvcmVu
aW5nZW5AYXBvdGVrZXJmb3JlbmluZ2VuLmRrMIGXBgNVHR8EgY8wgYwwLqAsoCqG
KGh0dHA6Ly9jcmwuaWNhMDIudHJ1c3QyNDA4LmNvbS9pY2EwMi5jcmwwWqBYoFak
VDBSMQswCQYDVQQGEwJESzESMBAGA1UECgwJVFJVU1QyNDA4MR0wGwYDVQQDDBRU
UlVTVDI0MDggT0NFUyBDQSBJSTEQMA4GA1UEAwwHQ1JMMzExNzAfBgNVHSMEGDAW
gBSZj7oNia4hGkJ6Cq4aTE4i/xDrjDAdBgNVHQ4EFgQUc/W+LbQMXATob80qxnVN
E5DeDagwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAWgMjuLxT1GtEfWxR
6Giqj2wUZxn0EecPWrWotL5Rvl5kNDXajcnsdAzEBS+0ZCXP1i/to+tupkQOs/o0
cO759nBIY0O8ZbOvzsKBeLxWdQp2EuLZKDBwLpN49i8yzSJYWd7/KfH15DcNICvD
wHPL6SBjwokCuz5dTFVdjXybOrIihRg8zRKZ4Utm1NV2Rfoh4C9D50uIMgcaIJ2W
rhD4uIUbomqy9Ex0qUmTAV6eZh5ynCjlVYie3UqeJ+UoVfpsNMFNRJdoeKsn6g1W
U2rgoKzYAzliiC89n3hrNbm7rcBLgDFfWsHUtO1w2PDfRAqJcHWoTQiIQNUCPTa8
B9LZ8g==
*/}).toString().match(/\/\*([^]*)\*\//)[1];
// _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 = pemtohex(k1CertPEM);
// test/z1.der1-p3 basicConstraints={ca:true, pathlen:3}
var z1P3CertHex = "3082017630820120a003020102020107300d06092a864886f70d01010b05003019310b3009060355040613025553310a3008060355040a0c0154301e170d3136303431333134313832365a170d3236303431333134313832365a3019310b3009060355040613025553310a3008060355040a0c0154305c300d06092a864886f70d0101010500034b003048024100e8664dd2b40529121568f3b39bc97a62e7ba3c09babdc4f0dcd8df90eb790b9bb645a2b70e3112747b4d3c41b51424895115fef88f79d43eae5b1a4e3518fd590203010001a3533051301d0603551d0e04160414c5473ee200c8e7ad7003dff5420b8cddf4c20e15301f0603551d23041830168014c5473ee200c8e7ad7003dff5420b8cddf4c20e15300f0603551d13040830060101ff020103300d06092a864886f70d01010b0500034100862bf6d5f0c366dd1c71af10df93e2e9e0b7210b6912d1774e27107203f2dc257f9b132285bc1ce8d32d8ffc69470cd6c52ec76b7d68708eca3bbd49556f3005";
test("parseExt github.com", function() {
var x = new X509();
x.readCertPEM(certGithubPEM); // parseExt called internally
equal(x.aExtInfo.length, 9, "9 aExtInfo.length");
equal(x.aExtInfo[0].oid, "2.5.29.35", "[0].oid = AKID");
equal(x.aExtInfo[0].critical, false, "[0].critical = false");
equal(x.aExtInfo[0].vidx, 1502, "[0].vidx");
equal(ASN1HEX.getTLV(x.hex, x.aExtInfo[0].vidx), "301680143dd350a5d6a0adeef34a600a65d321d4f8f8d60f", "[0].tlv");
equal(x.aExtInfo[3].oid, "2.5.29.15", "[3].oid = keyUsage");
equal(x.aExtInfo[3].critical, true, "[3].critical = true");
equal(x.aExtInfo[3].vidx, 1714, "[3].vidx");
equal(ASN1HEX.getTLV(x.hex, x.aExtInfo[3].vidx), "030205a0", "[3].tlv = 0302...");
equal(x.aExtInfo[8].oid, "2.5.29.19", "[8].oid = basicConstraints");
equal(x.aExtInfo[8].critical, true, "[8].critical = true");
equal(x.aExtInfo[8].vidx, 2460, "[8].vidx");
equal(ASN1HEX.getTLV(x.hex, x.aExtInfo[8].vidx), "3000", "[8].tlv = 3000");
});
test("getExtInfo github.com", function() {
var x = new X509();
x.readCertPEM(certGithubPEM); // parseExt called internally
var i3o = x.getExtInfo("2.5.29.19");
equal(i3o !== undefined, true, "i3(2.5.29.19) by oid not undefined");
equal(i3o.oid, "2.5.29.19", "oid");
equal(i3o.critical, true, "critical");
equal(i3o.vidx, 2460, "vidx");
var i3n = x.getExtInfo("keyUsage");
equal(i3n !== undefined, true, "i3n(keyUsage) by name not undefined");
equal(i3n.oid, "2.5.29.15", "oid");
equal(i3n.critical, true, "critical");
equal(i3n.vidx, 1714, "vidx");
var ixn = x.getExtInfo("unknownExt1");
equal(ixn !== undefined, false, "ixn(unknownExt1) by name is undefined");
var iyn = x.getExtInfo("0.1.2.3");
equal(iyn !== undefined, false, "iyn(0.1.2.3) by oid is undefined");
});
test("getExtBasicConstraints", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
var bc = x.getExtBasicConstraints();
deepEqual(bc, {}, "{} for GitHub.com site");
var x2 = new X509();
x2.readCertPEM(digiCertEvRootPEM);
var bc2 = x2.getExtBasicConstraints();
equal(bc2.cA, true, "cA=true for DigiCert EV root");
var x3 = new X509();
x3.readCertHex(z1P3CertHex);
var bc3 = x3.getExtBasicConstraints();
equal(bc3.cA, true, "cA=true for z1p3");
equal(bc3.pathLen, 3, "pathLen=3 for z1p3");
});
test("getExtKeyUsageBin()", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
equal(x.getExtKeyUsageBin(), "101", "101 for GitHub.com site");
var x2 = new X509();
x2.readCertPEM(digiCertEvRootPEM);
equal(x2.getExtKeyUsageBin(), "1000011", "1000011 for DigiCert EV root");
});
test("getExtKeyUsageBin()", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
equal(x.getExtKeyUsageBin(), "101", "101 for GitHub.com site");
var x2 = new X509();
x2.readCertPEM(digiCertEvRootPEM);
equal(x2.getExtKeyUsageBin(), "1000011", "1000011 for DigiCert EV root");
});
test("getExtKeyUsageString()", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
equal(x.getExtKeyUsageString(), "digitalSignature,keyEncipherment", "digitalSignature,keyEncipherment for GitHub.com site");
var x2 = new X509();
x2.readCertPEM(digiCertEvRootPEM);
equal(x2.getExtKeyUsageString(), "digitalSignature,keyCertSign,cRLSign", "digitalSignature,keyCertSign,cRLSign for DigiCert EV root");
});
test("getExtSubjectKeyIdentifier()", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
equal(x.getExtSubjectKeyIdentifier(), "6a43907d3b98147252953aaa280a43f8517ed3a6", "for GitHub.com site");
var x2 = new X509();
x2.readCertPEM(digiCertEvRootPEM);
equal(x2.getExtSubjectKeyIdentifier(), "b13ec36903f8bf4701d498261a0802ef63642bc3", "for DigiCert EV root");
});
test("getExtAuthorityKeyIdentifier()", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
var akid = x.getExtAuthorityKeyIdentifier()
equal(akid.kid, "3dd350a5d6a0adeef34a600a65d321d4f8f8d60f", "for GitHub.com site");
var x2 = new X509();
x2.readCertPEM(digiCertEvRootPEM);
var akid2 = x2.getExtAuthorityKeyIdentifier()
equal(akid2.kid, "b13ec36903f8bf4701d498261a0802ef63642bc3", "for DigiCert EV root");
});
test("getExtExtKeyUsage", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
deepEqual(x.getExtExtKeyUsageName(), ["serverAuth", "clientAuth"], "for GitHub.com site");
});
test("getExtSubjectAltName", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
deepEqual(x.getExtSubjectAltName(), ["github.com", "www.github.com"], "for GitHub.com site");
});
test("getExtCRLDistributionPointsURI github", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
deepEqual(x.getExtCRLDistributionPointsURI(),
["http://crl3.digicert.com/sha2-ev-server-g1.crl",
"http://crl4.digicert.com/sha2-ev-server-g1.crl"],
"for GitHub.com site");
});
test("getExtCRLDistributionPointsURI danmarks", function() {
var x = new X509();
x.readCertPEM(danmarksUser1PEM);
deepEqual(x.getExtCRLDistributionPointsURI(),
["http://crl.ica02.trust2408.com/ica02.crl"],
"for Danmarks Apotekerforening User cert");
});
test("getExtAIAInfo", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
deepEqual(x.getExtAIAInfo(),
{ ocsp: ["http://ocsp.digicert.com"],
caissuer: ["http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt"] },
"for GitHub.com site");
});
test("getCertificatePolicies", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
deepEqual(x.getExtCertificatePolicies(),
[{
id: "2.16.840.1.114412.2.1",
cps: "https://www.digicert.com/CPS"
}],
"for GitHub.com site");
var x1 = new X509();
x1.readCertPEM(pulseCioGovPEM);
deepEqual(x1.getExtCertificatePolicies(),
[{
id: "2.23.140.1.2.1"
},{
id: "1.3.6.1.4.1.44947.1.1.1",
cps: "http://cps.letsencrypt.org",
unotice: "This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/"
}],
"for pulse.cio.gov site Let's Encrypt cert");
});
// === OLD STATIC METHODS ==================
test("readCertPEM, parseExt aExtInfo github.com", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
var a = x.aExtInfo;
equal(a.length, 9, "num ext=9");
equal(a[0].vidx, 1502, "AKID TLV index");
equal(a[0].oid, "2.5.29.35", "AKID oid");
equal(a[0].critical, false, "AKID critical");
equal(a[0].vidx, 1502, "AKID value index");
equal(a[1].oid, "2.5.29.14", "SKID oid");
equal(a[1].critical, false, "SKID critical");
equal(a[2].oid, "2.5.29.17", "SAN oid");
equal(a[2].critical, false, "SAN critical");
equal(a[3].oid, "2.5.29.15", "KeyUsage oid");
equal(a[3].critical, true, "KeyUsage critical");
equal(a[3].vidx, 1714, "KeyUsage posV");
equal(ASN1HEX.getTLV(x.hex, a[3].vidx), "030205a0", "KeyUsage value 030205a0");
equal(a[4].oid, "2.5.29.37", "ExtKeyUsage oid");
equal(a[4].critical, false, "ExtKeyUsage critical");
equal(a[5].oid, "2.5.29.31", "CDP oid");
equal(a[5].critical, false, "CDP critical");
equal(a[6].oid, "2.5.29.32", "CertPolicy oid");
equal(a[6].critical, false, "CertPolicy critical");
equal(a[7].oid, "1.3.6.1.5.5.7.1.1", "AIA oid");
equal(a[7].critical, false, "AIA critical");
equal(a[8].oid, "2.5.29.19", "basicConstraints oid");
equal(a[8].critical, true, "basicConstraints critical");
equal(ASN1HEX.getTLV(x.hex, a[8].vidx), "3000", "basicConst value 3000");
});
test("getExtInfo vidx github.com", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
equal(x.getExtInfo("keyUsage").vidx, 1714, "by keyUsage");
equal(x.getExtInfo("2.5.29.15").vidx, 1714, "by 2.5.29.15(=keyUsage)");
equal(x.getExtInfo("policyConstraints"), undefined,
"by policyConstraints -> undefined, no such extension");
equal(x.getExtInfo("0.0.0.0"), undefined,
"by 0.0.0.0 -> undefined, no such extension");
});
test("getExtInfo getV github.com", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
var ku = x.getExtInfo("keyUsage");
equal(ASN1HEX.getV(x.hex, ku.vidx), "05a0", "by keyUsage");
equal(x.getExtInfo("policyConstraints"), undefined,
"by policyConstraints -> undefined, no such extension");
equal(x.getExtInfo("0.0.0.0"), undefined,
"by 0.0.0.0 -> undefined, no such extension");
});
test("getExtInfo getTLV github.com", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
var ku = x.getExtInfo("keyUsage");
equal(ASN1HEX.getTLV(x.hex, ku.vidx), "030205a0", "by keyUsage");
equal(x.getExtInfo("policyConstraints"), undefined,
"by policyConstraints -> undefined, no such extension");
equal(x.getExtInfo("0.0.0.0"), undefined,
"by 0.0.0.0 -> undefined, no such extension");
});
test("getExtKeyUsageBin", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
equal(x.getExtKeyUsageBin(), "101", "101");
});
test("getExtKeyUsageString", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
equal(x.getExtKeyUsageString(), "digitalSignature,keyEncipherment", "digitalSignature,keyEncipherment");
});
test("getExtAIAInfo", function() {
var x = new X509();
x.readCertPEM(certGithubPEM);
var info = x.getExtAIAInfo();
equal(info.ocsp.length, 1, "number item of ocsp = 1");
equal(info.ocsp[0], "http://ocsp.digicert.com", "ocsp=http://ocsp.digicert.com");
equal(info.caissuer.length, 1, "number item of caIssuer = 1");
equal(info.caissuer[0], "http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt", "caIssuer=http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt");
});
test("getExtBasicConstraints k1 {cA:true}", function() {
var x = new X509();
x.readCertHex(k1CertHex);
var r = x.getExtBasicConstraints();
equal(typeof r, "object");
equal(r.cA, true);
equal(r.pathLen === undefined, true);
});
// test/z1.der1-p3 basicConstraints={ca:true, pathlen:3}
test("getExtBasicConstraints z1.der1-p3 {cA:true,pathLen:3}", function() {
var x = new X509();
x.readCertHex("3082017630820120a003020102020107300d06092a864886f70d01010b05003019310b3009060355040613025553310a3008060355040a0c0154301e170d3136303431333134313832365a170d3236303431333134313832365a3019310b3009060355040613025553310a3008060355040a0c0154305c300d06092a864886f70d0101010500034b003048024100e8664dd2b40529121568f3b39bc97a62e7ba3c09babdc4f0dcd8df90eb790b9bb645a2b70e3112747b4d3c41b51424895115fef88f79d43eae5b1a4e3518fd590203010001a3533051301d0603551d0e04160414c5473ee200c8e7ad7003dff5420b8cddf4c20e15301f0603551d23041830168014c5473ee200c8e7ad7003dff5420b8cddf4c20e15300f0603551d13040830060101ff020103300d06092a864886f70d01010b0500034100862bf6d5f0c366dd1c71af10df93e2e9e0b7210b6912d1774e27107203f2dc257f9b132285bc1ce8d32d8ffc69470cd6c52ec76b7d68708eca3bbd49556f3005");
var r = x.getExtBasicConstraints();
equal(typeof r, "object");
equal(r.cA, true);
equal(r.pathLen, 3);
});
// test/z1.der2-no basicConstraints has empty value (for EE)
test("getExtBasicConstraints z1.der2-emp {}", function() {
var x = new X509();
x.readCertHex("308201703082011aa003020102020107300d06092a864886f70d01010b05003019310b3009060355040613025553310a3008060355040a0c0154301e170d3136303431333134313934345a170d3236303431333134313934345a3019310b3009060355040613025553310a3008060355040a0c0154305c300d06092a864886f70d0101010500034b003048024100e8664dd2b40529121568f3b39bc97a62e7ba3c09babdc4f0dcd8df90eb790b9bb645a2b70e3112747b4d3c41b51424895115fef88f79d43eae5b1a4e3518fd590203010001a34d304b301d0603551d0e04160414c5473ee200c8e7ad7003dff5420b8cddf4c20e15301f0603551d23041830168014c5473ee200c8e7ad7003dff5420b8cddf4c20e1530090603551d1304023000300d06092a864886f70d01010b050003410039de7f9c2975d1d309edd707609c3052c6adeda0b440c55e86410d303abd3363e4d66a1858c5c7f747fee590c38cf68a9ae39ce394175e36d12308490d3b94f2");
var r = x.getExtBasicConstraints();
deepEqual(r, {}, "der2-emp");
});
// test/z1.der3-no (no basic constraints)
test("getExtBasicConstraints z1.der3-no (no basic constraints)", function() {
var x = new X509();
x.readCertHex("308201653082010fa003020102020107300d06092a864886f70d01010b05003019310b3009060355040613025553310a3008060355040a0c0154301e170d3136303431333135313332335a170d3236303431333135313332335a3019310b3009060355040613025553310a3008060355040a0c0154305c300d06092a864886f70d0101010500034b003048024100e8664dd2b40529121568f3b39bc97a62e7ba3c09babdc4f0dcd8df90eb790b9bb645a2b70e3112747b4d3c41b51424895115fef88f79d43eae5b1a4e3518fd590203010001a3423040301d0603551d0e04160414c5473ee200c8e7ad7003dff5420b8cddf4c20e15301f0603551d23041830168014c5473ee200c8e7ad7003dff5420b8cddf4c20e15300d06092a864886f70d01010b050003410016f823db6f65546958157ec08c20e736b0243fb6fa2fba6b74ac036f0115786c070d80d94b428f2f9d174169fb19e00fadfa5dbfbd19f27e2782adbd7bec644b");
var r = x.getExtBasicConstraints();
equal(r, null);
});
});
</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>© 2015-2017 Kenji Urushima</p></center>
</html>