Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
export async function verifyHmac (
payload: IEncryptionPayload,
key: ArrayBuffer
): Promise {
const cipherText: ArrayBuffer = convertHexToArrayBuffer(payload.data)
const iv: ArrayBuffer = convertHexToArrayBuffer(payload.iv)
const hmac: ArrayBuffer = convertHexToArrayBuffer(payload.hmac)
const hmacHex: string = convertArrayBufferToHex(hmac, true)
const unsigned: ArrayBuffer = concatArrayBuffers(cipherText, iv)
const chmac: ArrayBuffer = await createHmac(unsigned, key)
const chmacHex: string = convertArrayBufferToHex(chmac, true)
if (removeHexPrefix(hmacHex) === removeHexPrefix(chmacHex)) {
return true
}
return false
}
key: ArrayBuffer
): Promise {
if (!key) {
throw new Error('Missing key: required for encryption')
}
const iv: ArrayBuffer = await generateKey(128)
const ivHex: string = convertArrayBufferToHex(iv, true)
const contentString: string = JSON.stringify(data)
const content: ArrayBuffer = convertUtf8ToArrayBuffer(contentString)
const cipherText: ArrayBuffer = await aesCbcEncrypt(content, key, iv)
const cipherTextHex: string = convertArrayBufferToHex(cipherText, true)
const unsigned: ArrayBuffer = concatArrayBuffers(cipherText, iv)
const hmac: ArrayBuffer = await createHmac(unsigned, key)
const hmacHex: string = convertArrayBufferToHex(hmac, true)
return {
data: cipherTextHex,
hmac: hmacHex,
iv: ivHex
}
}