UNPKG

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
"use strict"; 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); }