tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

CRC.cs (1160B)


      1 // Common/CRC.cs
      2 
      3 namespace SevenZip
      4 {
      5 class CRC
      6 {
      7 	public static readonly uint[] Table;
      8 
      9 	static CRC()
     10 	{
     11 		Table = new uint[256];
     12 		const uint kPoly = 0xEDB88320;
     13 		for (uint i = 0; i < 256; i++)
     14 		{
     15 			uint r = i;
     16 			for (int j = 0; j < 8; j++)
     17 				if ((r & 1) != 0)
     18 					r = (r >> 1) ^ kPoly;
     19 				else
     20 					r >>= 1;
     21 			Table[i] = r;
     22 		}
     23 	}
     24 
     25 	uint _value = 0xFFFFFFFF;
     26 
     27 	public void Init() { _value = 0xFFFFFFFF; }
     28 
     29 	public void UpdateByte(byte b)
     30 	{
     31 		_value = Table[(((byte)(_value)) ^ b)] ^ (_value >> 8);
     32 	}
     33 
     34 	public void Update(byte[] data, uint offset, uint size)
     35 	{
     36 		for (uint i = 0; i < size; i++)
     37 			_value = Table[(((byte)(_value)) ^ data[offset + i])] ^ (_value >> 8);
     38 	}
     39 
     40 	public uint GetDigest() { return _value ^ 0xFFFFFFFF; }
     41 
     42 	static uint CalculateDigest(byte[] data, uint offset, uint size)
     43 	{
     44 		CRC crc = new CRC();
     45 		// crc.Init();
     46 		crc.Update(data, offset, size);
     47 		return crc.GetDigest();
     48 	}
     49 
     50 	static bool VerifyDigest(uint digest, byte[] data, uint offset, uint size)
     51 	{
     52 		return (CalculateDigest(data, offset, size) == digest);
     53 	}
     54 }
     55 }