diff options
author | NIIBE Yutaka <[email protected]> | 2022-04-13 08:06:28 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2022-04-13 08:06:28 +0000 |
commit | ad7a9b0a6ab8287cdf895cc8bce236ed5b019b88 (patch) | |
tree | 39a8f21087dd8431228f7079c904965e950c71a6 | |
parent | Output v5 signature. (diff) | |
download | gnupg-ad7a9b0a6ab8287cdf895cc8bce236ed5b019b88.tar.gz gnupg-ad7a9b0a6ab8287cdf895cc8bce236ed5b019b88.zip |
agent: Support importing v5 key.
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | agent/cvt-openpgp.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/agent/cvt-openpgp.c b/agent/cvt-openpgp.c index 76932a7a8..95077625e 100644 --- a/agent/cvt-openpgp.c +++ b/agent/cvt-openpgp.c @@ -32,7 +32,7 @@ /* Helper to pass data via the callback to do_unprotect. */ struct try_do_unprotect_arg_s { - int is_v4; + int pkt_version; int is_protected; int pubkey_algo; const char *curve; @@ -737,7 +737,7 @@ try_do_unprotect_cb (struct pin_entry_info_s *pi) struct try_do_unprotect_arg_s *arg = pi->check_cb_arg; err = do_unprotect (pi->pin, - arg->is_v4? 4:3, + arg->pkt_version, arg->pubkey_algo, arg->is_protected, arg->curve, arg->skey, arg->skeysize, @@ -772,7 +772,7 @@ convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp, int dontcare_exist, size_t valuelen; char *string; int idx; - int is_v4, is_protected; + int pkt_version, is_protected; int pubkey_algo; int protect_algo = 0; char iv[16]; @@ -802,9 +802,16 @@ convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp, int dontcare_exist, if (!list) goto bad_seckey; value = gcry_sexp_nth_data (list, 1, &valuelen); - if (!value || valuelen != 1 || !(value[0] == '3' || value[0] == '4')) + if (!value || valuelen != 1) + goto bad_seckey; + if (value[0] == '3') + pkt_version = 3; + else if (value[0] == '4') + pkt_version = 4; + else if (value[0] == '5') + pkt_version = 5; + else goto bad_seckey; - is_v4 = (value[0] == '4'); gcry_sexp_release (list); list = gcry_sexp_find_token (top_list, "protection", 0); @@ -948,7 +955,7 @@ convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp, int dontcare_exist, gcry_sexp_release (top_list); top_list = NULL; #if 0 - log_debug ("XXX is_v4=%d\n", is_v4); + log_debug ("XXX pkt_version=%d\n", pkt_version); log_debug ("XXX pubkey_algo=%d\n", pubkey_algo); log_debug ("XXX is_protected=%d\n", is_protected); log_debug ("XXX protect_algo=%d\n", protect_algo); @@ -1002,7 +1009,7 @@ convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp, int dontcare_exist, pi->max_tries = 3; pi->check_cb = try_do_unprotect_cb; pi->check_cb_arg = &pi_arg; - pi_arg.is_v4 = is_v4; + pi_arg.pkt_version = pkt_version; pi_arg.is_protected = is_protected; pi_arg.pubkey_algo = pubkey_algo; pi_arg.curve = curve; |