12 lines
480 B
JavaScript
12 lines
480 B
JavaScript
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
const sign = (val, secret) => `${val}.${createHmac("sha256", secret).update(val).digest("base64").replace(/=+$/, "")}`;
|
|
const unsign = (val, secret) => {
|
|
const str = val.slice(0, val.lastIndexOf(".")), mac = sign(str, secret), macBuffer = Buffer.from(mac), valBuffer = Buffer.alloc(macBuffer.length);
|
|
valBuffer.write(val);
|
|
return timingSafeEqual(macBuffer, valBuffer) ? str : false;
|
|
};
|
|
export {
|
|
sign,
|
|
unsign
|
|
};
|