summaryrefslogtreecommitdiffstats
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2015-03-25 10:15:50 +0100
committerStefan Suhren <suhren.stefan@fh-swf.de>2015-03-25 10:33:32 +0100
commita1e3d36dca9c6abf235c7ddf47ab9185c4b748d5 (patch)
tree859befb5df101432b7388e1562f90a01c6d8e238 /src/mainwindow.cpp
downloadIT-Sicherheit-a1e3d36dca9c6abf235c7ddf47ab9185c4b748d5.tar.gz
IT-Sicherheit-a1e3d36dca9c6abf235c7ddf47ab9185c4b748d5.zip
First commit of IT-Sicherheit
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp475
1 files changed, 475 insertions, 0 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
new file mode 100644
index 0000000..2c6088e
--- /dev/null
+++ b/src/mainwindow.cpp
@@ -0,0 +1,475 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+ setWindowTitle(tr("IT-Security SS2015"));
+
+
+ m_cryptEngine = new CryptEngine(this);
+
+ //Create ActionGroup to group the four Crypt-Actions
+ //(only one can be active at a time, ActionGroup takes care of that)
+ m_actionGroupAlgorithm = new QActionGroup(this);
+
+
+ //Add the four Crypt-Actions
+ m_actionGroupAlgorithm->addAction(ui->actionNullCipher);
+ m_actionGroupAlgorithm->addAction(ui->actionSymmetric);
+ m_actionGroupAlgorithm->addAction(ui->actionAsymmetric);
+ m_actionGroupAlgorithm->addAction(ui->actionHybrid);
+
+
+ //ActionGroup for the format of PlainTextEditEncrypted
+ QActionGroup* actionGroup = new QActionGroup(this);
+ actionGroup->addAction(ui->actionEncrypted_as_Text);
+ actionGroup->addAction(ui->actionEncrypted_as_Binary);
+
+ //ActionGroup for the format of PlainTextEditUnencrypted
+ actionGroup = new QActionGroup(this);
+ actionGroup->addAction(ui->actionUnencrypted_as_Text);
+ actionGroup->addAction(ui->actionUnencrypted_as_Binary);
+
+
+ //NullCipher/Symmetric/Asymmetric/Hybrid can also be selected via TabWidget:
+ connect( ui->tabWidgetSelectAlgorithm, SIGNAL(currentTabChanged(QString)),
+ this, SLOT(oncurrentTabChanged_triggered(QString)));
+
+ //When another Cipher is selected, tell that directly to the CryptEngine
+ connect( ui->tabWidgetSelectAlgorithm, SIGNAL(cipherChanged(int)),
+ m_cryptEngine, SLOT(oncipherSelected_triggered(int)));
+
+ //When another Cipher is selected, change PlainTextEdits for Hex or PlainText Data
+ connect( m_cryptEngine, SIGNAL(binaryData(bool)),
+ this, SLOT(ondataIsBinary_triggered(bool)));
+
+ //When a new Keylength is selected, pass it on
+ connect( ui->tabWidgetSelectAlgorithm, SIGNAL(keyLengthChanged(int,bool)),
+ m_cryptEngine, SLOT(onkeylengthChanged(int,bool)));
+}
+
+MainWindow::~MainWindow()
+{
+ delete m_cryptEngine;
+ delete ui;
+}
+
+
+void MainWindow::setDataToPlainTextEditUnencrypted(QString text)
+{
+// //Set ClearText in CryptEngine, as binary or not
+// if( ui->actionUnencrypted_as_Text->isChecked() )
+// {
+// m_cryptEngine->setClearText( ui->PlainTextEditUnencrypted->toPlainText().toAscii() );
+// }
+// else if( ui->actionUnencrypted_as_Binary->isChecked() )
+// {
+// QString hexString = ui->PlainTextEditUnencrypted->toPlainText().toAscii();
+// QStringList hexStrings = hexString.split(' ');
+// hexString = hexStrings.join("");
+// m_cryptEngine->setClearText( QByteArray::fromHex(QByteArray(hexString.toLatin1())) );
+// }
+// else
+// {
+// QMessageBox::critical(this, "Error", "Unencrypted Text as neither ClearText nor Binary data!");
+// return;
+// }
+}
+
+void MainWindow::setDataToPlainTextEditEncrypted(QString text)
+{
+}
+
+
+
+
+
+//private Methods
+void MainWindow::setPlainTextFromFile( QPlainTextEdit* destination, QFile* source )
+{
+ destination->clear();
+ destination->appendPlainText(QString(source->readAll()));
+}
+
+
+void MainWindow::setBinaryDataFromFile( QPlainTextEdit* destination, QFile* source )
+{
+ QMessageBox::warning(this, "WARNING", "The Method MainWindow::setBinaryDataFromFile is not implemented yet.\nEven the Prototype might change soon!");
+}
+
+
+void MainWindow::writePlainTextToFile( QPlainTextEdit* source, QFile* destination )
+{
+ destination->write( source->toPlainText().toLatin1() );
+}
+
+
+void MainWindow::writeBinaryDataToFile( QPlainTextEdit* source, QFile* destination )
+{
+ QMessageBox::warning(this, "WARNING", "The Method MainWindow::setBinaryDataFromFile is not implemented yet.\nEven the Prototype will change soon!");
+}
+
+
+
+//private slots, actions:
+void MainWindow::on_actionLoad_triggered()
+{
+ DialogLoad loadDialog(this);
+ if (loadDialog.exec())
+ {
+ QFile file( loadDialog.getFileName() );
+ if( file.open(QIODevice::ReadOnly) )
+ {
+ if( loadDialog.getEncrypted() )
+ {
+ if( loadDialog.getBinary() )
+ {
+ setBinaryDataFromFile( ui->PlainTextEditEncrypted, &file );
+ }
+ else
+ {
+ setPlainTextFromFile( ui->PlainTextEditEncrypted, &file );
+ }
+ }
+ else
+ {
+ if( loadDialog.getBinary() )
+ {
+ setBinaryDataFromFile( ui->PlainTextEditUnencrypted, &file );
+ }
+ else
+ {
+ setPlainTextFromFile( ui->PlainTextEditUnencrypted, &file );
+ }
+ }
+ file.close();
+ }
+ else
+ {
+ QMessageBox::warning(this,"Warning: Loading of File", "File " + loadDialog.getFileName() + " could not be loaded!");
+ return;
+ }
+ }
+}
+
+void MainWindow::on_actionSave_triggered()
+{
+ DialogSave saveDialog(this);
+ if (saveDialog.exec())
+ {
+ QFile file( saveDialog.getFileName() );
+ if( file.open(QIODevice::WriteOnly) )
+ {
+ if( saveDialog.getEncrypted() )
+ {
+ if( saveDialog.getBinary() )
+ {
+ writeBinaryDataToFile( ui->PlainTextEditEncrypted, &file );
+ }
+ else
+ {
+ writePlainTextToFile( ui->PlainTextEditEncrypted, &file );
+ }
+ }
+ else
+ {
+ if( saveDialog.getBinary() )
+ {
+ writeBinaryDataToFile( ui->PlainTextEditUnencrypted, &file );
+ }
+ else
+ {
+ writePlainTextToFile( ui->PlainTextEditUnencrypted, &file );
+ }
+ }
+ file.close();
+ }
+ else
+ {
+ QMessageBox::warning(this,"Warning: Saving of File", "File " + saveDialog.getFileName() + " could not be saved!");
+ return;
+ }
+ }
+}
+
+void MainWindow::on_actionExit_triggered()
+{
+ QApplication::quit();
+}
+
+void MainWindow::on_actionAbout_triggered()
+{
+ QMessageBox::information(this, "Project IT-Sicherheit", "Projectbase for the course\nIT-Sicherheit, SS2013\n@FH-SWF, Iserlohn");
+}
+
+
+
+void MainWindow::on_actionNullCipher_triggered()
+{
+ ui->tabWidgetSelectAlgorithm->onNullCipher_selected();
+
+}
+
+void MainWindow::on_actionSymmetric_triggered()
+{
+ ui->tabWidgetSelectAlgorithm->onSymmetric_selected();
+}
+
+void MainWindow::on_actionAsymmetric_triggered()
+{
+ ui->tabWidgetSelectAlgorithm->onAsymmetric_selected();
+}
+
+void MainWindow::on_actionHybrid_triggered()
+{
+ ui->tabWidgetSelectAlgorithm->onHybrid_selected();
+}
+
+
+//private slots, buttons:
+void MainWindow::on_pushButtonClearUnencrypted_clicked()
+{
+ ui->PlainTextEditUnencrypted->clear();
+}
+
+
+
+void MainWindow::on_pushButtonClearEncrypted_clicked()
+{
+ ui->PlainTextEditEncrypted->clear();
+}
+
+
+void MainWindow::on_pushButtonEncrypt_clicked()
+{
+ //If neither Symmetric, Asymmetric nor Hybrid is selected: Error
+ if( m_actionGroupAlgorithm->checkedAction() == 0 )
+ {
+ QMessageBox::critical(this, "Error", "No Algorithm selected");
+ return;
+ }
+ else if( ui->PlainTextEditUnencrypted->toPlainText().length() == 0 )
+ {
+ QMessageBox::critical(this, "Error", "No Data to encrypt");
+ return;
+ }
+
+ //Set Key
+ m_cryptEngine->setKey( ui->lineEditPassword->text() );
+
+ //Set ClearText in CryptEngine, as binary or not
+ if( ui->actionUnencrypted_as_Text->isChecked() )
+ {
+ m_cryptEngine->setClearText( ui->PlainTextEditUnencrypted->toPlainText().toLatin1() );
+ }
+ else if( ui->actionUnencrypted_as_Binary->isChecked() )
+ {
+ QString hexString = ui->PlainTextEditUnencrypted->toPlainText().toLatin1();
+ QStringList hexStrings = hexString.split(" ");
+ hexString = hexStrings.join("");
+ m_cryptEngine->setClearText( QByteArray::fromHex(QByteArray(hexString.toLatin1())) );
+ }
+ else
+ {
+ QMessageBox::critical(this, "Error", "Unencrypted Text as neither ClearText nor Binary data!");
+ return;
+ }
+
+ //encrypt
+ m_cryptEngine->encrypt();
+
+ //Fetch CryptText to display
+ ui->PlainTextEditEncrypted->clear();
+
+ if( ui->actionEncrypted_as_Text->isChecked() )
+ {
+ ui->PlainTextEditEncrypted->appendPlainText( QString(m_cryptEngine->getCryptText()) );
+ }
+ else if( ui->actionEncrypted_as_Binary->isChecked() )
+ {
+
+ QString tempString = QString(m_cryptEngine->getCryptText().toHex());
+ QString hexString;
+
+ for (int var = 0; var < tempString.length(); var+=2)
+ {
+ hexString.append( tempString.at(var) );
+ hexString.append( tempString.at(var+1) );
+ hexString.append( ' ' );
+ }
+
+ ui->PlainTextEditEncrypted->appendPlainText( hexString );
+ }
+ else
+ {
+ QMessageBox::critical(this, "Error", "Encrypted Text as neither ClearText nor Binary data!");
+ return;
+ }
+}
+
+
+void MainWindow::on_pushButtonDecrypt_clicked()
+{
+ //If neither Symmetric, Asymmetric nor Hybrid is selected: Error
+ if( m_actionGroupAlgorithm->checkedAction() == 0 )
+ {
+ QMessageBox::critical(this, "Error", "No Algorithm selected");
+ return;
+ }
+ else if( ui->PlainTextEditEncrypted->toPlainText().length() == 0 )
+ {
+ QMessageBox::critical(this, "Error", "No Data to decrypt");
+ return;
+ }
+
+ //Set Key
+ m_cryptEngine->setKey( ui->lineEditPassword->text() );
+
+ //Set CryptText in CryptEngine
+ if( ui->actionEncrypted_as_Text->isChecked() )
+ {
+ m_cryptEngine->setCryptText( ui->PlainTextEditEncrypted->toPlainText().toLatin1() );
+ }
+ else if( ui->actionEncrypted_as_Binary->isChecked() )
+ {
+ QString hexString = ui->PlainTextEditEncrypted->toPlainText().toLatin1();
+ QStringList hexStrings = hexString.split(" ");
+ hexString = hexStrings.join("");
+ m_cryptEngine->setCryptText( QByteArray::fromHex(QByteArray(hexString.toLatin1())) );
+ }
+ else
+ {
+ QMessageBox::critical(this, "Error", "Encrypted Text as neither ClearText nor Binary data!");
+ return;
+ }
+
+
+
+ //decrypt
+ m_cryptEngine->decrypt();
+
+
+ //fetch ClearText to display
+ ui->PlainTextEditUnencrypted->clear();
+
+ if( ui->actionUnencrypted_as_Text->isChecked() )
+ {
+ ui->PlainTextEditUnencrypted->appendPlainText( QString(m_cryptEngine->getClearText()) );
+ }
+ else if( ui->actionUnencrypted_as_Binary->isChecked() )
+ {
+
+ QString tempString = QString(m_cryptEngine->getClearText().toHex());
+ QString hexString;
+
+ for (int var = 0; var < tempString.length(); var+=2)
+ {
+ hexString.append( tempString.at(var) );
+ hexString.append( tempString.at(var+1) );
+ hexString.append( ' ' );
+ }
+ hexString.chop(1); //Last ' '
+
+ ui->PlainTextEditUnencrypted->appendPlainText( hexString );
+ }
+ else
+ {
+ QMessageBox::critical(this, "Error", "Unencrypted Text as neither ClearText nor Binary data!");
+ return;
+ }
+}
+
+void MainWindow::on_pushButtonLoad_clicked()
+{
+ on_actionLoad_triggered();
+}
+
+void MainWindow::on_pushButtonSave_clicked()
+{
+ on_actionSave_triggered();
+}
+
+
+void MainWindow::oncurrentTabChanged_triggered(QString currentTabName)
+{
+ //Selection on TabWidget changes (NullCipher)/Symmetric/Asymmetric/Hybrid as well
+ if( currentTabName == "NullCipher" )
+ ui->actionNullCipher->setChecked(true);
+ else if( currentTabName == "Symmetric" )
+ ui->actionSymmetric->setChecked(true);
+ else if( currentTabName == "Asymmetric" )
+ ui->actionAsymmetric->setChecked(true);
+ else if( currentTabName == "Hybrid" )
+ ui->actionHybrid->setChecked(true);
+
+
+ //set Algorithm Indicator Label to current kind of Algorithm
+ ui->labelAlgorithmCurrent->setText(currentTabName);
+}
+
+void MainWindow::ondataIsBinary_triggered(bool dataIsBinary)
+{
+
+ if(dataIsBinary)
+ {
+ ui->actionEncrypted_as_Binary->setChecked(true);
+ ui->actionUnencrypted_as_Binary->setChecked(true);
+ ui->actionEncrypted_as_Text->setChecked( false);
+ ui->actionUnencrypted_as_Text->setChecked(false);
+ on_actionUnencrypted_as_Binary_triggered( true );
+ on_actionEncrypted_as_Binary_triggered( true );
+ qDebug("databinary true");
+ }
+ else
+ {
+ ui->actionEncrypted_as_Binary->setChecked(false);
+ ui->actionUnencrypted_as_Binary->setChecked(false);
+ ui->actionEncrypted_as_Text->setChecked( true);
+ ui->actionUnencrypted_as_Text->setChecked(true);
+ on_actionUnencrypted_as_Binary_triggered( false );
+ on_actionEncrypted_as_Binary_triggered( false );
+ qDebug("databinary false");
+ }
+}
+
+void MainWindow::on_pushButtonGeneratePassword_clicked()
+{
+ m_cryptEngine->generateRandomKey();
+ ui->lineEditPassword->setText( m_cryptEngine->getKey().toHex() );
+}
+
+
+void MainWindow::on_actionUnencrypted_as_Text_triggered(bool checked)
+{
+ if( checked )
+ ui->PlainTextEditUnencrypted->setEnabled(true);
+ else
+ ui->PlainTextEditUnencrypted->setEnabled(false);
+}
+
+void MainWindow::on_actionUnencrypted_as_Binary_triggered(bool checked)
+{
+ if( checked )
+ ui->PlainTextEditUnencrypted->setEnabled(false);
+ else
+ ui->PlainTextEditUnencrypted->setEnabled(true);
+}
+
+void MainWindow::on_actionEncrypted_as_Text_triggered(bool checked)
+{
+ if( checked )
+ ui->PlainTextEditEncrypted->setEnabled(true);
+ else
+ ui->PlainTextEditEncrypted->setEnabled(false);
+}
+
+void MainWindow::on_actionEncrypted_as_Binary_triggered(bool checked)
+{
+ if( checked )
+ ui->PlainTextEditEncrypted->setEnabled(false);
+ else
+ ui->PlainTextEditEncrypted->setEnabled(true);
+}