@@ -21,6 +21,8 @@ const dsaPubPem = fixtures.readSync('test_dsa_pubkey.pem', 'ascii');
2121const dsaKeyPem = fixtures . readSync ( 'test_dsa_privkey.pem' , 'ascii' ) ;
2222const dsaKeyPemEncrypted = fixtures . readSync ( 'test_dsa_privkey_encrypted.pem' ,
2323 'ascii' ) ;
24+ const rsaPkcs8KeyPem = fixtures . readSync ( 'test_rsa_pkcs8_privkey.pem' ) ;
25+ const dsaPkcs8KeyPem = fixtures . readSync ( 'test_dsa_pkcs8_privkey.pem' ) ;
2426
2527const decryptError =
2628 / ^ E r r o r : e r r o r : 0 6 0 6 5 0 6 4 : d i g i t a l e n v e l o p e r o u t i n e s : E V P _ D e c r y p t F i n a l _ e x : b a d d e c r y p t $ / ;
@@ -35,6 +37,9 @@ const decryptError =
3537 let decryptedBuffer = crypto . privateDecrypt ( rsaKeyPem , encryptedBuffer ) ;
3638 assert . strictEqual ( decryptedBuffer . toString ( ) , input ) ;
3739
40+ decryptedBuffer = crypto . privateDecrypt ( rsaPkcs8KeyPem , encryptedBuffer ) ;
41+ assert . strictEqual ( decryptedBuffer . toString ( ) , input ) ;
42+
3843 let decryptedBufferWithPassword = crypto . privateDecrypt ( {
3944 key : rsaKeyPemEncrypted ,
4045 passphrase : 'password'
@@ -119,11 +124,17 @@ function test_rsa(padding) {
119124 padding : padding
120125 } , bufferToEncrypt ) ;
121126
122- const decryptedBuffer = crypto . privateDecrypt ( {
127+ let decryptedBuffer = crypto . privateDecrypt ( {
123128 key : rsaKeyPem ,
124129 padding : padding
125130 } , encryptedBuffer ) ;
126131 assert . deepStrictEqual ( decryptedBuffer , input ) ;
132+
133+ decryptedBuffer = crypto . privateDecrypt ( {
134+ key : rsaPkcs8KeyPem ,
135+ padding : padding
136+ } , encryptedBuffer ) ;
137+ assert . deepStrictEqual ( decryptedBuffer , input ) ;
127138}
128139
129140test_rsa ( 'RSA_NO_PADDING' ) ;
@@ -150,6 +161,16 @@ assert.strictEqual(rsaSignature, expectedSignature);
150161rsaVerify . update ( rsaPubPem ) ;
151162assert . strictEqual ( rsaVerify . verify ( rsaPubPem , rsaSignature , 'hex' ) , true ) ;
152163
164+ // Test RSA PKCS#8 key signing/verification
165+ rsaSign = crypto . createSign ( 'SHA1' ) ;
166+ rsaSign . update ( rsaPubPem ) ;
167+ rsaSignature = rsaSign . sign ( rsaPkcs8KeyPem , 'hex' ) ;
168+ assert . strictEqual ( rsaSignature , expectedSignature ) ;
169+
170+ rsaVerify = crypto . createVerify ( 'SHA1' ) ;
171+ rsaVerify . update ( rsaPubPem ) ;
172+ assert . strictEqual ( rsaVerify . verify ( rsaPubPem , rsaSignature , 'hex' ) , true ) ;
173+
153174// Test RSA key signing/verification with encrypted key
154175rsaSign = crypto . createSign ( 'SHA1' ) ;
155176rsaSign . update ( rsaPubPem ) ;
@@ -216,7 +237,7 @@ assert.throws(() => {
216237 const input = 'I AM THE WALRUS' ;
217238
218239 // DSA signatures vary across runs so there is no static string to verify
219- // against
240+ // against.
220241 const sign = crypto . createSign ( 'SHA1' ) ;
221242 sign . update ( input ) ;
222243 const signature = sign . sign ( dsaKeyPem , 'hex' ) ;
@@ -238,6 +259,25 @@ assert.throws(() => {
238259}
239260
240261
262+ //
263+ // Test DSA signing and verification with PKCS#8 private key
264+ //
265+ {
266+ const input = 'I AM THE WALRUS' ;
267+
268+ // DSA signatures vary across runs so there is no static string to verify
269+ // against.
270+ const sign = crypto . createSign ( 'SHA1' ) ;
271+ sign . update ( input ) ;
272+ const signature = sign . sign ( dsaPkcs8KeyPem , 'hex' ) ;
273+
274+ const verify = crypto . createVerify ( 'SHA1' ) ;
275+ verify . update ( input ) ;
276+
277+ assert . strictEqual ( verify . verify ( dsaPubPem , signature , 'hex' ) , true ) ;
278+ }
279+
280+
241281//
242282// Test DSA signing and verification with encrypted key
243283//
@@ -253,7 +293,7 @@ const input = 'I AM THE WALRUS';
253293
254294{
255295 // DSA signatures vary across runs so there is no static string to verify
256- // against
296+ // against.
257297 const sign = crypto . createSign ( 'SHA1' ) ;
258298 sign . update ( input ) ;
259299 const signOptions = { key : dsaKeyPemEncrypted , passphrase : 'password' } ;
0 commit comments