askar_crypto/buffer/
hash.rs

1use core::fmt::Debug;
2
3use digest::Digest;
4
5use crate::generic_array::GenericArray;
6
7use crate::{buffer::WriteBuffer, error::Error};
8
9/// A `WriteBuffer` implementation which hashes its input
10#[derive(Debug)]
11pub struct HashBuffer<D: Digest>(D);
12
13impl<D: Digest> HashBuffer<D> {
14    /// Create a new instance
15    pub fn new() -> Self {
16        Self(D::new())
17    }
18
19    /// Finalize the hasher and extract the result
20    pub fn finalize(self) -> GenericArray<u8, D::OutputSize> {
21        self.0.finalize()
22    }
23}
24
25impl<D: Digest> Default for HashBuffer<D> {
26    fn default() -> Self {
27        Self::new()
28    }
29}
30
31impl<D: Debug + Digest> WriteBuffer for HashBuffer<D> {
32    fn buffer_write(&mut self, data: &[u8]) -> Result<(), Error> {
33        self.0.update(data);
34        Ok(())
35    }
36}