示例#1
0
    def loadExtraModules(self):
        self.aesKeyScheduleDialog = AesKeyScheduleDialog(self)
        self.desKeyScheduleDialog = DesKeyScheduleDialog(self)
        self.attackScriptGen = AttackScriptGen(self)

        self.traceExplorerDialog = TraceExplorerDialog(self)
        self.traceExplorerDialog.scriptsUpdated.connect(self.attackScriptGen.reloadScripts)
        self.traceExplorerDialog.runScriptFunction.connect(self.attackScriptGen.runScriptFunction)
        self.attackScriptGen.utilList = [self.traceExplorerDialog]
示例#2
0
    def loadExtraModules(self):
        self.keyScheduleDialog = KeyScheduleDialog(self)
        self.attackScriptGen = AttackScriptGen(self)

        self.traceExplorerDialog = TraceExplorerDialog(self)
        self.traceExplorerDialog.scriptsUpdated.connect(self.attackScriptGen.reloadScripts)
        self.traceExplorerDialog.runScriptFunction.connect(self.attackScriptGen.runScriptFunction)
        self.attackScriptGen.utilList = [self.traceExplorerDialog]
class CWAnalyzerGUI(CWMainGUI):
    """ Main ChipWhisperer Analyzer GUI Window Class.
    This is a front-end to the CWCoreAPI.
    """
    def __init__(self, api):
        super(CWAnalyzerGUI,
              self).__init__(api,
                             name="ChipWhisperer" + u"\u2122" + " Analyzer " +
                             CWCoreAPI.__version__,
                             icon="cwiconA")
        self.addExampleScripts(
            pluginmanager.getPluginsInDictFromPackage(
                "chipwhisperer.analyzer.scripts", False, False, self))
        CWAnalyzerGUI.instance = self
        self.attackScriptGen.reloadScripts()

    def loadExtraModules(self):
        self.keyScheduleDialog = KeyScheduleDialog(self)
        self.attackScriptGen = AttackScriptGen(self)

        self.traceExplorerDialog = TraceExplorerDialog(self)
        self.traceExplorerDialog.scriptsUpdated.connect(
            self.attackScriptGen.reloadScripts)
        self.traceExplorerDialog.runScriptFunction.connect(
            self.attackScriptGen.runScriptFunction)
        self.attackScriptGen.utilList = [self.traceExplorerDialog]

    def addToolbarItems(self, toolbar):
        toolbar.addAction(
            QAction(QIcon(':/images/attack.png'),
                    'Start Attack',
                    self,
                    triggered=self.doAnalysis))

    def addToolMenuItems(self):
        # self.traceExplorerAct = QAction('Trace Explorer', self, statusTip='Get information on traces',
        #                                 triggered=self.traceExplorerDialog.show)
        # self.toolMenu.addAction(self.traceExplorerAct)
        self.aesScheduleAct = QAction(
            'AES Key Schedule',
            self,
            statusTip='Show AES Key Schedule calculator',
            triggered=self.keyScheduleDialog.show)
        self.toolMenu.addAction(self.aesScheduleAct)

    def doAnalysis(self):
        """Called when the 'Do Analysis' button is pressed"""
        self.clearFocus()
        if self.api.project().traceManager().numTraces() == 0:
            ret = QMessageBox.question(
                self, "Attack Error",
                "No traces enabled in project.\nOpen Trace Manager?",
                QMessageBox.Yes | QMessageBox.No)
            if ret == QMessageBox.Yes:
                self.traceManagerDialog.show()
            return

        self.attackScriptGen.flushTimer()
        logging.info("Executing analysis...")
        self.api.runScriptModule(self.attackScriptGen.setupScriptModule())
        logging.info("Analysis completed")

    def addSettingsDocks(self):
        self.settingsScriptDock = self.addSettings(self.attackScriptGen.params)
        self.settingsPreprocessingDock = self.addSettings(
            self.attackScriptGen.preprocessingParams)
        self.settingsAttackDock = self.addSettings(
            self.attackScriptGen.attackParams)
        self.settingsTraceExplorer = self.addSettings(
            self.traceExplorerDialog.params)
        self.settingsResultsDock = self.addSettings(
            ResultsBase.getClassParameter())

        # Load all ActiveTraceObservers
        self.windowMenu.addSeparator()
        for k, v in ResultsBase.getClasses().iteritems():
            if issubclass(v, PassiveTraceObserver) or issubclass(
                    v, AttackObserver):
                ResultsBase.createNew(k)
        self.tabifyDocks(self.resultDocks)

        self.tabifyDocks([
            self.settingsScriptDock, self.settingsPreprocessingDock,
            self.settingsAttackDock, self.settingsTraceExplorer,
            self.settingsResultsDock
        ])
        self.attackScriptGen.editorDocks()

    def tracesChanged(self):
        """Traces changed due to loading new project or adjustment in trace manager,
        so adjust limits displayed and re-plot the new input trace"""

        self.attackScriptGen.reloadScripts()

    @staticmethod
    def getInstance():
        return CWAnalyzerGUI.instance
