Files
Senbei/senbei-crypto/src/windows/crc32.rs
T

34 lines
691 B
Rust

const fn build_table() -> [u32; 256] {
let mut table = [0u32; 256];
let mut i = 0;
while i < 256 {
let mut c = i as u32;
let mut k = 0;
while k < 8 {
c = if c & 1 != 0 {
0xEDB8_8320 ^ (c >> 1)
} else {
c >> 1
};
k += 1;
}
table[i] = c;
i += 1;
}
table
}
const TABLE: [u32; 256] = build_table();
pub fn append(initial: u32, data: &[u8]) -> u32 {
let mut crc = !initial;
for &b in data {
crc = TABLE[((crc ^ b as u32) & 0xFF) as usize] ^ (crc >> 8);
}
!crc
}
pub fn compute(data: &[u8]) -> u32 {
append(0, data)
}