Hashers take a stream of bytes (of arbitrary length) and produce a fixed length value - the hash. For example, the CRC-32/IEEE hashing algorithm produces a 32 bit value (a
base.u32). The MD5 hashing algorithm produces a 128 bit value.
Wuffs' hasher implementations have only one method. For 32 bit hashes, the method signature is
update_u32!(x: slice base.u8) base.u32. It incrementally updates the hasher object's state with the addition data
x, and returns the hash value so far, for all of the data up to and including
This method is stateful. Calling
update_u32 twice with the same slice of bytes can produce two different hash values. Conversely, calling
update_u32 twice with two different slices should be equivalent to calling it once on their concatenation. Re-initialize the object to reset the state.
Wuffs' hasher implementations are not cryptographic. They make no attempt to resist timing attacks.
See also the general remarks on Wuffs' standard library.