1
2
3
4
5
6
7
8
9
10 POLY64REVh = 0xd8000000L
11 CRCTableh = [0] * 256
12 CRCTablel = [0] * 256
13 isInitialized = False
14
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
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