diff options
-rw-r--r-- | pure-java/SHA3.java | 26 | ||||
-rw-r--r-- | pure-java/sha3sum.java | 25 |
2 files changed, 49 insertions, 2 deletions
diff --git a/pure-java/SHA3.java b/pure-java/SHA3.java index 2eed163..e859d5b 100644 --- a/pure-java/SHA3.java +++ b/pure-java/SHA3.java @@ -492,6 +492,12 @@ public class SHA3 */ public static byte[] digest(byte[] msg, int msglen) { + /*{ String _; + System.out.print("\033[32m"); + for (int j = 0; j < msglen; j++) + System.out.print((_ = "00" + Long.toString(msg[j] & 255, 16)).substring(_.length() - 2)); + System.out.println("\033[00m"); + }*/ byte[] message; if ((msg == null) || (msglen == 0)) message = SHA3.pad10star1(SHA3.M, SHA3.mptr, SHA3.r); @@ -502,6 +508,12 @@ public class SHA3 System.arraycopy(msg, 0, SHA3.M, SHA3.mptr, msglen); message = SHA3.pad10star1(SHA3.M, SHA3.mptr + msglen, SHA3.r); } + /*{ String _; + System.out.print("\033[33m"); + for (int j = 0; j < message.length; j++) + System.out.print((_ = "00" + Long.toString(message[j] & 255, 16)).substring(_.length() - 2)); + System.out.println("\033[00m"); + }*/ SHA3.M = null; int len = message.length; byte[] rc = new byte[(SHA3.n + 7) >> 3]; @@ -515,6 +527,13 @@ public class SHA3 if (ww == 8) for (int i = 0; i < len; i += rr) { + /*if (i == 0) + { String _; + System.out.print("\033[34m"); + for (int j = 0; j < 25; j++) + System.out.print((_ = "0000000000000000" + Long.toString(SHA3.S[j], 16)).substring(_.length() - 16)); + System.out.println("\033[00m"); + }*/ SHA3.S[ 0] ^= SHA3.toLane64(message, rr, i + 0); SHA3.S[ 5] ^= SHA3.toLane64(message, rr, i + 8); SHA3.S[10] ^= SHA3.toLane64(message, rr, i + 16); @@ -540,6 +559,13 @@ public class SHA3 SHA3.S[14] ^= SHA3.toLane64(message, rr, i + 176); SHA3.S[19] ^= SHA3.toLane64(message, rr, i + 184); SHA3.S[24] ^= SHA3.toLane64(message, rr, i + 192); + /*if (i == 0) + { String _; + System.out.print("\033[35m"); + for (int j = 0; j < 25; j++) + System.out.print((_ = "0000000000000000" + Long.toString(SHA3.S[j], 16)).substring(_.length() - 16)); + System.out.println("\033[00m"); + }*/ SHA3.keccakF(SHA3.S); } else diff --git a/pure-java/sha3sum.java b/pure-java/sha3sum.java index 75f48b0..d8b5d85 100644 --- a/pure-java/sha3sum.java +++ b/pure-java/sha3sum.java @@ -67,7 +67,7 @@ public class sha3sum else if (cmd == "sha3-256sum") o = _o = 256; else if (cmd == "sha3-384sum") o = _o = 384; else if (cmd == "sha3-512sum") o = _o = 512; - boolean binary = false; + boolean binary = false, hex = false; int multi = 0; String[] files = new String[argv.length + 1]; @@ -111,6 +111,9 @@ public class sha3sum System.out.println(" -i ITERATIONS"); System.out.println(" --iterations The number of hash iterations to run. (default: " + _i + ")"); System.out.println(" "); + System.out.println(" -h"); + System.out.println(" --hex Read the input in hexadecimal, rather than binary."); + System.out.println(" "); System.out.println(" -b"); System.out.println(" --binary Print the checksum in binary, rather than hexadecimal."); System.out.println(" "); @@ -182,6 +185,8 @@ public class sha3sum binary = true; else if (arg == "--multi") multi++; + else if (arg == "--hex") + hex = true; else linger = new String[] { arg, null }; else if (arg.startsWith("-")) @@ -197,6 +202,11 @@ public class sha3sum multi++; arg = arg.substring(1); } + else if (arg.charAt(0) == 'h') + { + hex = true; + arg = arg.substring(1); + } else if (arg.length() == 1) linger = new String[] { "-" + arg, null }; else @@ -328,7 +338,18 @@ public class sha3sum int read = file.read(chunk, 0, blksize); if (read <= 0) break; - SHA3.update(chunk, read); + if (hex == false) + SHA3.update(chunk, read); + else + { + int n = read << 1; + for (int _ = 0; _ < n; _++) + { + byte a = chunk[_ << 1], b = chunk[(_ << 1) | 1]; + chunk[_] = (byte)((((a & 15) + (a <= '9' ? 0 : 9)) << 4) | ((b & 15) + (b <= '9' ? 0 : 9))); + } + SHA3.update(chunk, n); + } } byte[] bs = SHA3.digest(); if (multi == 0) |