// 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) | |
{ | |
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); | |
} | |
} |