parent
22b4928bbe
commit
b926ac7c39
@ -0,0 +1,53 @@
|
||||
use super::*;
|
||||
use crate::{
|
||||
array,
|
||||
provider::ByteProvider,
|
||||
};
|
||||
|
||||
pub const SHA256_TRUNCATE: usize = 8;
|
||||
mod __static_assert
|
||||
{
|
||||
use super::*;
|
||||
const _IS_LESS_THAN_OR_EQ_SHA256_SIZE: &'static [()] = &[(); SHA256_SIZE - SHA256_TRUNCATE];
|
||||
}
|
||||
|
||||
|
||||
use std::fmt;
|
||||
impl fmt::Display for Sha256Truncated
|
||||
{
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result
|
||||
{
|
||||
write!(f, "Sha256Truncated[->{}] (", SHA256_TRUNCATE)?;
|
||||
for byte in self.hash.iter()
|
||||
{
|
||||
write!(f, "{:02x}", *byte)?;
|
||||
}
|
||||
write!(f, ")")
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[repr(packed)]
|
||||
#[derive(Copy,Clone,Debug,PartialEq,Eq,Hash)]
|
||||
pub struct Sha256Truncated
|
||||
{
|
||||
hash: [u8; SHA256_TRUNCATE],
|
||||
}
|
||||
|
||||
|
||||
impl ByteProvider for hash::Sha256Truncated
|
||||
{
|
||||
fn bytes(&self) -> &[u8]
|
||||
{
|
||||
&self.hash[..]
|
||||
}
|
||||
|
||||
fn compute<T: Read + ?Sized>(input: &mut T, salt: &salt::Salt, done: &mut usize) -> Result<Self, error::Error>
|
||||
{
|
||||
let (ok, sha) = Sha256Hash::compute(input, salt)?;
|
||||
let mut hash = [0u8; SHA256_TRUNCATE];
|
||||
array::copy_slice(&mut hash, sha.bytes());
|
||||
*done = ok;
|
||||
Ok(Self{hash})
|
||||
}
|
||||
}
|
Loading…
Reference in new issue