2020-03-13 09:34:59 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
// Verify that privateDecrypt() does not leave an error on the
|
|
|
|
// openssl error stack that is visible to subsequent operations.
|
|
|
|
|
|
|
|
const common = require('../common');
|
|
|
|
if (!common.hasCrypto)
|
|
|
|
common.skip('missing crypto');
|
|
|
|
|
|
|
|
const assert = require('assert');
|
|
|
|
const {
|
|
|
|
generateKeyPairSync,
|
|
|
|
publicEncrypt,
|
|
|
|
privateDecrypt,
|
|
|
|
} = require('crypto');
|
|
|
|
|
|
|
|
const pair = generateKeyPairSync('rsa', { modulusLength: 512 });
|
|
|
|
|
|
|
|
const expected = Buffer.from('shibboleth');
|
|
|
|
const encrypted = publicEncrypt(pair.publicKey, expected);
|
|
|
|
|
|
|
|
const pkey = pair.privateKey.export({ type: 'pkcs1', format: 'pem' });
|
|
|
|
const pkeyEncrypted =
|
|
|
|
pair.privateKey.export({
|
|
|
|
type: 'pkcs1',
|
|
|
|
format: 'pem',
|
2024-10-24 13:37:15 +00:00
|
|
|
cipher: 'aes-128-cbc',
|
2020-03-13 09:34:59 +00:00
|
|
|
passphrase: 'secret',
|
|
|
|
});
|
|
|
|
|
|
|
|
function decrypt(key) {
|
|
|
|
const decrypted = privateDecrypt(key, encrypted);
|
|
|
|
assert.deepStrictEqual(decrypted, expected);
|
|
|
|
}
|
|
|
|
|
|
|
|
decrypt(pkey);
|
2020-10-26 06:23:55 +00:00
|
|
|
assert.throws(() => decrypt(pkeyEncrypted), common.hasOpenSSL3 ?
|
2021-04-28 10:49:26 +00:00
|
|
|
{ message: 'error:07880109:common libcrypto routines::interrupted or ' +
|
|
|
|
'cancelled' } :
|
2020-10-26 06:23:55 +00:00
|
|
|
{ code: 'ERR_MISSING_PASSPHRASE' });
|
2020-03-13 09:34:59 +00:00
|
|
|
decrypt(pkey); // Should not throw.
|