aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/model/GpgGenKeyInfo.cpp133
-rw-r--r--src/core/model/GpgGenKeyInfo.h31
-rw-r--r--src/core/model/GpgGenerateKeyResult.cpp2
-rw-r--r--src/core/model/GpgGenerateKeyResult.h2
-rw-r--r--src/test/core/GpgCoreTestKeygen.cpp8
-rw-r--r--src/ui/dialog/key_generate/KeygenDialog.cpp91
-rw-r--r--src/ui/dialog/key_generate/KeygenDialog.h6
-rw-r--r--src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp26
8 files changed, 133 insertions, 166 deletions
diff --git a/src/core/model/GpgGenKeyInfo.cpp b/src/core/model/GpgGenKeyInfo.cpp
index 15eb9b10..578f64fc 100644
--- a/src/core/model/GpgGenKeyInfo.cpp
+++ b/src/core/model/GpgGenKeyInfo.cpp
@@ -36,43 +36,10 @@
namespace GpgFrontend {
-void GenKeyInfo::SetAlgo(const GenKeyInfo::KeyGenAlgo &m_algo) {
- GF_CORE_LOG_DEBUG("set algo name: {}", m_algo.first);
- // Check algo if supported
- std::string algo_args = m_algo.second;
- if (standalone_) {
- if (!subkey_) {
- auto support_algo = GetSupportedKeyAlgoStandalone();
- auto algo_it = std::find_if(
- support_algo.begin(), support_algo.end(),
- [=](const KeyGenAlgo &o) { return o.second == algo_args; });
- // Algo Not Supported
- if (algo_it == support_algo.end()) return;
- } else {
- auto support_algo = GetSupportedSubkeyAlgoStandalone();
- auto algo_it = std::find_if(
- support_algo.begin(), support_algo.end(),
- [=](const KeyGenAlgo &o) { return o.second == algo_args; });
- // Algo Not Supported
- if (algo_it == support_algo.end()) return;
- }
- } else {
- if (!subkey_) {
- auto support_algo = GetSupportedKeyAlgo();
- auto algo_it = std::find_if(
- support_algo.begin(), support_algo.end(),
- [=](const KeyGenAlgo &o) { return o.second == algo_args; });
- // Algo Not Supported
- if (algo_it == support_algo.end()) return;
- } else {
- auto support_algo = GetSupportedSubkeyAlgo();
- auto algo_it = std::find_if(
- support_algo.begin(), support_algo.end(),
- [=](const KeyGenAlgo &o) { return o.second == algo_args; });
- // Algo Not Supported
- if (algo_it == support_algo.end()) return;
- }
- }
+void GenKeyInfo::SetAlgo(const std::string &t_algo_args) {
+ auto algo_args = t_algo_args;
+ boost::algorithm::to_lower(algo_args);
+ GF_CORE_LOG_DEBUG("set algo args: {}", algo_args);
// reset all options
reset_options();
@@ -85,8 +52,6 @@ void GenKeyInfo::SetAlgo(const GenKeyInfo::KeyGenAlgo &m_algo) {
this->allow_change_certification_ = false;
- if (!standalone_) boost::algorithm::to_lower(algo_args);
-
if (algo_args == "rsa") {
/**
* RSA is the world’s premier asymmetric cryptographic algorithm,
@@ -125,36 +90,10 @@ void GenKeyInfo::SetAlgo(const GenKeyInfo::KeyGenAlgo &m_algo) {
suggest_max_key_size_ = -1;
suggest_size_addition_step_ = -1;
SetKeyLength(-1);
- } else if (algo_args == "cv25519") {
- SetAllowAuthentication(false);
- allow_change_authentication_ = false;
-
- SetAllowSigning(false);
- allow_change_signing_ = false;
-
- SetAllowCertification(false);
- allow_change_certification_ = false;
-
- suggest_min_key_size_ = 1024;
- suggest_max_key_size_ = 4096;
- suggest_size_addition_step_ = 1024;
- SetKeyLength(2048);
- } else if (algo_args == "nistp256" || algo_args == "nistp384" ||
- algo_args == "nistp521") {
- SetAllowAuthentication(false);
- allow_change_authentication_ = false;
-
- SetAllowSigning(false);
- allow_change_signing_ = false;
-
- SetAllowCertification(false);
- allow_change_certification_ = false;
-
- suggest_min_key_size_ = -1;
- suggest_max_key_size_ = -1;
- suggest_size_addition_step_ = -1;
- SetKeyLength(-1);
- } else if (algo_args == "brainpoolp256r1") {
+ } else if (algo_args == "cv25519" || algo_args == "nistp256" ||
+ algo_args == "nistp384" || algo_args == "nistp521" ||
+ algo_args == "brainpoolp256r1" || algo_args == "brainpoolp384r1" ||
+ algo_args == "brainpoolp512r1") {
SetAllowAuthentication(false);
allow_change_authentication_ = false;
@@ -168,6 +107,9 @@ void GenKeyInfo::SetAlgo(const GenKeyInfo::KeyGenAlgo &m_algo) {
suggest_max_key_size_ = -1;
suggest_size_addition_step_ = -1;
SetKeyLength(-1);
+ } else {
+ SPDLOG_ERROR("unsupported gen key algo arguments: {}", algo_args);
+ return;
}
this->algo_ = algo_args;
@@ -227,18 +169,20 @@ void GenKeyInfo::SetAllowCertification(bool m_allow_certification) {
}
}
-GenKeyInfo::GenKeyInfo(bool m_is_sub_key, bool m_standalone)
- : standalone_(m_standalone), subkey_(m_is_sub_key) {
+GenKeyInfo::GenKeyInfo(bool m_is_sub_key) : subkey_(m_is_sub_key) {
assert(!GetSupportedKeyAlgo().empty());
- SetAlgo(GetSupportedKeyAlgo()[0]);
+ SetAlgo(std::get<0>(GetSupportedKeyAlgo()[0]));
}
auto GenKeyInfo::GetSupportedKeyAlgo()
-> const std::vector<GenKeyInfo::KeyGenAlgo> & {
static const std::vector<GenKeyInfo::KeyGenAlgo> kSupportKeyAlgo = {
- {"RSA", "RSA"},
- {"DSA", "DSA"},
- {"ECDSA", "ED25519"},
+ {"RSA", "RSA", ""},
+ {"DSA", "DSA", ""},
+ {"ECDSA", "ED25519", ""},
+ {"ECDSA + ECDH", "ED25519", "CV25519"},
+ {"ECDSA + ECDH NIST P-256", "ED25519", "NISTP256"},
+ {"ECDSA + ECDH BrainPool P-256", "ED25519", "BRAINPOOlP256R1"},
};
return kSupportKeyAlgo;
}
@@ -246,35 +190,18 @@ auto GenKeyInfo::GetSupportedKeyAlgo()
auto GenKeyInfo::GetSupportedSubkeyAlgo()
-> const std::vector<GenKeyInfo::KeyGenAlgo> & {
static const std::vector<GenKeyInfo::KeyGenAlgo> kSupportSubkeyAlgo = {
- {"RSA", "RSA"},
- {"DSA", "DSA"},
- {"ECDSA", "ED25519"},
- {"ECDH NIST P-256", "NISTP256"},
- {"ECDH NIST P-384", "NISTP384"},
- {"ECDH NIST P-521", "NISTP521"},
- // {"ECDH BrainPool P-256", "BRAINPOOlP256R1"}
- };
- return kSupportSubkeyAlgo;
-}
+ {"RSA", "", "RSA"},
+ {"DSA", "", "DSA"},
+ {"ECDSA", "", "ED25519"},
+ {"ECDH", "", "CV25519"},
+ {"ECDH NIST P-256", "", "NISTP256"},
+ {"ECDH NIST P-384", "", "NISTP384"},
+ {"ECDH NIST P-521", "", "NISTP521"},
+ {"ECDH BrainPool P-256", "", "BRAINPOOlP256R1"},
+ {"ECDH BrainPool P-384", "", "BRAINPOOlP384R1"},
+ {"ECDH BrainPool P-512", "", "BRAINPOOlP512R1"}};
-auto GenKeyInfo::GetSupportedKeyAlgoStandalone()
- -> const std::vector<GenKeyInfo::KeyGenAlgo> & {
- static const std::vector<GenKeyInfo::KeyGenAlgo>
- kSupportSubkeyAlgoStandalone = {
- {"RSA", "RSA"},
- {"DSA", "DSA"},
- };
- return kSupportSubkeyAlgoStandalone;
-}
-
-auto GenKeyInfo::GetSupportedSubkeyAlgoStandalone()
- -> const std::vector<GenKeyInfo::KeyGenAlgo> & {
- static const std::vector<GenKeyInfo::KeyGenAlgo>
- kSupportSubkeyAlgoStandalone = {
- {"RSA", "RSA"},
- {"DSA", "DSA"},
- };
- return kSupportSubkeyAlgoStandalone;
+ return kSupportSubkeyAlgo;
}
/**
diff --git a/src/core/model/GpgGenKeyInfo.h b/src/core/model/GpgGenKeyInfo.h
index 2c53f17a..e155b4ba 100644
--- a/src/core/model/GpgGenKeyInfo.h
+++ b/src/core/model/GpgGenKeyInfo.h
@@ -34,7 +34,7 @@ namespace GpgFrontend {
class GPGFRONTEND_CORE_EXPORT GenKeyInfo {
public:
- using KeyGenAlgo = std::pair<std::string, std::string>;
+ using KeyGenAlgo = std::tuple<std::string, std::string, std::string>;
/**
* @brief Construct a new Gen Key Info object
@@ -42,7 +42,7 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo {
* @param m_is_sub_key
* @param m_standalone
*/
- explicit GenKeyInfo(bool m_is_sub_key = false, bool m_standalone = false);
+ explicit GenKeyInfo(bool m_is_sub_key = false);
/**
* @brief Get the Supported Key Algo object
@@ -59,22 +59,6 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo {
static auto GetSupportedSubkeyAlgo() -> const std::vector<KeyGenAlgo> &;
/**
- * @brief Get the Supported Key Algo Standalone object
- *
- * @return const std::vector<std::string>&
- */
- static auto GetSupportedKeyAlgoStandalone()
- -> const std::vector<KeyGenAlgo> &;
-
- /**
- * @brief Get the Supported Subkey Algo Standalone object
- *
- * @return const std::vector<std::string>&
- */
- static auto GetSupportedSubkeyAlgoStandalone()
- -> const std::vector<KeyGenAlgo> &;
-
- /**
* @brief
*
* @return true
@@ -150,7 +134,7 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo {
*
* @param m_algo
*/
- void SetAlgo(const GenKeyInfo::KeyGenAlgo &m_algo);
+ void SetAlgo(const std::string &);
/**
* @brief Get the Key Size Str object
@@ -353,11 +337,10 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo {
[[nodiscard]] auto GetSizeChangeStep() const -> int;
private:
- bool standalone_ = false; ///<
- bool subkey_ = false; ///<
- std::string name_; ///<
- std::string email_; ///<
- std::string comment_; ///<
+ bool subkey_ = false; ///<
+ std::string name_; ///<
+ std::string email_; ///<
+ std::string comment_; ///<
std::string algo_; ///<
int key_size_ = 2048;
diff --git a/src/core/model/GpgGenerateKeyResult.cpp b/src/core/model/GpgGenerateKeyResult.cpp
index 005ea36c..990024de 100644
--- a/src/core/model/GpgGenerateKeyResult.cpp
+++ b/src/core/model/GpgGenerateKeyResult.cpp
@@ -42,7 +42,7 @@ GpgGenerateKeyResult::GpgGenerateKeyResult(gpgme_genkey_result_t r)
auto GpgGenerateKeyResult::IsGood() -> bool { return result_ref_ != nullptr; }
-auto GpgGenerateKeyResult::GetFingerprint() -> std::string {
+auto GpgGenerateKeyResult::GetFingerprint() -> std::string const {
return result_ref_->fpr;
}
diff --git a/src/core/model/GpgGenerateKeyResult.h b/src/core/model/GpgGenerateKeyResult.h
index 904eeef3..3601da8b 100644
--- a/src/core/model/GpgGenerateKeyResult.h
+++ b/src/core/model/GpgGenerateKeyResult.h
@@ -37,7 +37,7 @@ class GPGFRONTEND_CORE_EXPORT GpgGenerateKeyResult {
public:
auto IsGood() -> bool;
- auto GetFingerprint() -> std::string;
+ auto GetFingerprint() -> std::string const;
explicit GpgGenerateKeyResult(gpgme_genkey_result_t);
diff --git a/src/test/core/GpgCoreTestKeygen.cpp b/src/test/core/GpgCoreTestKeygen.cpp
index 67c4bde6..476279ac 100644
--- a/src/test/core/GpgCoreTestKeygen.cpp
+++ b/src/test/core/GpgCoreTestKeygen.cpp
@@ -47,7 +47,7 @@ TEST_F(GpgCoreTest, GenerateKeyTest) {
keygen_info->SetEmail("[email protected]");
keygen_info->SetComment("");
keygen_info->SetKeyLength(1024);
- keygen_info->SetAlgo(keygen_info->GetSupportedKeyAlgo()[0]);
+ keygen_info->SetAlgo(std::get<1>(keygen_info->GetSupportedKeyAlgo()[0]));
keygen_info->SetNonExpired(true);
keygen_info->SetNonPassPhrase(true);
@@ -89,7 +89,7 @@ TEST_F(GpgCoreTest, GenerateKeyTest_1) {
keygen_info->SetName("foo_1");
keygen_info->SetEmail("[email protected]");
keygen_info->SetComment("hello gpgfrontend");
- keygen_info->SetAlgo(keygen_info->GetSupportedKeyAlgo()[0]);
+ keygen_info->SetAlgo(std::get<1>(keygen_info->GetSupportedKeyAlgo()[0]));
keygen_info->SetKeyLength(4096);
keygen_info->SetNonExpired(false);
keygen_info->SetExpireTime(boost::posix_time::second_clock::local_time() +
@@ -134,7 +134,7 @@ TEST_F(GpgCoreTest, GenerateKeyTest_4) {
keygen_info->SetName("foo_2");
keygen_info->SetEmail("[email protected]");
keygen_info->SetComment("");
- keygen_info->SetAlgo(keygen_info->GetSupportedKeyAlgo()[1]);
+ keygen_info->SetAlgo(std::get<1>(keygen_info->GetSupportedKeyAlgo()[1]));
keygen_info->SetNonExpired(true);
keygen_info->SetNonPassPhrase(false);
@@ -173,7 +173,7 @@ TEST_F(GpgCoreTest, GenerateKeyTest_5) {
keygen_info->SetName("foo_3");
keygen_info->SetEmail("[email protected]");
keygen_info->SetComment("");
- keygen_info->SetAlgo(keygen_info->GetSupportedKeyAlgo()[2]);
+ keygen_info->SetAlgo(std::get<1>(keygen_info->GetSupportedKeyAlgo()[2]));
keygen_info->SetNonExpired(true);
keygen_info->SetNonPassPhrase(false);
diff --git a/src/ui/dialog/key_generate/KeygenDialog.cpp b/src/ui/dialog/key_generate/KeygenDialog.cpp
index 94cedc7f..30f9b6df 100644
--- a/src/ui/dialog/key_generate/KeygenDialog.cpp
+++ b/src/ui/dialog/key_generate/KeygenDialog.cpp
@@ -38,7 +38,6 @@
#include "core/model/DataObject.h"
#include "core/typedef/GpgTypedef.h"
#include "core/utils/GpgUtils.h"
-#include "dialog/WaitingDialog.h"
#include "ui/UISignalStation.h"
#include "ui/UserInterfaceUtils.h"
@@ -49,7 +48,7 @@ KeyGenDialog::KeyGenDialog(QWidget* parent)
button_box_ =
new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
- bool longer_expiration_date =
+ bool const longer_expiration_date =
GlobalSettingStation::GetInstance().LookupSettings(
"general.longer_expiration_date", false);
@@ -57,14 +56,15 @@ KeyGenDialog::KeyGenDialog(QWidget* parent)
? QDateTime::currentDateTime().toLocalTime().addYears(30)
: QDateTime::currentDateTime().toLocalTime().addYears(2);
- this->setWindowTitle(_("Generate Key"));
- this->setModal(true);
-
connect(this, &KeyGenDialog::SignalKeyGenerated,
UISignalStation::GetInstance(),
&UISignalStation::SignalKeyDatabaseRefresh);
generate_key_dialog();
+
+ this->setWindowTitle(_("Generate Key"));
+ this->setAttribute(Qt::WA_DeleteOnClose);
+ this->setModal(true);
}
void KeyGenDialog::generate_key_dialog() {
@@ -85,7 +85,6 @@ void KeyGenDialog::generate_key_dialog() {
this->setLayout(vbox2);
set_signal_slot();
-
refresh_widgets_state();
}
@@ -124,34 +123,53 @@ void KeyGenDialog::slot_key_gen_accept() {
gen_key_info_->SetKeyLength(key_size_spin_box_->value());
+ if (no_pass_phrase_check_box_->checkState() != 0U) {
+ gen_key_info_->SetNonPassPhrase(true);
+ if (gen_subkey_info_ != nullptr) {
+ gen_subkey_info_->SetNonPassPhrase(true);
+ }
+ }
+
if (expire_check_box_->checkState() != 0U) {
gen_key_info_->SetNonExpired(true);
+ if (gen_subkey_info_ != nullptr) gen_subkey_info_->SetNonExpired(true);
} else {
#ifdef GPGFRONTEND_GUI_QT6
gen_key_info_->SetExpireTime(boost::posix_time::from_time_t(
date_edit_->dateTime().toSecsSinceEpoch()));
+ if (gen_subkey_info_ != nullptr) {
+ gen_subkey_info_->SetExpireTime(boost::posix_time::from_time_t(
+ date_edit_->dateTime().toSecsSinceEpoch()));
+ }
#else
gen_key_info_->SetExpireTime(
boost::posix_time::from_time_t(date_edit_->dateTime().toTime_t()));
+ if (gen_subkey_info_ != nullptr) {
+ gen_subkey_info_->SetExpireTime(
+ boost::posix_time::from_time_t(date_edit_->dateTime().toTime_t()));
+ }
#endif
}
CommonUtils::WaitForOpera(
this, _("Generating"),
[this, gen_key_info = this->gen_key_info_](const OperaWaitingHd& hd) {
- GpgKeyOpera::GetInstance().GenerateKey(
- gen_key_info, [this, hd](GpgError err, const DataObjectPtr&) {
+ GpgKeyOpera::GetInstance().GenerateKeyWithSubkey(
+ gen_key_info, gen_subkey_info_,
+ [this, hd](GpgError err, const DataObjectPtr&) {
// stop showing waiting dialog
hd();
- CommonUtils::RaiseMessageBox(this, err);
+ CommonUtils::RaiseMessageBox(this->parentWidget() != nullptr
+ ? this->parentWidget()
+ : this,
+ err);
if (CheckGpgError(err) == GPG_ERR_NO_ERROR) {
emit SignalKeyGenerated();
}
});
});
- GF_UI_LOG_DEBUG("key generation done");
this->done(0);
} else {
@@ -168,13 +186,7 @@ void KeyGenDialog::slot_key_gen_accept() {
}
}
-void KeyGenDialog::slot_expire_box_changed() {
- if (expire_check_box_->checkState() != 0U) {
- date_edit_->setEnabled(false);
- } else {
- date_edit_->setEnabled(true);
- }
-}
+void KeyGenDialog::slot_expire_box_changed() {}
QGroupBox* KeyGenDialog::create_key_usage_group_box() {
auto* group_box = new QGroupBox(this);
@@ -247,7 +259,23 @@ void KeyGenDialog::slot_activated_key_type(int index) {
// check
assert(gen_key_info_->GetSupportedKeyAlgo().size() >
static_cast<size_t>(index));
- gen_key_info_->SetAlgo(gen_key_info_->GetSupportedKeyAlgo()[index]);
+
+ const auto [name, key_algo, subkey_algo] =
+ gen_key_info_->GetSupportedKeyAlgo()[index];
+
+ assert(!key_algo.empty());
+ gen_key_info_->SetAlgo(key_algo);
+
+ if (!subkey_algo.empty()) {
+ if (gen_subkey_info_ == nullptr) {
+ gen_subkey_info_ = SecureCreateSharedObject<GenKeyInfo>(true);
+ }
+
+ gen_subkey_info_->SetAlgo(subkey_algo);
+ } else {
+ gen_subkey_info_ = nullptr;
+ }
+
refresh_widgets_state();
}
@@ -306,10 +334,19 @@ void KeyGenDialog::refresh_widgets_state() {
no_pass_phrase_check_box_->setDisabled(true);
}
- key_size_spin_box_->setRange(gen_key_info_->GetSuggestMinKeySize(),
- gen_key_info_->GetSuggestMaxKeySize());
- key_size_spin_box_->setValue(gen_key_info_->GetKeyLength());
- key_size_spin_box_->setSingleStep(gen_key_info_->GetSizeChangeStep());
+ if (gen_key_info_->GetSuggestMinKeySize() == -1 ||
+ gen_key_info_->GetSuggestMaxKeySize() == -1) {
+ key_size_spin_box_->setDisabled(true);
+ key_size_spin_box_->setRange(0, 0);
+ key_size_spin_box_->setValue(0);
+ key_size_spin_box_->setSingleStep(0);
+ } else {
+ key_size_spin_box_->setDisabled(false);
+ key_size_spin_box_->setRange(gen_key_info_->GetSuggestMinKeySize(),
+ gen_key_info_->GetSuggestMaxKeySize());
+ key_size_spin_box_->setValue(gen_key_info_->GetKeyLength());
+ key_size_spin_box_->setSingleStep(gen_key_info_->GetSizeChangeStep());
+ }
}
void KeyGenDialog::set_signal_slot() {
@@ -318,8 +355,9 @@ void KeyGenDialog::set_signal_slot() {
connect(button_box_, &QDialogButtonBox::rejected, this,
&KeyGenDialog::reject);
- connect(expire_check_box_, &QCheckBox::stateChanged, this,
- &KeyGenDialog::slot_expire_box_changed);
+ connect(expire_check_box_, &QCheckBox::stateChanged, this, [this]() {
+ date_edit_->setDisabled(expire_check_box_->checkState() != 0U);
+ });
connect(key_usage_check_boxes_[0], &QCheckBox::stateChanged, this,
&KeyGenDialog::slot_encryption_box_changed);
@@ -336,6 +374,9 @@ void KeyGenDialog::set_signal_slot() {
connect(no_pass_phrase_check_box_, &QCheckBox::stateChanged, this,
[this](int state) -> void {
gen_key_info_->SetNonPassPhrase(state != 0);
+ if (gen_subkey_info_ != nullptr) {
+ gen_subkey_info_->SetNonPassPhrase(state != 0);
+ }
});
}
@@ -352,7 +393,7 @@ QGroupBox* KeyGenDialog::create_basic_info_group_box() {
key_type_combo_box_ = new QComboBox(this);
for (const auto& algo : GenKeyInfo::GetSupportedKeyAlgo()) {
- key_type_combo_box_->addItem(QString::fromStdString(algo.first));
+ key_type_combo_box_->addItem(QString::fromStdString(std::get<0>(algo)));
}
if (!GenKeyInfo::GetSupportedKeyAlgo().empty()) {
key_type_combo_box_->setCurrentIndex(0);
diff --git a/src/ui/dialog/key_generate/KeygenDialog.h b/src/ui/dialog/key_generate/KeygenDialog.h
index e4feb7a3..8e424094 100644
--- a/src/ui/dialog/key_generate/KeygenDialog.h
+++ b/src/ui/dialog/key_generate/KeygenDialog.h
@@ -89,9 +89,13 @@ class KeyGenDialog : public GeneralDialog {
*/
QStringList error_messages_; ///< List of errors occurring when checking
///< entries of line edits
+
std::shared_ptr<GenKeyInfo> gen_key_info_ =
SecureCreateSharedObject<GenKeyInfo>(); ///<
- QDialogButtonBox* button_box_; ///< Box for standard buttons
+ std::shared_ptr<GenKeyInfo> gen_subkey_info_ =
+ SecureCreateSharedObject<GenKeyInfo>(); ///<
+
+ QDialogButtonBox* button_box_; ///< Box for standard buttons
QLabel* error_label_{}; ///< Label containing error message
QLineEdit* name_edit_{}; ///< Line edit for the keys name
QLineEdit* email_edit_{}; ///< Line edit for the keys email
diff --git a/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp b/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp
index 4724344c..912945ad 100644
--- a/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp
+++ b/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp
@@ -38,7 +38,6 @@
#include "core/utils/GpgUtils.h"
#include "ui/UISignalStation.h"
#include "ui/UserInterfaceUtils.h"
-#include "ui/dialog/WaitingDialog.h"
namespace GpgFrontend::UI {
@@ -65,6 +64,7 @@ SubkeyGenerateDialog::SubkeyGenerateDialog(const KeyId& key_id, QWidget* parent)
auto* tipps_label = new QLabel(
QString(_("Tipps: if the key pair has a passphrase, the subkey's "
"passphrase must be equal to it.")));
+ tipps_label->setWordWrap(true);
group_grid->addWidget(tipps_label);
auto* name_list = new QWidget(this);
@@ -77,6 +77,7 @@ SubkeyGenerateDialog::SubkeyGenerateDialog(const KeyId& key_id, QWidget* parent)
this->setWindowTitle(_("Generate New Subkey"));
this->setLayout(vbox2);
+ this->setAttribute(Qt::WA_DeleteOnClose);
this->setModal(true);
set_signal_slot();
@@ -123,7 +124,7 @@ QGroupBox* SubkeyGenerateDialog::create_basic_info_group_box() {
no_pass_phrase_check_box_ = new QCheckBox(this);
for (const auto& algo : GenKeyInfo::GetSupportedSubkeyAlgo()) {
- key_type_combo_box_->addItem(QString::fromStdString(algo.first));
+ key_type_combo_box_->addItem(QString::fromStdString(std::get<0>(algo)));
}
if (!GenKeyInfo::GetSupportedSubkeyAlgo().empty()) {
key_type_combo_box_->setCurrentIndex(0);
@@ -245,10 +246,19 @@ void SubkeyGenerateDialog::refresh_widgets_state() {
key_usage_check_boxes_[3]->setDisabled(true);
}
- key_size_spin_box_->setRange(gen_key_info_->GetSuggestMinKeySize(),
- gen_key_info_->GetSuggestMaxKeySize());
- key_size_spin_box_->setValue(gen_key_info_->GetKeyLength());
- key_size_spin_box_->setSingleStep(gen_key_info_->GetSizeChangeStep());
+ if (gen_key_info_->GetSuggestMinKeySize() == -1 ||
+ gen_key_info_->GetSuggestMaxKeySize() == -1) {
+ key_size_spin_box_->setDisabled(true);
+ key_size_spin_box_->setRange(0, 0);
+ key_size_spin_box_->setValue(0);
+ key_size_spin_box_->setSingleStep(0);
+ } else {
+ key_size_spin_box_->setDisabled(false);
+ key_size_spin_box_->setRange(gen_key_info_->GetSuggestMinKeySize(),
+ gen_key_info_->GetSuggestMaxKeySize());
+ key_size_spin_box_->setValue(gen_key_info_->GetKeyLength());
+ key_size_spin_box_->setSingleStep(gen_key_info_->GetSizeChangeStep());
+ }
}
void SubkeyGenerateDialog::slot_key_gen_accept() {
@@ -296,6 +306,7 @@ void SubkeyGenerateDialog::slot_key_gen_accept() {
}
});
});
+ this->done(0);
} else {
/**
@@ -349,7 +360,8 @@ void SubkeyGenerateDialog::slot_activated_key_type(int index) {
// check
assert(gen_key_info_->GetSupportedSubkeyAlgo().size() >
static_cast<size_t>(index));
- gen_key_info_->SetAlgo(gen_key_info_->GetSupportedSubkeyAlgo()[index]);
+ gen_key_info_->SetAlgo(
+ std::get<2>(gen_key_info_->GetSupportedSubkeyAlgo()[index]));
refresh_widgets_state();
}