aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/widgets/ExportKeyPackageDialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/widgets/ExportKeyPackageDialog.cpp')
-rw-r--r--src/ui/widgets/ExportKeyPackageDialog.cpp169
1 files changed, 0 insertions, 169 deletions
diff --git a/src/ui/widgets/ExportKeyPackageDialog.cpp b/src/ui/widgets/ExportKeyPackageDialog.cpp
deleted file mode 100644
index 77e490f4..00000000
--- a/src/ui/widgets/ExportKeyPackageDialog.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Foobar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from gpg4usb-team.
- * Their source code version also complies with GNU General Public License.
- *
- * The source code version of this software was modified and released
- * by Saturneric<[email protected]> starting on May 12, 2021.
- *
- */
-
-#include "ExportKeyPackageDialog.h"
-
-#include <boost/format.hpp>
-
-#include "gpg/function/GpgKeyGetter.h"
-#include "gpg/function/GpgKeyImportExporter.h"
-#include "ui_ExportKeyPackageDialog.h"
-
-GpgFrontend::UI::ExportKeyPackageDialog::ExportKeyPackageDialog(
- KeyIdArgsListPtr key_ids, QWidget* parent)
- : QDialog(parent),
- ui(std::make_shared<Ui_exportKeyPackageDialog>()),
- key_ids_(std::move(key_ids)),
- mt(rd()) {
- ui->setupUi(this);
-
- generate_key_package_name();
-
- connect(ui->gnerateNameButton, &QPushButton::clicked, this,
- [=]() { generate_key_package_name(); });
-
- connect(ui->setOutputPathButton, &QPushButton::clicked, this, [=]() {
- auto file_name = QFileDialog::getSaveFileName(
- this, _("Export Key Package"), ui->nameValueLabel->text() + ".gfepack",
- QString(_("Key Package")) + " (*.gfepack);;All Files (*)");
- ui->outputPathLabel->setText(file_name);
- });
-
- connect(ui->generatePassphraseButton, &QPushButton::clicked, this, [=]() {
- passphrase_ = generate_passphrase(256);
- auto file_name = QFileDialog::getSaveFileName(
- this, _("Export Key Package Passphrase"),
- ui->nameValueLabel->text() + ".key",
- QString(_("Key File")) + " (*.key);;All Files (*)");
- ui->passphraseValueLabel->setText(file_name);
- write_buffer_to_file(file_name.toStdString(), passphrase_);
- });
-
- connect(ui->button_box_, &QDialogButtonBox::accepted, this, [=]() {
- if (ui->outputPathLabel->text().isEmpty()) {
- QMessageBox::critical(
- this, _("Forbidden"),
- _("Please select an output path before exporting."));
- return;
- }
-
- if (ui->passphraseValueLabel->text().isEmpty()) {
- QMessageBox::critical(
- this, _("Forbidden"),
- _("Please generate a password to protect your key before exporting, "
- "it is very important. Don't forget to back up your password in a "
- "safe place."));
- return;
- }
-
- auto key_id_exported = std::make_unique<KeyIdArgsList>();
- auto keys = GpgKeyGetter::GetInstance().GetKeys(key_ids_);
- for (const auto& key : *keys) {
- if (ui->noPublicKeyCheckBox->isChecked() && !key.IsPrivateKey()) {
- continue;
- }
- key_id_exported->push_back(key.GetId());
- }
-
- ByteArrayPtr key_export_data = nullptr;
- if (!GpgKeyImportExporter::GetInstance().ExportKeys(
- key_ids_, key_export_data,
- ui->includeSecretKeyCheckBox->isChecked())) {
- QMessageBox::critical(this, _("Error"), _("Export Key(s) Failed."));
- this->close();
- return;
- }
-
- auto key = QByteArray::fromStdString(passphrase_),
- data =
- QString::fromStdString(*key_export_data).toLocal8Bit().toBase64();
-
- auto hash_key = QCryptographicHash::hash(key, QCryptographicHash::Sha256);
- QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB,
- QAESEncryption::Padding::ISO);
- auto encoded = encryption.encode(data, hash_key);
-
- write_buffer_to_file(ui->outputPathLabel->text().toStdString(),
- encoded.toStdString());
-
- QMessageBox::information(
- this, _("Success"),
- QString(_(
- "The Key Package has been successfully generated and has been "
- "protected by encryption algorithms. You can safely transfer your "
- "Key Package.")) +
- "<br />" + "<b>" +
- _("But the key file cannot be leaked under any "
- "circumstances. Please delete the Key Package and key file as "
- "soon "
- "as possible after completing the transfer operation.") +
- "</b>");
- });
-
- connect(ui->button_box_, &QDialogButtonBox::rejected, this,
- [=]() { this->close(); });
-
- ui->nameLabel->setText(_("Key Package Name"));
- ui->selectOutputPathLabel->setText(_("Output Path"));
- ui->passphraseLabel->setText(_("Passphrase"));
- ui->tipsLabel->setText(
- _("Tips: You can use Key Package to safely and conveniently transfer "
- "your public and private keys between devices."));
- ui->generatePassphraseButton->setText(_("Generate and Save Passphrase"));
- ui->gnerateNameButton->setText(_("Generate Key Package Name"));
- ui->setOutputPathButton->setText(_("Select Output Path"));
-
- ui->includeSecretKeyCheckBox->setText(
- _("Include secret key (Think twice before acting)"));
- ui->noPublicKeyCheckBox->setText(
- _("Exclude keys that do not have a private key"));
-
- setAttribute(Qt::WA_DeleteOnClose);
- setWindowTitle(_("exportKeyPackageDialog"));
-}
-
-std::string GpgFrontend::UI::ExportKeyPackageDialog::generate_passphrase(
- const int len) {
- std::uniform_int_distribution<int> dist(999, 99999);
- static const char alphanum[] =
- "0123456789"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz";
- std::string tmp_str;
- tmp_str.reserve(len);
-
- for (int i = 0; i < len; ++i) {
- tmp_str += alphanum[dist(mt) % (sizeof(alphanum) - 1)];
- }
-
- return tmp_str;
-}
-
-void GpgFrontend::UI::ExportKeyPackageDialog::generate_key_package_name() {
- std::uniform_int_distribution<int> dist(999, 99999);
- auto file_string = boost::format("KeyPackage_%1%") % dist(mt);
- ui->nameValueLabel->setText(file_string.str().c_str());
- ui->outputPathLabel->clear();
- ui->passphraseValueLabel->clear();
-}