Package obitools :: Package utils :: Module crc64
[hide private]
[frames] | no frames]

Source Code for Module obitools.utils.crc64

 1  # 
 2  # Code obtained from :  
 3  #   http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/259177/index_txt 
 4  # 
 5   
 6  # Initialisation 
 7  # 32 first bits of generator polynomial for CRC64 
 8  # the 32 lower bits are assumed to be zero 
 9   
10  POLY64REVh = 0xd8000000L 
11  CRCTableh = [0] * 256 
12  CRCTablel = [0] * 256 
13  isInitialized = False 
14   
15 -def CRC64(aString):
16 global isInitialized 17 crcl = 0 18 crch = 0 19 if (isInitialized is not True): 20 isInitialized = True 21 for i in xrange(256): 22 partl = i 23 parth = 0L 24 for j in xrange(8): 25 rflag = partl & 1L 26 partl >>= 1L 27 if (parth & 1): 28 partl |= (1L << 31L) 29 parth >>= 1L 30 if rflag: 31 parth ^= POLY64REVh 32 CRCTableh[i] = parth; 33 CRCTablel[i] = partl; 34 35 for item in aString: 36 shr = 0L 37 shr = (crch & 0xFF) << 24 38 temp1h = crch >> 8L 39 temp1l = (crcl >> 8L) | shr 40 tableindex = (crcl ^ ord(item)) & 0xFF 41 42 crch = temp1h ^ CRCTableh[tableindex] 43 crcl = temp1l ^ CRCTablel[tableindex] 44 return (crch, crcl)
45
46 -def CRC64digest(aString):
47 return "%08X%08X" % (CRC64(aString))
48 49 if __name__ == '__main__': 50 assert CRC64("IHATEMATH") == (3822890454, 2600578513) 51 assert CRC64digest("IHATEMATH") == "E3DCADD69B01ADD1" 52 print 'CRC64: dumb test successful' 53