Coverage Report

Created: 2026-08-14 06:45

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/wsutil/crc32.c
Line
Count
Source
1
/* crc32.c
2
 * CRC-32 routine
3
 *
4
 * Wireshark - Network traffic analyzer
5
 * By Gerald Combs <gerald@wireshark.org>
6
 * Copyright 1998 Gerald Combs
7
 *
8
 * SPDX-License-Identifier: GPL-2.0-or-later
9
 *
10
 * Credits:
11
 *
12
 * Table from Solomon Peachy
13
 * Routine from Chris Waters
14
 */
15
16
#include "config.h"
17
18
#include <wsutil/crc32.h>
19
#include <wsutil/zlib_compat.h>
20
21
12.1k
#define CRC32_ACCUMULATE(c,d,table) (c=(c>>8)^(table)[(c^(d))&0xFF])
22
23
/*****************************************************************/
24
/*                                                               */
25
/* CRC32C LOOKUP TABLE                                           */
26
/* +++================                                           */
27
/* The following CRC lookup table was generated automagically    */
28
/* by the Rocksoft^tm Model CRC Algorithm Table Generation       */
29
/* Program V1.0 using the following model parameters:            */
30
/*                                                               */
31
/*    Width   : 4 bytes.                                         */
32
/*    Poly    : 0x1EDC6F41L                                      */
33
/*    Reverse : true.                                            */
34
/*                                                               */
35
/* For more information on the Rocksoft^tm Model CRC Algorithm,  */
36
/* see the document titled "A Painless Guide to CRC Error        */
37
/* Detection Algorithms" by Ross Williams                        */
38
/* (ross@guest.adelaide.edu.au.). This document is likely to be  */
39
/* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft".        */
40
/*                                                               */
41
/*****************************************************************/
42
12.1k
#define CRC32C(c,d) CRC32_ACCUMULATE(c,d,crc32c_table)
43
44
static const uint32_t crc32c_table[256] = {
45
    0x00000000U, 0xF26B8303U, 0xE13B70F7U, 0x1350F3F4U, 0xC79A971FU,
46
    0x35F1141CU, 0x26A1E7E8U, 0xD4CA64EBU, 0x8AD958CFU, 0x78B2DBCCU,
47
    0x6BE22838U, 0x9989AB3BU, 0x4D43CFD0U, 0xBF284CD3U, 0xAC78BF27U,
48
    0x5E133C24U, 0x105EC76FU, 0xE235446CU, 0xF165B798U, 0x030E349BU,
49
    0xD7C45070U, 0x25AFD373U, 0x36FF2087U, 0xC494A384U, 0x9A879FA0U,
50
    0x68EC1CA3U, 0x7BBCEF57U, 0x89D76C54U, 0x5D1D08BFU, 0xAF768BBCU,
51
    0xBC267848U, 0x4E4DFB4BU, 0x20BD8EDEU, 0xD2D60DDDU, 0xC186FE29U,
52
    0x33ED7D2AU, 0xE72719C1U, 0x154C9AC2U, 0x061C6936U, 0xF477EA35U,
53
    0xAA64D611U, 0x580F5512U, 0x4B5FA6E6U, 0xB93425E5U, 0x6DFE410EU,
54
    0x9F95C20DU, 0x8CC531F9U, 0x7EAEB2FAU, 0x30E349B1U, 0xC288CAB2U,
55
    0xD1D83946U, 0x23B3BA45U, 0xF779DEAEU, 0x05125DADU, 0x1642AE59U,
56
    0xE4292D5AU, 0xBA3A117EU, 0x4851927DU, 0x5B016189U, 0xA96AE28AU,
57
    0x7DA08661U, 0x8FCB0562U, 0x9C9BF696U, 0x6EF07595U, 0x417B1DBCU,
58
    0xB3109EBFU, 0xA0406D4BU, 0x522BEE48U, 0x86E18AA3U, 0x748A09A0U,
59
    0x67DAFA54U, 0x95B17957U, 0xCBA24573U, 0x39C9C670U, 0x2A993584U,
60
    0xD8F2B687U, 0x0C38D26CU, 0xFE53516FU, 0xED03A29BU, 0x1F682198U,
61
    0x5125DAD3U, 0xA34E59D0U, 0xB01EAA24U, 0x42752927U, 0x96BF4DCCU,
62
    0x64D4CECFU, 0x77843D3BU, 0x85EFBE38U, 0xDBFC821CU, 0x2997011FU,
63
    0x3AC7F2EBU, 0xC8AC71E8U, 0x1C661503U, 0xEE0D9600U, 0xFD5D65F4U,
64
    0x0F36E6F7U, 0x61C69362U, 0x93AD1061U, 0x80FDE395U, 0x72966096U,
65
    0xA65C047DU, 0x5437877EU, 0x4767748AU, 0xB50CF789U, 0xEB1FCBADU,
66
    0x197448AEU, 0x0A24BB5AU, 0xF84F3859U, 0x2C855CB2U, 0xDEEEDFB1U,
67
    0xCDBE2C45U, 0x3FD5AF46U, 0x7198540DU, 0x83F3D70EU, 0x90A324FAU,
68
    0x62C8A7F9U, 0xB602C312U, 0x44694011U, 0x5739B3E5U, 0xA55230E6U,
69
    0xFB410CC2U, 0x092A8FC1U, 0x1A7A7C35U, 0xE811FF36U, 0x3CDB9BDDU,
70
    0xCEB018DEU, 0xDDE0EB2AU, 0x2F8B6829U, 0x82F63B78U, 0x709DB87BU,
71
    0x63CD4B8FU, 0x91A6C88CU, 0x456CAC67U, 0xB7072F64U, 0xA457DC90U,
72
    0x563C5F93U, 0x082F63B7U, 0xFA44E0B4U, 0xE9141340U, 0x1B7F9043U,
73
    0xCFB5F4A8U, 0x3DDE77ABU, 0x2E8E845FU, 0xDCE5075CU, 0x92A8FC17U,
74
    0x60C37F14U, 0x73938CE0U, 0x81F80FE3U, 0x55326B08U, 0xA759E80BU,
75
    0xB4091BFFU, 0x466298FCU, 0x1871A4D8U, 0xEA1A27DBU, 0xF94AD42FU,
76
    0x0B21572CU, 0xDFEB33C7U, 0x2D80B0C4U, 0x3ED04330U, 0xCCBBC033U,
77
    0xA24BB5A6U, 0x502036A5U, 0x4370C551U, 0xB11B4652U, 0x65D122B9U,
78
    0x97BAA1BAU, 0x84EA524EU, 0x7681D14DU, 0x2892ED69U, 0xDAF96E6AU,
79
    0xC9A99D9EU, 0x3BC21E9DU, 0xEF087A76U, 0x1D63F975U, 0x0E330A81U,
80
    0xFC588982U, 0xB21572C9U, 0x407EF1CAU, 0x532E023EU, 0xA145813DU,
81
    0x758FE5D6U, 0x87E466D5U, 0x94B49521U, 0x66DF1622U, 0x38CC2A06U,
82
    0xCAA7A905U, 0xD9F75AF1U, 0x2B9CD9F2U, 0xFF56BD19U, 0x0D3D3E1AU,
83
    0x1E6DCDEEU, 0xEC064EEDU, 0xC38D26C4U, 0x31E6A5C7U, 0x22B65633U,
84
    0xD0DDD530U, 0x0417B1DBU, 0xF67C32D8U, 0xE52CC12CU, 0x1747422FU,
85
    0x49547E0BU, 0xBB3FFD08U, 0xA86F0EFCU, 0x5A048DFFU, 0x8ECEE914U,
86
    0x7CA56A17U, 0x6FF599E3U, 0x9D9E1AE0U, 0xD3D3E1ABU, 0x21B862A8U,
87
    0x32E8915CU, 0xC083125FU, 0x144976B4U, 0xE622F5B7U, 0xF5720643U,
88
    0x07198540U, 0x590AB964U, 0xAB613A67U, 0xB831C993U, 0x4A5A4A90U,
89
    0x9E902E7BU, 0x6CFBAD78U, 0x7FAB5E8CU, 0x8DC0DD8FU, 0xE330A81AU,
90
    0x115B2B19U, 0x020BD8EDU, 0xF0605BEEU, 0x24AA3F05U, 0xD6C1BC06U,
91
    0xC5914FF2U, 0x37FACCF1U, 0x69E9F0D5U, 0x9B8273D6U, 0x88D28022U,
92
    0x7AB90321U, 0xAE7367CAU, 0x5C18E4C9U, 0x4F48173DU, 0xBD23943EU,
93
    0xF36E6F75U, 0x0105EC76U, 0x12551F82U, 0xE03E9C81U, 0x34F4F86AU,
94
    0xC69F7B69U, 0xD5CF889DU, 0x27A40B9EU, 0x79B737BAU, 0x8BDCB4B9U,
95
    0x988C474DU, 0x6AE7C44EU, 0xBE2DA0A5U, 0x4C4623A6U, 0x5F16D052U,
96
    0xAD7D5351U };
