diff options
Diffstat (limited to 'src/gpg/GpgGenKeyInfo.h')
-rw-r--r-- | src/gpg/GpgGenKeyInfo.h | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/src/gpg/GpgGenKeyInfo.h b/src/gpg/GpgGenKeyInfo.h new file mode 100644 index 00000000..53b0c9f1 --- /dev/null +++ b/src/gpg/GpgGenKeyInfo.h @@ -0,0 +1,167 @@ +/** + * 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. + * + */ + +#ifndef GPGFRONTEND_GPGGENKEYINFO_H +#define GPGFRONTEND_GPGGENKEYINFO_H + +#include <boost/date_time.hpp> +#include <boost/date_time/gregorian/greg_duration_types.hpp> +#include <string> +#include <vector> + +namespace GpgFrontend { + +class GenKeyInfo { + bool subKey = true; + std::string userid; + std::string algo; + int keySize = 2048; + boost::gregorian::date expired = + boost::gregorian::day_clock::local_day() + boost::gregorian::years(2); + bool nonExpired = false; + + bool noPassPhrase = false; + bool allowNoPassPhrase = true; + + int suggestMaxKeySize = 4096; + int suggestSizeAdditionStep = 1024; + int suggestMinKeySize = 1024; + + std::string passPhrase; + + public: + static const std::vector<std::string> SupportedKeyAlgo; + + static const std::vector<std::string> SupportedSubkeyAlgo; + + [[nodiscard]] bool isSubKey() const { return subKey; } + + void setIsSubKey(bool m_sub_key) { GenKeyInfo::subKey = m_sub_key; } + + [[nodiscard]] const std::string &getUserid() const { return userid; } + + void setUserid(const std::string &m_userid) { GenKeyInfo::userid = m_userid; } + + [[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 keySize; } + + void setKeySize(int m_key_size); + + [[nodiscard]] const boost::gregorian::date &getExpired() const { + return expired; + } + + void setExpired(const boost::gregorian::date &m_expired); + + [[nodiscard]] bool isNonExpired() const { return nonExpired; } + + void setNonExpired(bool m_non_expired); + + [[nodiscard]] bool isNoPassPhrase() const { return this->noPassPhrase; } + + void setNonPassPhrase(bool m_non_pass_phrase) { + GenKeyInfo::noPassPhrase = m_non_pass_phrase; + } + + [[nodiscard]] bool isAllowSigning() const { return allowSigning; } + + [[nodiscard]] bool isAllowNoPassPhrase() const { return allowNoPassPhrase; } + + 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 suggestMaxKeySize; } + + [[nodiscard]] int getSuggestMinKeySize() const { return suggestMinKeySize; } + + [[nodiscard]] int getSizeChangeStep() const { + return suggestSizeAdditionStep; + } + + 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) : subKey(m_is_sub_key) { + setAlgo("rsa"); + } +}; + +} // namespace GpgFrontend + +#endif // GPGFRONTEND_GPGGENKEYINFO_H |