# Traits and utilities for making hashes of any type This crate provides the [`Hash`], [`Hasher`] and [`BuildHasher`] traits, which are almost exactly like their counterparts in `core`/`std`, except that [`Hasher`] and [`BuildHasher`] are generic over the type of the hash, and [`Hash`] can be used with any type of hash. A derive macro for [`Hash`] is available. The [`Hash`] trait uses the [`HasherWrite`] trait for hashing, which has all the write methods you're familiar with from `Hasher` in core except for the `finish` method, because [`Hash`] doesn't know the type of the hash. Hashing algorithms implement the [`Hasher`] and [`HasherWrite`] traits. [`Hasher`] is generic over the type of the hash and only contains the `finish` method. It depends on [`HasherWrite`], so you can use it just like `Hasher` from core. This crate also provides tools for working with endian independent hashes, and a few hasher implementations. ### Features The crate is `no_std` and doesn't enable any features by default. The following features are available: - `alloc`: Enable trait implementations for the standard `alloc` crate. - `std`: Enable trait implementations for the standard `std` crate. Implies `alloc`. Optional integrations: - `bnum`: Implement [`Hash`] for the `bnum` crate's types, and add support for using them as the hash type for the built-in hashers that can use them. Built-in hashers: - `fnv`: Hashers using the Fnv1 and Fnv1a algorithms. - `spooky`: Hashers using the SpookyHash algorithm. V1 and V2 are available. - `xxh64`: Hasher using the Xxh64 algorithm.