aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2013-08-10 20:24:06 +0200
committerMattias Andrée <maandree@operamail.com>2013-08-10 20:24:06 +0200
commita1bb135819dd97b474d1f7a5f549ac47af4a634b (patch)
treeac48470d13c5dfd6b3b8bd35875083902b9d2301
parentcalculate n in tolane methods at caller (diff)
downloadsha3sum-a1bb135819dd97b474d1f7a5f549ac47af4a634b.tar.gz
sha3sum-a1bb135819dd97b474d1f7a5f549ac47af4a634b.tar.bz2
sha3sum-a1bb135819dd97b474d1f7a5f549ac47af4a634b.tar.xz
pad10star1 returns actual length of message
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rw-r--r--java/ConcurrentSHA3.java21
-rw-r--r--java/SHA3.java21
2 files changed, 24 insertions, 18 deletions
diff --git a/java/ConcurrentSHA3.java b/java/ConcurrentSHA3.java
index 8e37e89..8deae20 100644
--- a/java/ConcurrentSHA3.java
+++ b/java/ConcurrentSHA3.java
@@ -323,11 +323,12 @@ public class ConcurrentSHA3
/**
* pad 10*1
*
- * @param msg The message to pad
- * @param len The length of the message
- * @param r The bitrate
+ * @param msg The message to pad
+ * @param len The length of the message
+ * @param r The bitrate
+ * @return The actual length of {@link #message}
*/
- private void pad10star1(byte[] msg, int len, int r)
+ private int pad10star1(byte[] msg, int len, int r)
{
int nrf = (len <<= 3) >> 3;
int nbrf = len & 7;
@@ -348,7 +349,9 @@ public class ConcurrentSHA3
this.message[nrf] = b;
this.message[len - 1] = -128;
}
+
System.arraycopy(msg, 0, this.message, 0, nrf);
+ return len;
}
@@ -404,7 +407,7 @@ public class ConcurrentSHA3
len -= len % ((this.r * this.b) >> 3);
System.arraycopy(this.M, 0, this.message = new byte[len], 0, len);
System.arraycopy(this.M, len, this.M, 0, this.mptr -= len);
- int n = Math.min(this.message.length, rr);
+ int n = Math.min(len, rr);
/* Absorbing phase */
if (ww == 8)
@@ -543,23 +546,23 @@ public class ConcurrentSHA3
*/
public byte[] digest(byte[] msg, int msglen, boolean withReturn)
{
+ int len;
if ((msg == null) || (msglen == 0))
- this.pad10star1(this.M, this.mptr, this.r);
+ len = this.pad10star1(this.M, this.mptr, this.r);
else
{
if (this.mptr + msglen > this.M.length)
System.arraycopy(this.M, 0, this.M = new byte[this.M.length + msglen], 0, this.mptr);
System.arraycopy(msg, 0, this.M, this.mptr, msglen);
- this.pad10star1(this.M, this.mptr + msglen, this.r);
+ len = this.pad10star1(this.M, this.mptr + msglen, this.r);
}
this.M = null;
- int len = this.message.length;
int rr = this.r >> 3;
int nn = (this.n + 7) >> 3;
int ww = this.w >> 3;
- int n = Math.min(this.message.length, rr);
+ int n = Math.min(len, rr);
/* Absorbing phase */
if (ww == 8)
diff --git a/java/SHA3.java b/java/SHA3.java
index 7e09d5b..3fc84e2 100644
--- a/java/SHA3.java
+++ b/java/SHA3.java
@@ -318,11 +318,12 @@ public class SHA3
/**
* pad 10*1
*
- * @param msg The message to pad
- * @param len The length of the message
- * @param r The bitrate
+ * @param msg The message to pad
+ * @param len The length of the message
+ * @param r The bitrate
+ * @return The actual length of {@link #message}
*/
- private static void pad10star1(byte[] msg, int len, int r)
+ private static int pad10star1(byte[] msg, int len, int r)
{
int nrf = (len <<= 3) >> 3;
int nbrf = len & 7;
@@ -343,7 +344,9 @@ public class SHA3
SHA3.message[nrf] = b;
SHA3.message[len - 1] = -128;
}
+
System.arraycopy(msg, 0, SHA3.message, 0, nrf);
+ return len;
}
@@ -399,7 +402,7 @@ public class SHA3
len -= len % ((SHA3.r * SHA3.b) >> 3);
System.arraycopy(SHA3.M, 0, SHA3.message = new byte[len], 0, len);
System.arraycopy(SHA3.M, len, SHA3.M, 0, SHA3.mptr -= len);
- int n = Math.min(SHA3.message.length, rr);
+ int n = Math.min(len, rr);
/* Absorbing phase */
if (ww == 8)
@@ -538,23 +541,23 @@ public class SHA3
*/
public static byte[] digest(byte[] msg, int msglen, boolean withReturn)
{
+ int len;
if ((msg == null) || (msglen == 0))
- SHA3.pad10star1(SHA3.M, SHA3.mptr, SHA3.r);
+ len = SHA3.pad10star1(SHA3.M, SHA3.mptr, SHA3.r);
else
{
if (SHA3.mptr + msglen > SHA3.M.length)
System.arraycopy(SHA3.M, 0, SHA3.M = new byte[SHA3.M.length + msglen], 0, SHA3.mptr);
System.arraycopy(msg, 0, SHA3.M, SHA3.mptr, msglen);
- SHA3.pad10star1(SHA3.M, SHA3.mptr + msglen, SHA3.r);
+ len = SHA3.pad10star1(SHA3.M, SHA3.mptr + msglen, SHA3.r);
}
SHA3.M = null;
- int len = SHA3.message.length;
int rr = SHA3.r >> 3;
int nn = (SHA3.n + 7) >> 3;
int ww = SHA3.w >> 3;
- int n = Math.min(SHA3.message.length, rr);
+ int n = Math.min(len, rr);
/* Absorbing phase */
if (ww == 8)