97
98
/*
99
 * Table for the AUTODIN/HDLC/802.x CRC.
100
 *
101
 * Polynomial is
102
 *
103
 *  x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 +
104
 *      x^7 + x^5 + x^4 + x^2 + x + 1
105
 */
106
static const uint32_t crc32_ccitt_table[256] = {
107
  0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
108
  0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
109
  0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
110
  0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
111
  0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
112
  0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
113
  0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
114
  0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
115
  0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
116
  0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
117
  0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
118
  0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
119
  0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
120
  0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
121
  0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
122
  0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
123
  0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
124
  0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
125
  0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
126
  0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
127
  0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
128
  0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
129
  0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
130
  0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
131
  0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
132
  0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
133
  0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
134
  0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
135
  0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
136
  0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
137
  0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
138
  0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
139
  0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
140
  0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
141
  0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
142
  0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
143
  0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
144
  0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
145
  0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
146
  0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
147
  0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
148
  0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
149
  0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
150
  0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
151
  0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
152
  0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
153
  0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
154
  0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
155
  0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
156
  0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
157
  0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
158
  0x2d02ef8d
159
};
160
161
/*
162
 * Table for the MPEG-2 CRC.
163
 *
164
 * Polynomial is
165
 *
166
 *  x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 +
167
 *      x^7 + x^5 + x^4 + x^2 + x + 1
168
 *
169
 * (which is the same polynomial as the one above us).
170
 *
171
 * NOTE: this is also used for ATM AAL5.
172
 */
