aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrevor Bentley <[email protected]>2019-03-25 14:19:47 +0000
committerNIIBE Yutaka <[email protected]>2019-03-27 02:10:30 +0000
commit2f455d18ab99a1d94029d3f607ae918bd5c9fecf (patch)
treeee836a0a96f875e92fdfa2520c061a450b374dd7
parentPost release updates (diff)
downloadgnupg-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.c25
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;