71unsigned int XrdOucCRC::crctable[256] =
73 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
74 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
75 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
76 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
77 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
78 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
79 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
80 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
81 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
82 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
83 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
84 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
85 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
86 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
87 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
88 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
89 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
90 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
91 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
92 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
93 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
94 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
95 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
96 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
97 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
98 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
99 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
100 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
101 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
102 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
103 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
104 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
105 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
106 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
107 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
108 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
109 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
110 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
111 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
112 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
113 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
114 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
115 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
116 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
117 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
118 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
119 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
120 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
121 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
122 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
123 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
124 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
125 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
126 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
127 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
128 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
129 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
130 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
131 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
132 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
133 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
134 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
135 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
136 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
173 const unsigned int CRC32_XINIT = 0xffffffff;
174 const unsigned int CRC32_XOROT = 0xffffffff;
175 unsigned int crc = CRC32_XINIT;
179 while(reclen-- > 0) crc = crctable[(crc ^ *p++) & 0xff] ^ (crc >> 8);
183 return crc ^ CRC32_XOROT;
195 return crc32c(prevcs, data, count);
202 int i, numpages = count/XrdSys::PageSize;
203 const uint8_t* dataP = (
const uint8_t*)data;
207 for (i = 0; i < numpages; i++)
208 {csval[i] =
crc32c(0, dataP, XrdSys::PageSize);
209 count -= XrdSys::PageSize;
210 dataP += XrdSys::PageSize;
215 if (count > 0) csval[i] =
crc32c(0, dataP, count);
232 const uint32_t csval, uint32_t* valcs)
238 actualCS =
crc32c(0, data, count);
239 if (valcs) *valcs = actualCS;
240 return csval == actualCS;
246 const uint32_t* csval, uint32_t& valcs)
248 int i, numpages = count/XrdSys::PageSize;
249 const uint8_t* dataP = (
const uint8_t*)data;
254 for (i = 0; i < numpages; i++)
256 actualCS =
crc32c(0, dataP, XrdSys::PageSize);
257 if (csval[i] != actualCS)
261 count -= XrdSys::PageSize;
262 dataP += XrdSys::PageSize;
269 actualCS =
crc32c(0, dataP, count);
270 if (csval[i] != actualCS)
284 const uint32_t* csval,
bool* valok)
286 int i, numpages = count/XrdSys::PageSize;
287 const uint8_t* dataP = (
const uint8_t*)data;
293 for (i = 0; i < numpages; i++)
295 actualCS =
crc32c(0, dataP, XrdSys::PageSize);
296 if (csval[i] == actualCS) valok[i] =
true;
297 else valok[i] = retval =
false;
298 count -= XrdSys::PageSize;
299 dataP += XrdSys::PageSize;
306 actualCS =
crc32c(0, dataP, count);
307 if (csval[i] == actualCS) valok[i] =
true;
308 else valok[i] = retval =
false;
319 const uint32_t* csval, uint32_t* valcs)
321 int i, numpages = count/XrdSys::PageSize;
322 const uint8_t* dataP = (
const uint8_t*)data;
327 for (i = 0; i < numpages; i++)
329 valcs[i] =
crc32c(0, dataP, XrdSys::PageSize);
330 if (csval[i] != valcs[i]) retval =
false;
331 count -= XrdSys::PageSize;
332 dataP += XrdSys::PageSize;
339 valcs[i] =
crc32c(0, dataP, count);
340 if (csval[i] != valcs[i]) retval =
false;
uint32_t crc32c(uint32_t crc, void const *buf, size_t len)
uint32_t crc32c_combine(uint32_t crcA, uint32_t crcB, size_t lengthB)
merge two CRC32 such that result = crc32(dataB, lengthB, crc32(dataA, lengthA))
static uint32_t CRC32(const unsigned char *data, int count)
static uint32_t Combine32C(uint32_t Cksum1, uint32_t Cksum2, int DLen)
static uint32_t Calc32C(const void *data, size_t count, uint32_t prevcs=0)
static bool Ver32C(const void *data, size_t count, const uint32_t csval, uint32_t *csbad=0)