namespace com.hitrust.util.Checksums { using System; public sealed class Adler32 : IChecksum { private static readonly uint BASE = 0xfff1; private uint checksum; public Adler32() { this.Reset(); } public void Reset() { this.checksum = 1; } public void Update(int bval) { uint num = this.checksum & 0xffff; uint num2 = this.checksum >> 0x10; num = (uint) ((num + (bval & 0xff)) % BASE); num2 = (num + num2) % BASE; this.checksum = (num2 << 0x10) + num; } public void Update(byte[] buffer) { this.Update(buffer, 0, buffer.Length); } public void Update(byte[] buf, int off, int len) { if (buf == null) { throw new ArgumentNullException("buf"); } if (((off < 0) || (len < 0)) || ((off + len) > buf.Length)) { throw new ArgumentOutOfRangeException(); } uint num = this.checksum & 0xffff; uint num2 = this.checksum >> 0x10; while (len > 0) { int num3 = 0xed8; if (num3 > len) { num3 = len; } len -= num3; while (--num3 >= 0) { num += (uint) (buf[off++] & 0xff); num2 += num; } num = num % BASE; num2 = num2 % BASE; } this.checksum = (num2 << 0x10) | num; } public long Value { get { return (long) this.checksum; } } } }