diff options
Diffstat (limited to 'src/MainWindow.cpp')
-rw-r--r-- | src/MainWindow.cpp | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 7cb08835..cd65c18f 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -284,6 +284,12 @@ void MainWindow::createActions() { encryptAct->setToolTip(tr("Encrypt Message")); connect(encryptAct, SIGNAL(triggered()), this, SLOT(slotEncrypt())); + encryptSignAct = new QAction(tr("&Encrypt Sign"), this); + encryptSignAct->setIcon(QIcon(":encrypted_signed.png")); + encryptSignAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_E + Qt::Key_S)); + encryptSignAct->setToolTip(tr("Encrypt And Sign Message")); + connect(encryptSignAct, SIGNAL(triggered()), this, SLOT(slotEncryptSign())); + decryptAct = new QAction(tr("&Decrypt"), this); decryptAct->setIcon(QIcon(":decrypted.png")); decryptAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D)); @@ -474,6 +480,7 @@ void MainWindow::createMenus() { cryptMenu = menuBar()->addMenu(tr("&Crypt")); cryptMenu->addAction(encryptAct); + cryptMenu->addAction(encryptSignAct); cryptMenu->addAction(decryptAct); cryptMenu->addSeparator(); cryptMenu->addAction(signAct); @@ -525,6 +532,7 @@ void MainWindow::createToolBars() { cryptToolBar = addToolBar(tr("Crypt")); cryptToolBar->setObjectName("cryptToolBar"); cryptToolBar->addAction(encryptAct); + cryptToolBar->addAction(encryptSignAct); cryptToolBar->addAction(decryptAct); cryptToolBar->addAction(signAct); cryptToolBar->addAction(verifyAct); @@ -771,9 +779,23 @@ void MainWindow::slotSign() { QStringList *uidList = mKeyList->getPrivateChecked(); + QVector<GpgKey> keys; + + mKeyList->getPrivateCheckedKeys(keys); + + for(const auto &key : keys) { + if(!GpgME::GpgContext::checkIfKeyCanSign(key)) { + QMessageBox::information(nullptr, + tr("Invalid Operation"), + tr("The selected key contains a key that does not actually have a signature function.<br/>") + + tr("<br/>For example the Following Key: <br/>") + key.uids.first().uid); + return; + } + } + auto *tmp = new QByteArray(); - if (mCtx->sign(uidList, edit->curTextPage()->toPlainText().toUtf8(), tmp)) { + if (mCtx->sign(keys, edit->curTextPage()->toPlainText().toUtf8(), tmp)) { edit->slotFillTextEditWithText(QString::fromUtf8(*tmp)); } } @@ -844,6 +866,7 @@ void MainWindow::slotVerify() { if (vn->slotRefresh()) { edit->slotCurPage()->showNotificationWidget(vn, "verifyNotification"); } else { + QMessageBox::warning(nullptr, "Signature NOT Found", "The signature was not found in the target text"); vn->close(); } } @@ -1020,3 +1043,29 @@ void MainWindow::slotSetRestartNeeded(bool needed) { bool MainWindow::getRestartNeeded() const { return this->restartNeeded; } + +void MainWindow::slotEncryptSign() { + + if (edit->tabCount() == 0 || edit->slotCurPage() == nullptr) { + return; + } + + QVector<GpgKey> keys; + mKeyList->getCheckedKeys(keys); + + for(const auto &key : keys) { + if(!GpgME::GpgContext::checkIfKeyCanSign(key) || !GpgME::GpgContext::checkIfKeyCanEncr(key)) { + QMessageBox::information(nullptr, + tr("Invalid Operation"), + tr("The selected key cannot be used for signing and encryption at the same time.<br/>") + + tr("<br/>For example the Following Key: <br/>") + key.uids.first().uid); + return; + } + } + + auto *tmp = new QByteArray(); + if (mCtx->encryptSign(keys, edit->curTextPage()->toPlainText().toUtf8(), tmp)) { + auto *tmp2 = new QString(*tmp); + edit->slotFillTextEditWithText(*tmp2); + } +} |