pub trait VariableOutput: Sized + Update {
    const MAX_OUTPUT_SIZE: usize;

    // Required methods
    fn new(output_size: usize) -> Result<Self, InvalidOutputSize>;
    fn output_size(&self) -> usize;
    fn finalize_variable(self, out: &mut [u8]) -> Result<(), InvalidBufferSize>;

    // Provided methods
    fn digest_variable(
        input: impl AsRef<[u8]>,
        output: &mut [u8]
    ) -> Result<(), InvalidOutputSize> { ... }
    fn finalize_boxed(self) -> Box<[u8]> { ... }
}
Expand description

Trait for hash functions with variable-size output.

Required Associated Constants§

source

const MAX_OUTPUT_SIZE: usize

Maximum size of output hash in bytes.

Required Methods§

source

fn new(output_size: usize) -> Result<Self, InvalidOutputSize>

Create new hasher instance with the given output size in bytes.

It will return Err(InvalidOutputSize) in case if hasher can not return hash of the specified output size.

source

fn output_size(&self) -> usize

Get output size in bytes of the hasher instance provided to the new method

source

fn finalize_variable(self, out: &mut [u8]) -> Result<(), InvalidBufferSize>

Write result into the output buffer.

Returns Err(InvalidOutputSize) if out size is not equal to self.output_size().

Provided Methods§

source

fn digest_variable( input: impl AsRef<[u8]>, output: &mut [u8] ) -> Result<(), InvalidOutputSize>

Compute hash of data and write it to output.

Length of the output hash is determined by output. If output is bigger than Self::MAX_OUTPUT_SIZE, this method returns InvalidOutputSize.

source

fn finalize_boxed(self) -> Box<[u8]>

Available on crate feature alloc only.

Retrieve result into a boxed slice and consume hasher.

Box<[u8]> is used instead of Vec<u8> to save stack space, since they have size of 2 and 3 words respectively.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<T: VariableOutputCore> VariableOutput for RtVariableCoreWrapper<T>

Available on crate feature core-api only.
source§

const MAX_OUTPUT_SIZE: usize = <T::OutputSize>::USIZE