Skip to main content

reddb_server/crypto/
sha256.rs

1use sha2::{Digest, Sha256 as Sha256Impl};
2
3/// Compute SHA-256 hash of data (one-shot)
4pub fn sha256(data: &[u8]) -> [u8; 32] {
5    let mut hasher = Sha256Impl::new();
6    hasher.update(data);
7    let digest = hasher.finalize();
8    let mut out = [0u8; 32];
9    out.copy_from_slice(&digest);
10    out
11}
12
13/// Incremental SHA-256 hasher
14#[derive(Clone)]
15pub struct Sha256 {
16    hasher: Sha256Impl,
17}
18
19impl Sha256 {
20    pub fn new() -> Self {
21        Self {
22            hasher: Sha256Impl::new(),
23        }
24    }
25
26    pub fn update(&mut self, data: &[u8]) {
27        self.hasher.update(data);
28    }
29
30    pub fn finalize(self) -> [u8; 32] {
31        let digest = self.hasher.finalize();
32        let mut out = [0u8; 32];
33        out.copy_from_slice(&digest);
34        out
35    }
36}