aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/function/gpg
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/function/gpg')
-rw-r--r--src/core/function/gpg/GpgKeyOpera.cpp36
-rw-r--r--src/core/function/gpg/GpgKeyOpera.h25
2 files changed, 59 insertions, 2 deletions
diff --git a/src/core/function/gpg/GpgKeyOpera.cpp b/src/core/function/gpg/GpgKeyOpera.cpp
index 23a848ee..32ae1f83 100644
--- a/src/core/function/gpg/GpgKeyOpera.cpp
+++ b/src/core/function/gpg/GpgKeyOpera.cpp
@@ -364,4 +364,40 @@ void GpgKeyOpera::DeleteKey(const KeyId& key_id) {
keys.push_back(key_id);
DeleteKeys(keys);
}
+
+auto AddADSK2KeyImpl(GpgContext& ctx, const GpgKey& key, const SubkeyId& s_fpr,
+ const DataObjectPtr& data_object) -> GpgError {
+ unsigned int flags = 0;
+ flags |= GPGME_CREATE_ADSK;
+
+ auto err =
+ gpgme_op_createsubkey(ctx.DefaultContext(), static_cast<gpgme_key_t>(key),
+ s_fpr.toLatin1(), 0, 0, flags);
+ if (CheckGpgError(err) != GPG_ERR_NO_ERROR) {
+ data_object->Swap({GpgGenerateKeyResult{}});
+ return err;
+ }
+
+ data_object->Swap(
+ {GpgGenerateKeyResult{gpgme_op_genkey_result(ctx.DefaultContext())}});
+ return CheckGpgError(err);
+}
+
+void GpgKeyOpera::AddADSK2Key(const GpgKey& key, const SubkeyId& s_fpr,
+ const GpgOperationCallback& callback) {
+ RunGpgOperaAsync(
+ [=](const DataObjectPtr& data_object) -> GpgError {
+ return AddADSK2KeyImpl(ctx_, key, s_fpr, data_object);
+ },
+ callback, "gpgme_op_createsubkey_adsk", "2.4.1");
+}
+
+auto GpgKeyOpera::AddADSK2KeySync(const GpgKey& key, const SubkeyId& s_fpr)
+ -> std::tuple<GpgError, DataObjectPtr> {
+ return RunGpgOperaSync(
+ [=](const DataObjectPtr& data_object) -> GpgError {
+ return AddADSK2KeyImpl(ctx_, key, s_fpr, data_object);
+ },
+ "gpgme_op_createsubkey_adsk", "2.4.1");
+}
} // namespace GpgFrontend
diff --git a/src/core/function/gpg/GpgKeyOpera.h b/src/core/function/gpg/GpgKeyOpera.h
index f6b7143e..f84333cc 100644
--- a/src/core/function/gpg/GpgKeyOpera.h
+++ b/src/core/function/gpg/GpgKeyOpera.h
@@ -28,8 +28,6 @@
#pragma once
-#include <functional>
-
#include "core/function/gpg/GpgContext.h"
#include "core/function/gpg/GpgKeyGetter.h"
#include "core/typedef/GpgTypedef.h"
@@ -108,6 +106,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyOpera
*/
auto ModifyTOFUPolicy(const GpgKey& key, gpgme_tofu_policy_t tofu_policy)
-> GpgFrontend::GpgError;
+
/**
* @brief
*
@@ -170,6 +169,28 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyOpera
const QSharedPointer<KeyGenerateInfo>& s_params)
-> std::tuple<GpgError, DataObjectPtr>;
+ /**
+ * @brief
+ *
+ * @param key
+ * @param s_fpr
+ * @param callback
+ * @return auto
+ */
+ void AddADSK2Key(const GpgKey& key, const SubkeyId& s_fpr,
+ const GpgOperationCallback& callback);
+
+ /**
+ * @brief
+ *
+ * @param key
+ * @param s_fpr
+ * @param callback
+ * @return auto
+ */
+ auto AddADSK2KeySync(const GpgKey& key, const SubkeyId& s_fpr)
+ -> std::tuple<GpgError, DataObjectPtr>;
+
private:
GpgContext& ctx_ =
GpgContext::GetInstance(SingletonFunctionObject::GetChannel()); ///<