aboutsummaryrefslogtreecommitdiffstats
path: root/src/gpg/function/GpgKeyImportExporter.cpp
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2022-01-03 17:25:59 +0000
committerSaturneric <[email protected]>2022-01-03 17:25:59 +0000
commitc20c7b9bb81a09d54b288517092fe356bb808de4 (patch)
tree625db0ac06fdf95d5e886ab558e9d240f47730d1 /src/gpg/function/GpgKeyImportExporter.cpp
parent<fixed, refactor>(ui): Enhanced sending email function. (diff)
downloadGpgFrontend-c20c7b9bb81a09d54b288517092fe356bb808de4.tar.gz
GpgFrontend-c20c7b9bb81a09d54b288517092fe356bb808de4.zip
<feature, refactor>(core, ui): Key package generate.
1. refactor GpgKeyImportExporter to meet with key package generation. 2. add ExportKeyPackageDialog. 3. add Qt AES ability. 4. refactor Key List to provide menu ability control. 5. add check all and uncheck all ability to key list menu.
Diffstat (limited to 'src/gpg/function/GpgKeyImportExporter.cpp')
-rw-r--r--src/gpg/function/GpgKeyImportExporter.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/gpg/function/GpgKeyImportExporter.cpp b/src/gpg/function/GpgKeyImportExporter.cpp
index ca9b86d1..33f865a7 100644
--- a/src/gpg/function/GpgKeyImportExporter.cpp
+++ b/src/gpg/function/GpgKeyImportExporter.cpp
@@ -60,24 +60,34 @@ GpgFrontend::GpgImportInformation GpgFrontend::GpgKeyImportExporter::ImportKey(
* @param out_buffer output byte array
* @return if success
*/
-bool GpgFrontend::GpgKeyImportExporter::ExportKeys(
- KeyIdArgsListPtr& uid_list, ByteArrayPtr& out_buffer) const {
+bool GpgFrontend::GpgKeyImportExporter::ExportKeys(KeyIdArgsListPtr& uid_list,
+ ByteArrayPtr& out_buffer,
+ bool secret) const {
if (uid_list->empty()) return false;
+ std::stringstream ss;
+
+ int _mode = 0;
+
+ if (secret) _mode |= GPGME_EXPORT_MODE_SECRET;
+
// Alleviate another crash problem caused by an unknown array out-of-bounds
// access
auto all_success = true;
for (size_t i = 0; i < uid_list->size(); i++) {
GpgData data_out;
- auto err = gpgme_op_export(ctx, (*uid_list)[i].c_str(), 0, data_out);
+ auto err = gpgme_op_export(ctx, (*uid_list)[i].c_str(), _mode, data_out);
if (gpgme_err_code(err) != GPG_ERR_NO_ERROR) all_success = false;
DLOG(INFO) << "exportKeys read_bytes"
<< gpgme_data_seek(data_out, 0, SEEK_END);
auto temp_out_buffer = data_out.Read2Buffer();
- std::swap(out_buffer, temp_out_buffer);
+
+ ss << *temp_out_buffer << std::endl;
}
+ out_buffer = std::make_unique<ByteArray>(ss.str());
+
return all_success;
}
@@ -87,11 +97,12 @@ bool GpgFrontend::GpgKeyImportExporter::ExportKeys(
* @param outBuffer output byte array
* @return if success
*/
-bool GpgFrontend::GpgKeyImportExporter::ExportKeys(
- const KeyArgsList& keys, ByteArrayPtr& out_buffer) const {
+bool GpgFrontend::GpgKeyImportExporter::ExportKeys(const KeyArgsList& keys,
+ ByteArrayPtr& out_buffer,
+ bool secret) const {
KeyIdArgsListPtr key_ids = std::make_unique<std::vector<std::string>>();
for (const auto& key : keys) key_ids->push_back(key.id());
- return ExportKeys(key_ids, out_buffer);
+ return ExportKeys(key_ids, out_buffer, secret);
}
/**