33 lines
709 B
C#
33 lines
709 B
C#
namespace Crysome.Common.Network.FileTransfer;
|
|||
|
|
|
||
|
|
internal static class Crc32
|
||
|
|
{
|
||
|
|
private static readonly uint[] _table = Build();
|
||
|
|
|
||
|
|
private static uint[] Build()
|
||
|
|
{
|
||
|
|
uint[] array = new uint[256];
|
||
|
|
for (uint num = 0u; num < 256; num++)
|
||
|
|
{
|
||
|
|
uint num2 = num;
|
||
|
|
for (int i = 0; i < 8; i++)
|
||
|
|
{
|
||
|
|
num2 = (((num2 & 1) != 0) ? (0xEDB88320u ^ (num2 >> 1)) : (num2 >> 1));
|
||
|
|
}
|
||
|
|
array[num] = num2;
|
||
|
|
}
|
||
|
|
return array;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal static uint Compute(byte[] data, int offset, int len)
|
||
|
|
{
|
||
|
|
uint num = uint.MaxValue;
|
||
|
|
int num2 = offset + len;
|
||
|
|
for (int i = offset; i < num2; i++)
|
||
|
|
{
|
||
|
|
num = (num >> 8) ^ _table[(num ^ data[i]) & 0xFF];
|
||
|
|
}
|
||
|
|
return num ^ 0xFFFFFFFFu;
|
||
|
|
}
|
||
|
|
}
|