XrdOucCRC.cc

Go to the documentation of this file.
00001 /******************************************************************************/
00002 /*                                                                            */
00003 /*                        X r d O u c C R C 3 2 . c c                         */
00004 /*                                                                            */
00005 /*   Produced by Andrew Hanushevsky for Stanford University under contract    */
00006 /*              DE-AC02-76-SFO0515 with the Department of Energy              */
00007 /******************************************************************************/
00008   
00009 //         $Id: XrdOucCRC.cc 30949 2009-11-02 16:37:58Z ganis $
00010 
00011 const char *XrdOucCRC32CVSID = "$Id: XrdOucCRC.cc 30949 2009-11-02 16:37:58Z ganis $";
00012 
00013 /*
00014    C++ implementation of CRC-32 checksums.  Code is based
00015    upon and utilizes algorithm published by Ross Williams
00016    as initially implemented by Eric Durbin.
00017 
00018    This file contains:
00019       CRC lookup table
00020       function CalcCRC32 for calculating CRC-32 checksum
00021 
00022    Provided by:
00023       Eric Durbin
00024       Kentucky Cancer Registry
00025       University of Kentucky
00026       October 14, 1998
00027 
00028    Status:
00029       Public Domain
00030 */
00031 #include "XrdOucCRC.hh"
00032 
00033 /*****************************************************************/
00034 /*                                                               */
00035 /* CRC LOOKUP TABLE                                              */
00036 /* ================                                              */
00037 /* The following CRC lookup table was generated automagically    */
00038 /* by the Rocksoft^tm Model CRC Algorithm Table Generation       */
00039 /* Program V1.0 using the following model parameters:            */
00040 /*                                                               */
00041 /*    Width   : 4 bytes.                                         */
00042 /*    Poly    : 0x04C11DB7L                                      */
00043 /*    Reverse : TRUE.                                            */
00044 /*                                                               */
00045 /* For more information on the Rocksoft^tm Model CRC Algorithm,  */
00046 /* see the document titled "A Painless Guide to CRC Error        */
00047 /* Detection Algorithms" by Ross Williams                        */
00048 /* (ross@guest.adelaide.edu.au.). This document is likely to be  */
00049 /* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft".        */
00050 /*                                                               */
00051 /*****************************************************************/
00052 
00053 unsigned int XrdOucCRC::crctable[256] =
00054 {
00055  0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
00056  0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
00057  0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
00058  0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
00059  0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
00060  0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
00061  0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
00062  0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
00063  0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
00064  0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
00065  0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
00066  0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
00067  0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
00068  0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
00069  0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
00070  0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
00071  0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
00072  0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
00073  0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
00074  0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
00075  0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
00076  0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
00077  0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
00078  0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
00079  0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
00080  0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
00081  0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
00082  0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
00083  0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
00084  0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
00085  0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
00086  0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
00087  0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
00088  0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
00089  0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
00090  0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
00091  0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
00092  0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
00093  0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
00094  0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
00095  0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
00096  0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
00097  0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
00098  0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
00099  0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
00100  0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
00101  0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
00102  0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
00103  0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
00104  0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
00105  0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
00106  0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
00107  0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
00108  0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
00109  0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
00110  0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
00111  0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
00112  0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
00113  0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
00114  0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
00115  0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
00116  0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
00117  0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
00118  0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
00119 };
00120 
00121 /*****************************************************************/
00122 /*                   End of CRC Lookup Table                     */
00123 /*****************************************************************/
00124 
00125 /* Calculate CRC-32 Checksum for NAACCR Record,
00126    skipping area of record containing checksum field.
00127 
00128    Uses reflected table driven method documented by Ross Williams.
00129 
00130    PARAMETERS:
00131      unsigned char *p           Record Buffer
00132      unsigned long reclen       Record Length
00133 
00134    RETURNS:
00135      checksum value
00136 
00137    Author:
00138      Eric Durbin 1998-10-14
00139      Simplified by Andrew Hanushevsky 2007-07-20
00140 
00141    Status:
00142      Public Domain
00143 
00144    Changes:
00145      Compute CRC for complete buffer
00146      Use unsigned int instead of long to insure 32 bit values.
00147      Make this a C++ class.
00148 */
00149 unsigned int XrdOucCRC::CRC32(const unsigned char *p, int reclen)
00150 {
00151    const unsigned int CRC32_XINIT = 0xffffffff;
00152    const unsigned int CRC32_XOROT = 0xffffffff;
00153    unsigned int crc = CRC32_XINIT;
00154 
00155 // Process each byte
00156 //
00157    while(reclen-- > 0) crc = crctable[(crc ^ *p++) & 0xff] ^ (crc >> 8);
00158 
00159 // Return XOR out value
00160 //
00161    return crc ^ CRC32_XOROT;
00162 }

Generated on Tue Jul 5 14:46:48 2011 for ROOT_528-00b_version by  doxygen 1.5.1