Skip to content

Commit 667d066

Browse files
committed
[add] tests for x509.js
1 parent 9d47ef0 commit 667d066

File tree

3 files changed

+105
-0
lines changed

3 files changed

+105
-0
lines changed

‎njs/http/certs/js/asn1_gen.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import os
2+
import pyasn1
3+
from pyasn1.type import *
4+
from pyasn1.type.namedtype import *
5+
from pyasn1.type.univ import *
6+
from pyasn1.type.char import *
7+
from pyasn1.codec.der.encoder import encode
8+
9+
class Record(Sequence):
10+
componentType = NamedTypes(
11+
NamedType('int0', Integer()),
12+
NamedType('intneg', Integer()),
13+
NamedType('int_large', Integer()),
14+
NamedType('printable', PrintableString()),
15+
NamedType('ia5', IA5String()),
16+
NamedType('utf8', UTF8String()),
17+
NamedType('bit', BitString()),
18+
NamedType('bit_large', BitString()),
19+
)
20+
21+
r = Record()
22+
r['int0'] = 0
23+
r['intneg'] = -137878
24+
r['int_large'] = 12323232312121783738263
25+
r['printable'] = "printable string"
26+
r['ia5'] = "is5 string"
27+
r['utf8'] = "αβγδ"
28+
r['bit'] = "01001"
29+
r['bit_large'] = "010011110010011000000110"
30+
31+
os.write(1, encode(r))

‎njs/http/certs/js/test.der

72 Bytes
Binary file not shown.

‎njs/http/certs/js/x509_test.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import fs from 'fs';
2+
import x509 from 'x509.js';
3+
4+
function compareArray(a, b) {
5+
if (b.length !== a.length) {
6+
return false;
7+
}
8+
9+
for (var i = 0; i < a.length; i++) {
10+
if (!compareArray.isSameValue(b[i], a[i])) {
11+
console.log(`FAILED at ${i} ${b[i]} != ${a[i]}`)
12+
return false;
13+
}
14+
}
15+
16+
return true;
17+
}
18+
19+
compareArray.isSameValue = function(a, b) {
20+
if (a === 0 && b === 0) return 1 / a === 1 / b;
21+
if (a !== a && b !== b) return true;
22+
23+
return a === b;
24+
}
25+
26+
function run(t) {
27+
for (let i = 0; i < t.length; i++) {
28+
let result = t[i].method(t[i].buf)[0];
29+
if (!compareArray(result, t[i].expected)) {
30+
throw `${t[i].name} failed`;
31+
}
32+
33+
console.log(`${t[i].name} passed`);
34+
}
35+
36+
console.log("tests PASSED");
37+
}
38+
39+
/*
40+
* # generate test.der
41+
* python3 asn1_gen.py > test.der
42+
* # verify output
43+
* openssl asn1parse -inform DER -dump -in test.der -dump
44+
* # run tests
45+
* njs x509_test.js
46+
*/
47+
48+
let test_der = fs.readFileSync('test.der');
49+
let client_cert = fs.readFileSync('../ca/intermediate/certs/client.cert.pem', 'utf8');
50+
51+
run([
52+
{ name: 'test.der', buf: test_der, method: x509.asn1_read,
53+
expected: [0,-137878,'029c0b3400977a9bdf97','printable string','is5 string','αβγδ','9','4f2606']},
54+
{ name: 'client.cert.pem', buf: client_cert,
55+
method: (pem) => {
56+
let cert = x509.parse_pem_cert(pem);
57+
return x509.get_oid_value(cert, "2.5.29.17");
58+
},
59+
expected: ['7f000001','00000000000000000000000000000001','example.com','www2.example.com']}
60+
])
61+
62+
console.log('benchmark')
63+
64+
console.time('test.der 100000x')
65+
for (var i = 0; i < 100000; i++) {
66+
x509.asn1_read(test_der);
67+
}
68+
console.timeEnd('test.der 100000x')
69+
70+
console.time('client.cert.pem 1000x')
71+
for (var i = 0; i < 1000; i++) {
72+
x509.parse_pem_cert(client_cert);
73+
}
74+
console.timeEnd('client.cert.pem 1000x')

0 commit comments

Comments
 (0)