Skip to content

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:

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:

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:

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.

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.