zcatalyst-cli
Version:
Command Line Tool for CATALYST
53 lines (52 loc) • 1.88 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
const crypto_1 = require("crypto");
class Crypt {
constructor(password) {
this.encryptionKey = password;
this.cryptAlgo = 'aes-256-cbc';
}
decrypt(value) {
let data = Buffer.from(value, 'hex');
if (data.slice(16, 17).toString() !== ':') {
return value;
}
const initializationVector = data.slice(0, 16);
const password = (0, crypto_1.pbkdf2Sync)(this.encryptionKey, initializationVector.toString(), 1000, 32, 'sha512');
const decipher = (0, crypto_1.createDecipheriv)(this.cryptAlgo, password, initializationVector);
data = Buffer.concat([decipher.update(data.slice(17)), decipher.final()]);
return this._deserialize(data.toString());
}
encrypt(value) {
const data = this._serialize(value);
const initializationVector = (0, crypto_1.randomBytes)(16);
const password = (0, crypto_1.pbkdf2Sync)(this.encryptionKey, initializationVector.toString(), 1000, 32, 'sha512');
const cipher = (0, crypto_1.createCipheriv)(this.cryptAlgo, password, initializationVector);
const dataBuff = Buffer.concat([
initializationVector,
Buffer.from(':'),
cipher.update(Buffer.from(data)),
cipher.final()
]);
return dataBuff.toString('hex');
}
isEncrypted(value) {
try {
const data = Buffer.from(value, 'hex');
if (data.slice(16, 17).toString() === ':') {
return true;
}
}
catch (err) {
return false;
}
return false;
}
_serialize(value) {
return JSON.stringify(value, null, '');
}
_deserialize(value) {
return JSON.parse(value);
}
}
exports.default = Crypt;