import { GenericSignableField } 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: GenericSignableField, 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 }; }