@sahabaplus/moyasar
Version:
A comprehensive TypeScript SDK for integrating with the Moyasar payment gateway
42 lines • 1.36 kB
JavaScript
/**
* Crypto utilities for webhook signature verification
*/
export class CryptoUtils {
/**
* Create HMAC SHA256 signature
*/
static async createHmacSha256(data, secret) {
const encoder = new TextEncoder();
const key = await crypto.subtle.importKey("raw", encoder.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
const signature = await crypto.subtle.sign("HMAC", key, encoder.encode(data));
return Array.from(new Uint8Array(signature))
.map((b) => b.toString(16).padStart(2, "0"))
.join("");
}
/**
* Verify HMAC SHA256 signature
*/
static async verifyHmacSha256(data, signature, secret) {
try {
const expectedSignature = await this.createHmacSha256(data, secret);
return this.constantTimeCompare(signature, expectedSignature);
}
catch (error) {
return false;
}
}
/**
* Constant time string comparison to prevent timing attacks
*/
static constantTimeCompare(a, b) {
if (a.length !== b.length) {
return false;
}
let result = 0;
for (let i = 0; i < a.length; i++) {
result |= a.charCodeAt(i) ^ b.charCodeAt(i);
}
return result === 0;
}
}
//# sourceMappingURL=crypto.utils.js.map