aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/function/gpg/GpgKeyImportExporter.cpp
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2024-11-18 14:31:25 +0000
committersaturneric <[email protected]>2024-11-18 14:31:25 +0000
commit91b3a5950f0d3243ad514f0832faf1549f222d3a (patch)
treefce00a530f6b66d30855d6ce4dcd2087e56f4de4 /src/core/function/gpg/GpgKeyImportExporter.cpp
parentfeat: use keys.openpgp.org as default for key publishing and refreshing (diff)
downloadGpgFrontend-91b3a5950f0d3243ad514f0832faf1549f222d3a.tar.gz
GpgFrontend-91b3a5950f0d3243ad514f0832faf1549f222d3a.zip
feat: support export a single subkey
Diffstat (limited to 'src/core/function/gpg/GpgKeyImportExporter.cpp')
-rw-r--r--src/core/function/gpg/GpgKeyImportExporter.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/core/function/gpg/GpgKeyImportExporter.cpp b/src/core/function/gpg/GpgKeyImportExporter.cpp
index d0494339..fa1f908f 100644
--- a/src/core/function/gpg/GpgKeyImportExporter.cpp
+++ b/src/core/function/gpg/GpgKeyImportExporter.cpp
@@ -174,4 +174,20 @@ void GpgKeyImportExporter::ExportAllKeys(const KeyArgsList& keys, bool secret,
cb, "gpgme_op_export_keys", "2.1.0");
}
+auto GpgKeyImportExporter::ExportSubkey(const QString& fpr, bool ascii) const
+ -> std::tuple<GpgError, GFBuffer> {
+ int mode = 0;
+ mode |= GPGME_EXPORT_MODE_SECRET_SUBKEY;
+
+ auto pattern = fpr;
+ if (!fpr.endsWith("!")) pattern += "!";
+
+ GpgData data_out;
+ auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext();
+ auto err =
+ gpgme_op_export(ctx, pattern.toLatin1().constData(), mode, data_out);
+ if (gpgme_err_code(err) != GPG_ERR_NO_ERROR) return {err, {}};
+
+ return {err, data_out.Read2GFBuffer()};
+}
} // namespace GpgFrontend