From 1538c32d65152d1792e6d2404f2018c9db29ab19 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Sat, 4 Apr 2015 17:17:58 -0700 Subject: Add Ed25519 host key support --- .../src/main/java/com/trilead/ssh2/transport/KexManager.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'sshlib/src/main/java/com/trilead/ssh2/transport') diff --git a/sshlib/src/main/java/com/trilead/ssh2/transport/KexManager.java b/sshlib/src/main/java/com/trilead/ssh2/transport/KexManager.java index 741268b..ab6d0b6 100644 --- a/sshlib/src/main/java/com/trilead/ssh2/transport/KexManager.java +++ b/sshlib/src/main/java/com/trilead/ssh2/transport/KexManager.java @@ -25,6 +25,7 @@ import com.trilead.ssh2.crypto.dh.Curve25519Exchange; import com.trilead.ssh2.crypto.dh.DhGroupExchange; import com.trilead.ssh2.crypto.dh.GenericDhExchange; import com.trilead.ssh2.crypto.digest.MAC; +import com.trilead.ssh2.crypto.key.Ed25519PublicKey; import com.trilead.ssh2.log.Logger; import com.trilead.ssh2.packets.PacketKexDHInit; import com.trilead.ssh2.packets.PacketKexDHReply; @@ -38,6 +39,7 @@ import com.trilead.ssh2.packets.PacketNewKeys; import com.trilead.ssh2.packets.Packets; import com.trilead.ssh2.signature.DSASHA1Verify; import com.trilead.ssh2.signature.ECDSASHA2Verify; +import com.trilead.ssh2.signature.Ed25519Verify; import com.trilead.ssh2.signature.RSASHA1Verify; @@ -65,6 +67,7 @@ public class KexManager private static final Set HOSTKEY_ALGS = new LinkedHashSet(); static { + HOSTKEY_ALGS.add(Ed25519Verify.ED25519_ID); if (supportsEc) { HOSTKEY_ALGS.add("ecdsa-sha2-nistp256"); HOSTKEY_ALGS.add("ecdsa-sha2-nistp384"); @@ -380,6 +383,15 @@ public class KexManager private boolean verifySignature(byte[] sig, byte[] hostkey) throws IOException { + if (kxs.np.server_host_key_algo.equals(Ed25519Verify.ED25519_ID)) { + byte[] eds = Ed25519Verify.decodeSSHEd25519Signature(sig); + Ed25519PublicKey edpk = Ed25519Verify.decodeSSHEd25519PublicKey(hostkey); + + log.log(50, "Verifying ed25519 signature"); + + return Ed25519Verify.verifySignature(kxs.H, eds, edpk); + + } if (kxs.np.server_host_key_algo.startsWith("ecdsa-sha2-")) { byte[] rs = ECDSASHA2Verify.decodeSSHECDSASignature(sig); -- cgit v1.2.3