/** * 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 . * * 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 starting on May 12, 2021. * */ #ifndef GPGFRONTEND_GPGGENKEYINFO_H #define GPGFRONTEND_GPGGENKEYINFO_H #include #include #include #include #include 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: static const std::vector &getSupportedKeyAlgo(); static const std::vector &getSupportedSubkeyAlgo(); static const std::vector &getSupportedKeyAlgoStandalone(); static const std::vector &getSupportedSubkeyAlgoStandalone(); [[nodiscard]] bool isSubKey() const { return subkey_; } void setIsSubKey(bool m_sub_key) { GenKeyInfo::subkey_ = m_sub_key; } [[nodiscard]] std::string getUserid() const { auto uid_format = boost::format("%1%(%2%)<%3%>") % this->name_ % this->comment_ % this->email_; return uid_format.str(); } void setName(const std::string &m_name) { this->name_ = m_name; } void setEmail(const std::string &m_email) { this->email_ = m_email; } void setComment(const std::string &m_comment) { this->comment_ = m_comment; } [[nodiscard]] std::string getName() const { return name_; } [[nodiscard]] std::string getEmail() const { return email_; } [[nodiscard]] std::string getComment() const { return comment_; } [[nodiscard]] const std::string &getAlgo() const { return algo_; } void setAlgo(const std::string &m_algo); [[nodiscard]] std::string getKeySizeStr() const; [[nodiscard]] int getKeySize() const { return key_size_; } void setKeySize(int m_key_size); [[nodiscard]] const boost::posix_time::ptime &getExpired() const { return expired_; } void setExpired(const boost::posix_time::ptime &m_expired); [[nodiscard]] bool isNonExpired() const { return non_expired_; } void setNonExpired(bool m_non_expired); [[nodiscard]] bool isNoPassPhrase() const { return this->no_passphrase_; } void setNonPassPhrase(bool m_non_pass_phrase) { GenKeyInfo::no_passphrase_ = m_non_pass_phrase; } [[nodiscard]] bool isAllowSigning() const { return allowSigning; } [[nodiscard]] bool isAllowNoPassPhrase() const { return allow_no_pass_phrase_; } void setAllowSigning(bool m_allow_signing) { if (allowChangeSigning) GenKeyInfo::allowSigning = m_allow_signing; } [[nodiscard]] bool isAllowEncryption() const { return allowEncryption; } void setAllowEncryption(bool m_allow_encryption); [[nodiscard]] bool isAllowCertification() const { return allowCertification; } void setAllowCertification(bool m_allow_certification); [[nodiscard]] bool isAllowAuthentication() const { return allowAuthentication; } void setAllowAuthentication(bool m_allow_authentication) { if (allowChangeAuthentication) GenKeyInfo::allowAuthentication = m_allow_authentication; } [[nodiscard]] const std::string &getPassPhrase() const { return passphrase_; } void setPassPhrase(const std::string &m_pass_phrase) { GenKeyInfo::passphrase_ = m_pass_phrase; } [[nodiscard]] bool isAllowChangeSigning() const { return allowChangeSigning; } [[nodiscard]] bool isAllowChangeEncryption() const { return allowChangeEncryption; } [[nodiscard]] bool isAllowChangeCertification() const { return allowChangeCertification; } [[nodiscard]] bool isAllowChangeAuthentication() const { return allowChangeAuthentication; } [[nodiscard]] int getSuggestMaxKeySize() const { return suggest_max_key_size_; } [[nodiscard]] int getSuggestMinKeySize() const { return suggest_min_key_size_; } [[nodiscard]] int getSizeChangeStep() const { return suggest_size_addition_step_; } private: bool allowEncryption = true; bool allowChangeEncryption = true; bool allowCertification = true; bool allowChangeCertification = true; bool allowAuthentication = true; bool allowChangeAuthentication = true; bool allowSigning = true; bool allowChangeSigning = true; void reset_options(); public: explicit GenKeyInfo(bool m_is_sub_key = false, bool m_standalone = false); }; } // namespace GpgFrontend #endif // GPGFRONTEND_GPGGENKEYINFO_H