// SevenZip/CRC.java package SevenZip; public class CRC { static public int[] Table = new int[256]; static { for (int i = 0; i < 256; i++) { int r = i; for (int j = 0; j < 8; j++) { if ((r & 1) != 0) { r = r >>> 1 ^ 0xEDB88320; } else { r >>>= 1; } } Table[i] = r; } } int _value = -1; public void Init() { _value = -1; } public void Update(byte[] data, int offset, int size) { for (int i = 0; i < size; i++) { _value = Table[(_value ^ data[offset + i]) & 0xFF] ^ _value >>> 8; } } public void Update(byte[] data) { final int size = data.length; for (int i = 0; i < size; i++) { _value = Table[(_value ^ data[i]) & 0xFF] ^ _value >>> 8; } } public void UpdateByte(int b) { _value = Table[(_value ^ b) & 0xFF] ^ _value >>> 8; } public int GetDigest() { return _value ^ -1; } }