8 const std::uint32_t CRC32_XINIT = 0xFFFFFFFF
L;
9 const std::uint32_t CRC32_XOROT = 0xFFFFFFFF
L;
11 const std::uint32_t crctable[256] = {
12 0x00000000
L, 0x77073096
L, 0xEE0E612C
L, 0x990951BA
L, 0x076DC419
L, 0x706AF48F
L, 0xE963A535
L, 0x9E6495A3
L,
13 0x0EDB8832
L, 0x79DCB8A4
L, 0xE0D5E91E
L, 0x97D2D988
L, 0x09B64C2B
L, 0x7EB17CBD
L, 0xE7B82D07
L, 0x90BF1D91
L,
14 0x1DB71064
L, 0x6AB020F2
L, 0xF3B97148
L, 0x84BE41DE
L, 0x1ADAD47D
L, 0x6DDDE4EB
L, 0xF4D4B551
L, 0x83D385C7
L,
15 0x136C9856
L, 0x646BA8C0
L, 0xFD62F97A
L, 0x8A65C9EC
L, 0x14015C4F
L, 0x63066CD9
L, 0xFA0F3D63
L, 0x8D080DF5
L,
16 0x3B6E20C8
L, 0x4C69105E
L, 0xD56041E4
L, 0xA2677172
L, 0x3C03E4D1
L, 0x4B04D447
L, 0xD20D85FD
L, 0xA50AB56B
L,
17 0x35B5A8FA
L, 0x42B2986C
L, 0xDBBBC9D6
L, 0xACBCF940
L, 0x32D86CE3
L, 0x45DF5C75
L, 0xDCD60DCF
L, 0xABD13D59
L,
18 0x26D930AC
L, 0x51DE003A
L, 0xC8D75180
L, 0xBFD06116
L, 0x21B4F4B5
L, 0x56B3C423
L, 0xCFBA9599
L, 0xB8BDA50F
L,
19 0x2802B89E
L, 0x5F058808
L, 0xC60CD9B2
L, 0xB10BE924
L, 0x2F6F7C87
L, 0x58684C11
L, 0xC1611DAB
L, 0xB6662D3D
L,
20 0x76DC4190
L, 0x01DB7106
L, 0x98D220BC
L, 0xEFD5102A
L, 0x71B18589
L, 0x06B6B51F
L, 0x9FBFE4A5
L, 0xE8B8D433
L,
21 0x7807C9A2
L, 0x0F00F934
L, 0x9609A88E
L, 0xE10E9818
L, 0x7F6A0DBB
L, 0x086D3D2D
L, 0x91646C97
L, 0xE6635C01
L,
22 0x6B6B51F4
L, 0x1C6C6162
L, 0x856530D8
L, 0xF262004E
L, 0x6C0695ED
L, 0x1B01A57B
L, 0x8208F4C1
L, 0xF50FC457
L,
23 0x65B0D9C6
L, 0x12B7E950
L, 0x8BBEB8EA
L, 0xFCB9887C
L, 0x62DD1DDF
L, 0x15DA2D49
L, 0x8CD37CF3
L, 0xFBD44C65
L,
24 0x4DB26158
L, 0x3AB551CE
L, 0xA3BC0074
L, 0xD4BB30E2
L, 0x4ADFA541
L, 0x3DD895D7
L, 0xA4D1C46D
L, 0xD3D6F4FB
L,
25 0x4369E96A
L, 0x346ED9FC
L, 0xAD678846
L, 0xDA60B8D0
L, 0x44042D73
L, 0x33031DE5
L, 0xAA0A4C5F
L, 0xDD0D7CC9
L,
26 0x5005713C
L, 0x270241AA
L, 0xBE0B1010
L, 0xC90C2086
L, 0x5768B525
L, 0x206F85B3
L, 0xB966D409
L, 0xCE61E49F
L,
27 0x5EDEF90E
L, 0x29D9C998
L, 0xB0D09822
L, 0xC7D7A8B4
L, 0x59B33D17
L, 0x2EB40D81
L, 0xB7BD5C3B
L, 0xC0BA6CAD
L,
28 0xEDB88320
L, 0x9ABFB3B6
L, 0x03B6E20C
L, 0x74B1D29A
L, 0xEAD54739
L, 0x9DD277AF
L, 0x04DB2615
L, 0x73DC1683
L,
29 0xE3630B12
L, 0x94643B84
L, 0x0D6D6A3E
L, 0x7A6A5AA8
L, 0xE40ECF0B
L, 0x9309FF9D
L, 0x0A00AE27
L, 0x7D079EB1
L,
30 0xF00F9344
L, 0x8708A3D2
L, 0x1E01F268
L, 0x6906C2FE
L, 0xF762575D
L, 0x806567CB
L, 0x196C3671
L, 0x6E6B06E7
L,
31 0xFED41B76
L, 0x89D32BE0
L, 0x10DA7A5A
L, 0x67DD4ACC
L, 0xF9B9DF6F
L, 0x8EBEEFF9
L, 0x17B7BE43
L, 0x60B08ED5
L,
32 0xD6D6A3E8
L, 0xA1D1937E
L, 0x38D8C2C4
L, 0x4FDFF252
L, 0xD1BB67F1
L, 0xA6BC5767
L, 0x3FB506DD
L, 0x48B2364B
L,
33 0xD80D2BDA
L, 0xAF0A1B4C
L, 0x36034AF6
L, 0x41047A60
L, 0xDF60EFC3
L, 0xA867DF55
L, 0x316E8EEF
L, 0x4669BE79
L,
34 0xCB61B38C
L, 0xBC66831A
L, 0x256FD2A0
L, 0x5268E236
L, 0xCC0C7795
L, 0xBB0B4703
L, 0x220216B9
L, 0x5505262F
L,
35 0xC5BA3BBE
L, 0xB2BD0B28
L, 0x2BB45A92
L, 0x5CB36A04
L, 0xC2D7FFA7
L, 0xB5D0CF31
L, 0x2CD99E8B
L, 0x5BDEAE1D
L,
36 0x9B64C2B0
L, 0xEC63F226
L, 0x756AA39C
L, 0x026D930A
L, 0x9C0906A9
L, 0xEB0E363F
L, 0x72076785
L, 0x05005713
L,
37 0x95BF4A82
L, 0xE2B87A14
L, 0x7BB12BAE
L, 0x0CB61B38
L, 0x92D28E9B
L, 0xE5D5BE0D
L, 0x7CDCEFB7
L, 0x0BDBDF21
L,
38 0x86D3D2D4
L, 0xF1D4E242
L, 0x68DDB3F8
L, 0x1FDA836E
L, 0x81BE16CD
L, 0xF6B9265B
L, 0x6FB077E1
L, 0x18B74777
L,
39 0x88085AE6
L, 0xFF0F6A70
L, 0x66063BCA
L, 0x11010B5C
L, 0x8F659EFF
L, 0xF862AE69
L, 0x616BFFD3
L, 0x166CCF45
L,
40 0xA00AE278
L, 0xD70DD2EE
L, 0x4E048354
L, 0x3903B3C2
L, 0xA7672661
L, 0xD06016F7
L, 0x4969474D
L, 0x3E6E77DB
L,
41 0xAED16A4A
L, 0xD9D65ADC
L, 0x40DF0B66
L, 0x37D83BF0
L, 0xA9BCAE53
L, 0xDEBB9EC5
L, 0x47B2CF7F
L, 0x30B5FFE9
L,
42 0xBDBDF21C
L, 0xCABAC28A
L, 0x53B39330
L, 0x24B4A3A6
L, 0xBAD03605
L, 0xCDD70693
L, 0x54DE5729
L, 0x23D967BF
L,
43 0xB3667A2E
L, 0xC4614AB8
L, 0x5D681B02
L, 0x2A6F2B94
L, 0xB40BBE37
L, 0xC30C8EA1
L, 0x5A05DF1B
L, 0x2D02EF8D
L};
51 auto length = message.length();
52 char const*
p = message.data();
53 for (
size_t j = 0;
j < length;
j++) {
54 unsigned char uc = *
p++;