diff options
author | Ingo Klöcker <[email protected]> | 2022-01-04 14:23:40 +0000 |
---|---|---|
committer | Ingo Klöcker <[email protected]> | 2022-01-04 14:44:16 +0000 |
commit | 3da06d1096ee29d70656f07edcabc3bc4351104e (patch) | |
tree | 234d123456487d3bcca261f1c4625137d8561e10 /lang/cpp/src/context.cpp | |
parent | cpp: Mark ExportNoUID flag as obsolete (diff) | |
download | gpgme-3da06d1096ee29d70656f07edcabc3bc4351104e.tar.gz gpgme-3da06d1096ee29d70656f07edcabc3bc4351104e.zip |
cpp: Allow export of secret keys
* lang/cpp/src/context.h (class Context): New member functions
exportSecretKeys, startSecretKeyExport, exportKeys, startKeyExport.
(Context::exportPublicKeys, Context::startPublicKeyExport): Rename
argument flags/export_mode to mode.
* lang/cpp/src/context.cpp (Context::exportPublicKeys): Return error if
ExportSecret mode flag is set. Call exportKeys().
(Context::startPublicKeyExport): Return error if
ExportSecret mode flag is set. Call startKeyExport().
(Context::exportSecretKeys, Context::startSecretKeyExport,
Context::exportKeys, Context::startKeyExport): Implement.
--
This adds export functions for secret key exports and generic export
functions that can be used for any key export supported by
gpgme_op_export[_ext][_start].
GnuPG-bug-id: 5757
Diffstat (limited to 'lang/cpp/src/context.cpp')
-rw-r--r-- | lang/cpp/src/context.cpp | 81 |
1 files changed, 72 insertions, 9 deletions
diff --git a/lang/cpp/src/context.cpp b/lang/cpp/src/context.cpp index d01f9453..174a3c3b 100644 --- a/lang/cpp/src/context.cpp +++ b/lang/cpp/src/context.cpp @@ -582,36 +582,67 @@ KeyGenerationResult Context::keyGenerationResult() const } } -Error Context::exportPublicKeys(const char *pattern, Data &keyData, unsigned int flags) +Error Context::exportKeys(const char *pattern, Data &keyData, unsigned int mode) { d->lastop = Private::Export; Data::Private *const dp = keyData.impl(); - return Error(d->lasterr = gpgme_op_export(d->ctx, pattern, flags, dp ? dp->data : nullptr)); + return Error(d->lasterr = gpgme_op_export(d->ctx, pattern, mode, dp ? dp->data : nullptr)); } -Error Context::exportPublicKeys(const char *patterns[], Data &keyData, unsigned int flags) +Error Context::exportKeys(const char *patterns[], Data &keyData, unsigned int mode) { d->lastop = Private::Export; Data::Private *const dp = keyData.impl(); - return Error(d->lasterr = gpgme_op_export_ext(d->ctx, patterns, flags, dp ? dp->data : nullptr)); + return Error(d->lasterr = gpgme_op_export_ext(d->ctx, patterns, mode, dp ? dp->data : nullptr)); } -Error Context::startPublicKeyExport(const char *pattern, Data &keyData, unsigned int flags) +Error Context::startKeyExport(const char *pattern, Data &keyData, unsigned int mode) { d->lastop = Private::Export; Data::Private *const dp = keyData.impl(); - return Error(d->lasterr = gpgme_op_export_start(d->ctx, pattern, flags, dp ? dp->data : nullptr)); + return Error(d->lasterr = gpgme_op_export_start(d->ctx, pattern, mode, dp ? dp->data : nullptr)); } -Error Context::startPublicKeyExport(const char *patterns[], Data &keyData, unsigned int flags) +Error Context::startKeyExport(const char *patterns[], Data &keyData, unsigned int mode) { d->lastop = Private::Export; Data::Private *const dp = keyData.impl(); - return Error(d->lasterr = gpgme_op_export_ext_start(d->ctx, patterns, flags, dp ? dp->data : nullptr)); + return Error(d->lasterr = gpgme_op_export_ext_start(d->ctx, patterns, mode, dp ? dp->data : nullptr)); } +Error Context::exportPublicKeys(const char *pattern, Data &keyData, unsigned int mode) +{ + if (mode & ExportSecret) { + return Error::fromCode(GPG_ERR_INV_FLAG); + } + return exportKeys(pattern, keyData, mode); +} + +Error Context::exportPublicKeys(const char *patterns[], Data &keyData, unsigned int mode) +{ + if (mode & ExportSecret) { + return Error::fromCode(GPG_ERR_INV_FLAG); + } + return exportKeys(patterns, keyData, mode); +} + +Error Context::startPublicKeyExport(const char *pattern, Data &keyData, unsigned int mode) +{ + if (mode & ExportSecret) { + return Error::fromCode(GPG_ERR_INV_FLAG); + } + return startKeyExport(pattern, keyData, mode); +} + +Error Context::startPublicKeyExport(const char *patterns[], Data &keyData, unsigned int mode) +{ + if (mode & ExportSecret) { + return Error::fromCode(GPG_ERR_INV_FLAG); + } + return startKeyExport(patterns, keyData, mode); +} -/* Same as above but without flags */ +/* Same as above but without mode */ Error Context::exportPublicKeys(const char *pattern, Data &keyData) { return exportPublicKeys(pattern, keyData, 0); @@ -632,6 +663,38 @@ Error Context::startPublicKeyExport(const char *patterns[], Data &keyData) return startPublicKeyExport(patterns, keyData, 0); } +Error Context::exportSecretKeys(const char *pattern, Data &keyData, unsigned int mode) +{ + if (mode & ExportSecretSubkey) { + return Error::fromCode(GPG_ERR_INV_FLAG); + } + return exportKeys(pattern, keyData, mode|ExportSecret); +} + +Error Context::exportSecretKeys(const char *patterns[], Data &keyData, unsigned int mode) +{ + if (mode & ExportSecretSubkey) { + return Error::fromCode(GPG_ERR_INV_FLAG); + } + return exportKeys(patterns, keyData, mode|ExportSecret); +} + +Error Context::startSecretKeyExport(const char *pattern, Data &keyData, unsigned int mode) +{ + if (mode & ExportSecretSubkey) { + return Error::fromCode(GPG_ERR_INV_FLAG); + } + return startKeyExport(pattern, keyData, mode|ExportSecret); +} + +Error Context::startSecretKeyExport(const char *patterns[], Data &keyData, unsigned int mode) +{ + if (mode & ExportSecretSubkey) { + return Error::fromCode(GPG_ERR_INV_FLAG); + } + return startKeyExport(patterns, keyData, mode|ExportSecret); +} + ImportResult Context::importKeys(const Data &data) { d->lastop = Private::Import; |