/**
* 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 .
*
* 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 starting on May 12, 2021.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#ifndef GPGFRONTEND_GPGGENKEYINFO_H
#define GPGFRONTEND_GPGGENKEYINFO_H
#include
#include
#include
#include
#include
#include "GpgFrontend.h"
namespace GpgFrontend {
class GPGFRONTEND_CORE_EXPORT 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_; ///<
using KeyGenAlgo = std::pair;
public:
/**
* @brief Get the Supported Key Algo object
*
* @return const std::vector&
*/
static const std::vector &GetSupportedKeyAlgo();
/**
* @brief Get the Supported Subkey Algo object
*
* @return const std::vector&
*/
static const std::vector &GetSupportedSubkeyAlgo();
/**
* @brief Get the Supported Key Algo Standalone object
*
* @return const std::vector&
*/
static const std::vector &GetSupportedKeyAlgoStandalone();
/**
* @brief Get the Supported Subkey Algo Standalone object
*
* @return const std::vector&
*/
static const std::vector &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 GpgFrontend::GenKeyInfo::KeyGenAlgo &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