From 73de5b7b08e5287dd835c79a323291e3bb832b46 Mon Sep 17 00:00:00 2001 From: Boris Wachtmeister Date: Sun, 11 Jan 2015 21:00:16 +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[], int) 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 0234500c0..a5b049daf 100644 --- a/src/test/java/net/schmizz/sshj/transport/mac/HMACMD596Test.java +++ b/src/test/java/net/schmizz/sshj/transport/mac/HMACMD596Test.java @@ -30,7 +30,6 @@ public class HMACMD596Test { private static final String EXPECTED_HMAC = "dff33c507463f9cf088a5ce8"; @Test - @Ignore public void testUpdateWithDoFinal() { HMACMD596 hmac = initHmac(); hmac.update(PLAIN_TEXT); @@ -38,7 +37,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 ad121d26b..9d984c441 100644 --- a/src/test/java/net/schmizz/sshj/transport/mac/HMACSHA196Test.java +++ b/src/test/java/net/schmizz/sshj/transport/mac/HMACSHA196Test.java @@ -30,7 +30,6 @@ public class HMACSHA196Test { private static final String EXPECTED_HMAC = "24ddeed57ad91465c5b59dce"; @Test - @Ignore public void testUpdateWithDoFinal() { HMACSHA196 hmac = initHmac(); hmac.update(PLAIN_TEXT); @@ -38,7 +37,6 @@ public void testUpdateWithDoFinal() { } @Test - @Ignore public void testDoFinalWithInput() { HMACSHA196 hmac = initHmac(); assertThat(Hex.toHexString(hmac.doFinal(PLAIN_TEXT)), is(EXPECTED_HMAC));