Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80552 views
1
var asn1 = require('parse-asn1/asn1')
2
var crt = require('browserify-rsa')
3
var crypto = require('crypto')
4
var fixtures = require('./fixtures')
5
var myCrypto = require('../browser')
6
var nodeCrypto = require('crypto')
7
var parseKeys = require('parse-asn1')
8
var test = require('tape')
9
10
function isNode10 () {
11
return process.version && process.version.split('.').length === 3 && parseInt(process.version.split('.')[0].slice(1), 10) < 1 && parseInt(process.version.split('.')[1], 10) <= 10
12
}
13
14
fixtures.valid.rsa.forEach(function (f) {
15
var message = new Buffer(f.message)
16
var pub = new Buffer(f.public, 'base64')
17
var priv
18
19
if (f.passphrase) {
20
priv = {
21
key: new Buffer(f.private, 'base64'),
22
passphrase: f.passphrase
23
}
24
} else {
25
priv = new Buffer(f.private, 'base64')
26
}
27
28
// skip passphrase tests in node 10
29
if (f.passphrase && isNode10()) return
30
31
test(f.message, function (t) {
32
t.plan(7)
33
34
var mySign = myCrypto.createSign(f.scheme)
35
var nodeSign = nodeCrypto.createSign(f.scheme)
36
var mySig = mySign.update(message).sign(priv)
37
var nodeSig = nodeSign.update(message).sign(priv)
38
39
t.equals(mySig.length, nodeSig.length, 'correct length')
40
t.equals(mySig.toString('hex'), nodeSig.toString('hex'), 'equal sigs')
41
t.equals(mySig.toString('hex'), f.signature, 'compare to known')
42
43
var myVer = myCrypto.createVerify(f.scheme)
44
var nodeVer = nodeCrypto.createVerify(f.scheme)
45
t.ok(nodeVer.update(message).verify(pub, mySig), 'node validate my sig')
46
t.ok(myVer.update(message).verify(pub, nodeSig), 'me validate node sig')
47
myVer = myCrypto.createVerify(f.scheme)
48
nodeVer = nodeCrypto.createVerify(f.scheme)
49
t.ok(nodeVer.update(message).verify(pub, nodeSig), 'node validate node sig')
50
t.ok(myVer.update(message).verify(pub, mySig), 'me validate my sig')
51
})
52
})
53
54
fixtures.valid.ec.forEach(function (f) {
55
var message = new Buffer(f.message)
56
var pub = new Buffer(f.public, 'base64')
57
var priv
58
59
if (f.passphrase) {
60
priv = {
61
key: new Buffer(f.private, 'base64'),
62
passphrase: f.passphrase
63
}
64
} else {
65
priv = new Buffer(f.private, 'base64')
66
}
67
68
// skip passphrase tests in node 10
69
if (f.passphrase && isNode10()) return
70
71
test(f.message, function (t) {
72
t.plan(4)
73
74
var nodeSign = nodeCrypto.createSign(f.scheme)
75
var mySign = myCrypto.createSign(f.scheme)
76
77
var mySig = mySign.update(message).sign(priv)
78
var nodeSig = nodeSign.update(message).sign(priv)
79
t.notEqual(mySig.toString('hex'), nodeSig.toString('hex'), 'not equal sigs')
80
t.equals(mySig.toString('hex'), f.signature)
81
82
var myVer = myCrypto.createVerify(f.scheme)
83
var nodeVer = nodeCrypto.createVerify(f.scheme)
84
t.ok(nodeVer.update(message).verify(pub, mySig), 'node validate my sig')
85
t.ok(myVer.update(message).verify(pub, nodeSig), 'me validate node sig')
86
})
87
})
88
89
fixtures.valid.kvectors.forEach(function (f) {
90
test('kvector algo: ' + f.algo + ' key len: ' + f.key.length + ' msg: ' + f.msg, function (t) {
91
var key = new Buffer(f.key, 'base64')
92
93
t.plan(2)
94
var sig = myCrypto.createSign(f.algo).update(f.msg).sign(key)
95
var rs = asn1.signature.decode(sig, 'der')
96
t.equals(rs.r.toString(16), f.r.toLowerCase(), 'r')
97
t.equals(rs.s.toString(16), f.s.toLowerCase(), 's')
98
})
99
})
100
101
fixtures.invalid.verify.forEach(function (f) {
102
test(f.description, function (t) {
103
t.plan(2)
104
105
var sign = new Buffer(f.signature, 'hex')
106
var pub = new Buffer(f.public, 'base64')
107
var message = new Buffer(f.message)
108
109
t.notOk(nodeCrypto.createVerify(f.scheme)
110
.update(message)
111
.verify(pub, sign), 'node rejects it')
112
113
t.notOk(myCrypto.createVerify(f.scheme)
114
.update(message)
115
.verify(pub, sign), 'We reject it')
116
})
117
})
118
119