aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/function/gpg/GpgBasicOperator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/function/gpg/GpgBasicOperator.cpp')
-rw-r--r--src/core/function/gpg/GpgBasicOperator.cpp46
1 files changed, 20 insertions, 26 deletions
diff --git a/src/core/function/gpg/GpgBasicOperator.cpp b/src/core/function/gpg/GpgBasicOperator.cpp
index 0c027285..aa944348 100644
--- a/src/core/function/gpg/GpgBasicOperator.cpp
+++ b/src/core/function/gpg/GpgBasicOperator.cpp
@@ -54,12 +54,12 @@ void GpgFrontend::GpgBasicOperator::Encrypt(std::vector<GpgKey> keys,
GpgData data_in(in_buffer);
GpgData data_out;
- auto err = CheckGpgError(gpgme_op_encrypt(
- ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(),
- recipients.data(), GPGME_ENCRYPT_ALWAYS_TRUST, data_in, data_out));
- data_object->Swap(
- {GpgEncryptResult(gpgme_op_encrypt_result(ctx_.DefaultContext())),
- data_out.Read2GFBuffer()});
+ auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext();
+ auto err = CheckGpgError(gpgme_op_encrypt(ctx, recipients.data(),
+ GPGME_ENCRYPT_ALWAYS_TRUST,
+ data_in, data_out));
+ data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx)),
+ data_out.Read2GFBuffer()});
return err;
},
@@ -222,27 +222,21 @@ auto GpgFrontend::GpgBasicOperator::GetSigners()
return signers;
}
-auto GpgFrontend::GpgBasicOperator::EncryptSymmetric(
- GpgFrontend::ByteArray& in_buffer, GpgFrontend::ByteArrayPtr& out_buffer,
- GpgFrontend::GpgEncrResult& result) -> gpg_error_t {
- // deepcopy from ByteArray to GpgData
- GpgData data_in(in_buffer.data(), in_buffer.size());
- GpgData data_out;
-
- GpgError err = CheckGpgError(gpgme_op_encrypt(ctx_.DefaultContext(), nullptr,
- GPGME_ENCRYPT_SYMMETRIC,
- data_in, data_out));
-
- auto temp_data_out = data_out.Read2Buffer();
- std::swap(temp_data_out, out_buffer);
+void GpgFrontend::GpgBasicOperator::EncryptSymmetric(
+ GFBuffer in_buffer, bool ascii, const GpgOperationCallback& cb) {
+ RunGpgOperaAsync(
+ [=](const DataObjectPtr& data_object) -> GpgError {
+ GpgData data_in(in_buffer);
+ GpgData data_out;
- // TODO(Saturneric): maybe a bug of gpgme
- if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
- auto temp_result =
- NewResult(gpgme_op_encrypt_result(ctx_.DefaultContext()));
- std::swap(result, temp_result);
- }
+ auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext();
+ auto err = CheckGpgError(gpgme_op_encrypt(
+ ctx, nullptr, GPGME_ENCRYPT_SYMMETRIC, data_in, data_out));
+ data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx)),
+ data_out.Read2GFBuffer()});
- return err;
+ return err;
+ },
+ cb, "gpgme_op_encrypt_symmetric", "2.1.0");
}
} // namespace GpgFrontend