mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-15 18:15:53 +00:00
42 lines
942 B
TypeScript
42 lines
942 B
TypeScript
import crypto = require("crypto");
|
|
|
|
const ALGORITHM = "aes-256-gcm";
|
|
const BLOCK_SIZE_BYTES = 16;
|
|
|
|
export default class AesGCM {
|
|
static encrypt(
|
|
text: string,
|
|
secret: string
|
|
): { ciphertext: string; iv: string; tag: string } {
|
|
const iv = crypto.randomBytes(BLOCK_SIZE_BYTES);
|
|
const cipher = crypto.createCipheriv(ALGORITHM, secret, iv);
|
|
|
|
let ciphertext = cipher.update(text, "utf8", "base64");
|
|
ciphertext += cipher.final("base64");
|
|
return {
|
|
ciphertext,
|
|
iv: iv.toString("base64"),
|
|
tag: cipher.getAuthTag().toString("base64"),
|
|
};
|
|
}
|
|
|
|
static decrypt(
|
|
ciphertext: string,
|
|
iv: string,
|
|
tag: string,
|
|
secret: string
|
|
): string {
|
|
const decipher = crypto.createDecipheriv(
|
|
ALGORITHM,
|
|
secret,
|
|
Buffer.from(iv, "base64")
|
|
);
|
|
decipher.setAuthTag(Buffer.from(tag, "base64"));
|
|
|
|
let cleartext = decipher.update(ciphertext, "base64", "utf8");
|
|
cleartext += decipher.final("utf8");
|
|
|
|
return cleartext;
|
|
}
|
|
}
|