mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 10:15:07 +08:00
test,crypto: add and update empty passphrase regression tests
Refs: https://github.com/openssl/openssl/pull/17507 Refs: https://github.com/nodejs/node/issues/41428 Signed-off-by: Darshan Sen <raisinten@gmail.com> PR-URL: https://github.com/nodejs/node/pull/42319 Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
This commit is contained in:
1 parent
76d85a82ea
commit
46a0d0d4bf
1 file changed
+54
-33
@@ -1543,44 +1543,65 @@ const sec1EncExp = (cipher) => getRegExpForPEM('EC PRIVATE KEY', cipher);
|
||||
}
|
||||
}
|
||||
|
||||
if (!common.hasOpenSSL3) {
|
||||
// Passing an empty passphrase string should not cause OpenSSL's default
|
||||
// passphrase prompt in the terminal.
|
||||
// See https://github.com/nodejs/node/issues/35898.
|
||||
// Passing an empty passphrase string should not cause OpenSSL's default
|
||||
// passphrase prompt in the terminal.
|
||||
// See https://github.com/nodejs/node/issues/35898.
|
||||
|
||||
for (const type of ['pkcs1', 'pkcs8']) {
|
||||
generateKeyPair('rsa', {
|
||||
modulusLength: 1024,
|
||||
privateKeyEncoding: {
|
||||
type,
|
||||
format: 'pem',
|
||||
cipher: 'aes-256-cbc',
|
||||
passphrase: ''
|
||||
}
|
||||
}, common.mustSucceed((publicKey, privateKey) => {
|
||||
assert.strictEqual(publicKey.type, 'public');
|
||||
for (const type of ['pkcs1', 'pkcs8']) {
|
||||
generateKeyPair('rsa', {
|
||||
modulusLength: 1024,
|
||||
privateKeyEncoding: {
|
||||
type,
|
||||
format: 'pem',
|
||||
cipher: 'aes-256-cbc',
|
||||
passphrase: ''
|
||||
}
|
||||
}, common.mustSucceed((publicKey, privateKey) => {
|
||||
assert.strictEqual(publicKey.type, 'public');
|
||||
|
||||
for (const passphrase of ['', Buffer.alloc(0)]) {
|
||||
const privateKeyObject = createPrivateKey({
|
||||
passphrase,
|
||||
key: privateKey
|
||||
});
|
||||
assert.strictEqual(privateKeyObject.asymmetricKeyType, 'rsa');
|
||||
}
|
||||
|
||||
// Encrypting with an empty passphrase is not the same as not encrypting
|
||||
// the key, and not specifying a passphrase should fail when decoding it.
|
||||
assert.throws(() => {
|
||||
return testSignVerify(publicKey, privateKey);
|
||||
}, {
|
||||
name: 'TypeError',
|
||||
code: 'ERR_MISSING_PASSPHRASE',
|
||||
message: 'Passphrase required for encrypted key'
|
||||
for (const passphrase of ['', Buffer.alloc(0)]) {
|
||||
const privateKeyObject = createPrivateKey({
|
||||
passphrase,
|
||||
key: privateKey
|
||||
});
|
||||
}));
|
||||
}
|
||||
assert.strictEqual(privateKeyObject.asymmetricKeyType, 'rsa');
|
||||
}
|
||||
|
||||
// Encrypting with an empty passphrase is not the same as not encrypting
|
||||
// the key, and not specifying a passphrase should fail when decoding it.
|
||||
assert.throws(() => {
|
||||
return testSignVerify(publicKey, privateKey);
|
||||
}, common.hasOpenSSL3 ? {
|
||||
name: 'Error',
|
||||
code: 'ERR_OSSL_CRYPTO_INTERRUPTED_OR_CANCELLED',
|
||||
message: 'error:07880109:common libcrypto routines::interrupted or cancelled'
|
||||
} : {
|
||||
name: 'TypeError',
|
||||
code: 'ERR_MISSING_PASSPHRASE',
|
||||
message: 'Passphrase required for encrypted key'
|
||||
});
|
||||
}));
|
||||
}
|
||||
|
||||
// Passing an empty passphrase string should not throw ERR_OSSL_CRYPTO_MALLOC_FAILURE even on OpenSSL 3.
|
||||
// Regression test for https://github.com/nodejs/node/issues/41428.
|
||||
generateKeyPair('rsa', {
|
||||
modulusLength: 4096,
|
||||
publicKeyEncoding: {
|
||||
type: 'spki',
|
||||
format: 'pem'
|
||||
},
|
||||
privateKeyEncoding: {
|
||||
type: 'pkcs8',
|
||||
format: 'pem',
|
||||
cipher: 'aes-256-cbc',
|
||||
passphrase: ''
|
||||
}
|
||||
}, common.mustSucceed((publicKey, privateKey) => {
|
||||
assert.strictEqual(typeof publicKey, 'string');
|
||||
assert.strictEqual(typeof privateKey, 'string');
|
||||
}));
|
||||
|
||||
{
|
||||
// Proprietary Web Cryptography API ECDH/ECDSA namedCurve parameters
|
||||
// should not be recognized in this API.
|
||||
|
||||
Reference in new issue
Block a user