# HG changeset patch # User Carl Byington # Date 1406676948 25200 # Node ID 8c55d7714d03300312e49b57d633eb7245a3ebf2 # Parent deb5fb087b6fcb7578a67879c3eed9c43268c294 start conversion from trilead to ganymed diff -r deb5fb087b6f -r 8c55d7714d03 src/com/five_ten_sg/connectbot/service/AuthAgentService.java --- a/src/com/five_ten_sg/connectbot/service/AuthAgentService.java Fri Jul 18 20:48:40 2014 -0700 +++ b/src/com/five_ten_sg/connectbot/service/AuthAgentService.java Tue Jul 29 16:35:48 2014 -0700 @@ -90,6 +90,9 @@ else if (privKey instanceof DSAPrivateKey) { return sshEncodedSignatureFor(data, (DSAPrivateKey) privKey); } + else if (privKey instanceof ECPrivateKey) { + return sshEncodedSignatureFor(data, (ECPrivateKey) privKey); + } return null; } @@ -136,6 +139,10 @@ DSAPublicKey pubkey = (DSAPublicKey)pair.getPublic(); return DSASHA1Verify.encodeSSHDSAPublicKey(pubkey); } + else if (privKey instanceof ECPrivateKey) { + ECPublicKey pubkey = (ECPublicKey) pair.getPublic(); + return ECDSASHA2Verify.encodeSSHECDSAPublicKey(pubkey); + } } catch (IOException e) { Log.e(TAG, "Couldn't encode " + pair, e); @@ -161,6 +168,15 @@ throw new RuntimeException(e); } } + private byte[] sshEncodedSignatureFor(byte[] data, ECPrivateKey privKey) { + try { + byte[] signature = ECDSASHA2Verify.generateSignature(data, privKey); + return ECDSASHA2Verify.encodeSSHECDSASignature(signature); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } private KeyPair keyPairFor(byte[] publicKey) { String nickname = manager.getKeyNickname(publicKey); diff -r deb5fb087b6f -r 8c55d7714d03 src/com/five_ten_sg/connectbot/transport/SSH.java --- a/src/com/five_ten_sg/connectbot/transport/SSH.java Fri Jul 18 20:48:40 2014 -0700 +++ b/src/com/five_ten_sg/connectbot/transport/SSH.java Tue Jul 29 16:35:48 2014 -0700 @@ -31,6 +31,8 @@ import java.security.PublicKey; import java.security.interfaces.DSAPrivateKey; import java.security.interfaces.DSAPublicKey; +import java.security.interfaces.ECPrivateKey; +import java.security.interfaces.ECPublicKey; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; @@ -75,6 +77,7 @@ import ch.ethz.ssh2.HTTPProxyException; import ch.ethz.ssh2.crypto.PEMDecoder; import ch.ethz.ssh2.signature.DSASHA1Verify; +import ch.ethz.ssh2.signature.ECDSASHA2Verify; import ch.ethz.ssh2.signature.RSASHA1Verify; /** @@ -1062,6 +1065,10 @@ DSAPublicKey pubkey = (DSAPublicKey) pair.getPublic(); pubKeys.put(entry.getKey(), DSASHA1Verify.encodeSSHDSAPublicKey(pubkey)); } + else if (privKey instanceof ECPrivateKey) { + ECPublicKey pubkey = (ECPublicKey) pair.getPublic(); + pubKeys.put(entry.getKey(), ECDSASHA2Verify.encodeSSHECDSAPublicKey(pubkey)); + } else continue; }