Interesting, the checksum looks like a standard LFSR but uses addition instead of XOR.
1) Seed checkum with initial_value
2) Add a data uint sized to the checksum
3) Shift up by 1 bit while feeding back the MSB to the LSB.
4) GOTO 2 until you have consume all the data.
Not sure why you would process with usual addition instead of GF2 addition.