aboutsummaryrefslogtreecommitdiffstats
path: root/src/gpg/function
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/gpg/function/BasicOperator.cpp12
-rw-r--r--src/gpg/function/BasicOperator.h12
-rw-r--r--src/gpg/function/GpgFileOpera.h2
-rw-r--r--src/gpg/function/GpgKeyGetter.cpp11
-rw-r--r--src/gpg/function/GpgKeyGetter.h4
-rw-r--r--src/gpg/function/GpgKeyImportExportor.cpp8
-rw-r--r--src/gpg/function/GpgKeyImportExportor.h6
-rw-r--r--src/gpg/function/GpgKeyManager.cpp41
-rw-r--r--src/gpg/function/GpgKeyManager.h24
-rw-r--r--src/gpg/function/GpgKeyOpera.cpp45
-rw-r--r--src/gpg/function/GpgKeyOpera.h28
-rw-r--r--src/gpg/function/UidOperator.cpp30
-rw-r--r--src/gpg/function/UidOperator.h33
13 files changed, 147 insertions, 109 deletions
diff --git a/src/gpg/function/BasicOperator.cpp b/src/gpg/function/BasicOperator.cpp
index fbf9afb1..0e44c9e0 100644
--- a/src/gpg/function/BasicOperator.cpp
+++ b/src/gpg/function/BasicOperator.cpp
@@ -29,7 +29,7 @@
GpgFrontend::GpgError GpgFrontend::BasicOperator::Encrypt(
GpgFrontend::KeyArgsList&& keys,
GpgFrontend::BypeArrayRef in_buffer,
- GpgFrontend::BypeArrayPtr& out_buffer,
+ GpgFrontend::ByteArrayPtr& out_buffer,
GpgFrontend::GpgEncrResult& result) {
// gpgme_encrypt_result_t e_result;
gpgme_key_t recipients[keys.size() + 1];
@@ -57,7 +57,7 @@ GpgFrontend::GpgError GpgFrontend::BasicOperator::Encrypt(
GpgFrontend::GpgError GpgFrontend::BasicOperator::Decrypt(
BypeArrayRef in_buffer,
- GpgFrontend::BypeArrayPtr& out_buffer,
+ GpgFrontend::ByteArrayPtr& out_buffer,
GpgFrontend::GpgDecrResult& result) {
gpgme_error_t err;
@@ -75,7 +75,7 @@ GpgFrontend::GpgError GpgFrontend::BasicOperator::Decrypt(
GpgFrontend::GpgError GpgFrontend::BasicOperator::Verify(
BypeArrayRef& in_buffer,
- BypeArrayPtr& sig_buffer,
+ ByteArrayPtr& sig_buffer,
GpgVerifyResult& result) const {
gpgme_error_t err;
@@ -95,7 +95,7 @@ GpgFrontend::GpgError GpgFrontend::BasicOperator::Verify(
GpgFrontend::GpgError GpgFrontend::BasicOperator::Sign(KeyArgsList&& keys,
BypeArrayRef in_buffer,
- BypeArrayPtr& out_buffer,
+ ByteArrayPtr& out_buffer,
gpgme_sig_mode_t mode,
GpgSignResult& result) {
gpgme_error_t err;
@@ -132,7 +132,7 @@ GpgFrontend::GpgError GpgFrontend::BasicOperator::Sign(KeyArgsList&& keys,
gpgme_error_t GpgFrontend::BasicOperator::DecryptVerify(
BypeArrayRef in_buffer,
- BypeArrayPtr& out_buffer,
+ ByteArrayPtr& out_buffer,
GpgDecrResult& decrypt_result,
GpgVerifyResult& verify_result) {
gpgme_error_t err;
@@ -157,7 +157,7 @@ gpgme_error_t GpgFrontend::BasicOperator::EncryptSign(
KeyArgsList&& keys,
KeyArgsList&& signers,
BypeArrayRef in_buffer,
- BypeArrayPtr& out_buffer,
+ ByteArrayPtr& out_buffer,
GpgEncrResult& encr_result,
GpgSignResult& sign_result) {
gpgme_error_t err;
diff --git a/src/gpg/function/BasicOperator.h b/src/gpg/function/BasicOperator.h
index 2e5da307..e8fa943d 100644
--- a/src/gpg/function/BasicOperator.h
+++ b/src/gpg/function/BasicOperator.h
@@ -36,32 +36,32 @@ class BasicOperator : public SingletonFunctionObject<BasicOperator> {
public:
gpg_error_t Encrypt(KeyArgsList&& keys,
BypeArrayRef in_buffer,
- BypeArrayPtr& out_buffer,
+ ByteArrayPtr& out_buffer,
GpgEncrResult& result);
gpgme_error_t EncryptSign(KeyArgsList&& keys,
KeyArgsList&& signers,
BypeArrayRef in_buffer,
- BypeArrayPtr& out_buffer,
+ ByteArrayPtr& out_buffer,
GpgEncrResult& encr_result,
GpgSignResult& sign_result);
gpgme_error_t Decrypt(BypeArrayRef in_buffer,
- BypeArrayPtr& out_buffer,
+ ByteArrayPtr& out_buffer,
GpgDecrResult& result);
gpgme_error_t DecryptVerify(BypeArrayRef in_buffer,
- BypeArrayPtr& out_buffer,
+ ByteArrayPtr& out_buffer,
GpgDecrResult& decrypt_result,
GpgVerifyResult& verify_result);
gpgme_error_t Verify(BypeArrayRef in_buffer,
- BypeArrayPtr& sig_buffer,
+ ByteArrayPtr& sig_buffer,
GpgVerifyResult& result) const;
gpg_error_t Sign(KeyArgsList&& key_fprs,
BypeArrayRef in_buffer,
- BypeArrayPtr& out_buffer,
+ ByteArrayPtr& out_buffer,
gpgme_sig_mode_t mode,
GpgSignResult& result);
diff --git a/src/gpg/function/GpgFileOpera.h b/src/gpg/function/GpgFileOpera.h
index 2eac251b..dece2e52 100644
--- a/src/gpg/function/GpgFileOpera.h
+++ b/src/gpg/function/GpgFileOpera.h
@@ -31,7 +31,7 @@
namespace GpgFrontend {
-class GpgFileOpera {
+class GpgFileOpera : public SingletonFunctionObject<GpgFileOpera> {
public:
GpgError EncryptFile(KeyArgsList&& keys,
const std::string& path,
diff --git a/src/gpg/function/GpgKeyGetter.cpp b/src/gpg/function/GpgKeyGetter.cpp
index f2413706..ce4c9899 100644
--- a/src/gpg/function/GpgKeyGetter.cpp
+++ b/src/gpg/function/GpgKeyGetter.cpp
@@ -44,10 +44,10 @@ GpgFrontend::GpgKey GpgFrontend::GpgKeyGetter::GetPubkey(
return GpgKey(std::move(_p_key));
}
-GpgFrontend::KeyListPtr GpgFrontend::GpgKeyGetter::FetchKey() {
+GpgFrontend::KeyLinkListPtr GpgFrontend::GpgKeyGetter::FetchKey() {
gpgme_error_t err;
- auto keys_list = std::make_unique<std::vector<GpgKey>>();
+ auto keys_list = std::make_unique<GpgKeyLinkList>();
err = gpgme_op_keylist_start(ctx, nullptr, 0);
assert(check_gpg_error_2_err_code(err) == GPG_ERR_NO_ERROR);
@@ -63,3 +63,10 @@ GpgFrontend::KeyListPtr GpgFrontend::GpgKeyGetter::FetchKey() {
return keys_list;
}
+GpgFrontend::KeyListPtr GpgFrontend::GpgKeyGetter::GetKeys(
+ const KeyIdArgsListPtr& ids) {
+ auto keys = std::make_unique<KeyArgsList>();
+ for (const auto& id : *ids)
+ keys->push_back(GetKey(id));
+ return keys;
+}
diff --git a/src/gpg/function/GpgKeyGetter.h b/src/gpg/function/GpgKeyGetter.h
index af22e2f2..8eab4e10 100644
--- a/src/gpg/function/GpgKeyGetter.h
+++ b/src/gpg/function/GpgKeyGetter.h
@@ -37,9 +37,11 @@ class GpgKeyGetter : public SingletonFunctionObject<GpgKeyGetter> {
GpgKey GetKey(const std::string& fpr);
+ KeyListPtr GetKeys(const KeyIdArgsListPtr& ids);
+
GpgKey GetPubkey(const std::string& fpr);
- KeyListPtr FetchKey();
+ KeyLinkListPtr FetchKey();
private:
GpgContext& ctx =
diff --git a/src/gpg/function/GpgKeyImportExportor.cpp b/src/gpg/function/GpgKeyImportExportor.cpp
index 98ffc328..bdfc25bd 100644
--- a/src/gpg/function/GpgKeyImportExportor.cpp
+++ b/src/gpg/function/GpgKeyImportExportor.cpp
@@ -61,7 +61,7 @@ GpgFrontend::GpgImportInformation GpgFrontend::GpgKeyImportExportor::ImportKey(
*/
bool GpgFrontend::GpgKeyImportExportor::ExportKeys(
KeyIdArgsListPtr& uid_list,
- BypeArrayPtr& out_buffer) const {
+ ByteArrayPtr& out_buffer) const {
if (uid_list->empty())
return false;
@@ -89,8 +89,8 @@ bool GpgFrontend::GpgKeyImportExportor::ExportKeys(
* @return if success
*/
bool GpgFrontend::GpgKeyImportExportor::ExportKeys(
- KeyArgsList& keys,
- BypeArrayPtr& out_buffer) const {
+ const KeyArgsList& keys,
+ ByteArrayPtr& out_buffer) const {
KeyIdArgsListPtr key_ids = std::make_unique<std::vector<std::string>>();
for (const auto& key : keys)
key_ids->push_back(key.id());
@@ -105,7 +105,7 @@ bool GpgFrontend::GpgKeyImportExportor::ExportKeys(
*/
bool GpgFrontend::GpgKeyImportExportor::ExportSecretKey(
const GpgKey& key,
- BypeArrayPtr out_buffer) const {
+ ByteArrayPtr& out_buffer) const {
DLOG(INFO) << "Export Secret Key" << key.id().c_str();
gpgme_key_t target_key[2] = {gpgme_key_t(key), nullptr};
diff --git a/src/gpg/function/GpgKeyImportExportor.h b/src/gpg/function/GpgKeyImportExportor.h
index 2cdb4e80..d71daddb 100644
--- a/src/gpg/function/GpgKeyImportExportor.h
+++ b/src/gpg/function/GpgKeyImportExportor.h
@@ -97,11 +97,11 @@ class GpgKeyImportExportor
public:
GpgImportInformation ImportKey(StdBypeArrayPtr inBuffer);
- bool ExportKeys(KeyIdArgsListPtr& uid_list, BypeArrayPtr& out_buffer) const;
+ bool ExportKeys(KeyIdArgsListPtr& uid_list, ByteArrayPtr& out_buffer) const;
- bool ExportKeys(KeyArgsList& keys, BypeArrayPtr& outBuffer) const;
+ bool ExportKeys(const KeyArgsList& keys, ByteArrayPtr& outBuffer) const;
- bool ExportSecretKey(const GpgKey& key, BypeArrayPtr outBuffer) const;
+ bool ExportSecretKey(const GpgKey& key, ByteArrayPtr& outBuffer) const;
private:
GpgContext& ctx =
diff --git a/src/gpg/function/GpgKeyManager.cpp b/src/gpg/function/GpgKeyManager.cpp
index a6697bc4..361c00bd 100644
--- a/src/gpg/function/GpgKeyManager.cpp
+++ b/src/gpg/function/GpgKeyManager.cpp
@@ -23,14 +23,16 @@
*/
#include "gpg/function/GpgKeyManager.h"
-#include "gpg/function/BasicOperator.h"
-#include "gpg/function/GpgKeyGetter.h"
#include <boost/date_time/posix_time/conversion.hpp>
#include <string>
+#include "gpg/function/BasicOperator.h"
+#include "gpg/function/GpgKeyGetter.h"
bool GpgFrontend::GpgKeyManager::signKey(
- const GpgFrontend::GpgKey &target, GpgFrontend::KeyArgsList &keys,
- const std::string &uid, std::unique_ptr<boost::gregorian::date> &expires) {
+ const GpgFrontend::GpgKey& target,
+ GpgFrontend::KeyArgsList& keys,
+ const std::string& uid,
+ const std::unique_ptr<boost::gregorian::date>& expires) {
using namespace boost::posix_time;
BasicOperator::GetInstance().SetSigners(keys);
@@ -50,21 +52,26 @@ bool GpgFrontend::GpgKeyManager::signKey(
}
bool GpgFrontend::GpgKeyManager::revSign(
- const GpgFrontend::GpgKey &key,
- const GpgFrontend::GpgKeySignature &signature) {
-
- auto &key_getter = GpgKeyGetter::GetInstance();
- auto signing_key = key_getter.GetKey(signature.keyid());
-
- auto err = check_gpg_error(gpgme_op_revsig(ctx, gpgme_key_t(key),
- gpgme_key_t(signing_key),
- signature.uid().data(), 0));
- return check_gpg_error_2_err_code(err) == GPG_ERR_NO_ERROR;
+ const GpgFrontend::GpgKey& key,
+ const GpgFrontend::SignIdArgsListPtr& signature_id) {
+ auto& key_getter = GpgKeyGetter::GetInstance();
+
+ for (const auto& sign_id : *signature_id) {
+ auto signing_key = key_getter.GetKey(sign_id.first);
+ assert(signing_key.good());
+ auto err = check_gpg_error(gpgme_op_revsig(ctx, gpgme_key_t(key),
+ gpgme_key_t(signing_key),
+ sign_id.second.c_str(), 0));
+ if (check_gpg_error_2_err_code(err) != GPG_ERR_NO_ERROR)
+ return false;
+ }
+ return true;
}
bool GpgFrontend::GpgKeyManager::setExpire(
- const GpgFrontend::GpgKey &key, std::unique_ptr<GpgSubKey> &subkey,
- std::unique_ptr<boost::gregorian::date> &expires) {
+ const GpgFrontend::GpgKey& key,
+ std::unique_ptr<GpgSubKey>& subkey,
+ std::unique_ptr<boost::gregorian::date>& expires) {
using namespace boost::posix_time;
unsigned long expires_time = 0;
@@ -72,7 +79,7 @@ bool GpgFrontend::GpgKeyManager::setExpire(
if (expires != nullptr)
expires_time = to_time_t(ptime(*expires));
- const char *sub_fprs = nullptr;
+ const char* sub_fprs = nullptr;
if (subkey != nullptr)
sub_fprs = subkey->fpr().c_str();
diff --git a/src/gpg/function/GpgKeyManager.h b/src/gpg/function/GpgKeyManager.h
index 6d57c7d7..f50c8dcc 100644
--- a/src/gpg/function/GpgKeyManager.h
+++ b/src/gpg/function/GpgKeyManager.h
@@ -32,7 +32,7 @@
namespace GpgFrontend {
class GpgKeyManager : public SingletonFunctionObject<GpgKeyManager> {
-public:
+ public:
/**
* Sign a key pair(actually a certain uid)
* @param target target key pair
@@ -40,18 +40,22 @@ public:
* @param expires expire date and time of the signature
* @return if successful
*/
- bool signKey(const GpgKey &target, KeyArgsList &keys, const std::string &uid,
- std::unique_ptr<boost::gregorian::date> &expires);
+ bool signKey(const GpgKey& target,
+ KeyArgsList& keys,
+ const std::string& uid,
+ const std::unique_ptr<boost::gregorian::date>& expires);
- bool revSign(const GpgKey &key, const GpgKeySignature &signature);
+ bool revSign(const GpgFrontend::GpgKey& key,
+ const GpgFrontend::SignIdArgsListPtr& signature_id);
- bool setExpire(const GpgKey &key, std::unique_ptr<GpgSubKey> &subkey,
- std::unique_ptr<boost::gregorian::date> &expires);
+ bool setExpire(const GpgKey& key,
+ std::unique_ptr<GpgSubKey>& subkey,
+ std::unique_ptr<boost::gregorian::date>& expires);
-private:
- GpgContext &ctx = GpgContext::GetInstance();
+ private:
+ GpgContext& ctx = GpgContext::GetInstance();
};
-} // namespace GpgFrontend
+} // namespace GpgFrontend
-#endif // GPGFRONTEND_ZH_CN_TS_GPGKEYMANAGER_H
+#endif // GPGFRONTEND_ZH_CN_TS_GPGKEYMANAGER_H
diff --git a/src/gpg/function/GpgKeyOpera.cpp b/src/gpg/function/GpgKeyOpera.cpp
index f79fb2c3..f61534c5 100644
--- a/src/gpg/function/GpgKeyOpera.cpp
+++ b/src/gpg/function/GpgKeyOpera.cpp
@@ -41,9 +41,9 @@
* @param uidList key ids
*/
void GpgFrontend::GpgKeyOpera::DeleteKeys(
- GpgFrontend::KeyIdArgsListPtr uid_list) {
+ GpgFrontend::KeyIdArgsListPtr key_ids) {
GpgError err;
- for (const auto &tmp : *uid_list) {
+ for (const auto& tmp : *key_ids) {
auto key = GpgKeyGetter::GetInstance().GetKey(tmp);
if (key.good()) {
LOG(INFO) << "GpgKeyOpera DeleteKeys Get Key Good";
@@ -62,21 +62,21 @@ void GpgFrontend::GpgKeyOpera::DeleteKeys(
* @return if successful
*/
void GpgFrontend::GpgKeyOpera::SetExpire(
- const GpgKey &key, std::unique_ptr<GpgSubKey> &subkey,
- std::unique_ptr<boost::gregorian::date> &expires) {
+ const GpgKey& key,
+ const SubkeyId& subkey_id,
+ std::unique_ptr<boost::gregorian::date>& expires) {
unsigned long expires_time = 0;
if (expires != nullptr) {
using namespace boost::posix_time;
expires_time = to_time_t(ptime(*expires));
}
- const char *sub_fprs = nullptr;
-
- if (subkey != nullptr)
- sub_fprs = subkey->fpr().c_str();
-
- auto err =
- gpgme_op_setexpire(ctx, gpgme_key_t(key), expires_time, sub_fprs, 0);
+ GpgError err;
+ if (subkey_id.empty())
+ err = gpgme_op_setexpire(ctx, gpgme_key_t(key), expires_time, nullptr, 0);
+ else
+ err = gpgme_op_setexpire(ctx, gpgme_key_t(key), expires_time,
+ subkey_id.c_str(), 0);
assert(gpg_err_code(err) != GPG_ERR_NO_ERROR);
}
@@ -88,7 +88,8 @@ void GpgFrontend::GpgKeyOpera::SetExpire(
* @return the process doing this job
*/
void GpgFrontend::GpgKeyOpera::GenerateRevokeCert(
- const GpgKey &key, const std::string &output_file_name) {
+ const GpgKey& key,
+ const std::string& output_file_name) {
auto args = std::vector<std::string>{"--command-fd", "0",
"--status-fd", "1",
"-o", output_file_name.c_str(),
@@ -96,7 +97,7 @@ void GpgFrontend::GpgKeyOpera::GenerateRevokeCert(
using boost::process::async_pipe;
GpgCommandExecutor::GetInstance().Execute(
- args, [](async_pipe &in, async_pipe &out) -> void {
+ args, [](async_pipe& in, async_pipe& out) -> void {
boost::asio::streambuf buff;
boost::asio::read_until(in, buff, '\n');
@@ -112,13 +113,12 @@ void GpgFrontend::GpgKeyOpera::GenerateRevokeCert(
* @param params key generation args
* @return error information
*/
-GpgFrontend::GpgError
-GpgFrontend::GpgKeyOpera::GenerateKey(std::unique_ptr<GenKeyInfo> params) {
-
+GpgFrontend::GpgError GpgFrontend::GpgKeyOpera::GenerateKey(
+ const std::unique_ptr<GenKeyInfo>& params) {
auto userid_utf8 = params->getUserid();
- const char *userid = userid_utf8.c_str();
+ const char* userid = userid_utf8.c_str();
auto algo_utf8 = (params->getAlgo() + params->getKeySizeStr());
- const char *algo = algo_utf8.c_str();
+ const char* algo = algo_utf8.c_str();
unsigned long expires = 0;
{
using namespace boost::posix_time;
@@ -150,15 +150,14 @@ GpgFrontend::GpgKeyOpera::GenerateKey(std::unique_ptr<GenKeyInfo> params) {
* @param params opera args
* @return error info
*/
-GpgFrontend::GpgError
-GpgFrontend::GpgKeyOpera::GenerateSubkey(const GpgKey &key,
- std::unique_ptr<GenKeyInfo> params) {
-
+GpgFrontend::GpgError GpgFrontend::GpgKeyOpera::GenerateSubkey(
+ const GpgKey& key,
+ const std::unique_ptr<GenKeyInfo>& params) {
if (!params->isSubKey())
return GPG_ERR_CANCELED;
auto algo_utf8 = (params->getAlgo() + params->getKeySizeStr());
- const char *algo = algo_utf8.c_str();
+ const char* algo = algo_utf8.c_str();
unsigned long expires = 0;
{
using namespace boost::posix_time;
diff --git a/src/gpg/function/GpgKeyOpera.h b/src/gpg/function/GpgKeyOpera.h
index a635084d..36864cc7 100644
--- a/src/gpg/function/GpgKeyOpera.h
+++ b/src/gpg/function/GpgKeyOpera.h
@@ -32,23 +32,25 @@
namespace GpgFrontend {
class GenKeyInfo;
class GpgKeyOpera : public SingletonFunctionObject<GpgKeyOpera> {
-public:
- void DeleteKeys(KeyIdArgsListPtr uid_list);
+ public:
+ void DeleteKeys(KeyIdArgsListPtr key_ids);
- void SetExpire(const GpgKey &key, std::unique_ptr<GpgSubKey> &subkey,
- std::unique_ptr<boost::gregorian::date> &expires);
+ void SetExpire(const GpgKey& key,
+ const SubkeyId& subkey_id,
+ std::unique_ptr<boost::gregorian::date>& expires);
- void GenerateRevokeCert(const GpgKey &key,
- const std::string &output_file_name);
+ void GenerateRevokeCert(const GpgKey& key,
+ const std::string& output_file_name);
- GpgFrontend::GpgError GenerateKey(std::unique_ptr<GenKeyInfo> params);
+ GpgFrontend::GpgError GenerateKey(const std::unique_ptr<GenKeyInfo>& params);
- GpgFrontend::GpgError GenerateSubkey(const GpgKey &key,
- std::unique_ptr<GenKeyInfo> params);
+ GpgFrontend::GpgError GenerateSubkey(
+ const GpgKey& key,
+ const std::unique_ptr<GenKeyInfo>& params);
-private:
- GpgContext &ctx = GpgContext::GetInstance();
+ private:
+ GpgContext& ctx = GpgContext::GetInstance();
};
-} // namespace GpgFrontend
+} // namespace GpgFrontend
-#endif // _GPGKEYOPERA_H \ No newline at end of file
+#endif // _GPGKEYOPERA_H \ No newline at end of file
diff --git a/src/gpg/function/UidOperator.cpp b/src/gpg/function/UidOperator.cpp
index d0058540..5b02855b 100644
--- a/src/gpg/function/UidOperator.cpp
+++ b/src/gpg/function/UidOperator.cpp
@@ -26,34 +26,38 @@
#include "boost/format.hpp"
-bool GpgFrontend::UidOperator::addUID(const GpgFrontend::GpgKey &key,
- const GpgFrontend::GpgUID &uid) {
- auto userid = (boost::format("%1% (%2%) <%3%>") % uid.name() % uid.comment() %
- uid.email())
- .str();
- auto err = gpgme_op_adduid(ctx, gpgme_key_t(key), userid.c_str(), 0);
+bool GpgFrontend::UidOperator::addUID(const GpgFrontend::GpgKey& key,
+ const std::string& uid) {
+ auto err = gpgme_op_adduid(ctx, gpgme_key_t(key), uid.c_str(), 0);
if (check_gpg_error_2_err_code(err) == GPG_ERR_NO_ERROR)
return true;
else
return false;
}
-bool GpgFrontend::UidOperator::revUID(const GpgFrontend::GpgKey &key,
- const GpgFrontend::GpgUID &uid) {
- auto err = check_gpg_error(
- gpgme_op_revuid(ctx, gpgme_key_t(key), uid.uid().c_str(), 0));
+bool GpgFrontend::UidOperator::revUID(const GpgFrontend::GpgKey& key,
+ const std::string& uid) {
+ auto err =
+ check_gpg_error(gpgme_op_revuid(ctx, gpgme_key_t(key), uid.c_str(), 0));
if (check_gpg_error_2_err_code(err) == GPG_ERR_NO_ERROR)
return true;
else
return false;
}
-bool GpgFrontend::UidOperator::setPrimaryUID(const GpgFrontend::GpgKey &key,
- const GpgFrontend::GpgUID &uid) {
+bool GpgFrontend::UidOperator::setPrimaryUID(const GpgFrontend::GpgKey& key,
+ const std::string& uid) {
auto err = check_gpg_error(gpgme_op_set_uid_flag(
- ctx, gpgme_key_t(key), uid.uid().c_str(), "primary", nullptr));
+ ctx, gpgme_key_t(key), uid.c_str(), "primary", nullptr));
if (check_gpg_error_2_err_code(err) == GPG_ERR_NO_ERROR)
return true;
else
return false;
}
+bool GpgFrontend::UidOperator::addUID(const GpgFrontend::GpgKey& key,
+ const std::string& name,
+ const std::string& comment,
+ const std::string& email) {
+ auto uid = boost::format("%1 (%2) <%3>") % name % comment % email;
+ return addUID(key, uid.str());
+}
diff --git a/src/gpg/function/UidOperator.h b/src/gpg/function/UidOperator.h
index d5bbcb3b..e3068b1f 100644
--- a/src/gpg/function/UidOperator.h
+++ b/src/gpg/function/UidOperator.h
@@ -30,15 +30,28 @@
namespace GpgFrontend {
-class UidOperator {
-public:
+class UidOperator : public SingletonFunctionObject<UidOperator> {
+ public:
/**
* create a new uid in certain key pair
* @param key target key pair
- * @param uid uid args
+ * @param uid uid args(combine name&comment&email)
* @return if successful
*/
- bool addUID(const GpgKey &key, const GpgUID &uid);
+ bool addUID(const GpgKey& key, const std::string& uid);
+
+ /**
+ * create a new uid in certain key pair
+ * @param key target key pair
+ * @param name
+ * @param comment
+ * @param email
+ * @return
+ */
+ bool addUID(const GpgKey& key,
+ const std::string& name,
+ const std::string& comment,
+ const std::string& email);
/**
* Revoke(Delete) UID from certain key pair
@@ -46,7 +59,7 @@ public:
* @param uid target uid
* @return if successful
*/
- bool revUID(const GpgKey &key, const GpgUID &uid);
+ bool revUID(const GpgKey& key, const std::string& uid);
/**
* Set one of a uid of a key pair as primary
@@ -54,12 +67,12 @@ public:
* @param uid target uid
* @return if successful
*/
- bool setPrimaryUID(const GpgKey &key, const GpgUID &uid);
+ bool setPrimaryUID(const GpgKey& key, const std::string& uid);
-private:
- GpgContext &ctx = GpgContext::GetInstance();
+ private:
+ GpgContext& ctx = GpgContext::GetInstance();
};
-} // namespace GpgFrontend
+} // namespace GpgFrontend
-#endif // GPGFRONTEND_ZH_CN_TS_UIDOPERATOR_H
+#endif // GPGFRONTEND_ZH_CN_TS_UIDOPERATOR_H