A CRC is the remainder of a division done in Z/2Z[X]. The data is representes as msb of first byte is the coefficient of the highest order x term, x^l for l bits, and the lsb of the last byte is the constant. Hence CRC(x^y)=CRC(x)^CRC(y). Cksum does a crc of a file. However the linearity will not be apparent using cksum. By convention, 0xffffffff is prepended and the length is appended to the file. This is a non-linear modification to the file. crc32.c is from FreeBSD cksum command crc-32.c is from airsnort. cksum ----- cksum of 0 bytes is ffff ffff cksum of 8 bytes of aa is accd 7ed2 cksum of 8 bytes of 55 is 610a aad6 cksum of 8 bytes of ff is 1430 c643 by modifing csc-32.c we can get to the heart of the algorithm alone and demonstrate the linearity. [burt@sherman crc]$ ./crc-m 0x21 0x8db061f6 0xffffffde 0xc9d66183 0xff 0x44660075 exor i1, i2, i3 = 0x00000000