import nodeCrypto from "node:crypto"; export function encryptToken(value: string, key: string) { const nonce = nodeCrypto.randomBytes(12); const cipher = nodeCrypto.createCipheriv("aes-256-gcm", key, nonce); let encrypted = cipher.update(value, "utf8", "hex"); encrypted += cipher.final("hex"); const tag = cipher.getAuthTag().toString("hex"); return { nonce: nonce.toString("hex"), ciphertext: encrypted, tag, }; } export function decryptToken(nonce: string, ciphertext: string, tag: string, key: string): string { const decipher = nodeCrypto.createDecipheriv("aes-256-gcm", key, Buffer.from(nonce, "hex")); decipher.setAuthTag(Buffer.from(tag, "hex")); let decrypted = decipher.update(ciphertext, "hex", "utf8"); decrypted += decipher.final("utf8"); return decrypted; } export function hashToken(token: string): string { const hash = nodeCrypto.createHash("sha256"); hash.update(token); return hash.digest("hex"); }