namespace Monitor.Protocol;
/// CRC-32C(Castagnoli),RawChunk 的完整性校验。
public static class Crc32c
{
private static readonly uint[] s_table = BuildTable();
public static uint Compute(ReadOnlySpan data)
{
uint crc = uint.MaxValue;
foreach (byte b in data)
{
crc = s_table[(crc ^ b) & 0xFF] ^ (crc >> 8);
}
return ~crc;
}
private static uint[] BuildTable()
{
var table = new uint[256];
for (uint i = 0; i < 256; i++)
{
uint c = i;
for (int k = 0; k < 8; k++)
{
c = (c & 1) != 0 ? (c >> 1) ^ 0x82F63B78u : c >> 1;
}
table[i] = c;
}
return table;
}
}