add backend/src/modules/banking/signature.ts

This commit is contained in:
Giuseppe Lombardo 2026-08-12 16:31:06 +00:00
parent d3b1ed4049
commit 29dbc8ba8f

View File

@ -0,0 +1,26 @@
import crypto from 'crypto';
/**
* Verifiziert die HMAC-SHA256-Signatur eines eingehenden Banking-Webhooks.
* Der Provider (z.B. FinAPI/Nordigen) signiert den rohen Request-Body mit
* einem gemeinsamen Secret. Timing-safe Vergleich verhindert Timing-Attacken.
*/
export function verifyWebhookSignature(
rawBody: string,
signatureHeader: string | undefined,
secret: string,
): boolean {
if (!signatureHeader) return false;
const expected = crypto
.createHmac('sha256', secret)
.update(rawBody, 'utf8')
.digest('hex');
const expectedBuf = Buffer.from(expected, 'hex');
const receivedBuf = Buffer.from(signatureHeader, 'hex');
if (expectedBuf.length !== receivedBuf.length) return false;
return crypto.timingSafeEqual(expectedBuf, receivedBuf);
}