@@ -118,6 +118,37 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
118
118
}
119
119
120
120
{
121
+ const jwk = {
122
+ e : 'AQAB' ,
123
+ n : 't9xYiIonscC3vz_A2ceR7KhZZlDu_5bye53nCVTcKnWd2seY6UAdKersX6njr83Dd5OVe' +
124
+ '1BW_wJvp5EjWTAGYbFswlNmeD44edEGM939B6Lq-_8iBkrTi8mGN4YCytivE24YI0D4XZ' +
125
+ 'MPfkLSpab2y_Hy4DjQKBq1ThZ0UBnK-9IhX37Ju_ZoGYSlTIGIhzyaiYBh7wrZBoPczIE' +
126
+ 'u6et_kN2VnnbRUtkYTF97ggcv5h-hDpUQjQW0ZgOMcTc8n-RkGpIt0_iM_bTjI3Tz_gsF' +
127
+ 'di6hHcpZgbopPL630296iByyigQCPJVzdusFrQN5DeC-zT_nGypQkZanLb4ZspSx9Q' ,
128
+ d : 'ktnq2LvIMqBj4txP82IEOorIRQGVsw1khbm8A-cEpuEkgM71Yi_0WzupKktucUeevQ5i0' +
129
+ 'Yh8w9e1SJiTLDRAlJz66kdky9uejiWWl6zR4dyNZVMFYRM43ijLC-P8rPne9Fz16IqHFW' +
130
+ '5VbJqA1xCBhKmuPMsD71RNxZ4Hrsa7Kt_xglQTYsLbdGIwDmcZihId9VGXRzvmCPsDRf2' +
131
+ 'fCkAj7HDeRxpUdEiEDpajADc-PWikra3r3b40tVHKWm8wxJLivOIN7GiYXKQIW6RhZgH-' +
132
+ 'Rk45JIRNKxNagxdeXUqqyhnwhbTo1Hite0iBDexN9tgoZk0XmdYWBn6ElXHRZ7VCDQ' ,
133
+ p : '8UovlB4nrBm7xH-u7XXBMbqxADQm5vaEZxw9eluc-tP7cIAI4sglMIvL_FMpbd2pEeP_B' +
134
+ 'kR76NTDzzDuPAZvUGRavgEjy0O9j2NAs_WPK4tZF-vFdunhnSh4EHAF4Ij9kbsUi90NOp' +
135
+ 'bGfVqPdOaHqzgHKoR23Cuusk9wFQ2XTV8' ,
136
+ q : 'wxHdEYT9xrpfrHPqSBQPpO0dWGKJEkrWOb-76rSfuL8wGR4OBNmQdhLuU9zTIh22pog-X' +
137
+ 'PnLPAecC-4yu_wtJ2SPCKiKDbJBre0CKPyRfGqzvA3njXwMxXazU4kGs-2Fg-xu_iKbaI' +
138
+ 'jxXrclBLhkxhBtySrwAFhxxOk6fFcPLSs' ,
139
+ dp : 'qS_Mdr5CMRGGMH0bKhPUWEtAixUGZhJaunX5wY71Xoc_Gh4cnO-b7BNJ_-5L8WZog0vr' +
140
+ '6PgiLhrqBaCYm2wjpyoG2o2wDHm-NAlzN_wp3G2EFhrSxdOux-S1c0kpRcyoiAO2n29rN' +
141
+ 'Da-jOzwBBcU8ACEPdLOCQl0IEFFJO33tl8' ,
142
+ dq : 'WAziKpxLKL7LnL4dzDcx8JIPIuwnTxh0plCDdCffyLaT8WJ9lXbXHFTjOvt8WfPrlDP_' +
143
+ 'Ylxmfkw5BbGZOP1VLGjZn2DkH9aMiwNmbDXFPdG0G3hzQovx_9fajiRV4DWghLHeT9wzJ' +
144
+ 'fZabRRiI0VQR472300AVEeX4vgbrDBn600' ,
145
+ qi : 'k7czBCT9rHn_PNwCa17hlTy88C4vXkwbz83Oa-aX5L4e5gw5lhcR2ZuZHLb2r6oMt9rl' +
146
+ 'D7EIDItSs-u21LOXWPTAlazdnpYUyw_CzogM_PN-qNwMRXn5uXFFhmlP2mVg2EdELTahX' +
147
+ 'ch8kWqHaCSX53yvqCtRKu_j76V31TfQZGM' ,
148
+ kty : 'RSA' ,
149
+ } ;
150
+ const publicJwk = { kty : jwk . kty , e : jwk . e , n : jwk . n } ;
151
+
121
152
const publicKey = createPublicKey ( publicPem ) ;
122
153
assert . strictEqual ( publicKey . type , 'public' ) ;
123
154
assert . strictEqual ( publicKey . asymmetricKeyType , 'rsa' ) ;
@@ -134,6 +165,16 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
134
165
assert . strictEqual ( derivedPublicKey . asymmetricKeyType , 'rsa' ) ;
135
166
assert . strictEqual ( derivedPublicKey . symmetricKeySize , undefined ) ;
136
167
168
+ const publicKeyFromJwk = createPublicKey ( { key : publicJwk , format : 'jwk' } ) ;
169
+ assert . strictEqual ( publicKey . type , 'public' ) ;
170
+ assert . strictEqual ( publicKey . asymmetricKeyType , 'rsa' ) ;
171
+ assert . strictEqual ( publicKey . symmetricKeySize , undefined ) ;
172
+
173
+ const privateKeyFromJwk = createPrivateKey ( { key : jwk , format : 'jwk' } ) ;
174
+ assert . strictEqual ( privateKey . type , 'private' ) ;
175
+ assert . strictEqual ( privateKey . asymmetricKeyType , 'rsa' ) ;
176
+ assert . strictEqual ( privateKey . symmetricKeySize , undefined ) ;
177
+
137
178
// It should also be possible to import an encrypted private key as a public
138
179
// key.
139
180
const decryptedKey = createPublicKey ( {
@@ -158,46 +199,19 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
158
199
} ) ;
159
200
}
160
201
161
- const jwk = {
162
- e : 'AQAB' ,
163
- n : 't9xYiIonscC3vz_A2ceR7KhZZlDu_5bye53nCVTcKnWd2seY6UAdKersX6njr83Dd5OVe' +
164
- '1BW_wJvp5EjWTAGYbFswlNmeD44edEGM939B6Lq-_8iBkrTi8mGN4YCytivE24YI0D4XZ' +
165
- 'MPfkLSpab2y_Hy4DjQKBq1ThZ0UBnK-9IhX37Ju_ZoGYSlTIGIhzyaiYBh7wrZBoPczIE' +
166
- 'u6et_kN2VnnbRUtkYTF97ggcv5h-hDpUQjQW0ZgOMcTc8n-RkGpIt0_iM_bTjI3Tz_gsF' +
167
- 'di6hHcpZgbopPL630296iByyigQCPJVzdusFrQN5DeC-zT_nGypQkZanLb4ZspSx9Q' ,
168
- d : 'ktnq2LvIMqBj4txP82IEOorIRQGVsw1khbm8A-cEpuEkgM71Yi_0WzupKktucUeevQ5i0' +
169
- 'Yh8w9e1SJiTLDRAlJz66kdky9uejiWWl6zR4dyNZVMFYRM43ijLC-P8rPne9Fz16IqHFW' +
170
- '5VbJqA1xCBhKmuPMsD71RNxZ4Hrsa7Kt_xglQTYsLbdGIwDmcZihId9VGXRzvmCPsDRf2' +
171
- 'fCkAj7HDeRxpUdEiEDpajADc-PWikra3r3b40tVHKWm8wxJLivOIN7GiYXKQIW6RhZgH-' +
172
- 'Rk45JIRNKxNagxdeXUqqyhnwhbTo1Hite0iBDexN9tgoZk0XmdYWBn6ElXHRZ7VCDQ' ,
173
- p : '8UovlB4nrBm7xH-u7XXBMbqxADQm5vaEZxw9eluc-tP7cIAI4sglMIvL_FMpbd2pEeP_B' +
174
- 'kR76NTDzzDuPAZvUGRavgEjy0O9j2NAs_WPK4tZF-vFdunhnSh4EHAF4Ij9kbsUi90NOp' +
175
- 'bGfVqPdOaHqzgHKoR23Cuusk9wFQ2XTV8' ,
176
- q : 'wxHdEYT9xrpfrHPqSBQPpO0dWGKJEkrWOb-76rSfuL8wGR4OBNmQdhLuU9zTIh22pog-X' +
177
- 'PnLPAecC-4yu_wtJ2SPCKiKDbJBre0CKPyRfGqzvA3njXwMxXazU4kGs-2Fg-xu_iKbaI' +
178
- 'jxXrclBLhkxhBtySrwAFhxxOk6fFcPLSs' ,
179
- dp : 'qS_Mdr5CMRGGMH0bKhPUWEtAixUGZhJaunX5wY71Xoc_Gh4cnO-b7BNJ_-5L8WZog0vr' +
180
- '6PgiLhrqBaCYm2wjpyoG2o2wDHm-NAlzN_wp3G2EFhrSxdOux-S1c0kpRcyoiAO2n29rN' +
181
- 'Da-jOzwBBcU8ACEPdLOCQl0IEFFJO33tl8' ,
182
- dq : 'WAziKpxLKL7LnL4dzDcx8JIPIuwnTxh0plCDdCffyLaT8WJ9lXbXHFTjOvt8WfPrlDP_' +
183
- 'Ylxmfkw5BbGZOP1VLGjZn2DkH9aMiwNmbDXFPdG0G3hzQovx_9fajiRV4DWghLHeT9wzJ' +
184
- 'fZabRRiI0VQR472300AVEeX4vgbrDBn600' ,
185
- qi : 'k7czBCT9rHn_PNwCa17hlTy88C4vXkwbz83Oa-aX5L4e5gw5lhcR2ZuZHLb2r6oMt9rl' +
186
- 'D7EIDItSs-u21LOXWPTAlazdnpYUyw_CzogM_PN-qNwMRXn5uXFFhmlP2mVg2EdELTahX' +
187
- 'ch8kWqHaCSX53yvqCtRKu_j76V31TfQZGM' ,
188
- kty : 'RSA' ,
189
- } ;
190
-
191
- for ( const keyObject of [ publicKey , derivedPublicKey ] ) {
202
+ for ( const keyObject of [ publicKey , derivedPublicKey , publicKeyFromJwk ] ) {
192
203
assert . deepStrictEqual (
193
204
keyObject . export ( { format : 'jwk' } ) ,
194
205
{ kty : 'RSA' , n : jwk . n , e : jwk . e }
195
206
) ;
196
207
}
197
- assert . deepStrictEqual (
198
- privateKey . export ( { format : 'jwk' } ) ,
199
- jwk
200
- ) ;
208
+
209
+ for ( const keyObject of [ privateKey , privateKeyFromJwk ] ) {
210
+ assert . deepStrictEqual (
211
+ keyObject . export ( { format : 'jwk' } ) ,
212
+ jwk
213
+ ) ;
214
+ }
201
215
202
216
// Exporting the key using JWK should not work since this format does not
203
217
// support key encryption
@@ -235,10 +249,12 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
235
249
// Encrypt using the public key.
236
250
publicEncrypt ( publicKey , plaintext ) ,
237
251
publicEncrypt ( { key : publicKey } , plaintext ) ,
252
+ publicEncrypt ( { key : publicJwk , format : 'jwk' } , plaintext ) ,
238
253
239
254
// Encrypt using the private key.
240
255
publicEncrypt ( privateKey , plaintext ) ,
241
256
publicEncrypt ( { key : privateKey } , plaintext ) ,
257
+ publicEncrypt ( { key : jwk , format : 'jwk' } , plaintext ) ,
242
258
243
259
// Encrypt using a public key derived from the private key.
244
260
publicEncrypt ( derivedPublicKey , plaintext ) ,
@@ -251,7 +267,8 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
251
267
] , [
252
268
privateKey ,
253
269
{ format : 'pem' , key : privatePem } ,
254
- { format : 'der' , type : 'pkcs1' , key : privateDER }
270
+ { format : 'der' , type : 'pkcs1' , key : privateDER } ,
271
+ { key : jwk , format : 'jwk' }
255
272
] ) ;
256
273
257
274
testDecryption ( publicDecrypt , [
@@ -261,11 +278,13 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
261
278
publicKey ,
262
279
{ format : 'pem' , key : publicPem } ,
263
280
{ format : 'der' , type : 'pkcs1' , key : publicDER } ,
281
+ { key : publicJwk , format : 'jwk' } ,
264
282
265
283
// Decrypt using the private key.
266
284
privateKey ,
267
285
{ format : 'pem' , key : privatePem } ,
268
- { format : 'der' , type : 'pkcs1' , key : privateDER }
286
+ { format : 'der' , type : 'pkcs1' , key : privateDER } ,
287
+ { key : jwk , format : 'jwk' }
269
288
] ) ;
270
289
}
271
290
@@ -359,8 +378,20 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
359
378
}
360
379
361
380
{
362
- [ info . private , info . public ] . forEach ( ( pem ) => {
363
- const key = createPublicKey ( pem ) ;
381
+ const key = createPrivateKey ( { key : info . jwk , format : 'jwk' } ) ;
382
+ assert . strictEqual ( key . type , 'private' ) ;
383
+ assert . strictEqual ( key . asymmetricKeyType , keyType ) ;
384
+ assert . strictEqual ( key . symmetricKeySize , undefined ) ;
385
+ assert . strictEqual (
386
+ key . export ( { type : 'pkcs8' , format : 'pem' } ) , info . private ) ;
387
+ assert . deepStrictEqual (
388
+ key . export ( { format : 'jwk' } ) , info . jwk ) ;
389
+ }
390
+
391
+ {
392
+ for ( const input of [
393
+ info . private , info . public , { key : info . jwk , format : 'jwk' } ] ) {
394
+ const key = createPublicKey ( input ) ;
364
395
assert . strictEqual ( key . type , 'public' ) ;
365
396
assert . strictEqual ( key . asymmetricKeyType , keyType ) ;
366
397
assert . strictEqual ( key . symmetricKeySize , undefined ) ;
@@ -370,7 +401,7 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
370
401
delete jwk . d ;
371
402
assert . deepStrictEqual (
372
403
key . export ( { format : 'jwk' } ) , jwk ) ;
373
- } ) ;
404
+ }
374
405
}
375
406
} ) ;
376
407
@@ -438,8 +469,21 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
438
469
}
439
470
440
471
{
441
- [ info . private , info . public ] . forEach ( ( pem ) => {
442
- const key = createPublicKey ( pem ) ;
472
+ const key = createPrivateKey ( { key : info . jwk , format : 'jwk' } ) ;
473
+ assert . strictEqual ( key . type , 'private' ) ;
474
+ assert . strictEqual ( key . asymmetricKeyType , keyType ) ;
475
+ assert . deepStrictEqual ( key . asymmetricKeyDetails , { namedCurve } ) ;
476
+ assert . strictEqual ( key . symmetricKeySize , undefined ) ;
477
+ assert . strictEqual (
478
+ key . export ( { type : 'pkcs8' , format : 'pem' } ) , info . private ) ;
479
+ assert . deepStrictEqual (
480
+ key . export ( { format : 'jwk' } ) , info . jwk ) ;
481
+ }
482
+
483
+ {
484
+ for ( const input of [
485
+ info . private , info . public , { key : info . jwk , format : 'jwk' } ] ) {
486
+ const key = createPublicKey ( input ) ;
443
487
assert . strictEqual ( key . type , 'public' ) ;
444
488
assert . strictEqual ( key . asymmetricKeyType , keyType ) ;
445
489
assert . deepStrictEqual ( key . asymmetricKeyDetails , { namedCurve } ) ;
@@ -450,7 +494,7 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
450
494
delete jwk . d ;
451
495
assert . deepStrictEqual (
452
496
key . export ( { format : 'jwk' } ) , jwk ) ;
453
- } ) ;
497
+ }
454
498
}
455
499
} ) ;
456
500
0 commit comments