@naturalcycles/nodejs-lib
Version:
Standard library for Node.js
36 lines • 1.68 kB
JavaScript
;
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