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.cpp47
1 files changed, 22 insertions, 25 deletions
diff --git a/src/core/function/gpg/GpgBasicOperator.cpp b/src/core/function/gpg/GpgBasicOperator.cpp
index 4a615813..0c027285 100644
--- a/src/core/function/gpg/GpgBasicOperator.cpp
+++ b/src/core/function/gpg/GpgBasicOperator.cpp
@@ -31,6 +31,7 @@
#include <gpg-error.h>
#include "core/GpgModel.h"
+#include "core/model/GpgDecryptResult.h"
#include "core/model/GpgEncryptResult.h"
#include "core/utils/AsyncUtils.h"
#include "core/utils/GpgUtils.h"
@@ -40,25 +41,22 @@ namespace GpgFrontend {
GpgFrontend::GpgBasicOperator::GpgBasicOperator(int channel)
: SingletonFunctionObject<GpgBasicOperator>(channel) {}
-void GpgFrontend::GpgBasicOperator::Encrypt(KeyListPtr keys,
- ConstBypeArrayRef in_buffer,
+void GpgFrontend::GpgBasicOperator::Encrypt(std::vector<GpgKey> keys,
+ GFBuffer in_buffer, bool ascii,
const GpgOperationCallback& cb) {
RunGpgOperaAsync(
[=](const DataObjectPtr& data_object) -> GpgError {
- std::vector<gpgme_key_t> recipients;
- for (const auto& key : *keys) {
- recipients.emplace_back(key);
- }
+ std::vector<gpgme_key_t> recipients(keys.begin(), keys.end());
// Last entry data_in array has to be nullptr
recipients.emplace_back(nullptr);
- GpgData data_in(in_buffer.data(), in_buffer.size());
+ GpgData data_in(in_buffer);
GpgData data_out;
- auto err = CheckGpgError(
- gpgme_op_encrypt(ctx_.DefaultContext(), recipients.data(),
- GPGME_ENCRYPT_ALWAYS_TRUST, data_in, 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()});
@@ -68,23 +66,22 @@ void GpgFrontend::GpgBasicOperator::Encrypt(KeyListPtr keys,
cb, "gpgme_op_encrypt", "2.1.0");
}
-auto GpgFrontend::GpgBasicOperator::Decrypt(
- GFBuffer in_buffer, GpgFrontend::ByteArrayPtr& out_buffer,
- GpgFrontend::GpgDecrResult& result) -> GpgFrontend::GpgError {
- GpgError err;
-
- GpgData data_in(in_buffer.Data(), in_buffer.Size());
- GpgData data_out;
- err =
- CheckGpgError(gpgme_op_decrypt(ctx_.DefaultContext(), data_in, data_out));
-
- auto temp_data_out = data_out.Read2Buffer();
- std::swap(temp_data_out, out_buffer);
+void GpgFrontend::GpgBasicOperator::Decrypt(GFBuffer in_buffer,
+ const GpgOperationCallback& cb) {
+ RunGpgOperaAsync(
+ [=](const DataObjectPtr& data_object) -> GpgError {
+ GpgData data_in(in_buffer);
+ GpgData data_out;
- auto temp_result = NewResult(gpgme_op_decrypt_result(ctx_.DefaultContext()));
- std::swap(result, temp_result);
+ auto err = CheckGpgError(
+ gpgme_op_decrypt(ctx_.DefaultContext(), data_in, data_out));
+ data_object->Swap(
+ {GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())),
+ data_out.Read2GFBuffer()});
- return err;
+ return err;
+ },
+ cb, "gpgme_op_decrypt", "2.1.0");
}
auto GpgFrontend::GpgBasicOperator::Verify(BypeArrayRef& in_buffer,