use std::fmt::Write as _;
use sha2::{Digest, Sha256};
pub fn to_hex(bytes: &[u8]) -> String {
let mut out = String::with_capacity(bytes.len() * 2);
for b in bytes {
let _ = write!(out, "{b:02x}");
}
out
}
pub fn sha256_hex(data: &[u8]) -> String {
to_hex(&Sha256::digest(data))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn to_hex_lowercase_padded() {
assert_eq!(to_hex(&[0x00, 0x0f, 0xff, 0xa5]), "000fffa5");
assert_eq!(to_hex(&[]), "");
}
#[test]
fn sha256_hex_known_vectors() {
assert_eq!(
sha256_hex(b""),
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
);
assert_eq!(
sha256_hex(b"abc"),
"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
);
}
}