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§
Sourceconst MAX_OUTPUT_SIZE: usize
const MAX_OUTPUT_SIZE: usize
Maximum size of output hash.
Required Methods§
Sourcefn new(output_size: usize) -> Result<Self, InvalidOutputSize>
fn new(output_size: usize) -> Result<Self, InvalidOutputSize>
Create new hasher instance with the given output size.
It will return Err(InvalidOutputSize)
in case if hasher can not return
hash of the specified output size.
Sourcefn output_size(&self) -> usize
fn output_size(&self) -> usize
Get output size of the hasher instance provided to the new
method
Sourcefn finalize_variable(self, out: &mut [u8]) -> Result<(), InvalidBufferSize>
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§
Sourcefn digest_variable(
input: impl AsRef<[u8]>,
output: &mut [u8],
) -> Result<(), InvalidOutputSize>
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
.
Sourcefn finalize_boxed(self) -> Box<[u8]>
Available on crate feature alloc
only.
fn finalize_boxed(self) -> Box<[u8]>
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.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
Source§impl<T> VariableOutput for RtVariableCoreWrapper<T>where
T: VariableOutputCore + UpdateCore,
T::BlockSize: IsLess<U256>,
Le<T::BlockSize, U256>: NonZero,
Available on crate feature core-api
only.
impl<T> VariableOutput for RtVariableCoreWrapper<T>where
T: VariableOutputCore + UpdateCore,
T::BlockSize: IsLess<U256>,
Le<T::BlockSize, U256>: NonZero,
core-api
only.