pub const CHECKSUM_ALGORITHM: &str = "crc32c";
#[inline]
pub fn checksum_bytes(data: &[u8]) -> u32 {
crc32c::crc32c(data)
}
pub fn verify_checksum(data: &[u8], expected: u32) -> Result<(), crate::Error> {
let actual = checksum_bytes(data);
if actual == expected {
Ok(())
} else {
Err(crate::Error::ChecksumMismatch { expected, actual })
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn empty_checksum_stable() {
assert_eq!(checksum_bytes(b""), 0);
}
#[test]
fn known_vector() {
assert_eq!(checksum_bytes(b"123456789"), 0xE306_9283);
}
}