diff src/ch/ethz/ssh2/transport/ServerKexManager.java @ 306:90e47d99ea54 ganymed

add ecdsa key support everywhere
author Carl Byington <carl@five-ten-sg.com>
date Wed, 30 Jul 2014 13:38:04 -0700
parents d2b303406d63
children 42b15aaa7ac7
line wrap: on
line diff
--- a/src/ch/ethz/ssh2/transport/ServerKexManager.java	Wed Jul 30 12:09:51 2014 -0700
+++ b/src/ch/ethz/ssh2/transport/ServerKexManager.java	Wed Jul 30 13:38:04 2014 -0700
@@ -53,6 +53,14 @@
     public void handleMessage(byte[] msg) throws IOException {
         PacketKexInit kip;
 
+        if (msg == null) {
+            synchronized (accessLock) {
+                connectionClosed = true;
+                accessLock.notifyAll();
+                return;
+            }
+        }
+
         if((kxs == null) && (msg[0] != Packets.SSH_MSG_KEXINIT)) {
             throw new PacketTypeException(msg[0]);
         }
@@ -92,17 +100,13 @@
                 ignore_next_kex_packet = true;
             }
 
-            if(kxs.np.kex_algo.equals("diffie-hellman-group1-sha1")
-                    || kxs.np.kex_algo.equals("diffie-hellman-group14-sha1")) {
-                kxs.dhx = new DhExchange();
-
-                if(kxs.np.kex_algo.equals("diffie-hellman-group1-sha1")) {
-                    kxs.dhx.serverInit(1, rnd);
-                }
-                else {
-                    kxs.dhx.serverInit(14, rnd);
-                }
-
+            if (kxs.np.kex_algo.equals("diffie-hellman-group1-sha1")  ||
+                kxs.np.kex_algo.equals("diffie-hellman-group14-sha1") ||
+                kxs.np.kex_algo.equals("ecdh-sha2-nistp256")          ||
+                kxs.np.kex_algo.equals("ecdh-sha2-nistp384")          ||
+                kxs.np.kex_algo.equals("ecdh-sha2-nistp521")) {
+                kxs.dhx = GenericDhExchange.getInstance(kxs.np.kex_algo);
+                kxs.dhx.init(kxs.np.kex_algo);
                 kxs.state = 1;
                 return;
             }
@@ -162,8 +166,11 @@
             throw new IOException("Unexpected Kex submessage!");
         }
 
-        if(kxs.np.kex_algo.equals("diffie-hellman-group1-sha1")
-                || kxs.np.kex_algo.equals("diffie-hellman-group14-sha1")) {
+        if (kxs.np.kex_algo.equals("diffie-hellman-group1-sha1")  ||
+            kxs.np.kex_algo.equals("diffie-hellman-group14-sha1") ||
+            kxs.np.kex_algo.equals("ecdh-sha2-nistp256")          ||
+            kxs.np.kex_algo.equals("ecdh-sha2-nistp384")          ||
+            kxs.np.kex_algo.equals("ecdh-sha2-nistp521")) {
             if(kxs.state == 1) {
                 PacketKexDHInit dhi = new PacketKexDHInit(msg);