in src/DotPulsar/Internal/Crc32C.cs [43:91]
public static uint Calculate(ReadOnlySequence<byte> sequence)
{
var block = new uint[16];
var checksum = uint.MaxValue;
var remaningBytes = sequence.Length;
var readingBlock = remaningBytes >= 16;
var offset = 15;
foreach (var memory in sequence)
{
var span = memory.Span;
for (var i = 0; i < span.Length; ++i)
{
var currentByte = span[i];
if (!readingBlock)
{
checksum = _lookup[(byte) (checksum ^ currentByte)] ^ (checksum >> 8);
continue;
}
var offSetBase = offset * 256;
if (offset > 11)
block[offset] = _lookup[offSetBase + ((byte) (checksum >> (8 * (15 - offset))) ^ currentByte)];
else
block[offset] = _lookup[offSetBase + currentByte];
--remaningBytes;
if (offset == 0)
{
offset = 15;
readingBlock = remaningBytes >= 16;
checksum = 0;
for (var j = 0; j < block.Length; ++j)
checksum ^= block[j];
}
else
{
--offset;
}
}
}
return checksum ^ uint.MaxValue;
}