UNPKG

@naturalcycles/nodejs-lib

Version:
36 lines 1.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const crypto = require("crypto"); const util_1 = require("util"); const hash_util_1 = require("./hash.util"); const randomBytes = util_1.promisify(crypto.randomBytes); function aes256Key(secretKeyBase64) { // md5 to match aes-256 key length of 32 bytes return hash_util_1.md5(Buffer.from(secretKeyBase64, 'base64')); } async function encryptRandomIVBuffer(input, secretKeyBase64, algorithm = 'aes-256-cbc') { const key = aes256Key(secretKeyBase64); // Random iv to achieve non-deterministic encryption (but deterministic decryption) const iv = await randomBytes(16); const cipher = crypto.createCipheriv(algorithm, key, iv); return Buffer.concat([iv, cipher.update(input), cipher.final()]); } exports.encryptRandomIVBuffer = encryptRandomIVBuffer; function decryptRandomIVBuffer(input, secretKeyBase64, algorithm = 'aes-256-cbc') { const key = aes256Key(secretKeyBase64); // iv is first 16 bytes of encrypted buffer, the rest is payload const iv = input.slice(0, 16); const payload = input.slice(16); const decipher = crypto.createDecipheriv(algorithm, key, iv); return Buffer.concat([decipher.update(payload), decipher.final()]); } exports.decryptRandomIVBuffer = decryptRandomIVBuffer; async function generateSecretKey(sizeBytes = 256) { return randomBytes(sizeBytes); } exports.generateSecretKey = generateSecretKey; async function generateSecretKeyBase64(sizeBytes = 256) { return (await generateSecretKey(sizeBytes)).toString('base64'); } exports.generateSecretKeyBase64 = generateSecretKeyBase64; //# sourceMappingURL=crypto.util.js.map