29 lines
668 B
TypeScript
29 lines
668 B
TypeScript
function bufferToHex(buffer: ArrayBuffer) {
|
|
return Array.from(new Uint8Array(buffer))
|
|
.map((b) => b.toString(16).padStart(2, '0'))
|
|
.join('');
|
|
}
|
|
|
|
export async function createHmac({ key, data }: { key: string; data: string }) {
|
|
const encoder = new TextEncoder();
|
|
const encodedKey = encoder.encode(key);
|
|
const encodedData = encoder.encode(data);
|
|
|
|
const hmacKey = await crypto.subtle.importKey(
|
|
'raw',
|
|
encodedKey,
|
|
{
|
|
name: 'HMAC',
|
|
hash: 'SHA-256',
|
|
},
|
|
true,
|
|
['sign', 'verify'],
|
|
);
|
|
|
|
const signature = await crypto.subtle.sign('HMAC', hmacKey, encodedData);
|
|
|
|
const hex = bufferToHex(signature);
|
|
|
|
return { hex };
|
|
}
|