OLD | NEW |
| (Empty) |
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 } | |
OLD | NEW |