XRootD
Loading...
Searching...
No Matches
XrdCksCalccrc32.cc
Go to the documentation of this file.
1/******************************************************************************/
2/* */
3/* X r d C k s C a l c c r c 3 2 . c c */
4/* */
5/* (c) 2011 by the Board of Trustees of the Leland Stanford, Jr., University */
6/* All Rights Reserved */
7/* Produced by Andrew Hanushevsky for Stanford University under contract */
8/* DE-AC02-76-SFO0515 with the Department of Energy */
9/* */
10/* This file is part of the XRootD software suite. */
11/* */
12/* XRootD is free software: you can redistribute it and/or modify it under */
13/* the terms of the GNU Lesser General Public License as published by the */
14/* Free Software Foundation, either version 3 of the License, or (at your */
15/* option) any later version. */
16/* */
17/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
18/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
19/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
20/* License for more details. */
21/* */
22/* You should have received a copy of the GNU Lesser General Public License */
23/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
24/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
25/* */
26/* The copyright holder's institutional names and contributor's names may not */
27/* be used to endorse or promote products derived from this software without */
28/* specific prior written permission of the institution or contributor. */
29/******************************************************************************/
30
32
33/*
34 C++ implementation of CRC-32 checksums. Code is based
35 upon and utilizes algorithm published by Ross Williams
36 as initially implemented by Eric Durbin.
37
38 This file contains:
39 CRC lookup table
40 function CalcCRC32 for calculating CRC-32 checksum
41
42 Provided by:
43 Eric Durbin
44 Kentucky Cancer Registry
45 University of Kentucky
46 October 14, 1998
47
48 Status:
49 Public Domain
50*/
51
52/*****************************************************************/
53/* */
54/* CRC LOOKUP TABLE */
55/* ================ */
56/* The following CRC lookup table was generated automagically */
57/* by the Rocksoft^tm Model CRC Algorithm Table Generation */
58/* Program V1.0 using the following model parameters: */
59/* */
60/* Width : 4 bytes. */
61/* Poly : 0x04C11DB7L */
62/* Reverse : FALSE */
63/* */
64/* For more information on the Rocksoft^tm Model CRC Algorithm, */
65/* see the document titled "A Painless Guide to CRC Error */
66/* Detection Algorithms" by Ross Williams */
67/* (ross@guest.adelaide.edu.au.). This document is likely to be */
68/* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft". */
69/* */
70/*****************************************************************/
71
72unsigned int XrdCksCalccrc32::crctable[256] =
73{
74 0x00000000L, 0x04C11DB7L, 0x09823B6EL, 0x0D4326D9L,
75 0x130476DCL, 0x17C56B6BL, 0x1A864DB2L, 0x1E475005L,
76 0x2608EDB8L, 0x22C9F00FL, 0x2F8AD6D6L, 0x2B4BCB61L,
77 0x350C9B64L, 0x31CD86D3L, 0x3C8EA00AL, 0x384FBDBDL,
78 0x4C11DB70L, 0x48D0C6C7L, 0x4593E01EL, 0x4152FDA9L,
79 0x5F15ADACL, 0x5BD4B01BL, 0x569796C2L, 0x52568B75L,
80 0x6A1936C8L, 0x6ED82B7FL, 0x639B0DA6L, 0x675A1011L,
81 0x791D4014L, 0x7DDC5DA3L, 0x709F7B7AL, 0x745E66CDL,
82 0x9823B6E0L, 0x9CE2AB57L, 0x91A18D8EL, 0x95609039L,
83 0x8B27C03CL, 0x8FE6DD8BL, 0x82A5FB52L, 0x8664E6E5L,
84 0xBE2B5B58L, 0xBAEA46EFL, 0xB7A96036L, 0xB3687D81L,
85 0xAD2F2D84L, 0xA9EE3033L, 0xA4AD16EAL, 0xA06C0B5DL,
86 0xD4326D90L, 0xD0F37027L, 0xDDB056FEL, 0xD9714B49L,
87 0xC7361B4CL, 0xC3F706FBL, 0xCEB42022L, 0xCA753D95L,
88 0xF23A8028L, 0xF6FB9D9FL, 0xFBB8BB46L, 0xFF79A6F1L,
89 0xE13EF6F4L, 0xE5FFEB43L, 0xE8BCCD9AL, 0xEC7DD02DL,
90 0x34867077L, 0x30476DC0L, 0x3D044B19L, 0x39C556AEL,
91 0x278206ABL, 0x23431B1CL, 0x2E003DC5L, 0x2AC12072L,
92 0x128E9DCFL, 0x164F8078L, 0x1B0CA6A1L, 0x1FCDBB16L,
93 0x018AEB13L, 0x054BF6A4L, 0x0808D07DL, 0x0CC9CDCAL,
94 0x7897AB07L, 0x7C56B6B0L, 0x71159069L, 0x75D48DDEL,
95 0x6B93DDDBL, 0x6F52C06CL, 0x6211E6B5L, 0x66D0FB02L,
96 0x5E9F46BFL, 0x5A5E5B08L, 0x571D7DD1L, 0x53DC6066L,
97 0x4D9B3063L, 0x495A2DD4L, 0x44190B0DL, 0x40D816BAL,
98 0xACA5C697L, 0xA864DB20L, 0xA527FDF9L, 0xA1E6E04EL,
99 0xBFA1B04BL, 0xBB60ADFCL, 0xB6238B25L, 0xB2E29692L,
100 0x8AAD2B2FL, 0x8E6C3698L, 0x832F1041L, 0x87EE0DF6L,
101 0x99A95DF3L, 0x9D684044L, 0x902B669DL, 0x94EA7B2AL,
102 0xE0B41DE7L, 0xE4750050L, 0xE9362689L, 0xEDF73B3EL,
103 0xF3B06B3BL, 0xF771768CL, 0xFA325055L, 0xFEF34DE2L,
104 0xC6BCF05FL, 0xC27DEDE8L, 0xCF3ECB31L, 0xCBFFD686L,
105 0xD5B88683L, 0xD1799B34L, 0xDC3ABDEDL, 0xD8FBA05AL,
106 0x690CE0EEL, 0x6DCDFD59L, 0x608EDB80L, 0x644FC637L,
107 0x7A089632L, 0x7EC98B85L, 0x738AAD5CL, 0x774BB0EBL,
108 0x4F040D56L, 0x4BC510E1L, 0x46863638L, 0x42472B8FL,
109 0x5C007B8AL, 0x58C1663DL, 0x558240E4L, 0x51435D53L,
110 0x251D3B9EL, 0x21DC2629L, 0x2C9F00F0L, 0x285E1D47L,
111 0x36194D42L, 0x32D850F5L, 0x3F9B762CL, 0x3B5A6B9BL,
112 0x0315D626L, 0x07D4CB91L, 0x0A97ED48L, 0x0E56F0FFL,
113 0x1011A0FAL, 0x14D0BD4DL, 0x19939B94L, 0x1D528623L,
114 0xF12F560EL, 0xF5EE4BB9L, 0xF8AD6D60L, 0xFC6C70D7L,
115 0xE22B20D2L, 0xE6EA3D65L, 0xEBA91BBCL, 0xEF68060BL,
116 0xD727BBB6L, 0xD3E6A601L, 0xDEA580D8L, 0xDA649D6FL,
117 0xC423CD6AL, 0xC0E2D0DDL, 0xCDA1F604L, 0xC960EBB3L,
118 0xBD3E8D7EL, 0xB9FF90C9L, 0xB4BCB610L, 0xB07DABA7L,
119 0xAE3AFBA2L, 0xAAFBE615L, 0xA7B8C0CCL, 0xA379DD7BL,
120 0x9B3660C6L, 0x9FF77D71L, 0x92B45BA8L, 0x9675461FL,
121 0x8832161AL, 0x8CF30BADL, 0x81B02D74L, 0x857130C3L,
122 0x5D8A9099L, 0x594B8D2EL, 0x5408ABF7L, 0x50C9B640L,
123 0x4E8EE645L, 0x4A4FFBF2L, 0x470CDD2BL, 0x43CDC09CL,
124 0x7B827D21L, 0x7F436096L, 0x7200464FL, 0x76C15BF8L,
125 0x68860BFDL, 0x6C47164AL, 0x61043093L, 0x65C52D24L,
126 0x119B4BE9L, 0x155A565EL, 0x18197087L, 0x1CD86D30L,
127 0x029F3D35L, 0x065E2082L, 0x0B1D065BL, 0x0FDC1BECL,
128 0x3793A651L, 0x3352BBE6L, 0x3E119D3FL, 0x3AD08088L,
129 0x2497D08DL, 0x2056CD3AL, 0x2D15EBE3L, 0x29D4F654L,
130 0xC5A92679L, 0xC1683BCEL, 0xCC2B1D17L, 0xC8EA00A0L,
131 0xD6AD50A5L, 0xD26C4D12L, 0xDF2F6BCBL, 0xDBEE767CL,
132 0xE3A1CBC1L, 0xE760D676L, 0xEA23F0AFL, 0xEEE2ED18L,
133 0xF0A5BD1DL, 0xF464A0AAL, 0xF9278673L, 0xFDE69BC4L,
134 0x89B8FD09L, 0x8D79E0BEL, 0x803AC667L, 0x84FBDBD0L,
135 0x9ABC8BD5L, 0x9E7D9662L, 0x933EB0BBL, 0x97FFAD0CL,
136 0xAFB010B1L, 0xAB710D06L, 0xA6322BDFL, 0xA2F33668L,
137 0xBCB4666DL, 0xB8757BDAL, 0xB5365D03L, 0xB1F740B4L
138};
139
140/*****************************************************************/
141/* End of CRC Lookup Table */
142/*****************************************************************/
143
144/* Calculate CRC-32 Checksum for NAACCR Record,
145 skipping area of record containing checksum field.
146
147 Uses non-reflected table driven method documented by Ross Williams.
148
149 PARAMETERS:
150 unsigned char *p Record Buffer
151 unsigned long reclen Record Length
152
153 RETURNS:
154 checksum value
155
156 Author:
157 Eric Durbin 1998-10-14
158 Simplified by Andrew Hanushevsky 2007-07-20
159
160 Status:
161 Public Domain
162
163 Changes:
164 Compute CRC for complete buffer
165 Use unsigned int instead of long to insure 32 bit values.
166 Include length bits at the end to correspond to the Posix 1003.2 spec.
167 Make this a C++ class.
168*/
169void XrdCksCalccrc32::Update(const char *p, int reclen)
170{
171
172// Process each byte
173//
174 TotLen += reclen;
175 while(reclen-- > 0)
176 C32Result = (C32Result<<8)
177 ^ crctable[(unsigned char)((C32Result>>24)^*p++)];
178}
void Update(const char *Buff, int BLen)