use sha2::Digest;
use alloc::vec::Vec;
pub struct Sha256 {
hasher: sha2::Sha256,
}
impl Default for Sha256 {
fn default() -> Self {
Self {
hasher: sha2::Sha256::new(),
}
}
}
impl Sha256 {
pub fn new() -> Self {
Default::default()
}
pub fn update<T: AsRef<[u8]>>(mut self, bytes: T) -> Self {
self.hasher.update(bytes.as_ref());
self
}
pub fn finalize(self) -> Vec<u8> {
self.hasher.finalize().to_vec()
}
pub fn finalize_new(self) -> [u8; 32] {
self.hasher.finalize().into()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sha256() {
let digest1 = {
let mut hasher = sha2::Sha256::new();
hasher.update(&b"hello, world"[..]);
hasher.finalize().to_vec()
};
assert_eq!(
digest1,
Sha256::new().update(&b"hello, world"[..]).finalize()
)
}
}