01: // SevenZip/CRC.java
02:
03: package SevenZip;
04:
05: public class CRC {
06: static public int[] Table = new int[256];
07:
08: static {
09: for (int i = 0; i < 256; i++) {
10: int r = i;
11: for (int j = 0; j < 8; j++)
12: if ((r & 1) != 0)
13: r = (r >>> 1) ^ 0xEDB88320;
14: else
15: r >>>= 1;
16: Table[i] = r;
17: }
18: }
19:
20: int _value = -1;
21:
22: public void Init() {
23: _value = -1;
24: }
25:
26: public void Update(byte[] data, int offset, int size) {
27: for (int i = 0; i < size; i++)
28: _value = Table[(_value ^ data[offset + i]) & 0xFF]
29: ^ (_value >>> 8);
30: }
31:
32: public void Update(byte[] data) {
33: int size = data.length;
34: for (int i = 0; i < size; i++)
35: _value = Table[(_value ^ data[i]) & 0xFF] ^ (_value >>> 8);
36: }
37:
38: public void UpdateByte(int b) {
39: _value = Table[(_value ^ b) & 0xFF] ^ (_value >>> 8);
40: }
41:
42: public int GetDigest() {
43: return _value ^ (-1);
44: }
45: }
|