def test_xor_crcmod16_random(self): dataSize = 24 data1 = random.randint(1, 0xFFFFFF) data2 = random.randint(1, 0xFFFFFF) inputPoly = 0x10000 | random.randint(1, 0xFFFF) regInit = random.randint(1, 0xFFFF) xorOut = random.randint(1, 0xFFFF) crcFun = crcmod.mkCrcFun(inputPoly, rev=False, initCrc=regInit, xorOut=xorOut) crc1 = crcFun(intToASCII(data1, dataSize)) crc2 = crcFun(intToASCII(data2, dataSize)) xdata = data1 ^ data2 crcFunXor = crcmod.mkCrcFun(inputPoly, rev=False, initCrc=0x0, xorOut=0x0) xcrc = crcFunXor(intToASCII(xdata, dataSize)) xorcrc = crc1 ^ crc2 message = "poly:{:X} d1:{:X} c1:{:X} d2:{:X} c2:{:X} ri:{:X} xo:{:X} xor:{:X} {:X} != {:X}".format( inputPoly, data1, crc1, data2, crc2, regInit, xorOut, xdata, xcrc, xorcrc) self.assertEquals(xcrc, xorcrc, message)
def test_crcmod_32(self): data = 0x414243 dataSize = 24 inputPoly = 0x104c11db7 regInit = 0x0 xorOut = 0x00 crcSize = 32 # print "XXX {:X} {:X}".format( data, data2) # barray1 = bytearray.fromhex('{:x}'.format(data)) # barray2 = bytearray.fromhex('{:x}'.format(data2)) # crc32_func = crcmod.mkCrcFun(0x104c11db7, initCrc=regInit, xorOut=xorOut) crc32_func = crcmod.mkCrcFun(0x104c11db7, rev=False, initCrc=regInit, xorOut=xorOut) crcLib = crc32_func(intToASCII(data)) crcProc = ModCRC() crcProc.setRegisterInitValue(regInit) crcProc.setXorOutValue(xorOut) crc = crcProc.calculate2(data, dataSize, inputPoly, crcSize) # print "crc: {:X} {:X}".format( crcLib, crc ) self.assertEqual(crc, crcLib)
def test_findCommon_crc8c(self): dataList = [] crcFun = crcmod.predefined.mkCrcFun( "crc-8") ## init: 0x0, xor: 0x0, poly: 0x107 data = 0xABCD crc = crcFun(intToASCII(data)) dataList.append((data, crc)) data = data ^ 0x0040 crc = crcFun(intToASCII(data)) dataList.append((data, crc)) foundCRC = self.crcFinder.findCommon(dataList, 16, 8, 0) self.assertIn(CRCKey(0x107, 0x0, 0x0, 0, 16, rev=False), foundCRC)
def test_xor_8(self): crcFun = crcmod.predefined.mkCrcFun( "crc-8") ## poly=0x107 rev=False init:0x0 xor:0x0 data1 = 0x4B4D crc1 = crcFun(intToASCII(data1)) data2 = data1 ^ 0x0010 crc2 = crcFun(intToASCII(data2)) xdata = data1 ^ data2 xcrc = crcFun(intToASCII(xdata)) xorcrc = crc1 ^ crc2 # print "xor: d1:{:X} {:X} d2:{:X} {:X} xor:{:X} {:X} {:X}".format( data1, crc1, data2, crc2, xdata, xcrc, xorcrc ) self.assertEquals(xcrc, xorcrc)
def test_findPolysXOR_crcmod_8A(self): data = 0xF90AD50F data2 = 0xF90AD50D inputPoly = 0x10A regInit = 0x00 xorOut = 0x00 crcSize = 8 crc_func = crcmod.mkCrcFun(inputPoly, rev=False, initCrc=regInit, xorOut=xorOut) crc = crc_func( intToASCII(data) ) crc2 = crc_func( intToASCII(data2) ) # print "crc: {:X} {:X}".format( crc, crc2 ) polyList = self.crcFinder.findPolysXOR(data, crc, data2, crc2, 32, crcSize) # print "polys:", "[{}]".format( ", ".join("0x{:X}".format(x) for x in polyList) ) self.assertTrue( PolyKey(inputPoly, 0, 32, rev=False) in polyList )
def test_findPolysXOR_crcmod_8_random2(self): data = 0xF90AD50D769553D31102453553F data2 = 0xF90AD50D769553D313624535537 # inputPoly = 0x1B7 inputPoly = 0x100 | int(random.random() * 0xFF + 1) regInit = int(random.random() * 0xFF + 1) xorOut = int(random.random() * 0xFF + 1) crcSize = 8 crc_func = crcmod.mkCrcFun(inputPoly, rev=False, initCrc=regInit, xorOut=xorOut) crc = crc_func( intToASCII(data) ) crc2 = crc_func( intToASCII(data2) ) # print "crc: {:X} {:X}".format( crc, crc2 ) polyList = self.crcFinder.findPolysXOR(data, crc, data2, crc2, 108, crcSize) # print "polys:", "[{}]".format( ", ".join("0x{:X}".format(x) for x in polyList) ) self.assertTrue( PolyKey(inputPoly, 0, 108, rev=False) in polyList )
def test_findCommon_crc16_d32_subdata(self): dataList = [] crcFun = crcmod.predefined.mkCrcFun( "crc-16") ## p:0x18005 r:True i:0x0000 x:0x0000 data = 0x4B4D crc = crcFun(intToASCII(data)) dataList.append((0x42440000 | data, crc)) data = data ^ 0x0010 crc = crcFun(intToASCII(data)) dataList.append((0x47440000 | data, crc)) foundCRC = self.crcFinder.findCommon(dataList, 32, 16, 16) foundCRC = list(foundCRC) # print "found:", foundCRC self.assertIn(CRCKey(0x18005, 0x0, 0x0, 0, 16, rev=True), foundCRC)
def test_findCommon_crc16_d32(self): dataList = [] crcFun = crcmod.predefined.mkCrcFun( "crc-16") ## p:0x18005 r:True i:0x0000 x:0x0000 data1 = 0x1234ABCD crc1 = crcFun(intToASCII(data1)) dataList.append((data1, crc1)) data2 = data1 ^ 0x0010 crc2 = crcFun(intToASCII(data2)) dataList.append((data2, crc2)) foundCRC = self.crcFinder.findCommon(dataList, 32, 16) foundCRC = list(foundCRC) # print "found:", foundCRC self.assertIn(CRCKey(0x18005, 0x0, 0x0, 0, 32, rev=True), foundCRC)
def test_findCommon_crc16buypass_d32(self): dataList = [] crcFun = crcmod.predefined.mkCrcFun( "crc-16-buypass") ## p:0x18005 r:False i:0x0000 x:0x0000 data = 0xDCBA4321 crc = crcFun(intToASCII(data)) dataList.append((data, crc)) data = data ^ 0x0010 crc = crcFun(intToASCII(data)) dataList.append((data, crc)) foundCRC = self.crcFinder.findCommon(dataList, 32, 16) foundCRC = list(foundCRC) # print "found:", foundCRC self.assertIn(CRCKey(0x18005, 0x0, 0x0, 0, 32, rev=False), foundCRC)
def test_findPolysXOR_crcmod_8_random3(self): dataSize = 64 data = int(random.random() * 0xFFFFFFFFFFFFFFFF + 1) data2 = int(random.random() * 0xFFFFFFFFFFFFFFFF + 1) # inputPoly = 0x1B7 inputPoly = 0x100 | int(random.random() * 0xFF + 1) regInit = int(random.random() * 0xFF + 1) xorOut = int(random.random() * 0xFF + 1) crcSize = 8 crc_func = crcmod.mkCrcFun(inputPoly, rev=False, initCrc=regInit, xorOut=xorOut) crc = crc_func( intToASCII(data, dataSize) ) crc2 = crc_func( intToASCII(data2, dataSize) ) # print "crc: {:X} {:X}".format( crc, crc2 ) polyList = self.crcFinder.findPolysXOR(data, crc, data2, crc2, dataSize, crcSize) # print "data: 0x{:X} 0x{:X} 0x{:X} 0x{:X} 0x{:X}".format( data, data2, inputPoly, regInit, xorOut ) # print "polys:", "[{}]".format( ", ".join("0x{:X}".format(x) for x in polyList) ) self.assertTrue( PolyKey(inputPoly, 0, dataSize, rev=False) in polyList )
def test_findPolysXOR_crcmod_8Arev_d32(self): data = 0xF90AD5FD data2 = data | 0xF dataSize = 32 inputPoly = 0x10A regInit = 0x00 xorOut = 0x00 crcSize = 8 crc_func = crcmod.mkCrcFun(inputPoly, rev=True, initCrc=regInit, xorOut=xorOut) crc = crc_func( intToASCII(data, dataSize) ) crc2 = crc_func( intToASCII(data2, dataSize) ) # print "crc: {:X} {:X}".format( crc, crc2 ) # print "data: {:X}/{:X} {:X}/{:X}".format( data, revData1, data2, revData2 ) polyList = self.crcFinder.findPolysXOR(data, crc, data2, crc2, dataSize, crcSize) # revPoly = reverse_number(inputPoly, crcSize) # print "polys: {:X}".format(inputPoly), "[{}]".format( ", ".join("(0x{:X} {})".format(pair[0], pair[1]) for pair in polyList) ) self.assertIn( PolyKey(inputPoly, 0, dataSize, rev=True), polyList )
def test_findCommon_crc16dnp(self): dataList = [] crcFun = crcmod.predefined.mkCrcFun( "crc-16-dnp") ## poly: 0x13D65, rev, init: 0xFFFF, xor: 0xFFFF data = 0xABCD crc = crcFun(intToASCII(data)) dataList.append((data, crc)) data = data ^ 0x0010 crc = crcFun(intToASCII(data)) dataList.append((data, crc)) foundCRC = self.crcFinder.findCommon(dataList, 16, 16) foundCRC = list(foundCRC) # print "found:", foundCRC self.assertIn(CRCKey(0x13D65, 0xFFFF, 0xFFFF, 0, 16, rev=True), foundCRC)
def test_findCommonInput_crc8a(self): dataList = [] crcFun = crcmod.predefined.mkCrcFun( "crc-8") ## init: 0x0, xor: 0x0, poly: 0x107 data = 0xAB crc = crcFun(intToASCII(data)) dataList.append((data, crc)) foundCRC = self.crcFinder.findCommonInput(InputData(dataList, 8, 8)) foundCRC = list(foundCRC) # print "found:", foundCRC self.assertIn(CRCKey(0x107, 0x0, 0x0, 0, 8, rev=False), foundCRC)
def test_crcmod_8_xorOut(self): data = 0xF0 dataSize = 8 inputPoly = 0x100 crcSize = 8 regInit = 0x0F xorOut = 0xF0 crc_func = crcmod.mkCrcFun(inputPoly, initCrc=regInit, rev=False, xorOut=xorOut) crcLib = crc_func(intToASCII(data)) crcProc = ModCRC() crcProc.setXorOutValue(xorOut) crcProc.setInitCRC(regInit, crcSize) crc = crcProc.calculate2(data, dataSize, inputPoly, crcSize) # print "crc: 0x{0:X}[0b{0:b}] 0x{1:X}[0b{1:b}]".format( crc, crcLib ) self.assertEqual(crc, crcLib)
def test_crcmod_8_data(self): data = 0xF0FF dataSize = 16 inputPoly = 0x181 ## leave symmetric crcSize = 8 regInit = 0x0 xorOut = 0x0 crc_func = crcmod.mkCrcFun(inputPoly, initCrc=regInit, rev=False, xorOut=xorOut) crcLib = crc_func(intToASCII(data)) crcProc = ModCRC() crcProc.setRegisterInitValue(regInit) crcProc.setXorOutValue(xorOut) crc = crcProc.calculate2(data, dataSize, inputPoly, crcSize) # print "crc: {:b} {:b}".format( crcLib, crc ) self.assertEqual(crc, crcLib)
def test_asciiToInt(self): asciival = intToASCII(0xAABB, 32) revval = asciiToInt(asciival) self.assertEqual(revval, 0xAABB)
def test_intToASCII(self): val = intToASCII(0x414243) self.assertEqual(val, "ABC") val = intToASCII(0x4441) self.assertEqual(val, "DA")
def test_intToASCII_2(self): val = intToASCII(0x0, 15) self.assertEqual(len(val), 2) val = intToASCII(0x0, 16) self.assertEqual(len(val), 2)