in sdk/src/utils/Crc64.cc [143:170]
static uint64_t crc64_big(uint64_t crc, void *buf, size_t len)
{
unsigned char *next = (unsigned char *)buf;
crc = ~rev8(crc);
while (len && ((uintptr_t)next & 7) != 0) {
crc = crc64_table[0][(crc >> 56) ^ *next++] ^ (crc << 8);
len--;
}
while (len >= 8) {
crc ^= *(uint64_t *)next;
crc = crc64_table[0][crc & 0xff] ^
crc64_table[1][(crc >> 8) & 0xff] ^
crc64_table[2][(crc >> 16) & 0xff] ^
crc64_table[3][(crc >> 24) & 0xff] ^
crc64_table[4][(crc >> 32) & 0xff] ^
crc64_table[5][(crc >> 40) & 0xff] ^
crc64_table[6][(crc >> 48) & 0xff] ^
crc64_table[7][crc >> 56];
next += 8;
len -= 8;
}
while (len) {
crc = crc64_table[0][(crc >> 56) ^ *next++] ^ (crc << 8);
len--;
}
return ~rev8(crc);
}