in src/core/swa-cli-persistence-plugin/impl/crypto.ts [18:53]
private getEncryption(): Promise<Encryption> {
if (!this.encryption) {
this.encryption = Promise.resolve({
encrypt: (machineId: string, value: string): Promise<string> => {
return new Promise((resolve, reject) => {
try {
const iv = crypto.randomBytes(CryptoService.IV_LENGTH);
let cipher = crypto.createCipheriv(CryptoService.ALGORITHM, Buffer.from(machineId), iv);
let encrypted = cipher.update(value);
encrypted = Buffer.concat([encrypted, cipher.final()]);
const encryptedValue = iv.toString("hex") + ":" + encrypted.toString("hex");
resolve(encryptedValue);
} catch (error) {
reject(error);
}
});
},
decrypt: (machineId: string, data: string): Promise<string> => {
return new Promise((resolve, reject) => {
try {
let dataSegments: string[] = data.includes(":") ? data.split(":") : [];
let iv = Buffer.from(dataSegments.shift() || "", "hex");
let encryptedText = Buffer.from(dataSegments.join(":"), "hex");
let decipher = crypto.createDecipheriv(CryptoService.ALGORITHM, Buffer.from(machineId), iv);
let decrypted = decipher.update(encryptedText);
decrypted = Buffer.concat([decrypted, decipher.final()]);
resolve(decrypted.toString());
} catch (error) {
reject(error);
}
});
},
});
}
return this.encryption;
}