| |
| |
| |
| |
| export default buffer => { |
| buffer = new Uint8Array(buffer) |
| const module = { |
| polynom: 0xEDB88320, |
| initValue: -1, |
| bytes: 4, |
| table: [] |
| } |
| for (let a = 0; a < 256; ++a) { |
| let b = a |
| for (let c = 0; c < 8; ++c) { |
| b = b & 1 ? module.polynom ^ (b >>> 1) : b >>> 1 |
| } |
| module.table[a] = b >>> 0 |
| } |
| let crc = module.initValue |
| let length = buffer.length |
| let table = module.table |
| for (let a = 0; a < 256; ++a) { |
| let b = a |
| for (let c = 0; c < 8; ++c) { |
| b = b & 1 ? module.polynom ^ (b >>> 1) : b >>> 1 |
| } |
| module.table[a] = b >>> 0 |
| } |
| for (let i = 0; i < length; ++i) { |
| crc = table[(crc ^ buffer[i]) & 0xFF] ^ (crc >>> 8) |
| } |
| crc ^= module.initValue |
| let HEX_CHARS = '0123456789abcdef'.split(''); |
| let hex = ''; |
| if (module.bytes > 2) { |
| hex += HEX_CHARS[(crc >> 28) & 0x0F] + HEX_CHARS[(crc >> 24) & 0x0F] + HEX_CHARS[(crc >> 20) & 0x0F] + HEX_CHARS[(crc >> 16) & 0x0F] |
| } |
| hex += HEX_CHARS[(crc >> 12) & 0x0F] + HEX_CHARS[(crc >> 8) & 0x0F] + HEX_CHARS[(crc >> 4) & 0x0F] + HEX_CHARS[crc & 0x0F] |
| return hex |
| } |