Open main menu

Changes

6 bytes removed ,  22:10, 26 April 2020
The algorithm is as follows, provided that `data` is the list of the 20 first bytes, in the same order they arrived in.
<br /> def checksum(data): 
   “”“Compute and return the checksum as an int.”“”
 
   # group the data by word, little-endian
 
   data_list = []
 
   for t in range(10):
 
       data_list.append( data2*t + (data2*t+1<<8) )
 
   # compute the checksum on 32 bits
 
   chk32 = 0
 
   for d in data_list:
 
       chk32 = (chk32 << 1) + d
 
   # return a value wrapped around on 15bits, and truncated to still fit into 15 bits
 
   checksum = (chk32 & 0x7FFF) + ( chk32 >> 15 ) # wrap around to fit into 15 bits
 
   checksum = checksum & 0x7FFF # truncate to 15 bits
 
   return int( checksum )
<br />