1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#include "crc32.h"
#include <unistd.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) ]))
*/
uint32_t crc32_table[16] = {
0x00000000,
0x1db71064,
0x3b6e20c8,
0x26d930ac,
0x76dc4190,
0x6b6b51f4,
0x4db26158,
0x5005713c,
0xedb88320,
0xf00f9344,
0xd6d6a3e8,
0xcb61b38c,
0x9b64c2b0,
0x86d3d2d4,
0xa00ae278,
0xbdbdf21c
};
crc32_t crc32_update(crc32_t state, uint8_t c)
{
state ^= c;
state = (state>>4) ^ crc32_table[state&0xf];
state = (state>>4) ^ crc32_table[state&0xf];
return state;
}
|