00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include "CRC32.h"
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 namespace oasys {
00062
00063 static u_int32_t CRCINIT = 0xFFFFFFFF;
00064 static u_int32_t CRCXOROT = 0xFFFFFFFF;
00065 static u_int32_t CRCTABLE[256] =
00066 {
00067 0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
00068 0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
00069 0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
00070 0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
00071 0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
00072 0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
00073 0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
00074 0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
00075 0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
00076 0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
00077 0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
00078 0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
00079 0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
00080 0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
00081 0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
00082 0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
00083 0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
00084 0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
00085 0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
00086 0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
00087 0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
00088 0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
00089 0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
00090 0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
00091 0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
00092 0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
00093 0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
00094 0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
00095 0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
00096 0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
00097 0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
00098 0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
00099 0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
00100 0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
00101 0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
00102 0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
00103 0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
00104 0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
00105 0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
00106 0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
00107 0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
00108 0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
00109 0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
00110 0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
00111 0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
00112 0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
00113 0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
00114 0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
00115 0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
00116 0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
00117 0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
00118 0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
00119 0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
00120 0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
00121 0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
00122 0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
00123 0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
00124 0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
00125 0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
00126 0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
00127 0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
00128 0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
00129 0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
00130 0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
00131 };
00132
00133 CRC32::CRC32()
00134 {
00135 reset();
00136 }
00137
00138 void
00139 CRC32::reset()
00140 {
00141 crc_ = CRCINIT;
00142 }
00143
00144 void
00145 CRC32::update(
00146 const u_char* buf,
00147 size_t length
00148 )
00149 {
00150
00151 for(size_t i = 0; i<length; i++, buf++)
00152 {
00153 crc_ = CRCTABLE[(crc_ ^ *buf) & 0xFF] ^ (crc_ >> 8);
00154 }
00155 }
00156
00157 CRC32::CRC_t
00158 CRC32::value()
00159 {
00160 return crc_ ^ CRCXOROT;
00161 }
00162
00163 CRC32::CRC_t
00164 CRC32::from_bytes(u_char* buf)
00165 {
00166 CRC_t crc_val;
00167
00168 crc_val = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
00169 return crc_val;
00170 }
00171
00172 };