7 public static readonly uint[] Table;
11 Table = new uint[256];
12 const uint kPoly = 0xEDB88320;
13 for (uint i = 0; i < 256; i++)
16 for (int j = 0; j < 8; j++)
25 uint _value = 0xFFFFFFFF;
27 public void Init() { _value = 0xFFFFFFFF; }
29 public void UpdateByte(byte b)
31 _value = Table[(((byte)(_value)) ^ b)] ^ (_value >> 8);
34 public void Update(byte[] data, uint offset, uint size)
36 for (uint i = 0; i < size; i++)
37 _value = Table[(((byte)(_value)) ^ data[offset + i])] ^ (_value >> 8);
40 public uint GetDigest() { return _value ^ 0xFFFFFFFF; }
42 static uint CalculateDigest(byte[] data, uint offset, uint size)
46 crc.Update(data, offset, size);
47 return crc.GetDigest();
50 static bool VerifyDigest(uint digest, byte[] data, uint offset, uint size)
52 return (CalculateDigest(data, offset, size) == digest);