Trait std::hash::Hash

pub trait Hash {
    fn hash_keyed(&self, k0: u64, k1: u64) -> u64;

    fn hash(&self) -> u64 { ... }
}

Types that can meaningfully be hashed should implement this.

Note that this trait is likely to change somewhat as it is closely related to to_bytes::IterBytes and in almost all cases presently the two are (and must be) used together.

In general, most types only need to implement IterBytes, and the implementation of Hash below will take care of the rest. This is the recommended approach, since constructing good keyed hash functions is quite difficult.

Required Methods

fn hash_keyed(&self, k0: u64, k1: u64) -> u64

Compute a "keyed" hash of the value implementing the trait, taking k0 and k1 as "keying" parameters that randomize or otherwise perturb the hash function in such a way that a hash table built using such "keyed hash functions" cannot be made to perform linearly by an attacker controlling the hashtable's contents.

In practical terms, we implement this using the SipHash 2-4 function and require most types to only implement the IterBytes trait, that feeds SipHash.

Provided Methods

fn hash(&self) -> u64

Implementors