39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import crypto from "crypto";
|
|
import {secrets} from "./secrets"
|
|
const ALGORITHM = "aes-256-gcm";
|
|
|
|
|
|
|
|
|
|
export function encrypt(text) {
|
|
const ENCRYPTION_KEY = Buffer.from(secrets.ENCRYPTION_KEY, "hex");
|
|
const iv = crypto.randomBytes(16);
|
|
const cipher = crypto.createCipheriv(ALGORITHM, ENCRYPTION_KEY, iv);
|
|
|
|
const encrypted = Buffer.concat([cipher.update(text, "utf8"), cipher.final()]);
|
|
const tag = cipher.getAuthTag();
|
|
|
|
return {
|
|
iv: iv.toString("hex"),
|
|
content: encrypted.toString("hex"),
|
|
tag: tag.toString("hex"),
|
|
};
|
|
}
|
|
|
|
export function decrypt({ iv, content, tag }) {
|
|
const ENCRYPTION_KEY = Buffer.from(secrets.ENCRYPTION_KEY, "hex");
|
|
const decipher = crypto.createDecipheriv(
|
|
ALGORITHM,
|
|
ENCRYPTION_KEY,
|
|
Buffer.from(iv, "hex")
|
|
);
|
|
decipher.setAuthTag(Buffer.from(tag, "hex"));
|
|
|
|
const decrypted = Buffer.concat([
|
|
decipher.update(Buffer.from(content, "hex")),
|
|
decipher.final(),
|
|
]);
|
|
|
|
return decrypted.toString("utf8");
|
|
}
|