summaryrefslogtreecommitdiff
path: root/compat.c
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2014-04-21 21:24:52 +0100
committerColin Watson <cjwatson@debian.org>2014-04-21 21:28:19 +0100
commit7cc2be72098d7b3384daf09d85d9969d9da0420e (patch)
treec762cfc9b928dc4b8dc41399308e3552b1e6a5ca /compat.c
parentc730d55d220e15fb7bc6b9b56633541e97817175 (diff)
parent02883061577ec43ff8d0e8f0cf486bc5131db507 (diff)
Apply upstream-recommended patch to fix bignum encoding for curve25519-sha256@libssh.org, fixing occasional key exchange failures.
Diffstat (limited to 'compat.c')
-rw-r--r--compat.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/compat.c b/compat.c
index 9d9fabef3..2709dc5cf 100644
--- a/compat.c
+++ b/compat.c
@@ -95,6 +95,9 @@ compat_datafellows(const char *version)
95 { "Sun_SSH_1.0*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF}, 95 { "Sun_SSH_1.0*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF},
96 { "OpenSSH_4*", 0 }, 96 { "OpenSSH_4*", 0 },
97 { "OpenSSH_5*", SSH_NEW_OPENSSH|SSH_BUG_DYNAMIC_RPORT}, 97 { "OpenSSH_5*", SSH_NEW_OPENSSH|SSH_BUG_DYNAMIC_RPORT},
98 { "OpenSSH_6.6.1*", SSH_NEW_OPENSSH},
99 { "OpenSSH_6.5*,"
100 "OpenSSH_6.6*", SSH_NEW_OPENSSH|SSH_BUG_CURVE25519PAD},
98 { "OpenSSH*", SSH_NEW_OPENSSH }, 101 { "OpenSSH*", SSH_NEW_OPENSSH },
99 { "*MindTerm*", 0 }, 102 { "*MindTerm*", 0 },
100 { "2.1.0*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC| 103 { "2.1.0*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
@@ -251,7 +254,6 @@ compat_cipher_proposal(char *cipher_prop)
251 return cipher_prop; 254 return cipher_prop;
252} 255}
253 256
254
255char * 257char *
256compat_pkalg_proposal(char *pkalg_prop) 258compat_pkalg_proposal(char *pkalg_prop)
257{ 259{
@@ -265,3 +267,16 @@ compat_pkalg_proposal(char *pkalg_prop)
265 return pkalg_prop; 267 return pkalg_prop;
266} 268}
267 269
270char *
271compat_kex_proposal(char *kex_prop)
272{
273 if (!(datafellows & SSH_BUG_CURVE25519PAD))
274 return kex_prop;
275 debug2("%s: original KEX proposal: %s", __func__, kex_prop);
276 kex_prop = filter_proposal(kex_prop, "curve25519-sha256@libssh.org");
277 debug2("%s: compat KEX proposal: %s", __func__, kex_prop);
278 if (*kex_prop == '\0')
279 fatal("No supported key exchange algorithms found");
280 return kex_prop;
281}
282