[openssh-commits] [openssh] branch master updated: upstream: in _ssh_order_hostkeyalgs() consider ECDSA curve type when
git+noreply at mindrot.org
git+noreply at mindrot.org
Fri Oct 18 16:16:24 AEDT 2024
This is an automated email from the git hooks/post-receive script.
djm pushed a commit to branch master
in repository openssh.
The following commit(s) were added to refs/heads/master by this push:
new 0a1e7549 upstream: in _ssh_order_hostkeyalgs() consider ECDSA curve type when
0a1e7549 is described below
commit 0a1e75499e2c6fc258ee903645c878480949f362
Author: djm at openbsd.org <djm at openbsd.org>
AuthorDate: Fri Oct 18 05:14:51 2024 +0000
upstream: in _ssh_order_hostkeyalgs() consider ECDSA curve type when
arranging the hostkey algorithms. AFAIK this code is unused in OpenSSH, but I
guess others are using it
based on GHPR387 from Pawel Jakub Dawidek
OpenBSD-Commit-ID: 4d462495ac0c40f7b7dd66178e0005b9b2128225
---
ssh_api.c | 25 +++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/ssh_api.c b/ssh_api.c
index 5faaffd1..7bdcee14 100644
--- a/ssh_api.c
+++ b/ssh_api.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh_api.c,v 1.31 2024/09/09 02:39:57 djm Exp $ */
+/* $OpenBSD: ssh_api.c,v 1.32 2024/10/18 05:14:51 djm Exp $ */
/*
* Copyright (c) 2012 Markus Friedl. All rights reserved.
*
@@ -532,7 +532,7 @@ _ssh_order_hostkeyalgs(struct ssh *ssh)
char *orig, *avail, *oavail = NULL, *alg, *replace = NULL;
char **proposal;
size_t maxlen;
- int ktype, r;
+ int ktype, nid, r;
/* XXX we de-serialize ssh->kex->my, modify it, and change it */
if ((r = kex_buf2prop(ssh->kex->my, NULL, &proposal)) != 0)
@@ -551,15 +551,20 @@ _ssh_order_hostkeyalgs(struct ssh *ssh)
while ((alg = strsep(&avail, ",")) && *alg != '\0') {
if ((ktype = sshkey_type_from_name(alg)) == KEY_UNSPEC)
continue;
+ nid = sshkey_ecdsa_nid_from_name(alg);
TAILQ_FOREACH(k, &ssh->public_keys, next) {
- if (k->key->type == ktype ||
- (sshkey_is_cert(k->key) && k->key->type ==
- sshkey_type_plain(ktype))) {
- if (*replace != '\0')
- strlcat(replace, ",", maxlen);
- strlcat(replace, alg, maxlen);
- break;
- }
+ if (k->key->type != ktype &&
+ (!sshkey_is_cert(k->key) ||
+ k->key->type != sshkey_type_plain(ktype)))
+ continue;
+ if (sshkey_type_plain(k->key->type) == KEY_ECDSA &&
+ k->key->ecdsa_nid != nid)
+ continue;
+ /* Candidate */
+ if (*replace != '\0')
+ strlcat(replace, ",", maxlen);
+ strlcat(replace, alg, maxlen);
+ break;
}
}
if (*replace != '\0') {
--
To stop receiving notification emails like this one, please contact
djm at mindrot.org.
More information about the openssh-commits
mailing list