From 52748cd5cf48d3c68c3b912305fafaf9978138a6 Mon Sep 17 00:00:00 2001 From: Boris Wachtmeister Date: Sun, 11 Jan 2015 20:35:56 +0100 Subject: [PATCH] bugfix: BaseMac would not use bsize in certain cases The implementation of BaseMac would only take the bsize (size of the hash) into account if the #doFinal(byte[] input) method was called. Both other #doFinal methods would behave as if bsize==defbsize and not cut the hash to the right size. --- .../net/schmizz/sshj/transport/mac/BaseMAC.java | 13 +++++++++++-- .../schmizz/sshj/transport/mac/HMACMD596Test.java | 2 -- .../schmizz/sshj/transport/mac/HMACSHA196Test.java | 2 -- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/schmizz/sshj/transport/mac/BaseMAC.java b/src/main/java/net/schmizz/sshj/transport/mac/BaseMAC.java index b9b1da782..6019b4df2 100644 --- a/src/main/java/net/schmizz/sshj/transport/mac/BaseMAC.java +++ b/src/main/java/net/schmizz/sshj/transport/mac/BaseMAC.java @@ -41,12 +41,12 @@ public BaseMAC(String algorithm, int bsize, int defbsize) { @Override public byte[] doFinal() { - return mac.doFinal(); + return resizeToHashSize(mac.doFinal()); } @Override public byte[] doFinal(byte[] input) { - return mac.doFinal(input); + return resizeToHashSize(mac.doFinal(input)); } @Override @@ -62,6 +62,15 @@ public void doFinal(byte[] buf, int offset) { } } + private byte[] resizeToHashSize(byte[] buf) { + if (bsize == defbsize) + return buf; + + byte[] result = new byte[bsize]; + System.arraycopy(buf, 0, result, 0, bsize); + return result; + } + @Override public int getBlockSize() { return bsize; diff --git a/src/test/java/net/schmizz/sshj/transport/mac/HMACMD596Test.java b/src/test/java/net/schmizz/sshj/transport/mac/HMACMD596Test.java index 0a91b4fa6..82204a8a9 100644 --- a/src/test/java/net/schmizz/sshj/transport/mac/HMACMD596Test.java +++ b/src/test/java/net/schmizz/sshj/transport/mac/HMACMD596Test.java @@ -15,7 +15,6 @@ public class HMACMD596Test { private static final String EXPECTED_HMAC = "dff33c507463f9cf088a5ce8"; @Test - @Ignore public void testUpdateWithDoFinal() { HMACMD596 hmac = initHmac(); hmac.update(PLAIN_TEXT); @@ -23,7 +22,6 @@ public void testUpdateWithDoFinal() { } @Test - @Ignore public void testDoFinalWithInput() { HMACMD596 hmac = initHmac(); assertThat(Hex.toHexString(hmac.doFinal(PLAIN_TEXT)), diff --git a/src/test/java/net/schmizz/sshj/transport/mac/HMACSHA196Test.java b/src/test/java/net/schmizz/sshj/transport/mac/HMACSHA196Test.java index 0c4d04947..26f7d995f 100644 --- a/src/test/java/net/schmizz/sshj/transport/mac/HMACSHA196Test.java +++ b/src/test/java/net/schmizz/sshj/transport/mac/HMACSHA196Test.java @@ -15,7 +15,6 @@ public class HMACSHA196Test { private static final String EXPECTED_HMAC = "24ddeed57ad91465c5b59dce"; @Test - @Ignore public void testUpdateWithDoFinal() { HMACSHA196 hmac = initHmac(); hmac.update(PLAIN_TEXT); @@ -23,7 +22,6 @@ public void testUpdateWithDoFinal() { } @Test - @Ignore public void testDoFinalWithInput() { HMACSHA196 hmac = initHmac(); assertThat(Hex.toHexString(hmac.doFinal(PLAIN_TEXT)), is(EXPECTED_HMAC));