From a6f82a3cbdbdd269796fecfb857440fda4e6ac6d Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 3 Feb 2025 15:42:38 +0100 Subject: feat: allow add and show ADSK --- src/core/function/gpg/GpgKeyOpera.cpp | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/core/function/gpg/GpgKeyOpera.cpp') 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(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 { + return RunGpgOperaSync( + [=](const DataObjectPtr& data_object) -> GpgError { + return AddADSK2KeyImpl(ctx_, key, s_fpr, data_object); + }, + "gpgme_op_createsubkey_adsk", "2.4.1"); +} } // namespace GpgFrontend -- cgit v1.2.3