aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2020-07-16 10:00:46 +0000
committerWerner Koch <[email protected]>2020-07-16 10:00:46 +0000
commit7f9e0ca57b29cc96bd1ca717d891c11db7435c5a (patch)
tree626649d39737ff25e85c035e64777b8898cf03fe /src
parentcore: Deprecate the non-working trustlist functions. (diff)
downloadgpgme-7f9e0ca57b29cc96bd1ca717d891c11db7435c5a.tar.gz
gpgme-7f9e0ca57b29cc96bd1ca717d891c11db7435c5a.zip
core: New export mode to export as OpenSSH public key.
* src/gpgme.h.in (GPGME_EXPORT_MODE_SSH): New. * src/export.c (export_ext_start): Allow for new mode. * src/engine-gpg.c (export_common): Implement. * tests/run-export.c (status_cb): New. (main): New options --status and --ssh. -- GnuPG-bug-id: 4310 Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/engine-gpg.c10
-rw-r--r--src/export.c2
-rw-r--r--src/gpgme.h.in1
3 files changed, 12 insertions, 1 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c
index 9362e297..af2533d8 100644
--- a/src/engine-gpg.c
+++ b/src/engine-gpg.c
@@ -2330,6 +2330,7 @@ export_common (engine_gpg_t gpg, gpgme_export_mode_t mode,
if ((mode & ~(GPGME_EXPORT_MODE_EXTERN
|GPGME_EXPORT_MODE_MINIMAL
+ |GPGME_EXPORT_MODE_SSH
|GPGME_EXPORT_MODE_SECRET)))
return gpg_error (GPG_ERR_NOT_SUPPORTED);
@@ -2345,6 +2346,15 @@ export_common (engine_gpg_t gpg, gpgme_export_mode_t mode,
if (err)
;
+ else if ((mode & GPGME_EXPORT_MODE_SSH))
+ {
+ if (have_gpg_version (gpg, "2.1.11"))
+ err = add_arg (gpg, "--export-ssh-key");
+ else
+ err = gpg_error (GPG_ERR_NOT_SUPPORTED);
+ if (!err)
+ err = add_data (gpg, keydata, 1, 1);
+ }
else if ((mode & GPGME_EXPORT_MODE_EXTERN))
{
err = add_arg (gpg, "--send-keys");
diff --git a/src/export.c b/src/export.c
index abf260ad..4d576679 100644
--- a/src/export.c
+++ b/src/export.c
@@ -218,6 +218,7 @@ export_ext_start (gpgme_ctx_t ctx, int synchronous, const char *pattern[],
if ((mode & ~(GPGME_EXPORT_MODE_EXTERN
|GPGME_EXPORT_MODE_MINIMAL
|GPGME_EXPORT_MODE_SECRET
+ |GPGME_EXPORT_MODE_SSH
|GPGME_EXPORT_MODE_RAW
|GPGME_EXPORT_MODE_PKCS12)))
return gpg_error (GPG_ERR_INV_VALUE); /* Invalid flags in MODE. */
@@ -478,4 +479,3 @@ gpgme_op_export_keys (gpgme_ctx_t ctx,
return TRACE_ERR (err);
}
-
diff --git a/src/gpgme.h.in b/src/gpgme.h.in
index 2decc551..b4f817b4 100644
--- a/src/gpgme.h.in
+++ b/src/gpgme.h.in
@@ -407,6 +407,7 @@ gpgme_pinentry_mode_t;
#define GPGME_EXPORT_MODE_RAW 32
#define GPGME_EXPORT_MODE_PKCS12 64
#define GPGME_EXPORT_MODE_NOUID 128 /* Experimental(!)*/
+#define GPGME_EXPORT_MODE_SSH 256
typedef unsigned int gpgme_export_mode_t;