diff options
author | Werner Koch <[email protected]> | 2020-11-13 14:43:30 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2020-11-13 15:34:21 +0000 |
commit | e37c2e184448f64e285f925ab9636b5f21be99f7 (patch) | |
tree | 559f321178f8fca079bd7eed38efb43e164a094a /g10/keydb.h | |
parent | gpgconf: Yet another fix for --apply-profile. (diff) | |
download | gnupg-e37c2e184448f64e285f925ab9636b5f21be99f7.tar.gz gnupg-e37c2e184448f64e285f925ab9636b5f21be99f7.zip |
gpg: Fix the encrypt+sign hash algo preference selection for ECDSA.
* g10/keydb.h (pref_hint): Change from union to struct and add field
'exact'. Adjust callers.
* g10/pkclist.c (algo_available): Take care of the exact hint.
* g10/sign.c (sign_file): Rework the hash detection from
recipient prefs.
--
This fixes a encrypt+sign case like: One recipient key has SHA512 as
highest ranked hash preference but the the signing key is a 256 bit
curve. Because we don't want to use a truncated hash with ECDSA, we
need to have an exact match - this is in particular important for
smartcard which check that the hash matches the curves.
Signed-off-by: Werner Koch <[email protected]>
Ported-from-stable: aeed0b93ff660fe271d8f98f8d5ce60aa5bf3ebe
Diffstat (limited to 'g10/keydb.h')
-rw-r--r-- | g10/keydb.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/g10/keydb.h b/g10/keydb.h index 5ef837be8..ed58b9443 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -134,9 +134,10 @@ struct pubkey_find_info { /* Helper type for preference functions. */ -union pref_hint +struct pref_hint { - int digest_length; + int digest_length; /* We want at least this digest length. */ + int exact; /* We need to use exactly this length. */ }; @@ -276,9 +277,9 @@ gpg_error_t find_and_check_key (ctrl_t ctrl, pk_list_t *pk_list_addr); int algo_available( preftype_t preftype, int algo, - const union pref_hint *hint ); + const struct pref_hint *hint ); int select_algo_from_prefs( PK_LIST pk_list, int preftype, - int request, const union pref_hint *hint); + int request, const struct pref_hint *hint); int select_mdc_from_pklist (PK_LIST pk_list); aead_algo_t select_aead_from_pklist (pk_list_t pk_list); void warn_missing_aead_from_pklist (PK_LIST pk_list); |