pub struct Md4 { /* private fields */ }allow-non-fips only.Expand description
The Md4 hasher.
§Security Warning
MD4 has been considered fully compromised since 1995, with original weaknesses published in 1991, as of 2007 an attack can generate collisions in less than two MD4 hash operations.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
let input = b"hello world";
assert!(hasher.try_update(input.as_slice()).is_ok());
let finalized = hasher.try_finalize().unwrap();
assert_ne!(finalized.as_slice(), input.as_slice());
assert_eq!(finalized.len(), 16);Implementations§
Source§impl Md4
impl Md4
Sourcepub fn new() -> Result<Self, Unspecified>
pub fn new() -> Result<Self, Unspecified>
§Security Warning
MD4 has been considered fully compromised since 1995, with original weaknesses published in 1991, as of 2007 an attack can generate collisions in less than two MD4 hash operations.
Create a new Md4 instance.
§Errors
If the underlying initialization function fails (wc_InitMd4)
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
let input = b"hello world";
assert!(hasher.try_update(input.as_slice()).is_ok());
let finalized = hasher.try_finalize().unwrap();
assert_ne!(finalized.as_slice(), input.as_slice());
assert_eq!(finalized.len(), 16);Sourcepub unsafe fn update_unchecked(&mut self, data: &[u8]) -> Res
pub unsafe fn update_unchecked(&mut self, data: &[u8]) -> Res
Update the underlying wc_Md4 instance, without performing any safety checks.
§Safety
The length of data is casted to a 32 bit unsigned integer without checking for overflows. While it is incredibly unlikely that this overflow will ever take place, it is not impossible. Thus this function is marked unsafe.
§Arguments
data- The slice to update the underlying hasher state with.
§Returns
This function returns the result of the operation.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
let input = b"hello world";
// SAFETY: The length of `hello world` is 11, which
// cannot overflow even an 8 bit integer.
let res = unsafe {
hasher.update_unchecked(input.as_slice())
};
assert!(res.is_ok());
let finalized = hasher.try_finalize().unwrap();
assert_ne!(finalized.as_slice(), input.as_slice());
assert_eq!(finalized.len(), 16);Sourcepub fn try_update(&mut self, data: &[u8]) -> Res
pub fn try_update(&mut self, data: &[u8]) -> Res
Update the underlying wc_Md4 instance.
§Arguments
data- The slice to update the underlying hasher state with.
§Returns
This function returns the result of the operation.
§Errors
- If the length of
datacannot be safely casted to au32. - If the underlying
wc_Md4Updatefunction fails.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
let input = b"hello world";
assert!(hasher.try_update(input.as_slice()).is_ok());
let finalized = hasher.try_finalize().unwrap();
assert_ne!(finalized.as_slice(), input.as_slice());
assert_eq!(finalized.len(), 16);Note: if the size of the data is known at compile time, see
update_sized for a slight optimization as the safety checks are done at
compilation time.
Sourcepub fn update_sized<const C: usize>(&mut self, data: &[u8; C]) -> Res
pub fn update_sized<const C: usize>(&mut self, data: &[u8; C]) -> Res
Update the underlying wc_Md4 instance, with the safety checks performed at compilation time.
§Arguments
data- The slice to update the underlying hasher state with.
§Returns
This function returns the result of the operation.
§Errors
- If the length of
datacannot be safely casted to au32. - If the underlying
wc_Md4Updatefunction fails.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
let input = b"hello world";
assert!(hasher.update_sized(input).is_ok());
let finalized = hasher.try_finalize().unwrap();
assert_ne!(finalized.as_slice(), input.as_slice());
assert_eq!(finalized.len(), 16);Note: if the size of the data is not known at compile time, see
try_update for more flexibility.
Sourcepub fn update(&mut self, data: &[u8])
Available on crate feature can-panic only.
pub fn update(&mut self, data: &[u8])
can-panic only.Update the underlying wc_Md4, panicking under any failure.
§Arguments
data- The slice to update the underlying hasher state with.
§Panics
- If the length of
datacannot be safely casted to au32. - If the underlying
wc_Md4Updatefunction fails.
If a panic under any failure is not acceptable for your use case, which
generally is true, please consider using try_update.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
let input = b"hello world";
hasher.update(input.as_slice());
let finalized = hasher.try_finalize().unwrap();
assert_ne!(finalized.as_slice(), input.as_slice());
assert_eq!(finalized.len(), 16);Sourcepub unsafe fn finalize_unchecked(&mut self, output: &mut [u8]) -> Res
pub unsafe fn finalize_unchecked(&mut self, output: &mut [u8]) -> Res
Calls the wc_Md4Final function, finalizing the hashing of data and resetting the underlying wc_Md4 instance’s state, without performing any safety checks.
§Safety
The size of the output argument must have a size of at least 16 (the size of the digest).
§Arguments
output- The buffer to store the output digest in.
§Returns
This function returns the result of the operation.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
// Use the hasher ...
let mut output = [0u8; 16];
// SAFETY: The size of the output is exactly
// the size of the digest.
let res = unsafe {
hasher.finalize_unchecked(output.as_mut_slice())
};
assert!(res.is_ok());Sourcepub fn finalize_into(&mut self, output: &mut [u8]) -> Res
pub fn finalize_into(&mut self, output: &mut [u8]) -> Res
Calls the wc_Md4Final function, finalizing the hashing of data and resetting the underlying wc_Md4 instance’s state.
§Arguments
output- The buffer to store the output digest in.
§Errors
- If the size of
outputis less than the digest size (16). - If the underlying finalize function fails.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
// Use the hasher ...
let mut output = [0u8; 16];
let res = hasher.finalize_into(output.as_mut_slice());
assert!(res.is_ok());Note: if the size of the output slice is known at compile time, see
finalize_into_sized for a slight optimization as the safety checks are
done at compilation time. There is also finalize_into_exact if this size
is exactly 16 bytes, moving all checks to the
type system.
Sourcepub fn finalize_into_sized<const C: usize>(
&mut self,
output: &mut [u8; C],
) -> Res
pub fn finalize_into_sized<const C: usize>( &mut self, output: &mut [u8; C], ) -> Res
Calls the wc_Md4Final function, finalizing the hashing of data and resetting the underlying wc_Md4 instance’s state, with the safety checks performed at compilation time.
§Arguments
output- The buffer to store the output digest in.
§Errors
- If the size of
outputis less than the digest size (16). - If the underlying finalize function fails.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
// Use the hasher ...
let mut output = [0u8; 16];
let res = hasher.finalize_into_sized(&mut output);
assert!(res.is_ok());Note: If the size of the output buffer is not known at compilation time
see finalize_into for greater flexibility. There is also
finalize_into_exact if this size
is exactly 16 bytes, moving all checks to the
type system.
Sourcepub fn finalize_into_exact(&mut self, output: &mut [u8; 16]) -> Res
pub fn finalize_into_exact(&mut self, output: &mut [u8; 16]) -> Res
Calls the wc_Md4Final function, finalizing the hashing of data and resetting the underlying wc_Md4 instance’s state, with the safety checks moved to the type system.
§Arguments
output- The buffer to store the output digest in.
§Errors
If the underlying finalize function fails.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
// Use the hasher ...
let mut output = [0u8; 16];
let res = hasher.finalize_into_exact(&mut output);
assert!(res.is_ok());Note: If the size of the output buffer is not known at compilation time
see finalize_into for greater flexibility. If the size is known at
compilation time, but not exactly 16 bytes,
see finalize_into_sized.
Sourcepub fn try_finalize(&mut self) -> Result<[u8; 16], Unspecified>
pub fn try_finalize(&mut self) -> Result<[u8; 16], Unspecified>
Calls the wc_Md4Final function, finalizing the hashing of data and resetting the underlying wc_Md4 instance’s state.
§Returns
On success, this returns the output digest.
§Errors
If the underlying finalize function fails.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
// Use the hasher ...
let res = hasher.try_finalize().unwrap();
assert_ne!(res.as_slice(), input.as_slice());Sourcepub fn finalize(&mut self) -> [u8; 16]
Available on crate feature can-panic only.
pub fn finalize(&mut self) -> [u8; 16]
can-panic only.Calls the wc_Md4Final function, finalizing the hashing of data and resetting the underlying wc_Md4 instance’s state.
§Returns
On success, this returns the output digest.
§Panics
If the underlying finalize function fails. If panicking is not acceptable
for your use case, which generally is true, see try_finalize.
§Example
use wolf_crypto::hash::Md4;
let mut hasher = Md4::new().unwrap();
// Use the hasher ...
let res = hasher.try_finalize().unwrap();
assert_ne!(res.as_slice(), input.as_slice());