173
static const uint32_t crc32_mpeg2_table[256] = {
174
    0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
175
    0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
176
    0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7,
177
    0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
178
    0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3,
179
    0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
180
    0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef,
181
    0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
182
    0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb,
183
    0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
184
    0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
185
    0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
186
    0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4,
187
    0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
188
    0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08,
189
    0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
190
    0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc,
191
    0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
192
    0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050,
193
    0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
194
    0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
195
    0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
196
    0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1,
197
    0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
198
    0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5,
199
    0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
200
    0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9,
201
    0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
202
    0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd,
203
    0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
204
    0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
205
    0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
206
    0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2,
207
    0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
208
    0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e,
209
    0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
210
    0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a,
211
    0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
212
    0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676,
213
    0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
214
    0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
215
    0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
216
    0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
217
};
218
219
/* This table was compiled using the polynom: 0x0AA725CF*/
220
static const uint32_t crc32_0AA725CF_reverse[] = {
221
    0x00000000U, 0xCEAA95CEU, 0x7A1CE13DU, 0xB4B674F3U,
222
    0xF439C27AU, 0x3A9357B4U, 0x8E252347U, 0x408FB689U,
223
    0x0F3A4E55U, 0xC190DB9BU, 0x7526AF68U, 0xBB8C3AA6U,
224
    0xFB038C2FU, 0x35A919E1U, 0x811F6D12U, 0x4FB5F8DCU,
225
    0x1E749CAAU, 0xD0DE0964U, 0x64687D97U, 0xAAC2E859U,
226
    0xEA4D5ED0U, 0x24E7CB1EU, 0x9051BFEDU, 0x5EFB2A23U,
227
    0x114ED2FFU, 0xDFE44731U, 0x6B5233C2U, 0xA5F8A60CU,
228
    0xE5771085U, 0x2BDD854BU, 0x9F6BF1B8U, 0x51C16476U,
229
    0x3CE93954U, 0xF243AC9AU, 0x46F5D869U, 0x885F4DA7U,
230
    0xC8D0FB2EU, 0x067A6EE0U, 0xB2CC1A13U, 0x7C668FDDU,
231
    0x33D37701U, 0xFD79E2CFU, 0x49CF963CU, 0x876503F2U,
232
    0xC7EAB57BU, 0x094020B5U, 0xBDF65446U, 0x735CC188U,
233
    0x229DA5FEU, 0xEC373030U, 0x588144C3U, 0x962BD10DU,
234
    0xD6A46784U, 0x180EF24AU, 0xACB886B9U, 0x62121377U,
235
    0x2DA7EBABU, 0xE30D7E65U, 0x57BB0A96U, 0x99119F58U,
236
    0xD99E29D1U, 0x1734BC1FU, 0xA382C8ECU, 0x6D285D22U,
237
    0x79D272A8U, 0xB778E766U, 0x03CE9395U, 0xCD64065BU,
238
    0x8DEBB0D2U, 0x4341251CU, 0xF7F751EFU, 0x395DC421U,
239
    0x76E83CFDU, 0xB842A933U, 0x0CF4DDC0U, 0xC25E480EU,
240
    0x82D1FE87U, 0x4C7B6B49U, 0xF8CD1FBAU, 0x36678A74U,
241
    0x67A6EE02U, 0xA90C7BCCU, 0x1DBA0F3FU, 0xD3109AF1U,
242
    0x939F2C78U, 0x5D35B9B6U, 0xE983CD45U, 0x2729588BU,
243
    0x689CA057U, 0xA6363599U, 0x1280416AU, 0xDC2AD4A4U,
244
    0x9CA5622DU, 0x520FF7E3U, 0xE6B98310U, 0x281316DEU,
245
    0x453B4BFCU, 0x8B91DE32U, 0x3F27AAC1U, 0xF18D3F0FU,
246
    0xB1028986U, 0x7FA81C48U, 0xCB1E68BBU, 0x05B4FD75U,
247
    0x4A0105A9U, 0x84AB9067U, 0x301DE494U, 0xFEB7715AU,
248
    0xBE38C7D3U, 0x7092521DU, 0xC42426EEU, 0x0A8EB320U,
249
    0x5B4FD756U, 0x95E54298U, 0x2153366BU, 0xEFF9A3A5U,
250
    0xAF76152CU, 0x61DC80E2U, 0xD56AF411U, 0x1BC061DFU,
251
    0x54759903U, 0x9ADF0CCDU, 0x2E69783EU, 0xE0C3EDF0U,
252
    0xA04C5B79U, 0x6EE6CEB7U, 0xDA50BA44U, 0x14FA2F8AU,
253
    0xF3A4E550U, 0x3D0E709EU, 0x89B8046DU, 0x471291A3U,
254
    0x079D272AU, 0xC937B2E4U, 0x7D81C617U, 0xB32B53D9U,
255
    0xFC9EAB05U, 0x32343ECBU, 0x86824A38U, 0x4828DFF6U,
256
    0x08A7697FU, 0xC60DFCB1U, 0x72BB8842U, 0xBC111D8CU,
257
    0xEDD079FAU, 0x237AEC34U, 0x97CC98C7U, 0x59660D09U,
258
    0x19E9BB80U, 0xD7432E4EU, 0x63F55ABDU, 0xAD5FCF73U,
259
    0xE2EA37AFU, 0x2C40A261U, 0x98F6D692U, 0x565C435CU,
260
    0x16D3F5D5U, 0xD879601BU, 0x6CCF14E8U, 0xA2658126U,
261
    0xCF4DDC04U, 0x01E749CAU, 0xB5513D39U, 0x7BFBA8F7U,
262
    0x3B741E7EU, 0xF5DE8BB0U, 0x4168FF43U, 0x8FC26A8DU,
263
    0xC0779251U, 0x0EDD079FU, 0xBA6B736CU, 0x74C1E6A2U,
264
    0x344E502BU, 0xFAE4C5E5U, 0x4E52B116U, 0x80F824D8U,
265
    0xD13940AEU, 0x1F93D560U, 0xAB25A193U, 0x658F345DU,
266
    0x250082D4U, 0xEBAA171AU, 0x5F1C63E9U, 0x91B6F627U,
267
    0xDE030EFBU, 0x10A99B35U, 0xA41FEFC6U, 0x6AB57A08U,
268
    0x2A3ACC81U, 0xE490594FU, 0x50262DBCU, 0x9E8CB872U,
269
    0x8A7697F8U, 0x44DC0236U, 0xF06A76C5U, 0x3EC0E30BU,
270
    0x7E4F5582U, 0xB0E5C04CU, 0x0453B4BFU, 0xCAF92171U,
271
    0x854CD9ADU, 0x4BE64C63U, 0xFF503890U, 0x31FAAD5EU,
272
    0x71751BD7U, 0xBFDF8E19U, 0x0B69FAEAU, 0xC5C36F24U,
273
    0x94020B52U, 0x5AA89E9CU, 0xEE1EEA6FU, 0x20B47FA1U,
274
    0x603BC928U, 0xAE915CE6U, 0x1A272815U, 0xD48DBDDBU,
275
    0x9B384507U, 0x5592D0C9U, 0xE124A43AU, 0x2F8E31F4U,
276
    0x6F01877DU, 0xA1AB12B3U, 0x151D6640U, 0xDBB7F38EU,
277
    0xB69FAEACU, 0x78353B62U, 0xCC834F91U, 0x0229DA5FU,
278
    0x42A66CD6U, 0x8C0CF918U, 0x38BA8DEBU, 0xF6101825U,
279
    0xB9A5E0F9U, 0x770F7537U, 0xC3B901C4U, 0x0D13940AU,
280
    0x4D9C2283U, 0x8336B74DU, 0x3780C3BEU, 0xF92A5670U,
281
    0xA8EB3206U, 0x6641A7C8U, 0xD2F7D33BU, 0x1C5D46F5U,
282
    0x5CD2F07CU, 0x927865B2U, 0x26CE1141U, 0xE864848FU,
283
    0xA7D17C53U, 0x697BE99DU, 0xDDCD9D6EU, 0x136708A0U,
284
    0x53E8BE29U, 0x9D422BE7U, 0x29F45F14U, 0xE75ECADAU
285
};
286
287
/* This table was compiled using the polynom: 0x5D6DCB */
288
static const uint32_t crc32_5D6DCB[] =
289
{
290
    0x00000000, 0x005d6dcb, 0x00badb96, 0x00e7b65d,
291
    0x0028dae7, 0x0075b72c, 0x00920171, 0x00cf6cba,
292
    0x0051b5ce, 0x000cd805, 0x00eb6e58, 0x00b60393,
293
    0x00796f29, 0x002402e2, 0x00c3b4bf, 0x009ed974,
294
    0x00a36b9c, 0x00fe0657, 0x0019b00a, 0x0044ddc1,
295
    0x008bb17b, 0x00d6dcb0, 0x00316aed, 0x006c0726,
296
    0x00f2de52, 0x00afb399, 0x004805c4, 0x0015680f,
297
    0x00da04b5, 0x0087697e, 0x0060df23, 0x003db2e8,
298
    0x001bbaf3, 0x0046d738, 0x00a16165, 0x00fc0cae,
299
    0x00336014, 0x006e0ddf, 0x0089bb82, 0x00d4d649,
300
    0x004a0f3d, 0x001762f6, 0x00f0d4ab, 0x00adb960,
301
    0x0062d5da, 0x003fb811, 0x00d80e4c, 0x00856387,
302
    0x00b8d16f, 0x00e5bca4, 0x00020af9, 0x005f6732,
303
    0x00900b88, 0x00cd6643, 0x002ad01e, 0x0077bdd5,
304
    0x00e964a1, 0x00b4096a, 0x0053bf37, 0x000ed2fc,
305
    0x00c1be46, 0x009cd38d, 0x007b65d0, 0x0026081b,
306
    0x003775e6, 0x006a182d, 0x008dae70, 0x00d0c3bb,
307
    0x001faf01, 0x0042c2ca, 0x00a57497, 0x00f8195c,
308
    0x0066c028, 0x003bade3, 0x00dc1bbe, 0x00817675,
309
    0x004e1acf, 0x00137704, 0x00f4c159, 0x00a9ac92,
310
    0x00941e7a, 0x00c973b1, 0x002ec5ec, 0x0073a827,
311
    0x00bcc49d, 0x00e1a956, 0x00061f0b, 0x005b72c0,
312
    0x00c5abb4, 0x0098c67f, 0x007f7022, 0x00221de9,
313
    0x00ed7153, 0x00b01c98, 0x0057aac5, 0x000ac70e,
314
    0x002ccf15, 0x0071a2de, 0x00961483, 0x00cb7948,
315
    0x000415f2, 0x00597839, 0x00bece64, 0x00e3a3af,
316
    0x007d7adb, 0x00201710, 0x00c7a14d, 0x009acc86,
317
    0x0055a03c, 0x0008cdf7, 0x00ef7baa, 0x00b21661,
318
    0x008fa489, 0x00d2c942, 0x00357f1f, 0x006812d4,
319
    0x00a77e6e, 0x00fa13a5, 0x001da5f8, 0x0040c833,
320
    0x00de1147, 0x00837c8c, 0x0064cad1, 0x0039a71a,
321
    0x00f6cba0, 0x00aba66b, 0x004c1036, 0x00117dfd,
322
    0x006eebcc, 0x00338607, 0x00d4305a, 0x00895d91,
323
    0x0046312b, 0x001b5ce0, 0x00fceabd, 0x00a18776,
324
    0x003f5e02, 0x006233c9, 0x00858594, 0x00d8e85f,
325
    0x001784e5, 0x004ae92e, 0x00ad5f73, 0x00f032b8,
326
    0x00cd8050, 0x0090ed9b, 0x00775bc6, 0x002a360d,
327
    0x00e55ab7, 0x00b8377c, 0x005f8121, 0x0002ecea,
328
    0x009c359e, 0x00c15855, 0x0026ee08, 0x007b83c3,
329
    0x00b4ef79, 0x00e982b2, 0x000e34ef, 0x00535924,
330
    0x0075513f, 0x00283cf4, 0x00cf8aa9, 0x0092e762,
331
    0x005d8bd8, 0x0000e613, 0x00e7504e, 0x00ba3d85,
332
    0x0024e4f1, 0x0079893a, 0x009e3f67, 0x00c352ac,
333
    0x000c3e16, 0x005153dd, 0x00b6e580, 0x00eb884b,
334
    0x00d63aa3, 0x008b5768, 0x006ce135, 0x00318cfe,
335
    0x00fee044, 0x00a38d8f, 0x00443bd2, 0x00195619,
336
    0x00878f6d, 0x00dae2a6, 0x003d54fb, 0x00603930,
337
    0x00af558a, 0x00f23841, 0x00158e1c, 0x0048e3d7,
338
    0x00599e2a, 0x0004f3e1, 0x00e345bc, 0x00be2877,
339
    0x007144cd, 0x002c2906, 0x00cb9f5b, 0x0096f290,
340
    0x00082be4, 0x0055462f, 0x00b2f072, 0x00ef9db9,
341
    0x0020f103, 0x007d9cc8, 0x009a2a95, 0x00c7475e,
342
    0x00faf5b6, 0x00a7987d, 0x00402e20, 0x001d43eb,
343
    0x00d22f51, 0x008f429a, 0x0068f4c7, 0x0035990c,
344
    0x00ab4078, 0x00f62db3, 0x00119bee, 0x004cf625,
345
    0x00839a9f, 0x00def754, 0x00394109, 0x00642cc2,
346
    0x004224d9, 0x001f4912, 0x00f8ff4f, 0x00a59284,
347
    0x006afe3e, 0x003793f5, 0x00d025a8, 0x008d4863,
348
    0x00139117, 0x004efcdc, 0x00a94a81, 0x00f4274a,
349
    0x003b4bf0, 0x0066263b, 0x00819066, 0x00dcfdad,
350
    0x00e14f45, 0x00bc228e, 0x005b94d3, 0x0006f918,
351
    0x00c995a2, 0x0094f869, 0x00734e34, 0x002e23ff,
352
    0x00b0fa8b, 0x00ed9740, 0x000a211d, 0x00574cd6,
353
    0x0098206c, 0x00c54da7, 0x0022fbfa, 0x007f9631
354
};
355
356
/*
357
 * Table for the SC-32 CRC, also referred to as "CRC-32/6 corrected"
358
 * Defined in IEC 61784-3-3 (Safety fieldbuses aka ProfiSafe) and
359
 * referred in 61375-2-3 (TRDP SDTv2)
360
 * Xor{in,out}: no
361
 * Reflect{in,out}: no
362
 * Polynomial: 0x1F4ACFB13
363
 */
