forked from nodejs/node
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathecdsa.js
More file actions
193 lines (185 loc) · 9.58 KB
/
Copy pathecdsa.js
File metadata and controls
193 lines (185 loc) · 9.58 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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
'use strict';
module.exports = function() {
const pkcs8 = {
'P-256': Buffer.from(
'308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b020101' +
'04205119f596e17f3c55a170b674c96e6bea7269dc9240047c76c841ff49106c4989' +
'a14403420004b1d1e7da708dfadf90bc013a4009184bdb3f9065078f5598f6ad2638' +
'65a387e249ebf1a514ad8c943635a66d8acd64ebf2c876e55448813f10026a5e1f0a' +
'9817', 'hex'),
'P-384': Buffer.from(
'3081b6020100301006072a8648ce3d020106052b8104002204819e30819b02010104' +
'3002a9a0d899efa87e7564110907e9d82c21bd6265a37abd9a6fdb0f80ec844dd3a1' +
'425320d67ddc30f5db74efb9a2e661a164036200041d319d692dca5f5754ba7b32c1' +
'1642c6d8d2b4fb8249c3f214d71e90b5252966d97f7beb1faab1e4f3e2605549c2ee' +
'db520329b3bea6b5e55624a15150a16966635f1916ef04dd758e69409d0633cb4b25' +
'994179b22a769c743436910e799951', 'hex'),
'P-521': Buffer.from(
'3081ee020100301006072a8648ce3d020106052b810400230481d63081d302010104' +
'4201533e618f98ead1b513ec8878c8820d377a36d8f03f2ba046c931825a3d358730' +
'c0b26033dbb7f7e4a3d4434a035e24b707f9124766176e1af0b85df22eaaba9c25a1' +
'8189038186000400a6deecfb489117f1e41cc4a064073d8673086e51db25086e8db7' +
'64d4eff60aad6358fdcf967ac68459275e2a804f8eeeb7e4c4284b1451c0a5ea76fe' +
'7007ac054701c5eddaf9a89e7c4fdcc924c737d8f585da9703a954c23be7c14aafa6' +
'6654b256770a938e7f26e700c603931c7bd0bdb5d0632c7d1eab466f09d976c24a32' +
'3e1b7c', 'hex')
}
const spki = {
'P-256': Buffer.from(
'3059301306072a8648ce3d020106082a8648ce3d03010703420004b1d1e7da708dfa' +
'df90bc013a4009184bdb3f9065078f5598f6ad263865a387e249ebf1a514ad8c9436' +
'35a66d8acd64ebf2c876e55448813f10026a5e1f0a9817', 'hex'),
'P-384': Buffer.from(
'3076301006072a8648ce3d020106052b81040022036200041d319d692dca5f5754ba' +
'7b32c11642c6d8d2b4fb8249c3f214d71e90b5252966d97f7beb1faab1e4f3e26055' +
'49c2eedb520329b3bea6b5e55624a15150a16966635f1916ef04dd758e69409d0633' +
'cb4b25994179b22a769c743436910e799951', 'hex'),
'P-521': Buffer.from(
'30819b301006072a8648ce3d020106052b81040023038186000400a6deecfb489117' +
'f1e41cc4a064073d8673086e51db25086e8db764d4eff60aad6358fdcf967ac68459' +
'275e2a804f8eeeb7e4c4284b1451c0a5ea76fe7007ac054701c5eddaf9a89e7c4fdc' +
'c924c737d8f585da9703a954c23be7c14aafa66654b256770a938e7f26e700c60393' +
'1c7bd0bdb5d0632c7d1eab466f09d976c24a323e1b7c', 'hex')
}
const plaintext = Buffer.from(
'5f4dba4f320c0ce876725afce5fbd25bf83e5a7125a08cafe73c3ebac421779df9d55d' +
'180c3ae9942645e1d82fee8c9d294b3cb1a08a9931201b3c0e81fc47cacf8315a2af66' +
'324113c3b66230c34608c4f4593634ce02b267362277f0a840ca74bc3d1a6236952c5e' +
'd7aaf8a8fecbddfa7584e6978cea5d2a5b9fb7f1b48c8b0be58a305202754d83761073' +
'74793cf026aaee5300727d836cd71e71b345ddb2e44446ffc5b901635413890d910ea3' +
'80984a90191031323f16dbcc9d6be168b84885384ca03e12600ac1c248028af3726cc9' +
'3463882ea8c02aab', 'hex');
// For verification tests.
const signatures = {
'P-256': {
'SHA-1': Buffer.from(
'a6f9548fa945bca4ce6e41d4099623b409e21070c03179161867d3ca411ee4f39e' +
'51ba999723e609d0abb2cc48450e886544ca400bae09841651211b43907672',
'hex'),
'SHA-256': Buffer.from(
'15f4adec59122298cd1642ee9104748c705dc6a3f70ed8222a52ee0420a35ce4c8' +
'293db29689acf24f6009b98df0cb8ec1aab17f8ad448a8c0e86843dfa824a3',
'hex'),
'SHA-384': Buffer.from(
'b860be71578d07ad137c2a75ac29528114b23f58021b2c2875ac1374ed3143a928' +
'4efd9402b950cfc738fc9df4e33d917594f2078b96a02d5fbf17efe94e72a6',
'hex'),
'SHA-512': Buffer.from(
'b6a0a14d7e4bc6dd2eda82c9234f174b670b60c8f7d101f68fdf5889e02373b025' +
'dcbc4c82f2929b8e06c68535da98e38fe399c53a814b097935581ef21535eb',
'hex'),
...(!process.features.openssl_is_boringssl ? {
'SHA3-256': Buffer.from(
'f6a48eb5557f484ed0c3e4b5c78a3cf497cbd346db06a4165d429248aa2cc51a69' +
'747d09f57af145469a8b607a9b8b9709629d74e8f5ca337c6ddc581b6f6103',
'hex'),
'SHA3-384': Buffer.from(
'777785978eb59da32888554dc7fd62d1ba1a3033cddaa8c36b8f3dcea8f85e1c8e' +
'6db26f509747bd144dfa9436784bf4abbcaa6abcf1ecc09cea3b921d46738c',
'hex'),
'SHA3-512': Buffer.from(
'0f01c2083b5dd7fccb2784563f88cd9a815d570a1690695e426643ab725780760d' +
'e972e26e18d67f5557be89f17b4cd0065ce2937de299bdb2e972ebf7635084',
'hex')
} : {})
},
'P-384': {
'SHA-1': Buffer.from(
'65fe070ec3eac35250d00b9ee6db4d2dadd5f3bbb9c495c8671d2a0d2b99149fb2' +
'4f88af074e0b903268b3d0ed5f0e14685796b28fe34b2d8edcdf10845b24cf79b3' +
'3627d8bd2c81621cb51e030c21a43abb0a8740fac26f8522e683c367ac96', 'hex'),
'SHA-256': Buffer.from(
'4bc2dfea3bcda4fbb4fd927b030f9b80b1f5d2ad9bb7aa06293869577120b2b1d0' +
'ef11ccd9fed0714aab36bef63928f784f53c7e09df93e9b3e5b0c883cf720951b4' +
'fe2382c7842edcfcd45d956a72d29a4030a038a900e6f7dd857a5650d3e8', 'hex'),
'SHA-384': Buffer.from(
'0dd9c2c7f0b6f4d9328254a902e87374b3c092195e6be21aa1a6dcd8eba60f7b0b' +
'38c4006dfa2146d4e9fd23dc336179974017493a1f4f74eecfe455be3da9ed9964' +
'1d81610dfeb468b607da941d5714e7b51aee2c45aa0e9c4da021b2370090', 'hex'),
'SHA-512': Buffer.from(
'72fbdb369fd34c1c54264d07f4facd69b02e4206f8a8bb259b882a305c56fde2d3' +
'5107e493c53cd6b4af0b31306f4d03fd43cfc762a1030e17a3d775453a1212b142' +
'9f7b3d93066a5f42a10b138cd177dc09616e827d598822d78d4627b754e6', 'hex'),
...(!process.features.openssl_is_boringssl ? {
'SHA3-256': Buffer.from(
'0b07c078be30fa5925a307d6fc559c5f398e63fb5d007d6b24a834847f2d3d18d5' +
'b5e840711c52a7bc6626c3ced93301e873c013a706f6b297c12cc6d47a71e0529e' +
'719f43957de9995621d3cb0217469adaa6fd3135470771d0aa9d05d7a9c6', 'hex'),
'SHA3-384': Buffer.from(
'2f36e8b04af46f68ef900c2720e3518b06f5440865d44072bbad5d62288c575042' +
'b183a372acd70328c738668dcecb9866801462d62df3c35450fdc6c95433103fcd' +
'c77999b640e3f92bd4e9be6e27ab129d1bc4f0b2a4c829388666920892d3', 'hex'),
'SHA3-512': Buffer.from(
'32a951e886c33ac57a008efe9643bc92aa3ece9521d115e0c7240caecf124d1f7c' +
'dcba7fabb9ad5202e04f7aa591ab01ed3f060f04f493e4f24430fe8159200612f0' +
'2849108b8be6edc8494c328097ad9265928efe5cb9d91be2f013ee17ee4e', 'hex')
} : {})
},
'P-521': {
'SHA-1': Buffer.from(
'01781a17a60e43126960fd396e1210916c2115ca4428d968389c4b46c1553674ce' +
'937b8e21700ce60932ae0f575ca187dd597720db839eb1f20c7e3394787559dcd5' +
'00207e570df5c7e4ad9fc0a5f72065e9ce1c9e3d12ca5e6dd9f44fe128561b75f4' +
'226c4fadf23d83536cc669ea4098e373b6cb919c8b5cfc0505a67d96b276a46a3d',
'hex'),
'SHA-256': Buffer.from(
'0174dba77b14d73f66f5716786a3e5a8d7c931445e6d320a9229d961d8a1b3efd1' +
'1a5ea33c79495ac599bbb68a641a849d58d83ef854cc265fa6c917dff6ee435a67' +
'01b3d5527dac20fb0a7033c3fe79744eacef7b3ffc27b64dc863f86f42982cb222' +
'9245fe9de48aa59eb653d4497086d911a5bd270e95c51e7e98f7a5863fc7fb065c',
'hex'),
'SHA-384': Buffer.from(
'01f77db1e51378e117c5b8bec8a03f9657d244c54e837908bf7101255f4151525d' +
'9e89cf7f54631b3368919d3824ff9f7f78fe81239a1a9fde2b7a83e95ca6a0ca11' +
'01b98b1da4ed00ec769367e9958b8047d47f92ab8bff96f1330bf948c92209011b' +
'8cdbb496d464dbb916720eb702bdad928c99b980b76504e0ad1c12b4a85731c70c',
'hex'),
'SHA-512': Buffer.from(
'00b2caaf6798519a9d36dbfafe786b2fba1cc2acb99593c177b36e3a1ceeb70227' +
'5ae23cfcca0aad78f6b6dee6b4718b95d0d1a715aa3378470e50b516c18e0f3305' +
'01f0071e6a32867fa70f695cd39c4e87e142b9e4134d38740bd6fee354a575167e' +
'13524e94832637910fe11e53a85fb21b91adb81bb1779c4e2b8bc87c717dc35084',
'hex'),
...(!process.features.openssl_is_boringssl ? {
'SHA3-256': Buffer.from(
'00463679f47a4c705e03447360dcf34d1743e0d4b2591cc66832a6bc80d92e538c' +
'169a1fd330f98e7235ca7fec7e16ac44fb13095b8edf2c76b75c4845177d59e425' +
'0127c4359f6a4c9ccb63e7a9ff8122c0b4a8b7408e28c96817ecc3baf8c559c413' +
'c3bb580447dec9f52139b2afde369cd51730f050bc94137556ae137f0509464219',
'hex'),
'SHA3-384': Buffer.from(
'01969a4db0888bc067a68a31fe5d0fc97e0b701f570565f7b25cb27707c6f020ff' +
'680f8553ec5c2d6885e9e91b39262ed1bde375525eb13fdf12089b7939c7689735' +
'0101c8b8d1129a217e8e956bef78cf7b9a0458523b04ac8e0b84ce73d54326f7a8' +
'704ee42fe183f3ef79d83e676f34dc5476e2342641a5b973d3d94e8503676fbbc5',
'hex'),
'SHA3-512': Buffer.from(
'000f362e914ee0136663cf57bf4085c25604af6dc198b4818751e1195ee7e41a16' +
'91be909dcbc2bae00b8917f6bb918eae3740ac1b76e0913137c2da1171d6400b55' +
'01ec6e1dc5987a27fe16fc2ce5c8e954088f898a9bbefb176eaa8bbd9ccc264c4c' +
'cc38c83ac8b5a168f90228daf8405a2b9bf7829c263a646b4e1098e2ace38deec7',
'hex')
} : {})
}
}
const curves = ['P-256', 'P-384', 'P-521'];
const hashes = ['SHA-1', 'SHA-256', 'SHA-384', 'SHA-512'];
if (!process.features.openssl_is_boringssl) {
hashes.push('SHA3-256', 'SHA3-384', 'SHA3-512');
}
const vectors = [];
curves.forEach((namedCurve) => {
hashes.forEach((hash) => {
vectors.push({
publicKeyBuffer: spki[namedCurve],
privateKeyBuffer: pkcs8[namedCurve],
name: 'ECDSA',
namedCurve,
hash,
plaintext,
signature: signatures[namedCurve][hash]
});
})
});
return vectors;
}