diff options
Diffstat (limited to 'src/core/function/gpg/GpgKeyOpera.cpp')
-rw-r--r-- | src/core/function/gpg/GpgKeyOpera.cpp | 36 |
1 files changed, 36 insertions, 0 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 |