use anyhow::{bail, Result};
use sha2::{Digest, Sha256};
use std::path::Path;
pub fn verify_sha256(path: &Path, expected_hex: &str) -> Result<()> {
let data = std::fs::read(path)?;
let mut hasher = Sha256::new();
hasher.update(&data);
let result = hasher.finalize();
let actual = hex::encode(result);
if actual != expected_hex.to_lowercase() {
bail!(
"SHA-256 mismatch for {}: expected {}, got {}",
path.display(),
expected_hex,
actual
);
}
Ok(())
}
pub fn hash_bytes(data: &[u8]) -> String {
let mut hasher = Sha256::new();
hasher.update(data);
hex::encode(hasher.finalize())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn hash_known_value() {
let h = hash_bytes(b"abc");
assert!(h.starts_with("ba7816bf"));
}
}