1use sha2::{Digest, Sha256};
4
5pub fn sha256_hex(data: &[u8]) -> String {
7 hex::encode(Sha256::digest(data))
8}
9
10pub fn sha256_concat_hex(parts: &[&[u8]]) -> String {
13 let mut h = Sha256::new();
14 for p in parts {
15 h.update(p);
16 }
17 hex::encode(h.finalize())
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn known_vector_empty() {
26 assert_eq!(
27 sha256_hex(b""),
28 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
29 );
30 }
31
32 #[test]
33 fn known_vector_abc() {
34 assert_eq!(
35 sha256_hex(b"abc"),
36 "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
37 );
38 }
39
40 #[test]
41 fn concat_equals_joined() {
42 assert_eq!(sha256_concat_hex(&[b"ab", b"c"]), sha256_hex(b"abc"));
43 }
44}