diff options
author | Trevor Bentley <[email protected]> | 2019-03-25 14:19:47 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2019-03-27 02:10:30 +0000 |
commit | 2f455d18ab99a1d94029d3f607ae918bd5c9fecf (patch) | |
tree | ee836a0a96f875e92fdfa2520c061a450b374dd7 | |
parent | Post release updates (diff) | |
download | gnupg-2f455d18ab99a1d94029d3f607ae918bd5c9fecf.tar.gz gnupg-2f455d18ab99a1d94029d3f607ae918bd5c9fecf.zip |
gpg: Don't use EdDSA algo ID for ECDSA curves.
* g10/keygen.c (ask_curve): Change algo ID to ECDSA if it changed from
an EdDSA curve.
--
(cherry picked from commit 4324560b2c0bb76a1769535c383424a042e505ae)
This change matters when it is called from ask_card_keyattr.
Some-comments-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | g10/keygen.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/g10/keygen.c b/g10/keygen.c index ed57d5d15..c68f1f0b5 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -2356,14 +2356,25 @@ ask_curve (int *algo, int *subkey_algo, const char *current) else { /* If the user selected a signing algorithm and Curve25519 - we need to set the algo to EdDSA and update the curve name. */ - if ((*algo == PUBKEY_ALGO_ECDSA || *algo == PUBKEY_ALGO_EDDSA) - && curves[idx].eddsa_curve) + we need to set the algo to EdDSA and update the curve name. + If switching away from EdDSA, we need to set the algo back + to ECDSA. */ + if (*algo == PUBKEY_ALGO_ECDSA || *algo == PUBKEY_ALGO_EDDSA) { - if (subkey_algo && *subkey_algo == PUBKEY_ALGO_ECDSA) - *subkey_algo = PUBKEY_ALGO_EDDSA; - *algo = PUBKEY_ALGO_EDDSA; - result = curves[idx].eddsa_curve; + if (curves[idx].eddsa_curve) + { + if (subkey_algo && *subkey_algo == PUBKEY_ALGO_ECDSA) + *subkey_algo = PUBKEY_ALGO_EDDSA; + *algo = PUBKEY_ALGO_EDDSA; + result = curves[idx].eddsa_curve; + } + else + { + if (subkey_algo && *subkey_algo == PUBKEY_ALGO_EDDSA) + *subkey_algo = PUBKEY_ALGO_ECDSA; + *algo = PUBKEY_ALGO_ECDSA; + result = curves[idx].name; + } } else result = curves[idx].name; |