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 f7ec60cb..9f92d14e 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 @@ final class KeyExchanger 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 02a398c6..d4f0aade 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 class HMACSHA2256 } 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 29e5f5df..27c94c8d 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 class HMACSHA2512 } 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 af39b604..be486dd3 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)