aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/function/KeyPackageOperator.cpp
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2024-01-10 03:41:34 +0000
committersaturneric <[email protected]>2024-01-10 03:41:34 +0000
commit802d7ed9907a08941af353fd65c6d528a8d5ba2c (patch)
tree4362de48824e960053fbb57fc29f078797af68e3 /src/core/function/KeyPackageOperator.cpp
parentfix: slove some of the app building issues (diff)
downloadGpgFrontend-802d7ed9907a08941af353fd65c6d528a8d5ba2c.tar.gz
GpgFrontend-802d7ed9907a08941af353fd65c6d528a8d5ba2c.zip
feat: update core apis, functions and models
Diffstat (limited to 'src/core/function/KeyPackageOperator.cpp')
-rw-r--r--src/core/function/KeyPackageOperator.cpp53
1 files changed, 32 insertions, 21 deletions
diff --git a/src/core/function/KeyPackageOperator.cpp b/src/core/function/KeyPackageOperator.cpp
index 4232937a..cd8482f2 100644
--- a/src/core/function/KeyPackageOperator.cpp
+++ b/src/core/function/KeyPackageOperator.cpp
@@ -37,6 +37,7 @@
#include "core/function/gpg/GpgKeyGetter.h"
#include "core/function/gpg/GpgKeyImportExporter.h"
#include "core/typedef/CoreTypedef.h"
+#include "core/utils/GpgUtils.h"
#include "core/utils/IOUtils.h"
namespace GpgFrontend {
@@ -48,36 +49,46 @@ auto KeyPackageOperator::GeneratePassphrase(
return WriteFileStd(phrase_path, phrase);
}
-auto KeyPackageOperator::GenerateKeyPackage(
+void KeyPackageOperator::GenerateKeyPackage(
const std::filesystem::path& key_package_path,
- const std::string& key_package_name, KeyIdArgsListPtr& key_ids,
- std::string& phrase, bool secret) -> bool {
+ const std::string& key_package_name, const KeyArgsList& keys,
+ std::string& phrase, bool secret, const OperationCallback& cb) {
GF_CORE_LOG_DEBUG("generating key package: {}", key_package_name);
- ByteArrayPtr key_export_data = nullptr;
- if (!GpgKeyImportExporter::GetInstance().ExportAllKeys(
- key_ids, key_export_data, secret)) {
- GF_CORE_LOG_ERROR("failed to export keys");
- return false;
- }
-
- auto key = QByteArray::fromStdString(phrase);
- auto data = QString::fromStdString(*key_export_data).toLocal8Bit().toBase64();
-
- auto hash_key = QCryptographicHash::hash(key, QCryptographicHash::Sha256);
- QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB,
- QAESEncryption::Padding::ISO);
- auto encoded = encryption.encode(data, hash_key);
-
- GF_CORE_LOG_DEBUG("writing key package: {}", key_package_name);
- return WriteFileStd(key_package_path, encoded.toStdString());
+ GpgKeyImportExporter::GetInstance().ExportKeys(
+ keys, secret, true, [=](GpgError err, const DataObjectPtr& data_obj) {
+ if (CheckGpgError(err) != GPG_ERR_NO_ERROR) {
+ GF_LOG_ERROR("export keys error, reason: {}",
+ DescribeGpgErrCode(err).second);
+ cb(-1, data_obj);
+ return;
+ }
+
+ if (data_obj == nullptr || !data_obj->Check<GFBuffer>()) {
+ throw std::runtime_error("data object doesn't pass checking");
+ }
+
+ auto gf_buffer = ExtractParams<GFBuffer>(data_obj, 0);
+ auto key = QByteArray::fromStdString(phrase);
+ auto data = gf_buffer.ConvertToQByteArray().toBase64();
+ auto hash_key =
+ QCryptographicHash::hash(key, QCryptographicHash::Sha256);
+ QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB,
+ QAESEncryption::Padding::ISO);
+ auto encoded_data = encryption.encode(data, hash_key);
+ GF_CORE_LOG_DEBUG("writing key package, name: {}", key_package_name);
+
+ cb(WriteFileStd(key_package_path, encoded_data.toStdString()) ? 0 : -1,
+ TransferParams());
+ return;
+ });
}
auto KeyPackageOperator::ImportKeyPackage(
const std::filesystem::path& key_package_path,
const std::filesystem::path& phrase_path, GpgImportInformation& import_info)
-> bool {
- GF_CORE_LOG_DEBUG("importing key package: {]", key_package_path.u8string());
+ GF_CORE_LOG_DEBUG("importing key package: {}", key_package_path.u8string());
std::string encrypted_data;
ReadFileStd(key_package_path, encrypted_data);