sum is a legacy utility available on some Unix and Unix-likeoperating systems. This utility outputs a 16-bit checksum of each argument file, as well as the number of blocks they take on disk.[1] Two different checksum algorithms are in use. POSIX abandoned sum in favor of cksum.
Overview
The sum program is generally only useful for historical interest. It is not part of POSIX. Two algorithms are typically available: a BSD checksum and a SYSV checksum. Both are weaker than the already weak 32-bit CRC used by cksum.[2]
The default algorithm on FreeBSD and GNU implementations is the BSD checksum. Switching between the two algorithms is done via command line options.[2][1]
The two commonly used algorithms are as follows.
The BSD sum, -r in GNU sum and -o1 in FreeBSD cksum:
Initialize checksum to 0
For each byte of the input stream
Perform 16-bit bitwise right rotation by 1 bit on the checksum
Add the byte to the checksum, and apply modulo 2 ^ 16 to the result, thereby keeping it within 16 bits