71 unsigned 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);
203 const uint8_t* dataP = (
const uint8_t*)data;
207 for (i = 0; i < numpages; i++)
215 if (count > 0) csval[i] =
crc32c(0, dataP, count);
223 const uint32_t csval, uint32_t* valcs)
229 actualCS =
crc32c(0, data, count);
230 if (valcs) *valcs = actualCS;
231 return csval == actualCS;
237 const uint32_t* csval, uint32_t& valcs)
240 const uint8_t* dataP = (
const uint8_t*)data;
245 for (i = 0; i < numpages; i++)
248 if (csval[i] != actualCS)
260 actualCS =
crc32c(0, dataP, count);
261 if (csval[i] != actualCS)
275 const uint32_t* csval,
bool* valok)
278 const uint8_t* dataP = (
const uint8_t*)data;
284 for (i = 0; i < numpages; i++)
287 if (csval[i] == actualCS) valok[i] =
true;
288 else valok[i] = retval =
false;
297 actualCS =
crc32c(0, dataP, count);
298 if (csval[i] == actualCS) valok[i] =
true;
299 else valok[i] = retval =
false;
310 const uint32_t* csval, uint32_t* valcs)
313 const uint8_t* dataP = (
const uint8_t*)data;
318 for (i = 0; i < numpages; i++)
321 if (csval[i] != valcs[i]) retval =
false;
330 valcs[i] =
crc32c(0, dataP, count);
331 if (csval[i] != valcs[i]) retval =
false;
uint32_t crc32c(uint32_t crc, void const *buf, size_t len)
static uint32_t CRC32(const unsigned char *data, int count)
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)
static const int PageSize