mirror of https://github.com/nodejs/node.git
57 lines
1.7 KiB
JavaScript
57 lines
1.7 KiB
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
|
|
const fixtures = require('../common/fixtures');
|
|
const assert = require('assert');
|
|
const crypto = require('crypto');
|
|
|
|
const { subtle } = globalThis.crypto;
|
|
|
|
// Regression test for https://github.com/nodejs/node/issues/57553.
|
|
{
|
|
const privateKey = crypto.createPrivateKey(fixtures.readKey('rsa_private.pem', 'ascii'));
|
|
const publicKey = crypto.createPublicKey(fixtures.readKey('rsa_public.pem', 'ascii'));
|
|
|
|
const data = Buffer.alloc(0);
|
|
{
|
|
|
|
const ciphertext = crypto.publicEncrypt({
|
|
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
|
|
key: publicKey,
|
|
}, data);
|
|
|
|
const plaintext = crypto.privateDecrypt({
|
|
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
|
|
key: privateKey
|
|
}, ciphertext);
|
|
|
|
assert.deepStrictEqual(plaintext, data);
|
|
}
|
|
|
|
{
|
|
const ciphertext = crypto.publicEncrypt(publicKey, data);
|
|
const plaintext = crypto.privateDecrypt(privateKey, ciphertext);
|
|
|
|
assert.deepStrictEqual(plaintext, data);
|
|
}
|
|
|
|
{
|
|
(async () => {
|
|
const pkcs8 = privateKey.export({ format: 'der', type: 'pkcs8' });
|
|
const spki = publicKey.export({ format: 'der', type: 'spki' });
|
|
|
|
const kp = {
|
|
privateKey: await subtle.importKey('pkcs8', pkcs8, { name: 'RSA-OAEP', hash: 'SHA-1' }, false, ['decrypt']),
|
|
publicKey: await subtle.importKey('spki', spki, { name: 'RSA-OAEP', hash: 'SHA-1' }, false, ['encrypt']),
|
|
};
|
|
|
|
const ciphertext = await subtle.encrypt('RSA-OAEP', kp.publicKey, data);
|
|
const plaintext = await subtle.decrypt('RSA-OAEP', kp.privateKey, ciphertext);
|
|
assert.deepStrictEqual(plaintext, data.buffer);
|
|
})().then(common.mustCall());
|
|
}
|
|
}
|