diff options
author | Werner Koch <[email protected]> | 2025-05-12 12:42:57 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2025-05-12 12:42:57 +0000 |
commit | 905bd760a99a455af6717b66311fc2197dea1055 (patch) | |
tree | d0044a74fa34dbfba6ef522cf27c03cca64bec67 /src | |
parent | Change timestamp fields from signed to unsigned long. (diff) | |
download | gpgme-905bd760a99a455af6717b66311fc2197dea1055.tar.gz gpgme-905bd760a99a455af6717b66311fc2197dea1055.zip |
Add GPGME_CREATE_GROUP flag for gpgme_op_createkey and _createsubkey.
* src/gpgme.h.in (GPGME_CREATE_GROUP): New.
* src/engine-gpg.c (gpg_add_algo_usage_expire): Pass to engine.
* tests/run-genkey.c (parse_usage_string): Support here too.
Diffstat (limited to 'src')
-rw-r--r-- | src/engine-gpg.c | 29 | ||||
-rw-r--r-- | src/gpgme.h.in | 1 |
2 files changed, 27 insertions, 3 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c index eeb09c7b..e41fb69a 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -458,6 +458,27 @@ have_option_proc_all_sigs (engine_gpg_t gpg) static int +have_option_gen_group_key (engine_gpg_t gpg) +{ + static unsigned int flag; + + if (flag) + ; + else if (have_gpg_version (gpg, "2.5.7")) + flag = 1|2; + else if (have_gpg_version (gpg, "2.4.8") && !have_gpg_version (gpg, "2.5.0")) + flag = 1|2; + else if (have_gpg_version (gpg, "2.2.48") && !have_gpg_version (gpg, "2.3.0")) + flag = 1|2; + else + flag = 1; + + return !!(flag & 2); +} + + + +static int have_cmd_modify_recipients (engine_gpg_t gpg) { static unsigned int flag; @@ -2873,12 +2894,14 @@ gpg_add_algo_usage_expire (engine_gpg_t gpg, err = add_arg (gpg, algo? algo : "default"); if (!err) { - char tmpbuf[5*4+1]; - snprintf (tmpbuf, sizeof tmpbuf, "%s%s%s%s", + char tmpbuf[6*5+1]; + snprintf (tmpbuf, sizeof tmpbuf, "%s%s%s%s%s", (flags & GPGME_CREATE_SIGN)? " sign":"", (flags & GPGME_CREATE_ENCR)? " encr":"", (flags & GPGME_CREATE_CERT)? " cert":"", - (flags & GPGME_CREATE_AUTH)? " auth":""); + (flags & GPGME_CREATE_AUTH)? " auth":"", + ((flags & GPGME_CREATE_GROUP) + && have_option_gen_group_key (gpg))? " group":""); err = add_arg (gpg, *tmpbuf? tmpbuf : "default"); } if (!err) diff --git a/src/gpgme.h.in b/src/gpgme.h.in index d870b4eb..7f7b5a50 100644 --- a/src/gpgme.h.in +++ b/src/gpgme.h.in @@ -1883,6 +1883,7 @@ gpgme_error_t gpgme_op_export_keys (gpgme_ctx_t ctx, #define GPGME_CREATE_FORCE (1 << 12) /* Force creation. */ #define GPGME_CREATE_NOEXPIRE (1 << 13) /* Create w/o expiration. */ #define GPGME_CREATE_ADSK (1 << 14) /* Add an ADSK */ +#define GPGME_CREATE_GROUP (1 << 15) /* Flag as group key. */ /* An object to return result from a key generation. |