archive-monorepo/@tornado/fixed-merkle-tree/src/simpleHash.ts
T-Hax e676b48b59
fixed-merkle-tree 0.7.3-p0
Signed-off-by: T-Hax <>
2023-05-13 20:52:40 +00:00

22 lines
675 B
TypeScript

import { Element } from './'
/***
* This is insecure hash function, just for example only
* @param data
* @param seed
* @param hashLength
*/
export function simpleHash<T>(data: T[], seed?: number, hashLength = 40): string {
const str = data.join('')
let i, l,
hval = seed ?? 0x811c9dcc5
for (i = 0, l = str.length; i < l; i++) {
hval ^= str.charCodeAt(i)
hval += (hval << 1) + (hval << 4) + (hval << 6) + (hval << 8) + (hval << 24)
}
const hash = (hval >>> 0).toString(16)
return BigInt('0x' + hash.padEnd(hashLength - (hash.length - 1), '0')).toString(10)
}
export default (left: Element, right: Element): string => simpleHash([left, right])