25 lines
704 B
TypeScript
25 lines
704 B
TypeScript
/**
|
|
* Pre-computed CRC32 lookup table using reflected polynomial 0xEDB88320.
|
|
* Compatible with zlib.crc32() used by ESP-IDF.
|
|
*/
|
|
const CRC32_TABLE: Uint32Array = (() => {
|
|
const table = new Uint32Array(256);
|
|
for (let i = 0; i < 256; i++) {
|
|
let crc = i;
|
|
for (let j = 0; j < 8; j++) {
|
|
crc = (crc & 1) ? ((crc >>> 1) ^ 0xEDB88320) : (crc >>> 1);
|
|
}
|
|
table[i] = crc;
|
|
}
|
|
return table;
|
|
})();
|
|
|
|
/** Compute CRC32 of a Uint8Array. Returns unsigned 32-bit integer. */
|
|
export function crc32(data: Uint8Array): number {
|
|
let crc = 0xFFFFFFFF;
|
|
for (let i = 0; i < data.length; i++) {
|
|
crc = (crc >>> 8) ^ CRC32_TABLE[(crc ^ data[i]) & 0xFF];
|
|
}
|
|
return (crc ^ 0xFFFFFFFF) >>> 0;
|
|
}
|