Expand description
§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 standardalloc
crate.std
: Enable trait implementations for the standardstd
crate. Impliesalloc
.
Optional integrations:
bnum
: ImplementHash
for thebnum
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.
Modules§
- fnv
fnv
Hasher and collections using the Fnv hashing algorithm. - spooky
spooky
Hasher and collections using the SpookyHash algorithm. - xxh64
xxh64
Hasher and collections using the Xxh64 hashing algorithm.
Macros§
- Implement
core::Hash::BuildHasher
for types that already implementBuildHasher<u64>
. - Implement
core::Hash::Hash
for types that already implementHash
. - Implement
core::Hash::Hasher
for types that already implementHasher<u64>
. - Implement
Hash
for types that already implementcore::hash::Hash
. Only use this if you can’t use the derive macro or implementHash
yourself. This will panic ifcore::hash::Hasher::finish
is called during hashing.
Structs§
- Used to create a default
BuildHasher
instance for types that implementHasher
and Default. - Wrapper for types implementing
Hasher<T>
to change native endian writes to big endian. BuildHasher
for makingHasherBe
hashers.- Wrapper for types implementing
Hasher<T>
to change native endian writes to little endian. BuildHasher
for makingHasherLe
hashers.
Traits§
- A trait for creating instances of
Hasher
that make hashes of typeT
. - Marker trait for hashers that, given the same byte stream, calculates the same hash on hosts of different endiannesses.
- Automatically implemented for
Hasher
s that implement bothEndianIndependentAlgorithm
andEndianIndependentWrites
. - Marker trait for hashers whose write methods write data in the same order regardless of the endianness of the host. Be aware that a type may write endian dependent data to the hasher in other ways, so this isn’t a guarantee.
- A hashable type.
- A trait for hashing an arbitrary stream of bytes. The write methods are defined in the
HasherWrite
trait. - A trait for writing data to a hasher.
Derive Macros§
- Derive macro for
Hash
.