diff options
author | saturneric <[email protected]> | 2025-02-03 14:42:38 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2025-02-03 14:42:38 +0000 |
commit | a6f82a3cbdbdd269796fecfb857440fda4e6ac6d (patch) | |
tree | d87609a7c8f50079ae648213ca979cb83923bd6d /src/core/function/gpg | |
parent | feat: upgrade gpgme to v1.24.1 (diff) | |
download | GpgFrontend-dev/2.1.6/adsk.tar.gz GpgFrontend-dev/2.1.6/adsk.zip |
feat: allow add and show ADSKdev/2.1.6/adsk
Diffstat (limited to 'src/core/function/gpg')
-rw-r--r-- | src/core/function/gpg/GpgKeyOpera.cpp | 36 | ||||
-rw-r--r-- | src/core/function/gpg/GpgKeyOpera.h | 25 |
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()); ///< |