Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80668 views
1
var assert = require('assert');
2
var asn1 = require('../../../');
3
var rfc3280 = require('..');
4
5
var Buffer = require('buffer').Buffer;
6
7
describe('asn1.js RFC3280', function() {
8
it('should decode Certificate', function() {
9
var data = new Buffer(
10
'308204763082035ea0030201020208462e4256bb1194dc300d06092a864886f70d0101' +
11
'0505003049310b300906035504061302555331133011060355040a130a476f6f676c65' +
12
'20496e63312530230603550403131c476f6f676c6520496e7465726e65742041757468' +
13
'6f72697479204732301e170d3134303733303132303434305a170d3134313032383030' +
14
'303030305a3068310b30090603550406130255533113301106035504080c0a43616c69' +
15
'666f726e69613116301406035504070c0d4d6f756e7461696e20566965773113301106' +
16
'0355040a0c0a476f6f676c6520496e633117301506035504030c0e7777772e676f6f67' +
17
'6c652e636f6d30820122300d06092a864886f70d01010105000382010f003082010a02' +
18
'82010100b7894e02f9ba01e07889d670fd3618d6022efc96c9d9deae2e800aa19f4b17' +
19
'20c371b9996b2efc12fa191b60a92afe76e80e5d9d47280cbc46a4cd9cf454503fefcf' +
20
'cd2e1c8b113a89bcd1f1427ae793bbd0d1e077bc963ff2ceb2b0c9ab68196fce1b2f40' +
21
'0dc77d6294a7c0d50ff104cf92ee837d5c484a3ba0ce76b9c018cf96545f7e27518232' +
22
'57874945f87b69bac902ce4b378746953c619db909e73fd2f5e2dd009c5c748ec22fcb' +
23
'd6648fe60a5805e98ab8cd65ab0eb0772d7a19aefdc24c9a3933692ca695e7b493f8ac' +
24
'7aab8e5d1229f071cf08ac0b6c641704a74747faacfb857b68359fc1a98c777fb5eb3e' +
25
'9c90d6a13b78f42d6d797fd74f03c30203010001a38201413082013d301d0603551d25' +
26
'0416301406082b0601050507030106082b0601050507030230190603551d1104123010' +
27
'820e7777772e676f6f676c652e636f6d306806082b06010505070101045c305a302b06' +
28
'082b06010505073002861f687474703a2f2f706b692e676f6f676c652e636f6d2f4749' +
29
'4147322e637274302b06082b06010505073001861f687474703a2f2f636c69656e7473' +
30
'312e676f6f676c652e636f6d2f6f637370301d0603551d0e04160414e43d6cc20c12e9' +
31
'7c1920533676ef287737d8884a300c0603551d130101ff04023000301f0603551d2304' +
32
'18301680144add06161bbcf668b576f581b6bb621aba5a812f30170603551d20041030' +
33
'0e300c060a2b06010401d67902050130300603551d1f042930273025a023a021861f68' +
34
'7474703a2f2f706b692e676f6f676c652e636f6d2f47494147322e63726c300d06092a' +
35
'864886f70d010105050003820101002d5501bd33f7b6e06117e53ccf21703565f29ab7' +
36
'8642a771effa4369f32938b45f04208d88a1046ba0a726622e864143c8dac38392430d' +
37
'fbea1b7d41c1e27dd43438a47d36c4a048de318be442abed5f60373687d01b7fefc43e' +
38
'0aacf620b11a69fb237aaa4dc33b97bc0eb39b1abe6902b1518253addda25037389c26' +
39
'0ef2808be7f702f47a6466d6f3b35764f088c94e0a2b9ee403602ae21cbad3fd8e873e' +
40
'9e817945a3d23fd2b35579cce19ea7f8815d166f3e46d53eed25ef391a912bb715af64' +
41
'e43e124f98be487f9d222954a5bebc8d5ca384c7128c6dabffb11150a7d2a62ce565b8' +
42
'a02a6c4c8ecfc7ac7065c1979cb8d50eabd5d36c72a5396e712e',
43
'hex');
44
45
var res = rfc3280.Certificate.decode(data, 'der');
46
47
var tbs = res.tbsCertificate;
48
assert.equal(tbs.version, 'v3');
49
assert.deepEqual(tbs.serialNumber,
50
new asn1.bignum('462e4256bb1194dc', 16));
51
assert.equal(tbs.signature.algorithm.join('.'),
52
'1.2.840.113549.1.1.5');
53
assert.equal(tbs.signature.parameters.toString('hex'), '0500');
54
});
55
it('should decode ECC Certificate', function() {
56
/*
57
Symantec Class 3 ECC 256 bit Extended Validation CA from
58
https://knowledge.symantec.com/support/ssl-certificates-support/index?page=content&actp=CROSSLINK&id=AR1908
59
*/
60
var data = new Buffer(
61
'308203e33082036aa00302010202104d955d20af85c49f6925fbab7c665f89300a0608' +
62
'2a8648ce3d0403033081ca310b300906035504061302555331173015060355040a130e' +
63
'566572695369676e2c20496e632e311f301d060355040b1316566572695369676e2054' +
64
'72757374204e6574776f726b313a3038060355040b1331286329203230303720566572' +
65
'695369676e2c20496e632e202d20466f7220617574686f72697a656420757365206f6e' +
66
'6c79314530430603550403133c566572695369676e20436c6173732033205075626c69' +
67
'63205072696d6172792043657274696669636174696f6e20417574686f72697479202d' +
68
'204734301e170d3132313232303030303030305a170d3232313231393233353935395a' +
69
'30818b310b3009060355040613025553311d301b060355040a131453796d616e746563' +
70
'20436f72706f726174696f6e311f301d060355040b131653796d616e74656320547275' +
71
'7374204e6574776f726b313c303a0603550403133353796d616e74656320436c617373' +
72
'203320454343203235362062697420457874656e6465642056616c69646174696f6e20' +
73
'43413059301306072a8648ce3d020106082a8648ce3d03010703420004dd043db2f290' +
74
'9397c6e9bbbc91db51f0a386edfbc6d38593320549e00483619651ff5721ae0bda0ee7' +
75
'04a17fdb2a1cbdca9835c5717340cde86aab54844326e2a382016d3082016930120603' +
76
'551d130101ff040830060101ff02010030370603551d1f0430302e302ca02aa0288626' +
77
'687474703a2f2f63726c2e77732e73796d616e7465632e636f6d2f706361332d67342e' +
78
'63726c300e0603551d0f0101ff040403020106303706082b06010505070101042b3029' +
79
'302706082b06010505073001861b687474703a2f2f6f6373702e77732e73796d616e74' +
80
'65632e636f6d30650603551d20045e305c305a0604551d20003052302606082b060105' +
81
'05070201161a687474703a2f2f7777772e73796d617574682e636f6d2f637073302806' +
82
'082b06010505070202301c1a1a687474703a2f2f7777772e73796d617574682e636f6d' +
83
'2f727061302a0603551d1104233021a41f301d311b30190603550403131253594d432d' +
84
'4543432d43412d703235362d33301d0603551d0e041604144813651794ec9e162a2a74' +
85
'5ce8532db4fb83eb8e301f0603551d23041830168014b31691fdeea66ee4b52e498f87' +
86
'788180ece5b1b5300a06082a8648ce3d040303036700306402305c9bee83a3764d8c2d' +
87
'054c8234bab3bece8fe8c33481fb4077e8346c5b172b3badd5a7a3d2f366c24fb2b0c8' +
88
'76988fbf02304fc22fce92c5a9bdce7d4ed41b3b6624ea4ecd82af544a88efe3bf3a93' +
89
'6354217d1230d232cdabc981b0a711437b4566',
90
'hex');
91
var SubjectPublicKeyInfo = rfc3280.SubjectPublicKeyInfo;
92
var res = rfc3280.Certificate.decode(data, 'der');
93
94
var tbs = res.tbsCertificate;
95
assert.equal(tbs.version, 'v3');
96
assert.deepEqual(tbs.serialNumber,
97
new asn1.bignum('4d955d20af85c49f6925fbab7c665f89', 16));
98
assert.equal(tbs.signature.algorithm.join('.'),
99
'1.2.840.10045.4.3.3'); // RFC5754
100
var spki = SubjectPublicKeyInfo.encode(tbs.subjectPublicKeyInfo, 'der');
101
// spki check to the output of
102
// openssl x509 -in ecc_cert.pem -pubkey -noout |
103
// openssl pkey -pubin -outform der | openssl base64
104
assert.equal(spki.toString('base64'),
105
'MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3QQ9svKQk5fG6bu8kdtR8KO' +
106
'G7fvG04WTMgVJ4ASDYZZR/1chrgvaDucEoX/bKhy9ypg1xXFzQM3oaqtUhE' +
107
'Mm4g=='
108
);
109
});
110
111
it('should decode AuthorityInfoAccess', function() {
112
var data = new Buffer('305a302b06082b06010505073002861f687474703a2f2f70' +
113
'6b692e676f6f676c652e636f6d2f47494147322e63727430' +
114
'2b06082b06010505073001861f687474703a2f2f636c6965' +
115
'6e7473312e676f6f676c652e636f6d2f6f637370',
116
'hex');
117
118
var info = rfc3280.AuthorityInfoAccessSyntax.decode(data, 'der');
119
120
assert(info[0].accessMethod);
121
});
122
});
123
124