mirror of
https://github.com/honojs/hono.git
synced 2024-12-01 10:51:01 +00:00
44 lines
875 B
TypeScript
44 lines
875 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)
|
||
|
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
|
||
|
}
|