libflo_audio/core/
crc32.rs

1/// CRC32 implementation (IEEE 802.3 polynomial)
2const CRC32_TABLE: [u32; 256] = {
3    let mut table = [0u32; 256];
4    let mut i = 0;
5    while i < 256 {
6        let mut crc = i as u32;
7        let mut j = 0;
8        while j < 8 {
9            if crc & 1 != 0 {
10                crc = (crc >> 1) ^ 0xEDB88320;
11            } else {
12                crc >>= 1;
13            }
14            j += 1;
15        }
16        table[i] = crc;
17        i += 1;
18    }
19    table
20};
21
22/// Compute CRC32 checksum for data
23pub fn compute(data: &[u8]) -> u32 {
24    let mut crc = 0xFFFFFFFF_u32;
25    for &byte in data {
26        let index = ((crc ^ byte as u32) & 0xFF) as usize;
27        crc = (crc >> 8) ^ CRC32_TABLE[index];
28    }
29    !crc
30}