import { GenericField } from '../bindings/lib/generic.js'; import { prefixToField } from '../bindings/lib/binable.js'; export { createHashHelpers, HashHelpers }; type Hash = { initialState(): Field[]; update(state: Field[], input: Field[]): Field[]; }; type HashHelpers = ReturnType>; function createHashHelpers( Field: GenericField, Hash: Hash ) { function salt(prefix: string) { return Hash.update(Hash.initialState(), [prefixToField(Field, prefix)]); } function emptyHashWithPrefix(prefix: string) { return salt(prefix)[0]; } function hashWithPrefix(prefix: string, input: Field[]) { let init = salt(prefix); return Hash.update(init, input)[0]; } return { salt, emptyHashWithPrefix, hashWithPrefix }; }