コード例 #1
0
    def test_equality_diff(self):
        key1 = PolyKey()
        key2 = PolyKey(-1, rev=True)

        self.assertNotEqual(key1.revOrd, key2.revOrd)
        self.assertNotEqual(key1.refBits, key2.refBits)
        self.assertNotEqual(key1, key2)
コード例 #2
0
ファイル: reverse.py プロジェクト: anetczuk/ReverseCRC
    def getCRCSize(self):
        ## CRC size is determined in following order:
        ## 1. from 'self.crcSize' field set directly
        ## 2. from 'self.poly' passed directly
        ## 3. from data CRC set in input file
        crcSize = None
        if crcSize is None:
            crcSize = self.crcSize
        if crcSize is None and self.poly is not None:
            polyKey = PolyKey(self.poly)
            crcSize = polyKey.size()
        if crcSize is None:
            crcSize = self.data.crcSize

        return crcSize
コード例 #3
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    def test_findPolysXOR_8_2bit(self):
        polyList = self.crcFinder.findPolysXOR(0xA53937C7, 0b01011001, 0xA53937CF, 0b10110001, 32, 8)
        self.assertTrue( PolyKey(0x11D, 0, 32, rev=False) in polyList )

        polyList = self.crcFinder.findPolysXOR(0x0000A53937CB, 0b11000101, 0x0000A53937CF, 0b10110001, 32, 8)
        self.assertTrue( PolyKey(0x11D, 0, 32, rev=False) in polyList )

        polyList = self.crcFinder.findPolysXOR(0x1234A53937CB, 0b11000101, 0x1234A53937CF, 0b10110001, 48, 8)
        self.assertTrue( PolyKey(0x11D, 0, 48, rev=False) in polyList )

        polyList = self.crcFinder.findPolysXOR(0xA53937CF, 0x8C, 0xA53937CE, 0x91, 32, 8)
        self.assertTrue( PolyKey(0x11D, 0, 32, rev=False) in polyList )

        polyList = self.crcFinder.findPolysXOR(0xA53937CF, 0x8C, 0xA53937C7, 0x64, 32, 8)
        self.assertTrue( PolyKey(0x11D, 0, 32, rev=False) in polyList )
コード例 #4
0
ファイル: reverse.py プロジェクト: anetczuk/ReverseCRC
    def _findBruteForcePolyReverse(self, dataMask, crcMask, searchRange=0):
        dataMask.reorderBytes()
        self.crcProc.setReversed(True)
        crc = crcMask.dataNum
        poly = 0
        polyMax = crcMask.masterBit
        polyMask = copy.deepcopy(crcMask)
        retList = []
        while poly < polyMax:
            #             if self.progress and (poly % 16384) == 16383:
            #             if self.progress and (poly % 8192) == 8191:
            #                 sys.stdout.write("\r{:b}".format(poly | polyMax))
            #                 sys.stdout.flush()

            polyMask.setNumber(poly)
            polyCRC = self.crcProc.calculate3(dataMask, polyMask)
            if polyCRC == crc:
                #                 if self.progress:
                #                     sys.stdout.write("\r")
                #                     print "Found poly: 0b{0:b} 0x{0:X}".format(poly)
                revPoly = polyMask.reversedData() | polyMax
                #                 polyInit = self.crcProc.registerInit
                #                 polyXor = self.crcProc.xorOut
                #                 retList.append( CRCKey(revPoly, polyInit, polyXor, 0, dataMask.dataSize, rev=True) )
                retList.append(PolyKey(revPoly, 0, dataMask.dataSize,
                                       rev=True))

            poly += 1

#         if self.progress:
#             sys.stdout.write("\r")
#             sys.stdout.flush()
        return retList
コード例 #5
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    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 )
コード例 #6
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    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 )
コード例 #7
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    def test_findPolysXOR_c8_init_xorOut(self):
        dataSize = 42                           ## data size does not matter
        inputPoly = 0x1D5
        inputVal  = 0xA53937CF
        inputVal2 = inputVal ^ 0b100101000      ## data diff does not matter

        self.crcProc.setRegisterInitValue(0xA5)
        self.crcProc.setXorOutValue(0x7C)
        crc = self.crcProc.calculate2(inputVal, dataSize, inputPoly, 8)
        crc2 = self.crcProc.calculate2(inputVal2, dataSize, inputPoly, 8)

        poly = self.crcFinder.findPolysXOR(inputVal, crc, inputVal2, crc2, dataSize, 8)
        self.assertTrue( PolyKey(inputPoly, 0, dataSize, rev=False) in poly )
コード例 #8
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    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 )
コード例 #9
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    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 )
コード例 #10
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    def test_findPolysXOR_c8d24_rev(self):
        data  = 0xFD50D7
        data2 = 0xFD53D7
        inputPoly = 0x1BF
        regInit = 0x0
        xorOut = 0x0
        crcSize = 8

        self.crcProc.setReversed()
        self.crcProc.setRegisterInitValue(regInit)
        self.crcProc.setXorOutValue(xorOut)

        crc = self.crcProc.calculate1(data, inputPoly)
        crc2 = self.crcProc.calculate1(data2, inputPoly)
#         print "crc: {:X} {:X}".format( crc, crc2 )

        polyList = self.crcFinder.findPolysXOR( data, crc, data2, crc2, 24, crcSize)

#         print "polys:", "[{}]".format( ", ".join("0x{:X}".format(x) for x in polyList) )
        self.assertTrue( PolyKey(inputPoly, 0, 24, rev=True) in polyList )
コード例 #11
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    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 )
コード例 #12
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    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 )
コード例 #13
0
    def test_equality(self):
        key1 = PolyKey()
        self.assertEqual(key1, key1)

        key2 = PolyKey()
        self.assertEqual(key1, key2)
コード例 #14
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
 def test_findPolysXOR_xorout(self):
     xorOut = 0xAB
     polyList = self.crcFinder.findPolysXOR(0x1234, 0xF1 ^ xorOut, 0x1235, 0xF6 ^ xorOut, 16, 8)
     self.assertTrue( PolyKey(0x107, 0, 16, rev=False) in polyList )
コード例 #15
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
 def test_findPolysXOR_leading(self):
     polyList = self.crcFinder.findPolysXOR(0x001234, 0xF1, 0x001235, 0xF6, 16, 8)
     self.assertTrue( PolyKey(0x107, 0, 16, rev=False) in polyList )
コード例 #16
0
ファイル: test_polys.py プロジェクト: anetczuk/ReverseCRC
    def test_findPolysXOR_8_1bit(self):
        polyList = self.crcFinder.findPolysXOR(0x34EC, 0b100, 0x34ED, 0b111, 16, 8)
        self.assertTrue( PolyKey(0x103, 0, 16, rev=False) in polyList )

        polyList = self.crcFinder.findPolysXOR(0x34EE, 0b010, 0x34EF, 0b001, 16, 8)
        self.assertTrue( PolyKey(0x103, 0, 16, rev=False) in polyList )