CRC32.cc

Go to the documentation of this file.
00001 /*
00002  *    Copyright 2004-2006 Intel Corporation
00003  * 
00004  *    Licensed under the Apache License, Version 2.0 (the "License");
00005  *    you may not use this file except in compliance with the License.
00006  *    You may obtain a copy of the License at
00007  * 
00008  *        http://www.apache.org/licenses/LICENSE-2.0
00009  * 
00010  *    Unless required by applicable law or agreed to in writing, software
00011  *    distributed under the License is distributed on an "AS IS" BASIS,
00012  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  *    See the License for the specific language governing permissions and
00014  *    limitations under the License.
00015  */
00016 
00017 
00018 
00019 #include "CRC32.h"
00020 
00021 /*****************************************************************/
00022 /*                                                               */
00023 /* CRC LOOKUP TABLE                                              */
00024 /* ================                                              */
00025 /* The following CRC lookup table was generated automagically    */
00026 /* by the Rocksoft^tm Model CRC Algorithm Table Generation       */
00027 /* Program V1.0 using the following model parameters:            */
00028 /*                                                               */
00029 /*    Width   : 4 bytes.                                         */
00030 /*    Poly    : 0x04C11DB7L                                      */
00031 /*    Reverse : TRUE.                                            */
00032 /*                                                               */
00033 /* For more information on the Rocksoft^tm Model CRC Algorithm,  */
00034 /* see the document titled "A Painless Guide to CRC Error        */
00035 /* Detection Algorithms" by Ross Williams                        */
00036 /* (ross@guest.adelaide.edu.au.). This document is likely to be  */
00037 /* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft".        */
00038 /*                                                               */
00039 /*****************************************************************/
00040 namespace oasys {
00041 
00042 static u_int32_t CRCINIT       = 0xFFFFFFFF;
00043 static u_int32_t CRCXOROT      = 0xFFFFFFFF;
00044 static u_int32_t CRCTABLE[256] =
00045 {
00046  0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
00047  0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
00048  0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
00049  0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
00050  0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
00051  0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
00052  0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
00053  0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
00054  0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
00055  0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
00056  0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
00057  0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
00058  0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
00059  0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
00060  0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
00061  0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
00062  0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
00063  0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
00064  0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
00065  0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
00066  0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
00067  0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
00068  0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
00069  0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
00070  0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
00071  0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
00072  0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
00073  0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
00074  0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
00075  0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
00076  0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
00077  0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
00078  0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
00079  0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
00080  0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
00081  0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
00082  0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
00083  0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
00084  0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
00085  0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
00086  0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
00087  0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
00088  0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
00089  0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
00090  0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
00091  0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
00092  0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
00093  0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
00094  0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
00095  0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
00096  0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
00097  0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
00098  0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
00099  0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
00100  0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
00101  0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
00102  0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
00103  0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
00104  0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
00105  0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
00106  0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
00107  0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
00108  0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
00109  0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
00110 };
00111 
00112 CRC32::CRC32()
00113 {
00114     reset();
00115 }
00116 
00117 void
00118 CRC32::reset()
00119 {
00120     crc_ = CRCINIT;
00121 }
00122 
00123 void
00124 CRC32::update(
00125     const u_char* buf, 
00126     size_t        length
00127     )
00128 {
00129     /* process each byte prior to checksum field */
00130     for(size_t i = 0; i<length; i++, buf++) 
00131     {
00132         crc_ = CRCTABLE[(crc_ ^ *buf) & 0xFF] ^ (crc_ >> 8);
00133     }
00134 }
00135 
00136 CRC32::CRC_t
00137 CRC32::value()
00138 {
00139     return crc_ ^ CRCXOROT;
00140 }
00141 
00142 CRC32::CRC_t
00143 CRC32::from_bytes(u_char* buf)
00144 {
00145     CRC_t crc_val;
00146 
00147     crc_val = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
00148     return crc_val; 
00149 }
00150 
00151 }; // namespace oasys

Generated on Thu Jun 7 12:54:26 2007 for DTN Reference Implementation by  doxygen 1.5.1