#include "crc32.h" /* Polynomial: 0xEDB88320 */ /* python3: * In [26]: apply = lambda st: ((st>>1) ^ 0xEDB88320) if (st & 1) else (st>>1) * In [27]: print(',\n'.join([ '0x{:08x}'.format(apply(apply(apply(apply(x))))) for x in range(16) ])) */ static uint32_t crc32_table[16] = { 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; uint32_t crc32_update(uint32_t state, uint8_t c) { state ^= c; state = (state>>4) ^ crc32_table[state&0xf]; state = (state>>4) ^ crc32_table[state&0xf]; return state; }