def test_findPolys_preamble(self): dataList = [] dataList.append( ("CC71FB2EE1", "BE0D") ) dataList.append( ("FFD5C0A73B", "D9B4") ) inputData = InputData() inputData.convert( dataList ) foundCRC = self.crcFinder.findPolys(inputData, 8) # print "found data:", foundCRC self.assertIn( PolyKey(0x18005, 0, 32, rev=False ), foundCRC )
def test_convert(self): data = [("E21EAB43EA0B478F52AF6E034D310D819DBC3F", "A2B0A")] parser = InputData() parser.convert(data) self.assertEqual(parser.dataSize, 152) self.assertEqual(parser.crcSize, 20) self.assertIn( (5042640062004119076411731879610313259117034559L, 666378), parser.numbersList)
def test_bruteForceInput_xor(self): dataList = [] dataSize = 16 crcSize = 8 inputPoly = 0x185 regInit = 0x0 xorOut = 0x0A reverse = False ## init: 0, xor: 0, rev, poly: 0x18005 self.crcProc.setReversed(reverse) self.crcProc.setXorOutValue(xorOut) self.crcProc.setRegisterInitValue(regInit) data1 = 0xABCD crc1 = self.crcProc.calculate2(data1, dataSize, inputPoly, crcSize) dataList.append((data1, crc1)) data2 = data1 ^ 0x0010 crc2 = self.crcProc.calculate2(data2, dataSize, inputPoly, crcSize) dataList.append((data2, crc2)) dInput = InputData(dataList, dataSize, crcSize) foundCRC = self.crcFinder.bruteForcePairs(dInput, 0) # print "found data:", foundCRC self.assertIn( CRCKey(inputPoly, regInit, xorOut, 0, dataSize, rev=reverse), foundCRC)
def test_findPolys_poly(self): dataList = [] dataSize = 16 crcSize = 16 inputPoly = 0x18005 regInit = 0x0 xorOut = 0x0 reverse = False ## init: 0, xor: 0, rev, poly: 0x18005 self.crcProc.setReversed(reverse) self.crcProc.setXorOutValue(xorOut) self.crcProc.setRegisterInitValue(regInit) data1 = 0xABCD crc1 = self.crcProc.calculate2(data1, dataSize, inputPoly, crcSize) dataList.append( (data1, crc1) ) data2 = data1 ^ 0x0010 crc2 = self.crcProc.calculate2(data2, dataSize, inputPoly, crcSize) dataList.append( (data2, crc2) ) inputData = InputData(dataList, dataSize, crcSize) foundCRC = self.crcFinder.findPolys(inputData, 0) # print "found data:", foundCRC self.assertIn( PolyKey(inputPoly, 0, dataSize, rev=reverse ), foundCRC )
def prepareInputData(self, dataSamplesList, dataSize, crcSize, poly, initReg, xorVal): inputData = InputData([], dataSize, crcSize) for item in dataSamplesList: crc = self.crcProc.calculateCRC(item, dataSize, poly, crcSize, initReg, xorVal) inputData.numbersList.append((item, crc)) return inputData
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_execute_8_sample(self): poly = 0x1D initReg = 0x00 xorVal = 0x8F dataSize = 56 crcSize = 8 dataList = [(0x0D00C0F0FFFFFF, 0x90), (0x0000C0F0FFFFFF, 0x76)] inputParams = InputParams() inputParams.data = InputData(dataList, dataSize, crcSize) inputParams.crcSize = crcSize inputParams.poly = poly inputParams.xorVal = xorVal results = self.solver.execute(inputParams, None) # print "result:", results, len(results) # print "data: ", inputParams.data.numbersList, len(inputParams.data.numbersList) # print "result:", results.most_common(3), len(results) self.assertEqual(len(results), 1) self.assertIn(CRCKey(poly, initReg, xorVal, 0, dataSize, False, False), results)