Home | History | Annotate | Download | only in SevenZip
      1 // SevenZip/CRC.java
      2 
      3 package SevenZip;
      4 
      5 public class CRC
      6 {
      7 	static public int[] Table = new int[256];
      8 
      9 	static
     10 	{
     11 		for (int i = 0; i < 256; i++)
     12 		{
     13 			int r = i;
     14 			for (int j = 0; j < 8; j++)
     15 				if ((r & 1) != 0)
     16 					r = (r >>> 1) ^ 0xEDB88320;
     17 				else
     18 					r >>>= 1;
     19 			Table[i] = r;
     20 		}
     21 	}
     22 
     23 	int _value = -1;
     24 
     25 	public void Init()
     26 	{
     27 		_value = -1;
     28 	}
     29 
     30 	public void Update(byte[] data, int offset, int size)
     31 	{
     32 		for (int i = 0; i < size; i++)
     33 			_value = Table[(_value ^ data[offset + i]) & 0xFF] ^ (_value >>> 8);
     34 	}
     35 
     36 	public void Update(byte[] data)
     37 	{
     38 		int size = data.length;
     39 		for (int i = 0; i < size; i++)
     40 			_value = Table[(_value ^ data[i]) & 0xFF] ^ (_value >>> 8);
     41 	}
     42 
     43 	public void UpdateByte(int b)
     44 	{
     45 		_value = Table[(_value ^ b) & 0xFF] ^ (_value >>> 8);
     46 	}
     47 
     48 	public int GetDigest()
     49 	{
     50 		return _value ^ (-1);
     51 	}
     52 }
     53