UNPKG

aes-optimal

Version:
61 lines (48 loc) 1.71 kB
/** * index.js * AES Optimal - Encryption Library * @author Abubakar Hassan <abubakarhassan59@gmail.com> * @copyright Abubakar Hassan (c) 2024 * @license MIT */ /* jshint node: true */ 'use strict'; const CryptoJS = require('node-cryptojs-aes').CryptoJS; const OpenSslFormat = { stringify(params) { const salt = CryptoJS.enc.Hex.parse(params.salt.toString()).toString(CryptoJS.enc.Latin1); const ct = params.ciphertext.toString(CryptoJS.enc.Latin1); return CryptoJS.enc.Latin1.parse('Salted__' + salt + ct).toString(CryptoJS.enc.Base64); }, parse(str) { const parsedStr = CryptoJS.enc.Base64.parse(str).toString(CryptoJS.enc.Latin1); const salted = parsedStr.substr(0, 8); if (salted !== 'Salted__') { throw new Error('Error parsing salt'); } const salt = parsedStr.substr(8, 8); const ct = parsedStr.substr(16); return CryptoJS.lib.CipherParams.create({ ciphertext: CryptoJS.enc.Latin1.parse(ct), salt: CryptoJS.enc.Latin1.parse(salt) }); } }; const AES256 = { encrypt: function(input, passphrase) { return CryptoJS.AES.encrypt(input, passphrase, {format: OpenSslFormat}).toString(); }, decrypt: function(crypted, passphrase) { return CryptoJS.AES.decrypt(crypted, passphrase, {format: OpenSslFormat}).toString(CryptoJS.enc.Utf8); }, encryptWithCustomIV: function (input, key, iv) { return CryptoJS.AES.encrypt(input, key, { iv: iv }).toString(); }, decryptWithCustomIV: function (crypted, key, iv) { return CryptoJS.AES.decrypt(crypted, key, { iv: iv }).toString(CryptoJS.enc.Utf8); }, encodeKey: function (key) { return CryptoJS.enc.Base64.parse(key); }, }; module.exports = AES256;