1'use strict';
2const common = require('../common');
3
4// Test for https://github.com/nodejs/node/issues/40814
5
6if (!common.hasCrypto)
7  common.skip('missing crypto');
8
9if (!common.hasOpenSSL3)
10  common.skip('only openssl3'); // https://github.com/nodejs/node/pull/42793#issuecomment-1107491901
11
12const assert = require('assert');
13const crypto = require('crypto');
14
15const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {
16  modulusLength: 2048,
17  publicKeyEncoding: {
18    type: 'spki',
19    format: 'pem'
20  },
21  privateKeyEncoding: {
22    type: 'pkcs8',
23    format: 'pem',
24    cipher: 'aes-128-ecb',
25    passphrase: 'abcdef'
26  }
27});
28assert.notStrictEqual(privateKey.toString(), '');
29
30const msg = 'The quick brown fox jumps over the lazy dog';
31
32const encryptedString = crypto.privateEncrypt({
33  key: privateKey,
34  passphrase: 'abcdef'
35}, Buffer.from(msg)).toString('base64');
36const decryptedString = crypto.publicDecrypt(publicKey, Buffer.from(encryptedString, 'base64')).toString();
37console.log(`Encrypted: ${encryptedString}`);
38console.log(`Decrypted: ${decryptedString}`);
39
40assert.notStrictEqual(encryptedString, '');
41assert.strictEqual(decryptedString, msg);
42