encryptor-e2e
Version:
`encryptor-e2e` is a lightweight Node.js library that provides **end-to-end encrypted messaging** using a hybrid cryptographic approach — combining **RSA for key exchange** and **AES for message encryption**. It simplifies the process of securely sending
59 lines (58 loc) • 2.53 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateKeyPair = generateKeyPair;
exports.generateSymmetricKey = generateSymmetricKey;
exports.encryptMessage = encryptMessage;
exports.decryptMessage = decryptMessage;
exports.encryptSymmetricKey = encryptSymmetricKey;
exports.decryptSymmetricKey = decryptSymmetricKey;
exports.sendSecureMessage = sendSecureMessage;
exports.receiveSecureMessage = receiveSecureMessage;
const crypto_js_1 = __importDefault(require("crypto-js"));
const node_rsa_1 = __importDefault(require("node-rsa"));
// Generate RSA key pair
function generateKeyPair() {
const key = new node_rsa_1.default({ b: 512 });
return {
publicKey: key.exportKey('public'),
privateKey: key.exportKey('private'),
};
}
// Generate 256-bit symmetric AES key
function generateSymmetricKey() {
return crypto_js_1.default.lib.WordArray.random(32).toString(crypto_js_1.default.enc.Hex);
}
// AES encryption
function encryptMessage(message, symmetricKey) {
return crypto_js_1.default.AES.encrypt(message, symmetricKey).toString();
}
// AES decryption
function decryptMessage(ciphertext, symmetricKey) {
const bytes = crypto_js_1.default.AES.decrypt(ciphertext, symmetricKey);
return bytes.toString(crypto_js_1.default.enc.Utf8);
}
// Encrypt symmetric key with RSA public key
function encryptSymmetricKey(symmetricKey, publicKey) {
const rsa = new node_rsa_1.default(publicKey);
return rsa.encrypt(symmetricKey, 'base64');
}
// Decrypt symmetric key with RSA private key
function decryptSymmetricKey(encryptedKey, privateKey) {
const rsa = new node_rsa_1.default(privateKey);
return rsa.decrypt(encryptedKey, 'utf8');
}
// High-level function to send secure message
function sendSecureMessage(message, senderPrivateKey, receiverPublicKey) {
const symmetricKey = generateSymmetricKey();
const encryptedMessage = encryptMessage(message, symmetricKey);
const encryptedSymmetricKey = encryptSymmetricKey(symmetricKey, receiverPublicKey);
return { encryptedMessage, encryptedSymmetricKey };
}
// High-level function to receive secure message
function receiveSecureMessage(encryptedMessage, encryptedSymmetricKey, receiverPrivateKey) {
const symmetricKey = decryptSymmetricKey(encryptedSymmetricKey, receiverPrivateKey);
return decryptMessage(encryptedMessage, symmetricKey);
}