示例#4
0
class CWAnalyzerGUI(CWMainGUI):
    """ Main ChipWhisperer Analyzer GUI Window Class.
    This is a front-end to the CWCoreAPI.
    """

    def __init__(self, api):
        super(CWAnalyzerGUI, self).__init__(api, name="ChipWhisperer" + u"\u2122" + " Analyzer " + CWCoreAPI.__version__, icon="cwiconA")
        self.addExampleScripts(pluginmanager.getPluginsInDictFromPackage("chipwhisperer.analyzer.scripts", False, False, self))
        CWAnalyzerGUI.instance = self
        self.attackScriptGen.reloadScripts()

    def loadExtraModules(self):
        self.keyScheduleDialog = KeyScheduleDialog(self)
        self.attackScriptGen = AttackScriptGen(self)

        self.traceExplorerDialog = TraceExplorerDialog(self)
        self.traceExplorerDialog.scriptsUpdated.connect(self.attackScriptGen.reloadScripts)
        self.traceExplorerDialog.runScriptFunction.connect(self.attackScriptGen.runScriptFunction)
        self.attackScriptGen.utilList = [self.traceExplorerDialog]

    def addToolbarItems(self, toolbar):
        toolbar.addAction(QAction(QIcon(':/images/attack.png'), 'Start Attack', self, triggered=self.doAnalysis))

    def addToolMenuItems(self):
        # self.traceExplorerAct = QAction('Trace Explorer', self, statusTip='Get information on traces',
        #                                 triggered=self.traceExplorerDialog.show)
        # self.toolMenu.addAction(self.traceExplorerAct)
        self.aesScheduleAct = QAction('AES Key Schedule', self, statusTip='Show AES Key Schedule calculator',
                                      triggered=self.keyScheduleDialog.show)
        self.toolMenu.addAction(self.aesScheduleAct)

    def doAnalysis(self):
        """Called when the 'Do Analysis' button is pressed"""
        self.clearFocus()
        if self.api.project().traceManager().numTraces() == 0:
            ret = QMessageBox.question(self, "Attack Error", "No traces enabled in project.\nOpen Trace Manager?", QMessageBox.Yes | QMessageBox.No)
            if ret == QMessageBox.Yes:
                self.traceManagerDialog.show()
            return

        self.attackScriptGen.flushTimer()
        self.updateStatusBar("Executing analyzis...")
        self.api.runScriptModule(self.attackScriptGen.setupScriptModule())
        self.updateStatusBar("Analysis completed")

    def addSettingsDocks(self):
        self.settingsScriptDock = self.addSettings(self.attackScriptGen.params)
        self.settingsPreprocessingDock = self.addSettings(self.attackScriptGen.preprocessingParams)
        self.settingsAttackDock = self.addSettings(self.attackScriptGen.attackParams)
        self.settingsTraceExplorer = self.addSettings(self.traceExplorerDialog.params)
        self.settingsResultsDock = self.addSettings(ResultsBase.getClassParameter())

        # Load all ActiveTraceObservers
        self.windowMenu.addSeparator()
        for k, v in ResultsBase.getClasses().iteritems():
            if issubclass(v, PassiveTraceObserver) or issubclass(v, AttackObserver):
                ResultsBase.createNew(k)
        self.tabifyDocks(self.resultDocks)

        self.tabifyDocks([self.settingsScriptDock, self.settingsPreprocessingDock, self.settingsAttackDock,
                          self.settingsTraceExplorer, self.settingsResultsDock])
        self.attackScriptGen.editorDocks()

    def tracesChanged(self):
        """Traces changed due to loading new project or adjustment in trace manager,
        so adjust limits displayed and re-plot the new input trace"""

        self.attackScriptGen.reloadScripts()

    @staticmethod
    def getInstance():
        return CWAnalyzerGUI.instance