in oss2/crc64_combine.py [0:0]
def _combine64(poly, initCrc, rev, xorOut, crc1, crc2, len2):
if len2 == 0:
return crc1
even = [0] * GF2_DIM
odd = [0] * GF2_DIM
crc1 ^= initCrc ^ xorOut
if (rev):
# put operator for one zero bit in odd
odd[0] = poly # CRC-64 polynomial
row = 1
for n in xrange(1, GF2_DIM):
odd[n] = row
row <<= 1
else:
row = 2
for n in xrange(0, GF2_DIM - 1):
odd[n] = row
row <<= 1
odd[GF2_DIM - 1] = poly
gf2_matrix_square(even, odd)
gf2_matrix_square(odd, even)
while True:
gf2_matrix_square(even, odd)
if len2 & long(1):
crc1 = gf2_matrix_times(even, crc1)
len2 >>= 1
if len2 == 0:
break
gf2_matrix_square(odd, even)
if len2 & long(1):
crc1 = gf2_matrix_times(odd, crc1)
len2 >>= 1
if len2 == 0:
break
crc1 ^= crc2
return crc1