mirror of
https://github.com/Momoko-Ayase/Senbei.git
synced 2026-09-19 03:57:59 -04:00
34 lines
691 B
Rust
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)
|
|
}
|