|
|
|
|
|
by palsecam
599 days ago
|
|
FTR, an implementation in “low-level” JavaScript: /** Precomputed CRC-32 lookup table for half-bytes (aka “nibbles”).
* Trade more compute time for less memory and less code to transmit.
* @see https://create.stephan-brumme.com/crc32/#half-byte
*/
const CRC32_NIBBLE_TABLE = new Uint32Array([
0, 0x1DB71064, 0x3B6E20C8, 0x26D930AC, 0x76DC4190, 0x6B6B51F4, 0x4DB26158, 0x5005713C,
0xEDB88320, 0xF00F9344, 0xD6D6A3E8, 0xCB61B38C, 0x9B64C2B0, 0x86D3D2D4, 0xA00AE278, 0xBDBDF21C
]);
/** @return {number} CRC-32 (polynomial 0x04C11DB7) of the input data.
* @param {!BufferSource} data The input data.
* @param {number=} previousValue The previous CRC value, if resuming a computation.
* @see https://en.wikipedia.org/wiki/Cyclic_redundancy_check
*/
function crc32(data, previousValue = 0) {
const bytes = ArrayBuffer.isView(data)
? new Uint8Array(data.buffer, data.byteOffset, data.byteLength)
: new Uint8Array(data);
let crc = ~previousValue;
for (let i = 0; i < bytes.length; i++) {
crc = (crc >>> 4) ^ CRC32_NIBBLE_TABLE[0x0f & (crc ^ bytes[i])];
crc = (crc >>> 4) ^ CRC32_NIBBLE_TABLE[0x0f & (crc ^ (bytes[i] >> 4))];
}
return ~crc;
}
From https://GitHub.com/PaulCapron/pwa2uwp/blob/master/src/zip.js |
|