def fletcher_checksum(data, offset):
 c0 = 0
 c1 = 0
 pos = 0
 length = len(data)
 data = bytearray(data)
 data[offset:(offset + 2)] = ([0] * 2)
 while (pos < length):
  tlen = min((length - pos), _MODX)
  for d in data[pos:(pos + tlen)]:
   c0 += d
   c1 += c0
  c0 %= 255
  c1 %= 255
  pos += tlen
 x = (((((length - offset) - 1) * c0) - c1) % 255)
 if (x <= 0):
  x += 255
 y = ((510 - c0) - x)
 if (y > 255):
  y -= 255
 data[offset] = x
 data[(offset + 1)] = y
 return ((x << 8) | (y & 255))

def fletcher_checksum ( data , offset ) : c0 = 0 c1 = 0 pos = 0 length = len ( data ) data = bytearray ( data ) data [ offset : ( offset + 2 ) ] = ( [ 0 ] * 2 ) while ( pos < length ) : tlen = min ( ( length - pos ) , _MODX ) for d in data [ pos : ( pos + tlen ) ] : c0 += d c1 += c0 c0 %= 255 c1 %= 255 pos += tlen x = ( ( ( ( ( length - offset ) - 1 ) * c0 ) - c1 ) % 255 ) if ( x <= 0 ) : x += 255 y = ( ( 510 - c0 ) - x ) if ( y > 255 ) : y -= 255 data [ offset ] = x data [ ( offset + 1 ) ] = y return ( ( x << 8 ) | ( y & 255 ) )
fletcher checksum -- refer to rfc1008 calling with offset == _fletcher_checksum_validate will validate the checksum without modifying the buffer; a valid checksum returns 0 .