crypto_sha2_256/
digest.rs1use sha2::{Digest, Sha256};
6use zeroize::{Zeroize, ZeroizeOnDrop};
7
8pub const SHA2_256_DIGEST_LENGTH: usize = 32;
10
11#[derive(Clone, PartialEq, Eq, Zeroize, ZeroizeOnDrop)]
13pub struct Sha2_256Digest {
14 bytes: [u8; SHA2_256_DIGEST_LENGTH],
15}
16
17impl Sha2_256Digest {
18 pub fn as_bytes(&self) -> &[u8; SHA2_256_DIGEST_LENGTH] {
20 &self.bytes
21 }
22
23 pub fn into_bytes(self) -> [u8; SHA2_256_DIGEST_LENGTH] {
25 self.bytes
26 }
27}
28
29impl core::fmt::Debug for Sha2_256Digest {
30 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
31 write!(f, "Sha2_256Digest(len={})", SHA2_256_DIGEST_LENGTH)
32 }
33}
34
35pub fn digest(message: &[u8]) -> Sha2_256Digest {
37 let mut hasher = Sha256::new();
38 hasher.update(message);
39 let output = hasher.finalize();
40
41 let mut bytes = [0u8; SHA2_256_DIGEST_LENGTH];
42 bytes.copy_from_slice(&output);
43 Sha2_256Digest { bytes }
44}