mirror of
https://github.com/moparisthebest/curl
synced 2025-02-28 09:21:50 -05:00
libssh2: add support for ECDSA and ed25519 knownhost keys
... if a new enough libssh2 version is present. Source: https://curl.haxx.se/mail/archive-2019-12/0023.html Co-Authored-by: Daniel Stenberg Closes #4714
This commit is contained in:
parent
38797e8811
commit
1d2d3feb21
@ -466,9 +466,42 @@ static CURLcode ssh_knownhost(struct connectdata *conn)
|
|||||||
struct curl_khkey *knownkeyp = NULL;
|
struct curl_khkey *knownkeyp = NULL;
|
||||||
struct curl_khkey foundkey;
|
struct curl_khkey foundkey;
|
||||||
|
|
||||||
keybit = (keytype == LIBSSH2_HOSTKEY_TYPE_RSA)?
|
switch(keytype) {
|
||||||
LIBSSH2_KNOWNHOST_KEY_SSHRSA:LIBSSH2_KNOWNHOST_KEY_SSHDSS;
|
case LIBSSH2_HOSTKEY_TYPE_RSA:
|
||||||
|
keybit = LIBSSH2_KNOWNHOST_KEY_SSHRSA;
|
||||||
|
break;
|
||||||
|
case LIBSSH2_HOSTKEY_TYPE_DSS:
|
||||||
|
keybit = LIBSSH2_KNOWNHOST_KEY_SSHDSS;
|
||||||
|
break;
|
||||||
|
#ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_256
|
||||||
|
case LIBSSH2_HOSTKEY_TYPE_ECDSA_256:
|
||||||
|
keybit = LIBSSH2_KNOWNHOST_KEY_ECDSA_256;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_384
|
||||||
|
case LIBSSH2_HOSTKEY_TYPE_ECDSA_384:
|
||||||
|
keybit = LIBSSH2_KNOWNHOST_KEY_ECDSA_384;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_521
|
||||||
|
case LIBSSH2_HOSTKEY_TYPE_ECDSA_521:
|
||||||
|
keybit = LIBSSH2_KNOWNHOST_KEY_ECDSA_521;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef LIBSSH2_HOSTKEY_TYPE_ED25519
|
||||||
|
case LIBSSH2_HOSTKEY_TYPE_ED25519:
|
||||||
|
keybit = LIBSSH2_KNOWNHOST_KEY_ED25519;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
infof(data, "unsupported key type, can't check knownhosts!\n");
|
||||||
|
keybit = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(!keybit)
|
||||||
|
/* no check means failure! */
|
||||||
|
rc = CURLKHSTAT_REJECT;
|
||||||
|
else {
|
||||||
#ifdef HAVE_LIBSSH2_KNOWNHOST_CHECKP
|
#ifdef HAVE_LIBSSH2_KNOWNHOST_CHECKP
|
||||||
keycheck = libssh2_knownhost_checkp(sshc->kh,
|
keycheck = libssh2_knownhost_checkp(sshc->kh,
|
||||||
conn->host.name,
|
conn->host.name,
|
||||||
@ -522,6 +555,7 @@ static CURLcode ssh_knownhost(struct connectdata *conn)
|
|||||||
keymatch, data->set.ssh_keyfunc_userp);
|
keymatch, data->set.ssh_keyfunc_userp);
|
||||||
Curl_set_in_callback(data, false);
|
Curl_set_in_callback(data, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
/* no remotekey means failure! */
|
/* no remotekey means failure! */
|
||||||
rc = CURLKHSTAT_REJECT;
|
rc = CURLKHSTAT_REJECT;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user