UNPKG

591 BPlain TextView Raw
1import { Buffer } from "node:buffer";
2import { createHmac, timingSafeEqual } from "node:crypto";
3
4function s2b(str: string, encoding: BufferEncoding): Buffer {
5 return Buffer.from(str, encoding);
6}
7
8function safeCompare(a: Buffer, b: Buffer): boolean {
9 if (a.length !== b.length) {
10 return false;
11 }
12 return timingSafeEqual(a, b);
13}
14
15export default function validateSignature(
16 body: string | Buffer,
17 channelSecret: string,
18 signature: string,
19): boolean {
20 return safeCompare(
21 createHmac("SHA256", channelSecret).update(body).digest(),
22 s2b(signature, "base64"),
23 );
24}