0
0
mirror of https://github.com/honojs/hono.git synced 2024-11-29 17:46:30 +01:00
hono/deno_dist/utils/buffer.ts
2023-01-19 22:45:25 +09:00

50 lines
919 B
TypeScript

import { sha256 } from './crypto.ts'
export const equal = (a: ArrayBuffer, b: ArrayBuffer) => {
if (a === b) {
return true
}
if (a.byteLength !== b.byteLength) {
return false
}
const va = new DataView(a)
const vb = new DataView(b)
let i = va.byteLength
while (i--) {
if (va.getUint8(i) !== vb.getUint8(i)) {
return false
}
}
return true
}
export const timingSafeEqual = async (
a: string | object | boolean,
b: string | object | boolean,
hashFunction?: Function
) => {
if (!hashFunction) {
hashFunction = sha256
}
const sa = await hashFunction(a)
const sb = await hashFunction(b)
if (!sa || !sb) {
return false
}
return sa === sb && a === b
}
export const bufferToString = (buffer: ArrayBuffer): string => {
if (buffer instanceof ArrayBuffer) {
const enc = new TextDecoder('utf-8')
return enc.decode(buffer)
}
return buffer
}