forked from stacks-archive/key-encoder-js
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest.js
More file actions
130 lines (100 loc) · 5.75 KB
/
test.js
File metadata and controls
130 lines (100 loc) · 5.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
var test = require('tape'),
KeyEncoder = require('./index'),
ECPrivateKeyASN = KeyEncoder.ECPrivateKeyASN,
SubjectPublicKeyInfoASN = KeyEncoder.SubjectPublicKeyInfoASN,
BN = require('bn.js')
var keys = {
rawPrivate: '844055cca13efd78ce79a4c3a4c5aba5db0ebeb7ae9d56906c03d333c5668d5b',
rawPublic: '04147b79e9e1dd3324ceea115ff4037b6c877c73777131418bfb2b713effd0f502327b923861581bd5535eeae006765269f404f5f5c52214e9721b04aa7d040a75',
pemPrivate: '-----BEGIN EC PRIVATE KEY-----\n' +
'MHQCAQEEIIRAVcyhPv14znmkw6TFq6XbDr63rp1WkGwD0zPFZo1boAcGBSuBBAAK\n' +
'oUQDQgAEFHt56eHdMyTO6hFf9AN7bId8c3dxMUGL+ytxPv/Q9QIye5I4YVgb1VNe\n' +
'6uAGdlJp9AT19cUiFOlyGwSqfQQKdQ==\n' +
'-----END EC PRIVATE KEY-----',
pemCompactPrivate: '-----BEGIN EC PRIVATE KEY-----\n' +
'MC4CAQEEIIRAVcyhPv14znmkw6TFq6XbDr63rp1WkGwD0zPFZo1boAcGBSuBBAAK\n' +
'-----END EC PRIVATE KEY-----',
pemPublic: '-----BEGIN PUBLIC KEY-----\n' +
'MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEFHt56eHdMyTO6hFf9AN7bId8c3dxMUGL\n' +
'+ytxPv/Q9QIye5I4YVgb1VNe6uAGdlJp9AT19cUiFOlyGwSqfQQKdQ==\n' +
'-----END PUBLIC KEY-----',
derPrivate: '30740201010420844055cca13efd78ce79a4c3a4c5aba5db0ebeb7ae9d56906c03d333c5668d5ba00706052b8104000aa14403420004147b79e9e1dd3324ceea115ff4037b6c877c73777131418bfb2b713effd0f502327b923861581bd5535eeae006765269f404f5f5c52214e9721b04aa7d040a75',
derPublic: '3056301006072a8648ce3d020106052b8104000a03420004147b79e9e1dd3324ceea115ff4037b6c877c73777131418bfb2b713effd0f502327b923861581bd5535eeae006765269f404f5f5c52214e9721b04aa7d040a75'
}
var keyEncoder = new KeyEncoder('secp256k1')
test('encodeECPrivateKeyASN', function(t) {
t.plan(3)
var secp256k1Parameters = [1, 3, 132, 0, 10],
pemOptions = {label: 'EC PRIVATE KEY'}
var privateKeyObject = {
version: new BN(1),
privateKey: new Buffer(keys.rawPrivate, 'hex'),
parameters: secp256k1Parameters,
publicKey: { unused: 0, data: new Buffer(keys.rawPublic, 'hex') }
}
var privateKeyPEM = ECPrivateKeyASN.encode(privateKeyObject, 'pem', pemOptions)
t.equal(privateKeyPEM, keys.pemPrivate, 'encoded PEM private key should match the OpenSSL reference')
var decodedPrivateKeyObject = ECPrivateKeyASN.decode(privateKeyPEM, 'pem', pemOptions)
t.equal(JSON.stringify(privateKeyObject), JSON.stringify(decodedPrivateKeyObject), 'encoded-and-decoded private key object should match the original')
var openSSLPrivateKeyObject = ECPrivateKeyASN.decode(keys.pemPrivate, 'pem', pemOptions)
t.equal(JSON.stringify(privateKeyObject), JSON.stringify(openSSLPrivateKeyObject), 'private key object should match the one decoded from the OpenSSL PEM')
})
test('encodeSubjectPublicKeyInfoASN', function(t) {
t.plan(1)
var secp256k1Parameters = [1, 3, 132, 0, 10],
pemOptions = {label: 'PUBLIC KEY'}
var publicKeyObject = {
algorithm: {
id: [1, 2, 840, 10045, 2, 1],
curve: secp256k1Parameters
},
pub: {
unused: 0,
data: new Buffer(keys.rawPublic, 'hex')
}
}
var publicKeyPEM = SubjectPublicKeyInfoASN.encode(publicKeyObject, 'pem', pemOptions)
t.equal(publicKeyPEM, keys.pemPublic, 'encoded PEM public key should match the OpenSSL reference')
})
test('encodeRawPrivateKey', function(t) {
t.plan(2)
var privateKeyPEM = keyEncoder.encodePrivate(keys.rawPrivate, 'raw', 'pem')
t.equal(privateKeyPEM, keys.pemPrivate, 'encoded PEM private key should match the OpenSSL reference')
var privateKeyDER = keyEncoder.encodePrivate(keys.rawPrivate, 'raw', 'der')
t.equal(privateKeyDER, keys.derPrivate, 'encoded DER private key should match the OpenSSL reference')
})
test('encodeDERPrivateKey', function(t) {
t.plan(2)
var rawPrivateKey = keyEncoder.encodePrivate(keys.derPrivate, 'der', 'raw')
t.equal(rawPrivateKey, keys.rawPrivate, 'encoded raw private key should match the OpenSSL reference')
var privateKeyPEM = keyEncoder.encodePrivate(keys.derPrivate, 'der', 'pem')
t.equal(privateKeyPEM, keys.pemPrivate, 'encoded PEM private key should match the OpenSSL reference')
})
test('encodePEMPrivateKey', function(t) {
t.plan(2)
var rawPrivateKey = keyEncoder.encodePrivate(keys.pemPrivate, 'pem', 'raw')
t.equal(rawPrivateKey, keys.rawPrivate, 'encoded raw private key should match the OpenSSL reference')
var privateKeyDER = keyEncoder.encodePrivate(keys.pemPrivate, 'pem', 'der')
t.equal(privateKeyDER, keys.derPrivate, 'encoded DER private key should match the OpenSSL reference')
})
test('encodeRawPublicKey', function(t) {
t.plan(2)
var publicKeyPEM = keyEncoder.encodePublic(keys.rawPublic, 'raw', 'pem')
t.equal(publicKeyPEM, keys.pemPublic, 'encoded PEM public key should match the OpenSSL reference')
var publicKeyDER = keyEncoder.encodePublic(keys.rawPublic, 'raw', 'der')
t.equal(publicKeyDER, keys.derPublic, 'encoded DER public key should match the OpenSSL reference')
})
test('encodeDERPublicKey', function(t) {
t.plan(2)
var rawPublicKey = keyEncoder.encodePublic(keys.derPublic, 'der', 'raw')
t.equal(rawPublicKey, keys.rawPublic, 'encoded raw public key should match the OpenSSL reference')
var publicKeyPEM = keyEncoder.encodePublic(keys.derPublic, 'der', 'pem')
t.equal(publicKeyPEM, keys.pemPublic, 'encoded PEM public key should match the OpenSSL reference')
})
test('encodePEMPublicKey', function(t) {
t.plan(2)
var rawPublicKey = keyEncoder.encodePublic(keys.pemPublic, 'pem', 'raw')
t.equal(rawPublicKey, keys.rawPublic, 'encoded raw public key should match the OpenSSL reference')
var publicKeyDER = keyEncoder.encodePublic(keys.pemPublic, 'pem', 'der')
t.equal(publicKeyDER, keys.derPublic, 'encoded DER public key should match the OpenSSL reference')
})