Spaces:
Paused
Paused
| import crypto from "node:crypto"; | |
| export function validateLineSignature( | |
| body: string, | |
| signature: string, | |
| channelSecret: string, | |
| ): boolean { | |
| const hash = crypto.createHmac("SHA256", channelSecret).update(body).digest("base64"); | |
| const hashBuffer = Buffer.from(hash); | |
| const signatureBuffer = Buffer.from(signature); | |
| // Use constant-time comparison to prevent timing attacks. | |
| if (hashBuffer.length !== signatureBuffer.length) { | |
| return false; | |
| } | |
| return crypto.timingSafeEqual(hashBuffer, signatureBuffer); | |
| } | |