blob: 849bbd7567c01c0a535535332ac0b45313a7d220 [file] [log] [blame] [view]
# Hashers
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](/doc/note/initialization.md) the object to
reset the state.
Wuffs' hasher implementations are not cryptographic. They make no attempt to
resist timing attacks.
## Implementations
- [std/adler32](/std/adler32)
- [std/crc32](/std/crc32)
## Examples
- [example/crc32](/example/crc32)
## Related Documentation
- [I/O (Input / Output)](/doc/note/io-input-output.md)
See also the general remarks on [Wuffs' standard library](/doc/std/README.md).