Skip to content

Commit 2fe8cc6

Browse files
sasurau4BethGriggs
authored andcommitted
test: add test about unencrypted PKCS#8 private key for RSA
PR-URL: #26898 Refs: #24928 Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]> Reviewed-By: Tobias Nießen <[email protected]>
1 parent 93e29d3 commit 2fe8cc6

File tree

3 files changed

+74
-3
lines changed

3 files changed

+74
-3
lines changed
+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIICZAIBADCCAjkGByqGSM44BAEwggIsAoIBAQC5CYW1vZHbx/Ytm+/m+oseHbre
3+
kOd40VOSybqo6Us2NysFq+46rNlnR28Lkolg4nv+XK6YTlB3XbEwbibYa1uwCuAE
4+
io/Zs2rfOpGNwp31Fg3pb8ZhFrnjmhrQhZfRT6bXXw3hvyXitjgQkwIsRL5OUYlQ
5+
CEIbf+LsogikQez2+xaYYkqUqSYdb48IkVtDTMweWslpDKUmIfH1cy0osqMC97GR
6+
8EXXvhK7sig2hhHtj+NFGA7majfEFmTd0mafZBlEFodqvkwV1q7TTMrDWgkO2lcc
7+
2DEMjZ9on9xVszRhNCGIwuFJLhWBKfNZ59X7LUxEfkelpce0Kr5eFmxwN4n3AiEA
8+
pK7pu7TqHqiIoGDmAyUm71gx3V5T3mNaih8Y/9h7dMsCggEAJNtfC6LqpU84UMz+
9+
nsxSch/ylDx1lyh3rOGZ9Wn+2tIhahI+hqDwmPeHvymzDHh2QjuXgzeZmo1753CB
10+
CtYdU0GnumSEEUUCiTBbSsX6Zy0VI4w/Qy3WV5IoXXkF9YsbkC8JhPq9jHLa5Qt5
11+
59TF+347OFso5ae+XkkZ8C112UyKnYzvniqlbj0Cb4E7FadCzSggC9c2drYE12Mx
12+
QEEbddAVNty5wpjh3Qd2y8kKPDSn4OCrSIXAL8WDXJk507RL5moqKnwis/3iPUXi
13+
U7s8QmJP4B8Mn4vDM1O0rORCmz9KXz0f5M0lw39jdA/AG0fNNz86KCFTPdXz/Iz1
14+
ThphTQQiAiAhjvXffKp1V3nMiUUUsYzS2Msn14bBFiBwSdNgitRwEA==
15+
-----END PRIVATE KEY-----
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMIUQ0bDffIaKHL3
3+
akONlCGXQLfqs8mP4K99ILz6rbyHEDXrVAU1R3XfC4JNRyrRB3aqwF7/aEXJzYMI
4+
kmDSHUvvz7pnhQxHsQ5yl91QT0d/eb+Gz4VRHjm4El4MrUdIUcPxscoPqS/wU8Z8
5+
lOi1z7bGMnChiL7WGqnV8h6RrGzJAgMBAAECgYEAlHxmQJS/HmTO/6612XtPkyei
6+
t1PVO+hdckZcrtln5S68w1QJ03ZA9ziwGIBBa8vDVxIq3kOwpnxQROlg/Lyk9iec
7+
MTPZ0NiJp7D37ESm5vJ5bagfhnHvXCoG04qSrCtdr+nN2mK5xFGOTq8TphjsQEGz
8+
+Du5qdWkaJs5UASyofUCQQDsOSNUfbxYNSB/Weq9+fYqPoJPuchwTeMYmxlnvOVm
9+
YGYcUM40wtStdH9mbelHmbS0KYGprlEr3m7jXaO3V08jAkEA0lPe/ymeS2HjxtCj
10+
98p6Xq4RjJuhG0Dn+4e4eRnoVAXs5SQaiByZImW451zm3qEjVWwufRBkSNBkwQ5a
11+
v7ApIwJBAILiRckSwcC97vug/oe0b8iISfuSnJRdE28WwMTRzOkkkG8v9pEVQnG5
12+
Er3WOGMLrywDs2wowaDk5dvkjkmPfrECQQCAhPtoU5gEXAaBABCRY0ou/JKApsBl
13+
FN4sFpykcy5B2XUN92e28DKqkBnSVjREqZYbpoUpqpB85coLJahSJWSdAkBeuWDJ
14+
IVyL/a54qUgTVCoiItJnxXw6WkUtGdvWnMjtTXJBedMAQVgznrTImXNSk5vVXhxJ
15+
wZ3frm2JIy/Es69M
16+
-----END PRIVATE KEY-----

test/parallel/test-crypto-rsa-dsa.js

+43-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ const dsaPubPem = fixtures.readSync('test_dsa_pubkey.pem', 'ascii');
2121
const dsaKeyPem = fixtures.readSync('test_dsa_privkey.pem', 'ascii');
2222
const 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

2527
const decryptError =
2628
/^Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt$/;
@@ -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

129140
test_rsa('RSA_NO_PADDING');
@@ -150,6 +161,16 @@ assert.strictEqual(rsaSignature, expectedSignature);
150161
rsaVerify.update(rsaPubPem);
151162
assert.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
154175
rsaSign = crypto.createSign('SHA1');
155176
rsaSign.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

Comments
 (0)