| | |
| | |
| | |
| | |
| | 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 |
| | } |