# Overview The program `checksum.py` is very simple: it can be used to calculate checksums of different flavors (addition, xor-based, or fletcher) on either random values (as generated by the program) or on values you pass in as a series of bytes. When run in the default mode: ```sh prompt> ./checksum.py OPTIONS seed 0 OPTIONS data_size 4 OPTIONS data Decimal: 216 194 107 66 Hex: 0xd8 0xc2 0x6b 0x42 Bin: 0b11011000 0b11000010 0b01101011 0b01000010 Add: ? Xor: ? Fletcher: ? prompt> ``` In this example, the program produces a random set of four numbers (the "data") of 216 194 107 66 (decimal). The numbers are also shown in hex and binary. The program then asks you to compute the additive, xor-based, and fletcher checksums. The addition is just the result of adding each of the bytes together, with the result modulo 256 (it's just a single byte checksum). The xor-based checksum is the result of xor'ing each byte together (it is also a single byte). Finally, fletcher is the result of computing the two parts of the fletcher checksum (as described in the chapter), which is two bytes in total. You can change the seed to get a different problem: ```sh prompt> ./checksum.py -s 1 OPTIONS seed 1 OPTIONS data_size 4 OPTIONS data Decimal: 34 216 195 65 Hex: 0x22 0xd8 0xc3 0x41 Bin: 0b00100010 0b11011000 0b11000011 0b01000001 Add: ? Xor: ? Fletcher: ? prompt> ``` You can specify a different length for the random data: ```sh prompt> ./checksum.py -D 2 ... You can also specify your own data string: prompt> ./checksum.py -D 1,2,3,4 OPTIONS seed 0 OPTIONS data_size 4 OPTIONS data 1,2,3,4 Decimal: 1 2 3 4 Hex: 0x01 0x02 0x03 0x04 Bin: 0b00000001 0b00000010 0b00000011 0b00000100 Add: ? Xor: ? Fletcher: ? prompt> ``` Finally, you can use `-c` to have the program compute the checksums for you. ```sh prompt> ./checksum.py -D 1,2,3,4 -c OPTIONS seed 0 OPTIONS data_size 4 OPTIONS data 1,2,3,4 Decimal: 1 2 3 4 Hex: 0x01 0x02 0x03 0x04 Bin: 0b00000001 0b00000010 0b00000011 0b00000100 Add: 10 (0b00001010) Xor: 4 (0b00000100) Fletcher(a,b): 10, 20 (0b00001010,0b00010100) prompt> ``` Thus ends the worst README in this collection of READMEs.