-
- x = reflect(i, chunk) << (bits - chunk);
- for (j = 0; j < chunk; j++)
- x = ((x << 1) ^ (x & (1 << (bits - 1)) ? poly : 0)) & mask;
- x = reflect(x, bits);
+ unsigned ni, nn;
+
+ x = reflect(i, chunk);
+ y = 0;
+ nn = chunk;
+ while (nn) {
+ ni = bits;
+ if (ni > nn)
+ ni = nn;
+ z = (x >> (nn - ni)) & (0xffffffff >> (32 - ni));
+ y ^= z << (bits - ni);
+ for (j = 0; j < ni; j++)
+ y = ((y << 1) ^ (y & (1 << (bits - 1)) ? poly : 0)) & mask;
+ nn -= ni;
+ }
+ x = reflect(y, bits);