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