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 x
.
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.