polymod function
Implementation
int polymod(List<int> data) {
const GENERATOR1 = [0x98, 0x79, 0xf3, 0xae, 0x1e];
const GENERATOR2 = [
0xf2bc8e61,
0xb76d99e2,
0x3e5fb3c4,
0x2eabe2a8,
0x4f43e470
];
int c0 = 0;
int c1 = 1;
int C = 0;
for (int j = 0; j < data.length; j++) {
C = c0 >> 3;
c0 &= 0x07;
c0 <<= 5;
c0 |= c1 >> 27;
c1 &= 0x07ffffff;
c1 <<= 5;
c1 ^= data[j];
for (int i = 0; i < GENERATOR1.length; ++i) {
if ((C & (1 << i)) != 0) {
c0 ^= GENERATOR1[i];
c1 ^= GENERATOR2[i];
}
}
}
c1 ^= 1;
if (c1 < 0) {
c1 ^= 1 << 31;
c1 += (1 << 30) * 2;
}
return c0 * (1 << 30) * 4 + c1;
}