[][src]Trait tiny_multihash::Hasher

pub trait Hasher: Default {
    type Size: Size;
    type Digest: Digest<Self::Size>;
    fn update(&mut self, input: &[u8]);
fn finalize(&self) -> Self::Digest;
fn reset(&mut self); fn size() -> u8 { ... }
fn digest(input: &[u8]) -> Self::Digest
    where
        Self: Sized
, { ... } }

Trait implemented by a hash function implementation.

It specifies its own Digest type, so that the output of the hash function can later be distinguished. This way you can create a MultihashDigest from a Digest.

Every hashing algorithm that is used with Multihash needs to implement those. This trait is very similar to the external digest::Digest trait. There is a small significant difference, which needed the introduction of this Hasher trait instead of re-using the widely used digest::Digest trait.

The external digest::Digest trait has a single return type called Output, which is used for all hashers that implement it. It's basically a wrapper around the hashed result bytes. For Multihashes we need to distinguish those bytes, as we care about which hash function they were created with (which is the whole point of Multihashes). Therefore the Hasher trait defines an associated type Hasher::Digest for the output of the hasher. This way the implementers can specify their own, hasher specific type (which implements Digest) for their output.

Associated Types

type Size: Size

The maximum Digest size for that hasher (it is stack allocated).

type Digest: Digest<Self::Size>

The Digest type to distinguish the output of different Hasher implementations.

Loading content...

Required methods

fn update(&mut self, input: &[u8])

Consume input and update internal state.

fn finalize(&self) -> Self::Digest

Returns the final digest.

fn reset(&mut self)

Reset the internal hasher state.

Loading content...

Provided methods

fn size() -> u8

Returns the allocated size of the digest.

fn digest(input: &[u8]) -> Self::Digest where
    Self: Sized

Hashes the given input data and returns its hash digest.

Loading content...

Implementors

impl Hasher for Keccak224[src]

type Size = U28

type Digest = KeccakDigest<Self::Size>

impl Hasher for Keccak256[src]

type Size = U32

type Digest = KeccakDigest<Self::Size>

impl Hasher for Keccak384[src]

type Size = U48

type Digest = KeccakDigest<Self::Size>

impl Hasher for Keccak512[src]

type Size = U64

type Digest = KeccakDigest<Self::Size>

impl Hasher for Sha1[src]

type Size = U20

type Digest = Sha1Digest<Self::Size>

impl Hasher for Sha2_256[src]

type Size = U32

type Digest = Sha2Digest<Self::Size>

impl Hasher for Sha2_512[src]

type Size = U64

type Digest = Sha2Digest<Self::Size>

impl Hasher for Sha3_224[src]

type Size = U28

type Digest = Sha3Digest<Self::Size>

impl Hasher for Sha3_256[src]

type Size = U32

type Digest = Sha3Digest<Self::Size>

impl Hasher for Sha3_384[src]

type Size = U48

type Digest = Sha3Digest<Self::Size>

impl Hasher for Sha3_512[src]

type Size = U64

type Digest = Sha3Digest<Self::Size>

impl<S: Size> Hasher for Blake2bHasher<S>[src]

type Size = S

type Digest = Blake2bDigest<Self::Size>

impl<S: Size> Hasher for Blake2sHasher<S>[src]

type Size = S

type Digest = Blake2sDigest<Self::Size>

impl<S: Size> Hasher for IdentityHasher<S>[src]

type Size = S

type Digest = IdentityDigest<Self::Size>

impl<S: Size> Hasher for StrobeHasher<S>[src]

type Size = S

type Digest = StrobeDigest<Self::Size>

Loading content...