Mes documents/Visual Studio 2005/Projects/TES4ModTranslator/TES4ModTranslator/Checksums/CRC32.cs

Go to the documentation of this file.
00001 // CRC32.cs - Computes CRC32 data checksum of a data stream
00002 // Copyright (C) 2001 Mike Krueger
00003 //
00004 // This file was translated from java, it was part of the GNU Classpath
00005 // Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
00006 //
00007 // This program is free software; you can redistribute it and/or
00008 // modify it under the terms of the GNU General Public License
00009 // as published by the Free Software Foundation; either version 2
00010 // of the License, or (at your option) any later version.
00011 //
00012 // This program is distributed in the hope that it will be useful,
00013 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 // GNU General Public License for more details.
00016 //
00017 // You should have received a copy of the GNU General Public License
00018 // along with this program; if not, write to the Free Software
00019 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00020 //
00021 // Linking this library statically or dynamically with other modules is
00022 // making a combined work based on this library.  Thus, the terms and
00023 // conditions of the GNU General Public License cover the whole
00024 // combination.
00025 // 
00026 // As a special exception, the copyright holders of this library give you
00027 // permission to link this library with independent modules to produce an
00028 // executable, regardless of the license terms of these independent
00029 // modules, and to copy and distribute the resulting executable under
00030 // terms of your choice, provided that you also meet, for each linked
00031 // independent module, the terms and conditions of the license of that
00032 // module.  An independent module is a module which is not derived from
00033 // or based on this library.  If you modify this library, you may extend
00034 // this exception to your version of the library, but you are not
00035 // obligated to do so.  If you do not wish to do so, delete this
00036 // exception statement from your version.
00037 
00038 using System;
00039 
00040 namespace ICSharpCode.SharpZipLib.Checksums 
00041 {
00042         
00067         public sealed class Crc32 : IChecksum
00068         {
00069                 readonly static uint CrcSeed = 0xFFFFFFFF;
00070                 
00071                 readonly static uint[] CrcTable = new uint[] {
00072                         0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419,
00073                         0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4,
00074                         0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07,
00075                         0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
00076                         0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856,
00077                         0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,
00078                         0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,
00079                         0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
00080                         0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,
00081                         0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A,
00082                         0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599,
00083                         0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
00084                         0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190,
00085                         0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,
00086                         0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E,
00087                         0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
00088                         0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED,
00089                         0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
00090                         0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3,
00091                         0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
00092                         0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,
00093                         0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5,
00094                         0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010,
00095                         0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
00096                         0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17,
00097                         0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6,
00098                         0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,
00099                         0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
00100                         0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344,
00101                         0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,
00102                         0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A,
00103                         0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
00104                         0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1,
00105                         0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C,
00106                         0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,
00107                         0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
00108                         0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE,
00109                         0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31,
00110                         0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C,
00111                         0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
00112                         0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B,
00113                         0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
00114                         0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1,
00115                         0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
00116                         0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,
00117                         0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7,
00118                         0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66,
00119                         0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
00120                         0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,
00121                         0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8,
00122                         0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B,
00123                         0x2D02EF8D
00124                 };
00125                 
00126                 internal static uint ComputeCrc32(uint oldCrc, byte bval)
00127                 {
00128                         return (uint)(Crc32.CrcTable[(oldCrc ^ bval) & 0xFF] ^ (oldCrc >> 8));
00129                 }
00130                 
00134                 uint crc = 0;
00135                 
00139                 public long Value {
00140                         get {
00141                                 return (long)crc;
00142                         }
00143                         set {
00144                                 crc = (uint)value;
00145                         }
00146                 }
00147                 
00151                 public void Reset() 
00152                 { 
00153                         crc = 0; 
00154                 }
00155                 
00162                 public void Update(int bval)
00163                 {
00164                         crc ^= CrcSeed;
00165                         crc  = CrcTable[(crc ^ bval) & 0xFF] ^ (crc >> 8);
00166                         crc ^= CrcSeed;
00167                 }
00168                 
00175                 public void Update(byte[] buffer)
00176                 {
00177                         Update(buffer, 0, buffer.Length);
00178                 }
00179                 
00192                 public void Update(byte[] buf, int off, int len)
00193                 {
00194                         if (buf == null) {
00195                                 throw new ArgumentNullException("buf");
00196                         }
00197                         
00198                         if (off < 0 || len < 0 || off + len > buf.Length) {
00199                                 throw new ArgumentOutOfRangeException();
00200                         }
00201                         
00202                         crc ^= CrcSeed;
00203                         
00204                         while (--len >= 0) {
00205                                 crc = CrcTable[(crc ^ buf[off++]) & 0xFF] ^ (crc >> 8);
00206                         }
00207                         
00208                         crc ^= CrcSeed;
00209                 }
00210         }
00211 }

Generated on Fri Jun 23 21:50:04 2006 for OblivionModTranslator by  doxygen 1.4.6-NO