Rahul Sharma (Editor)

BSD checksum

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit

The BSD checksum algorithm is a commonly used, legacy checksum algorithm. It has been implemented in BSD and is also available through the GNU sum command line utility.

Contents

Computation of the BSD checksum

Below is the relevant part of the GNU sum source code (GPL licensed). It computes a 16-bit checksum by adding up all bytes (8-bit words) of the input data stream. In order to avoid many of the weaknesses of simply adding the data, the checksum accumulator is circular rotated to the right by one bit at each step before the new char is added.

Below is a sample java code that calculates an 8-bit checksum. It adds each byte from the input byte array after a circular rotation of the checksum.

Description of the algorithm

As mentioned above, this algorithm computes a checksum by segmenting the data and adding it to an accumulator that is circular right shifted between each summation. To keep the accumulator within return value bounds, bit-masking with 1's is done.

Example: 4-bit checksum using 4-bit sized segments (big-endian)

Input: 101110001110

Loop 1:

checksum: 0000 seg: 1011

a) Circular shift checksum:

0000 -> 0000

b) Add seg and bitmask:

0000 + 1011 = 1011 -> 1011 & 1111 = 1011

Loop 2:

checksum: 1011 seg: 1000

a) Circular shift checksum:

1011 -> 1101

b) Add seg and bitmask:

1101 + 1000 = 10101 -> 10101 & 1111 = 0101

Loop 3:

checksum: 0101 seg: 1110

a) Circular shift checksum:

0101 -> 1010

b) Add seg and bitmask:

1010 + 1110 = 11000 -> 11000 & 1111 = 1000

Checksum: 1000

References

BSD checksum Wikipedia