using System; namespace Hjg.Pngcs.Zlib { // Token: 0x02000047 RID: 71 public class CRC32 { // Token: 0x060002A4 RID: 676 RVA: 0x0000A90A File Offset: 0x00008B0A public CRC32() : this(3988292384U, uint.MaxValue) { } // Token: 0x060002A5 RID: 677 RVA: 0x0000A918 File Offset: 0x00008B18 public CRC32(uint polynomial, uint seed) { this.table = CRC32.InitializeTable(polynomial); this.seed = seed; this.hash = seed; } // Token: 0x060002A6 RID: 678 RVA: 0x0000A93A File Offset: 0x00008B3A public void Update(byte[] buffer) { this.Update(buffer, 0, buffer.Length); } // Token: 0x060002A7 RID: 679 RVA: 0x0000A948 File Offset: 0x00008B48 public void Update(byte[] buffer, int start, int length) { int i = 0; int num = start; while (i < length) { this.hash = (this.hash >> 8) ^ this.table[(int)((UIntPtr)((uint)buffer[num] ^ (this.hash & 255U)))]; i++; num++; } } // Token: 0x060002A8 RID: 680 RVA: 0x0000A98E File Offset: 0x00008B8E public uint GetValue() { return ~this.hash; } // Token: 0x060002A9 RID: 681 RVA: 0x0000A997 File Offset: 0x00008B97 public void Reset() { this.hash = this.seed; } // Token: 0x060002AA RID: 682 RVA: 0x0000A9A8 File Offset: 0x00008BA8 private static uint[] InitializeTable(uint polynomial) { if (polynomial == 3988292384U && CRC32.defaultTable != null) { return CRC32.defaultTable; } uint[] array = new uint[256]; for (int i = 0; i < 256; i++) { uint num = (uint)i; for (int j = 0; j < 8; j++) { if ((num & 1U) == 1U) { num = (num >> 1) ^ polynomial; } else { num >>= 1; } } array[i] = num; } if (polynomial == 3988292384U) { CRC32.defaultTable = array; } return array; } // Token: 0x0400015D RID: 349 private const uint defaultPolynomial = 3988292384U; // Token: 0x0400015E RID: 350 private const uint defaultSeed = 4294967295U; // Token: 0x0400015F RID: 351 private static uint[] defaultTable; // Token: 0x04000160 RID: 352 private uint hash; // Token: 0x04000161 RID: 353 private uint seed; // Token: 0x04000162 RID: 354 private uint[] table; } }