From 70720de71b489270f00a90801e5a427f1a9c4980 Mon Sep 17 00:00:00 2001 From: Boris Wachtmeister Date: Tue, 11 Nov 2014 19:25:55 +0100 Subject: [PATCH 1/2] fixed block sizes for hmac-sha2-256 and hmac-sha2-512 Both MACs have to use larger block/digest sizes than SHA1. Additionally the KEX must be changed so that it will resize the keys "E" and "F" to get keys of the right size for those MACs (according to section 7.2 of rfc4253) --- src/main/java/net/schmizz/sshj/transport/KeyExchanger.java | 4 ++-- src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2256.java | 2 +- src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2512.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/schmizz/sshj/transport/KeyExchanger.java b/src/main/java/net/schmizz/sshj/transport/KeyExchanger.java index f7ec60cb3..9f92d14e9 100644 --- a/src/main/java/net/schmizz/sshj/transport/KeyExchanger.java +++ b/src/main/java/net/schmizz/sshj/transport/KeyExchanger.java @@ -310,11 +310,11 @@ private void gotNewKeys() { final MAC mac_C2S = Factory.Named.Util.create(transport.getConfig().getMACFactories(), negotiatedAlgs .getClient2ServerMACAlgorithm()); - mac_C2S.init(integrityKey_C2S); + mac_C2S.init(resizedKey(integrityKey_C2S, mac_C2S.getBlockSize(), hash, kex.getK(), kex.getH())); final MAC mac_S2C = Factory.Named.Util.create(transport.getConfig().getMACFactories(), negotiatedAlgs.getServer2ClientMACAlgorithm()); - mac_S2C.init(integrityKey_S2C); + mac_S2C.init(resizedKey(integrityKey_S2C, mac_S2C.getBlockSize(), hash, kex.getK(), kex.getH())); final Compression compression_S2C = Factory.Named.Util.create(transport.getConfig().getCompressionFactories(), diff --git a/src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2256.java b/src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2256.java index 02a398c65..d4f0aaded 100644 --- a/src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2256.java +++ b/src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2256.java @@ -35,6 +35,6 @@ public String getName() { } public HMACSHA2256() { - super("HmacSHA256", 20, 20); + super("HmacSHA256", 32, 32); } } diff --git a/src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2512.java b/src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2512.java index 29e5f5df1..27c94c8d7 100644 --- a/src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2512.java +++ b/src/main/java/net/schmizz/sshj/transport/mac/HMACSHA2512.java @@ -35,6 +35,6 @@ public String getName() { } public HMACSHA2512() { - super("HmacSHA512", 20, 20); + super("HmacSHA512", 64, 64); } } From cf32842d0d8429f9be03962a5e662de09ce16325 Mon Sep 17 00:00:00 2001 From: Boris Wachtmeister Date: Sun, 16 Nov 2014 17:33:19 +0100 Subject: [PATCH 2/2] added hmac-sha2-256 and hmac-sha2-512 to the README --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index af39b6046..be486dd30 100644 --- a/README.adoc +++ b/README.adoc @@ -26,7 +26,7 @@ signatures:: `ssh-rsa`, `ssh-dss` mac:: - `hmac-md5`, `hmac-md5-96`, `hmac-sha1`, `hmac-sha1-96` + `hmac-md5`, `hmac-md5-96`, `hmac-sha1`, `hmac-sha1-96`, `hmac-sha2-256`, `hmac-sha2-512` compression:: `zlib` and `zlib@openssh.com` (delayed zlib)