364
365
static const uint32_t crc32_sc32_table[256] = {
366
  0x00000000U, 0xF4ACFB13U, 0x1DF50D35U, 0xE959F626U, 0x3BEA1A6AU,
367
  0xCF46E179U, 0x261F175FU, 0xD2B3EC4CU, 0x77D434D4U, 0x8378CFC7U,
368
  0x6A2139E1U, 0x9E8DC2F2U, 0x4C3E2EBEU, 0xB892D5ADU, 0x51CB238BU,
369
  0xA567D898U, 0xEFA869A8U, 0x1B0492BBU, 0xF25D649DU, 0x06F19F8EU,
370
  0xD44273C2U, 0x20EE88D1U, 0xC9B77EF7U, 0x3D1B85E4U, 0x987C5D7CU,
371
  0x6CD0A66FU, 0x85895049U, 0x7125AB5AU, 0xA3964716U, 0x573ABC05U,
372
  0xBE634A23U, 0x4ACFB130U, 0x2BFC2843U, 0xDF50D350U, 0x36092576U,
373
  0xC2A5DE65U, 0x10163229U, 0xE4BAC93AU, 0x0DE33F1CU, 0xF94FC40FU,
374
  0x5C281C97U, 0xA884E784U, 0x41DD11A2U, 0xB571EAB1U, 0x67C206FDU,
375
  0x936EFDEEU, 0x7A370BC8U, 0x8E9BF0DBU, 0xC45441EBU, 0x30F8BAF8U,
376
  0xD9A14CDEU, 0x2D0DB7CDU, 0xFFBE5B81U, 0x0B12A092U, 0xE24B56B4U,
377
  0x16E7ADA7U, 0xB380753FU, 0x472C8E2CU, 0xAE75780AU, 0x5AD98319U,
378
  0x886A6F55U, 0x7CC69446U, 0x959F6260U, 0x61339973U, 0x57F85086U,
379
  0xA354AB95U, 0x4A0D5DB3U, 0xBEA1A6A0U, 0x6C124AECU, 0x98BEB1FFU,
380
  0x71E747D9U, 0x854BBCCAU, 0x202C6452U, 0xD4809F41U, 0x3DD96967U,
381
  0xC9759274U, 0x1BC67E38U, 0xEF6A852BU, 0x0633730DU, 0xF29F881EU,
382
  0xB850392EU, 0x4CFCC23DU, 0xA5A5341BU, 0x5109CF08U, 0x83BA2344U,
383
  0x7716D857U, 0x9E4F2E71U, 0x6AE3D562U, 0xCF840DFAU, 0x3B28F6E9U,
384
  0xD27100CFU, 0x26DDFBDCU, 0xF46E1790U, 0x00C2EC83U, 0xE99B1AA5U,
385
  0x1D37E1B6U, 0x7C0478C5U, 0x88A883D6U, 0x61F175F0U, 0x955D8EE3U,
386
  0x47EE62AFU, 0xB34299BCU, 0x5A1B6F9AU, 0xAEB79489U, 0x0BD04C11U,
387
  0xFF7CB702U, 0x16254124U, 0xE289BA37U, 0x303A567BU, 0xC496AD68U,
388
  0x2DCF5B4EU, 0xD963A05DU, 0x93AC116DU, 0x6700EA7EU, 0x8E591C58U,
389
  0x7AF5E74BU, 0xA8460B07U, 0x5CEAF014U, 0xB5B30632U, 0x411FFD21U,
390
  0xE47825B9U, 0x10D4DEAAU, 0xF98D288CU, 0x0D21D39FU, 0xDF923FD3U,
391
  0x2B3EC4C0U, 0xC26732E6U, 0x36CBC9F5U, 0xAFF0A10CU, 0x5B5C5A1FU,
392
  0xB205AC39U, 0x46A9572AU, 0x941ABB66U, 0x60B64075U, 0x89EFB653U,
393
  0x7D434D40U, 0xD82495D8U, 0x2C886ECBU, 0xC5D198EDU, 0x317D63FEU,
394
  0xE3CE8FB2U, 0x176274A1U, 0xFE3B8287U, 0x0A977994U, 0x4058C8A4U,
395
  0xB4F433B7U, 0x5DADC591U, 0xA9013E82U, 0x7BB2D2CEU, 0x8F1E29DDU,
396
  0x6647DFFBU, 0x92EB24E8U, 0x378CFC70U, 0xC3200763U, 0x2A79F145U,
397
  0xDED50A56U, 0x0C66E61AU, 0xF8CA1D09U, 0x1193EB2FU, 0xE53F103CU,
398
  0x840C894FU, 0x70A0725CU, 0x99F9847AU, 0x6D557F69U, 0xBFE69325U,
399
  0x4B4A6836U, 0xA2139E10U, 0x56BF6503U, 0xF3D8BD9BU, 0x07744688U,
400
  0xEE2DB0AEU, 0x1A814BBDU, 0xC832A7F1U, 0x3C9E5CE2U, 0xD5C7AAC4U,
401
  0x216B51D7U, 0x6BA4E0E7U, 0x9F081BF4U, 0x7651EDD2U, 0x82FD16C1U,
402
  0x504EFA8DU, 0xA4E2019EU, 0x4DBBF7B8U, 0xB9170CABU, 0x1C70D433U,
403
  0xE8DC2F20U, 0x0185D906U, 0xF5292215U, 0x279ACE59U, 0xD336354AU,
404
  0x3A6FC36CU, 0xCEC3387FU, 0xF808F18AU, 0x0CA40A99U, 0xE5FDFCBFU,
405
  0x115107ACU, 0xC3E2EBE0U, 0x374E10F3U, 0xDE17E6D5U, 0x2ABB1DC6U,
406
  0x8FDCC55EU, 0x7B703E4DU, 0x9229C86BU, 0x66853378U, 0xB436DF34U,
407
  0x409A2427U, 0xA9C3D201U, 0x5D6F2912U, 0x17A09822U, 0xE30C6331U,
408
  0x0A559517U, 0xFEF96E04U, 0x2C4A8248U, 0xD8E6795BU, 0x31BF8F7DU,
409
  0xC513746EU, 0x6074ACF6U, 0x94D857E5U, 0x7D81A1C3U, 0x892D5AD0U,
410
  0x5B9EB69CU, 0xAF324D8FU, 0x466BBBA9U, 0xB2C740BAU, 0xD3F4D9C9U,
411
  0x275822DAU, 0xCE01D4FCU, 0x3AAD2FEFU, 0xE81EC3A3U, 0x1CB238B0U,
412
  0xF5EBCE96U, 0x01473585U, 0xA420ED1DU, 0x508C160EU, 0xB9D5E028U,
413
  0x4D791B3BU, 0x9FCAF777U, 0x6B660C64U, 0x823FFA42U, 0x76930151U,
414
  0x3C5CB061U, 0xC8F04B72U, 0x21A9BD54U, 0xD5054647U, 0x07B6AA0BU,
415
  0xF31A5118U, 0x1A43A73EU, 0xEEEF5C2DU, 0x4B8884B5U, 0xBF247FA6U,
416
  0x567D8980U, 0xA2D17293U, 0x70629EDFU, 0x84CE65CCU, 0x6D9793EAU,
417
  0x993B68F9U
418
};
419
420
uint32_t
421
crc32c_table_lookup (unsigned char pos)
422
0
{
423
0
  return crc32c_table[pos];
424
0
}
425
426
uint32_t
427
crc32_ccitt_table_lookup (unsigned char pos)
428
0
{
429
0
  return crc32_ccitt_table[pos];
430
0
}
431
432
uint32_t
433
crc32c_calculate(const void *buf, int len, uint32_t crc)
434
197
{
435
197
  const uint8_t *p = (const uint8_t *)buf;
436
197
  crc = CRC32C_SWAP(crc);
437
12.2k
  while (len-- > 0) {
438
12.0k
    CRC32C(crc, *p++);
439
12.0k
  }
440
197
  return CRC32C_SWAP(crc);
441
197
}
442
443
uint32_t
444
crc32c_calculate_no_swap(const void *buf, int len, uint32_t crc)
445
3
{
446
3
  const uint8_t *p = (const uint8_t *)buf;
447
130
  while (len-- > 0) {
448
127
    CRC32C(crc, *p++);
449
127
  }
450
451
3
  return crc;
452
3
}
453
454
uint32_t
455
crc32_ccitt(const uint8_t *buf, unsigned len)
456
0
{
457
0
  return (crc32_ccitt_seed(buf, len, CRC32_CCITT_SEED));
458
0
}
459
460
uint32_t
461
crc32_ccitt_seed(const uint8_t *buf, unsigned len, uint32_t seed)
462
4.09k
{
463
4.09k
#if defined (HAVE_ZLIB) || defined (HAVE_ZLIBNG)
464
4.09k
  return (unsigned)ZLIB_PREFIX(crc32)(~seed, buf, len);
465
#else /* USE_ZLIB_OR_ZLIBNG */
466
  unsigned i;
467
  uint32_t crc32 = seed;
468
469
  for (i = 0; i < len; i++)
470
    CRC32_ACCUMULATE(crc32, buf[i], crc32_ccitt_table);
471
472
  return ( ~crc32 );
473
#endif /* USE_ZLIB_OR_ZLIBNG */
474
4.09k
}
475
476
uint32_t
477
crc32_mpeg2_seed(const uint8_t *buf, unsigned len, uint32_t seed)
478
737
{
479
737
  unsigned i;
480
737
  uint32_t crc32;
481
482
737
  crc32 = seed;
483
484
27.8k
  for (i = 0; i < len; i++)
485
27.0k
    crc32 = (crc32 << 8) ^ crc32_mpeg2_table[((crc32 >> 24) ^ buf[i]) & 0xff];
486
487
737
  return ( crc32 );
488
737
}
489
490
uint32_t
491
crc32_0x0AA725CF_seed(const uint8_t *buf, unsigned len, uint32_t seed)
492
0
{
493
0
  unsigned crc32;
494
495
0
  crc32 = (unsigned)seed;
496
0
  while( len-- != 0 )
497
0
    CRC32_ACCUMULATE(crc32, *buf++, crc32_0AA725CF_reverse);
498
499
0
  return (uint32_t)crc32;
500
0
}
501
502
uint32_t
503
crc32_0x5D6DCB_seed(const uint8_t *buf, unsigned len, uint32_t seed)
504
0
{
505
0
  uint32_t crc = seed;
506
0
  if (len > 0)
507
0
  {
508
0
    while (len-- > 0)
509
0
    {
510
0
      uint8_t data = *buf++;
511
      /* XOR data with CRC2, look up result, then XOR that with CRC; */
512
0
      crc = crc32_5D6DCB[((crc >> 16) ^ data) & 0xff] ^ (crc << 8);
513
0
    }
514
0
  }
515
0
  return (crc & 0x00ffffff);
516
0
}
517
518
uint32_t
519
crc32_sc32_seed(const uint8_t *buf, unsigned len, uint32_t seed)
520
0
{
521
0
  unsigned i;
522
0
  uint32_t crc32;
523
524
0
  crc32 = seed;
525
526
0
  for (i = 0; i < len; i++)
527
0
    crc32 = (crc32 << 8) ^ crc32_sc32_table[((crc32 >> 24) ^ buf[i]) & 0xff];
528
529
0
  return ( crc32 );
530
0
}
531
532
/*
533
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
534
 *
535
 * Local variables:
536
 * c-basic-offset: 8
537
 * tab-width: 8
538
 * indent-tabs-mode: t
539
 * End:
540
 *
541
 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
542
 * :indentSize=8:tabSize=8:noTabs=false:
543
 */