aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/GpgGenKeyInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/GpgGenKeyInfo.h')
-rw-r--r--src/core/GpgGenKeyInfo.h435
1 files changed, 435 insertions, 0 deletions
diff --git a/src/core/GpgGenKeyInfo.h b/src/core/GpgGenKeyInfo.h
new file mode 100644
index 00000000..59ced710
--- /dev/null
+++ b/src/core/GpgGenKeyInfo.h
@@ -0,0 +1,435 @@
+/**
+ * Copyright (C) 2021 Saturneric
+ *
+ * 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.
+ *
+ * GpgFrontend 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 GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from
+ * the gpg4usb project, which is under GPL-3.0-or-later.
+ *
+ * All the source code of GpgFrontend was modified and released by
+ * Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+#ifndef GPGFRONTEND_GPGGENKEYINFO_H
+#define GPGFRONTEND_GPGGENKEYINFO_H
+
+#include <boost/date_time.hpp>
+#include <boost/date_time/gregorian/greg_duration_types.hpp>
+#include <boost/format.hpp>
+#include <string>
+#include <vector>
+
+#include "GpgFrontend.h"
+
+namespace GpgFrontend {
+
+class GenKeyInfo {
+ bool standalone_ = false; ///<
+ bool subkey_ = false; ///<
+ std::string name_; ///<
+ std::string email_; ///<
+ std::string comment_; ///<
+
+ std::string algo_; ///<
+ int key_size_ = 2048;
+ boost::posix_time::ptime expired_ =
+ boost::posix_time::second_clock::local_time() +
+ boost::gregorian::years(2); ///<
+ bool non_expired_ = false; ///<
+
+ bool no_passphrase_ = false; ///<
+ bool allow_no_pass_phrase_ = true; ///<
+
+ int suggest_max_key_size_ = 4096; ///<
+ int suggest_size_addition_step_ = 1024; ///<
+ int suggest_min_key_size_ = 1024; ///<
+
+ std::string passphrase_; ///<
+
+ public:
+ /**
+ * @brief Get the Supported Key Algo object
+ *
+ * @return const std::vector<std::string>&
+ */
+ static const std::vector<std::string> &GetSupportedKeyAlgo();
+
+ /**
+ * @brief Get the Supported Subkey Algo object
+ *
+ * @return const std::vector<std::string>&
+ */
+ static const std::vector<std::string> &GetSupportedSubkeyAlgo();
+
+ /**
+ * @brief Get the Supported Key Algo Standalone object
+ *
+ * @return const std::vector<std::string>&
+ */
+ static const std::vector<std::string> &GetSupportedKeyAlgoStandalone();
+
+ /**
+ * @brief Get the Supported Subkey Algo Standalone object
+ *
+ * @return const std::vector<std::string>&
+ */
+ static const std::vector<std::string> &GetSupportedSubkeyAlgoStandalone();
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsSubKey() const { return subkey_; }
+
+ /**
+ * @brief Set the Is Sub Key object
+ *
+ * @param m_sub_key
+ */
+ void SetIsSubKey(bool m_sub_key) { GenKeyInfo::subkey_ = m_sub_key; }
+
+ /**
+ * @brief Get the Userid object
+ *
+ * @return std::string
+ */
+ [[nodiscard]] std::string GetUserid() const {
+ auto uid_format = boost::format("%1%(%2%)<%3%>") % this->name_ %
+ this->comment_ % this->email_;
+ return uid_format.str();
+ }
+
+ /**
+ * @brief Set the Name object
+ *
+ * @param m_name
+ */
+ void SetName(const std::string &m_name) { this->name_ = m_name; }
+
+ /**
+ * @brief Set the Email object
+ *
+ * @param m_email
+ */
+ void SetEmail(const std::string &m_email) { this->email_ = m_email; }
+
+ /**
+ * @brief Set the Comment object
+ *
+ * @param m_comment
+ */
+ void SetComment(const std::string &m_comment) { this->comment_ = m_comment; }
+
+ /**
+ * @brief Get the Name object
+ *
+ * @return std::string
+ */
+ [[nodiscard]] std::string GetName() const { return name_; }
+
+ /**
+ * @brief Get the Email object
+ *
+ * @return std::string
+ */
+ [[nodiscard]] std::string GetEmail() const { return email_; }
+
+ /**
+ * @brief Get the Comment object
+ *
+ * @return std::string
+ */
+ [[nodiscard]] std::string GetComment() const { return comment_; }
+
+ /**
+ * @brief Get the Algo object
+ *
+ * @return const std::string&
+ */
+ [[nodiscard]] const std::string &GetAlgo() const { return algo_; }
+
+ /**
+ * @brief Set the Algo object
+ *
+ * @param m_algo
+ */
+ void SetAlgo(const std::string &m_algo);
+
+ /**
+ * @brief Get the Key Size Str object
+ *
+ * @return std::string
+ */
+ [[nodiscard]] std::string GetKeySizeStr() const;
+
+ /**
+ * @brief Get the Key Size object
+ *
+ * @return int
+ */
+ [[nodiscard]] int GetKeyLength() const { return key_size_; }
+
+ /**
+ * @brief Set the Key Size object
+ *
+ * @param m_key_size
+ */
+ void SetKeyLength(int m_key_size);
+
+ /**
+ * @brief Get the Expired object
+ *
+ * @return const boost::posix_time::ptime&
+ */
+ [[nodiscard]] const boost::posix_time::ptime &GetExpireTime() const {
+ return expired_;
+ }
+
+ /**
+ * @brief Set the Expired object
+ *
+ * @param m_expired
+ */
+ void SetExpireTime(const boost::posix_time::ptime &m_expired);
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsNonExpired() const { return non_expired_; }
+
+ /**
+ * @brief Set the Non Expired object
+ *
+ * @param m_non_expired
+ */
+ void SetNonExpired(bool m_non_expired);
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsNoPassPhrase() const { return this->no_passphrase_; }
+
+ /**
+ * @brief Set the Non Pass Phrase object
+ *
+ * @param m_non_pass_phrase
+ */
+ void SetNonPassPhrase(bool m_non_pass_phrase) {
+ GenKeyInfo::no_passphrase_ = m_non_pass_phrase;
+ }
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsAllowSigning() const { return allow_signing_; }
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsAllowNoPassPhrase() const {
+ return allow_no_pass_phrase_;
+ }
+
+ /**
+ * @brief Set the Allow Signing object
+ *
+ * @param m_allow_signing
+ */
+ void SetAllowSigning(bool m_allow_signing) {
+ if (allow_change_signing_) GenKeyInfo::allow_signing_ = m_allow_signing;
+ }
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsAllowEncryption() const { return allow_encryption_; }
+
+ /**
+ * @brief Set the Allow Encryption object
+ *
+ * @param m_allow_encryption
+ */
+ void SetAllowEncryption(bool m_allow_encryption);
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsAllowCertification() const {
+ return allow_certification_;
+ }
+
+ /**
+ * @brief Set the Allow Certification object
+ *
+ * @param m_allow_certification
+ */
+ void SetAllowCertification(bool m_allow_certification);
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsAllowAuthentication() const {
+ return allow_authentication_;
+ }
+
+ /**
+ * @brief Set the Allow Authentication object
+ *
+ * @param m_allow_authentication
+ */
+ void SetAllowAuthentication(bool m_allow_authentication) {
+ if (allow_change_authentication_)
+ GenKeyInfo::allow_authentication_ = m_allow_authentication;
+ }
+
+ /**
+ * @brief Get the Pass Phrase object
+ *
+ * @return const std::string&
+ */
+ [[nodiscard]] const std::string &GetPassPhrase() const { return passphrase_; }
+
+ /**
+ * @brief Set the Pass Phrase object
+ *
+ * @param m_pass_phrase
+ */
+ void SetPassPhrase(const std::string &m_pass_phrase) {
+ GenKeyInfo::passphrase_ = m_pass_phrase;
+ }
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsAllowChangeSigning() const {
+ return allow_change_signing_;
+ }
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsAllowChangeEncryption() const {
+ return allow_change_encryption_;
+ }
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsAllowChangeCertification() const {
+ return allow_change_certification_;
+ }
+
+ /**
+ * @brief
+ *
+ * @return true
+ * @return false
+ */
+ [[nodiscard]] bool IsAllowChangeAuthentication() const {
+ return allow_change_authentication_;
+ }
+
+ /**
+ * @brief Get the Suggest Max Key Size object
+ *
+ * @return int
+ */
+ [[nodiscard]] int GetSuggestMaxKeySize() const {
+ return suggest_max_key_size_;
+ }
+
+ /**
+ * @brief Get the Suggest Min Key Size object
+ *
+ * @return int
+ */
+ [[nodiscard]] int GetSuggestMinKeySize() const {
+ return suggest_min_key_size_;
+ }
+
+ /**
+ * @brief Get the Size Change Step object
+ *
+ * @return int
+ */
+ [[nodiscard]] int GetSizeChangeStep() const {
+ return suggest_size_addition_step_;
+ }
+
+ private:
+ bool allow_encryption_ = true; ///<
+ bool allow_change_encryption_ = true; ///<
+ bool allow_certification_ = true; ///<
+ bool allow_change_certification_ = true; ///<
+ bool allow_authentication_ = true; ///<
+ bool allow_change_authentication_ = true; ///<
+ bool allow_signing_ = true; ///<
+ bool allow_change_signing_ = true; ///<
+
+ /**
+ * @brief
+ *
+ */
+ void reset_options();
+
+ public:
+ /**
+ * @brief Construct a new Gen Key Info object
+ *
+ * @param m_is_sub_key
+ * @param m_standalone
+ */
+ explicit GenKeyInfo(bool m_is_sub_key = false, bool m_standalone = false);
+};
+
+} // namespace GpgFrontend
+
+#endif // GPGFRONTEND_GPGGENKEYINFO_H