diff options
author | saturneric <[email protected]> | 2024-01-10 03:41:34 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2024-01-10 03:41:34 +0000 |
commit | 802d7ed9907a08941af353fd65c6d528a8d5ba2c (patch) | |
tree | 4362de48824e960053fbb57fc29f078797af68e3 /src/core/function/KeyPackageOperator.cpp | |
parent | fix: slove some of the app building issues (diff) | |
download | GpgFrontend-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.cpp | 53 |
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); |