diff options
| author | Kenny Root <kenny@the-b.org> | 2015-04-03 06:51:45 +0200 | 
|---|---|---|
| committer | Kenny Root <kenny@the-b.org> | 2015-04-03 06:51:45 +0200 | 
| commit | a1c3e4f005ec269281c2ff1f821346b7242cef61 (patch) | |
| tree | 0d10d051b85d3bf411dcc399ce8f6e4483c911e9 | |
| parent | fa4b418e881d9e418ef10b9dcdad0b09f11f9907 (diff) | |
| parent | 632e4495715fbc77d129268e91da2cf513580d08 (diff) | |
| download | connectbot-a1c3e4f005ec269281c2ff1f821346b7242cef61.tar.gz connectbot-a1c3e4f005ec269281c2ff1f821346b7242cef61.tar.bz2 connectbot-a1c3e4f005ec269281c2ff1f821346b7242cef61.zip | |
Merge branch 'master' into gradle-conversion
| -rw-r--r-- | app/src/main/java/com/trilead/ssh2/transport/KexManager.java | 30 | ||||
| -rw-r--r-- | app/src/main/java/org/connectbot/transport/SSH.java | 7 | 
2 files changed, 28 insertions, 9 deletions
| diff --git a/app/src/main/java/com/trilead/ssh2/transport/KexManager.java b/app/src/main/java/com/trilead/ssh2/transport/KexManager.java index cd26530..2476b76 100644 --- a/app/src/main/java/com/trilead/ssh2/transport/KexManager.java +++ b/app/src/main/java/com/trilead/ssh2/transport/KexManager.java @@ -2,6 +2,8 @@  package com.trilead.ssh2.transport;  import java.io.IOException; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException;  import java.security.SecureRandom;  import java.security.interfaces.DSAPublicKey;  import java.security.interfaces.ECPublicKey; @@ -47,20 +49,36 @@ public class KexManager  {  	private static final Logger log = Logger.getLogger(KexManager.class); +	private static final boolean supportsEc; +	static { +		KeyFactory keyFact; +		try { +			keyFact = KeyFactory.getInstance("EC"); +		} catch (NoSuchAlgorithmException ignored) { +			keyFact = null; +			log.log(10, "Disabling EC support due to lack of KeyFactory"); +		} +		supportsEc = keyFact != null; +	} +  	private static final Set<String> HOSTKEY_ALGS = new TreeSet<String>();  	static { -		HOSTKEY_ALGS.add("ecdsa-sha2-nistp256"); -		HOSTKEY_ALGS.add("ecdsa-sha2-nistp384"); -		HOSTKEY_ALGS.add("ecdsa-sha2-nistp521"); +		if (supportsEc) { +			HOSTKEY_ALGS.add("ecdsa-sha2-nistp256"); +			HOSTKEY_ALGS.add("ecdsa-sha2-nistp384"); +			HOSTKEY_ALGS.add("ecdsa-sha2-nistp521"); +		}  		HOSTKEY_ALGS.add("ssh-rsa");  		HOSTKEY_ALGS.add("ssh-dsa");  	}  	private static final Set<String> KEX_ALGS = new TreeSet<String>();  	static { -		KEX_ALGS.add("ecdh-sha2-nistp256"); -		KEX_ALGS.add("ecdh-sha2-nistp384"); -		KEX_ALGS.add("ecdh-sha2-nistp521"); +		if (supportsEc) { +			KEX_ALGS.add("ecdh-sha2-nistp256"); +			KEX_ALGS.add("ecdh-sha2-nistp384"); +			KEX_ALGS.add("ecdh-sha2-nistp521"); +		}  		KEX_ALGS.add("diffie-hellman-group-exchange-sha256");  		KEX_ALGS.add("diffie-hellman-group-exchange-sha1");  		KEX_ALGS.add("diffie-hellman-group14-sha1"); diff --git a/app/src/main/java/org/connectbot/transport/SSH.java b/app/src/main/java/org/connectbot/transport/SSH.java index 9a97596..37f2e08 100644 --- a/app/src/main/java/org/connectbot/transport/SSH.java +++ b/app/src/main/java/org/connectbot/transport/SSH.java @@ -81,8 +81,9 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC  	}  	/** +	 * @param host  	 * @param bridge -	 * @param db +	 * @param manager  	 */  	public SSH(HostBean host, TerminalBridge bridge, TerminalManager manager) {  		super(host, bridge, manager); @@ -455,6 +456,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC  			// Display the reason in the text.  			bridge.outputLine(e.getCause().getMessage()); +			close();  			onDisconnect();  			return;  		} @@ -489,8 +491,6 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC  	}  	private void onDisconnect() { -		close(); -  		bridge.dispatchDisconnect(false);  	} @@ -521,6 +521,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC  		}  		if ((newConditions & ChannelCondition.EOF) != 0) { +			close();  			onDisconnect();  			throw new IOException("Remote end closed connection");  		} | 
