34 lines
668 B
C
34 lines
668 B
C
#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;
|
|
}
|