diff options
author | Werner Koch <[email protected]> | 2023-03-14 15:16:40 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2023-03-15 08:42:02 +0000 |
commit | 2e065b4bd2d392a389652511264b5cbe19f90ba6 (patch) | |
tree | 6b2154224940913e16f6bcd85be51124596c19bc /common/sexputil.c | |
parent | agent: Make --disable-extended-key-format a dummy option. (diff) | |
download | gnupg-2e065b4bd2d392a389652511264b5cbe19f90ba6.tar.gz gnupg-2e065b4bd2d392a389652511264b5cbe19f90ba6.zip |
scd,openpgp: Switch key attributes between RSA and ECC in writekey.
* common/sexputil.c (get_rsa_pk_from_canon_sexp): Also allow private
keys.
(pubkey_algo_string): Ditto.
* scd/app-openpgp.c (do_writekey): Switch key attributes
--
The scd WRITEKEY command for OpenPGP cards missed proper support to
aautomagically switch key attributes based on the new key. We had
this only in GENKEY.
GnuPG-bug-id: 6378
Diffstat (limited to 'common/sexputil.c')
-rw-r--r-- | common/sexputil.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/common/sexputil.c b/common/sexputil.c index b7ddea8fc..29fe508b6 100644 --- a/common/sexputil.c +++ b/common/sexputil.c @@ -536,7 +536,8 @@ get_rsa_pk_from_canon_sexp (const unsigned char *keydata, size_t keydatalen, return err; if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))) return err; - if (!tok || toklen != 10 || memcmp ("public-key", tok, toklen)) + if (!tok || !((toklen == 10 && !memcmp ("public-key", tok, toklen)) + || (toklen == 11 && !memcmp ("private-key", tok, toklen)))) return gpg_error (GPG_ERR_BAD_PUBKEY); if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))) return err; @@ -1075,6 +1076,8 @@ pubkey_algo_string (gcry_sexp_t s_pkey, enum gcry_pk_algos *r_algoid) l1 = gcry_sexp_find_token (s_pkey, "public-key", 0); if (!l1) + l1 = gcry_sexp_find_token (s_pkey, "private-key", 0); + if (!l1) return xtrystrdup ("E_no_key"); { gcry_sexp_t l_tmp = gcry_sexp_cadr (l1); |