diff options
-rw-r--r-- | Makefile | 26 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | c/sha3.c | 11 | ||||
-rw-r--r-- | c/sha3sum.c | 4 | ||||
-rw-r--r-- | pure-java/SHA3.java | 4 | ||||
-rwxr-xr-x | python3/sha3sum.py | 10 |
6 files changed, 41 insertions, 18 deletions
@@ -8,20 +8,36 @@ # [GNU All Permissive License] JAVAC=javac +JAVADIRS=-s "pure-java" -d "bin/pure-java" -cp "pure-java" +JAVAFLAGS=-Xlint +JAVA_FLAGS=$(JAVADIRS) $(JAVAFLAGS) +CFLAGS=-W{all,extra} -pedantic +CPPFLAGS= +LDFLAGS= +C_FLAGS=$(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -JAVA_CLASSES = $(shell find "pure-java" | grep '\.java$$' | sed -e 's_^_bin/_g' -e 's_java$$_class_g') +JAVA_CLASSES = $(shell find "pure-java" | grep '\.java$$' | sed -e 's_^_bin/_g' -e 's_java$$_class_g') +C_OBJS = $(shell find "c" | grep '\.h$$' | sed -e 's_^_bin/_g' -e 's_h$$_o_g') +C_BINS = bin/c/sha3sum -all: pure-java +all: pure-java c pure-java: $(JAVA_CLASSES) bin/pure-java/%.class: pure-java/%.java mkdir -p "bin/pure-java" - $(JAVAC) -s "pure-java" -d "bin/pure-java" -cp "pure-java" "pure-java/$*.java" - - + $(JAVAC) $(JAVA_FLAGS) "pure-java/$*.java" + +c: $(C_OBJS) $(C_BINS) +bin/c/%.o: c/%.h c/%.c + mkdir -p "bin/c" + $(CC) $(C_FLAGS) -c "c/$*".{c,h} + mv "$*.o" "c/$*.o" +bin/c/%: c/%.c + mkdir -p "bin/c" + $(CC) $(C_FLAGS) -o "$@" "c/$*".c "c/"*.o .PHONY: clean @@ -1,7 +1,7 @@ COMPLETE STATUS: - Pure Java 1.2+ :: incorrect, optimised + Pure Java 1.2+ :: optimised Python 3 :: optimised - C ISO C90 :: incorrect(as java), not optimised + C ISO C90 :: not optimised Java/C JNI :: planned (after c) NASM :: planned (maybe, after jni) Haskell :: planned (maybe) @@ -335,7 +335,7 @@ static byte* pad10star1(byte* msg, long len, long r, long* outlen) { byte* message; - long nrf = len >> 3; + long nrf = (len <<= 3) >> 3; long nbrf = len & 7; long ll = len % r; long i; @@ -382,7 +382,14 @@ extern void initialise(long bitrate, long capacity, long output) w = b / 25; l = lb(w); nr = 12 + (l << 1); - wmod = w == 64 ? -1LL ? (1LL << w) - 1LL; + if (w == 64) + wmod = -1; + else + { + wmod = 1; + wmod <<= w; + wmod--; + } S = (llong*)malloc(25 * sizeof(llong)); M = (byte*)malloc(mlen = (r * b) >> 2); mptr = 0; diff --git a/c/sha3sum.c b/c/sha3sum.c index 993cf94..bc29a58 100644 --- a/c/sha3sum.c +++ b/c/sha3sum.c @@ -338,13 +338,13 @@ int main(int argc, char** argv) if (binary) { long j; + for (j = 0; j < bn; j++) + putchar(*(bs + j)); if (filename == null) { stdin = bs; bs = null; } - for (j = 0; j < bn; j++) - putchar(*(bs + j)); fflush(stdout); } else diff --git a/pure-java/SHA3.java b/pure-java/SHA3.java index 2e0f774..76d3df4 100644 --- a/pure-java/SHA3.java +++ b/pure-java/SHA3.java @@ -318,7 +318,7 @@ public class SHA3 */ private static byte[] pad10star1(byte[] msg, int len, int r) { - int nrf = len >> 3; + int nrf = (len <<= 3) >> 3; int nbrf = len & 7; int ll = len % r; @@ -336,8 +336,6 @@ public class SHA3 len = ((len - (len % r) + (r - 8)) >> 3) + 1; message = new byte[len]; message[nrf] = b; - //for (long i = nrf + 1; i < len; i++) - // message[i + nrf] = 0; message[len - 1] = -128; } System.arraycopy(msg, 0, message, 0, nrf); diff --git a/python3/sha3sum.py b/python3/sha3sum.py index f7e297a..613b697 100755 --- a/python3/sha3sum.py +++ b/python3/sha3sum.py @@ -324,7 +324,7 @@ class SHA3: @param r:int The bitrate @return :str The message padded ''' - nnn = len(msg) + nnn = len(msg) << 3 nrf = nnn >> 3 nbrf = nnn & 7 @@ -341,8 +341,6 @@ class SHA3: message = [0] * (nnn - nrf) message[0] = bbbb nnn -= nrf - #for i in range(1, nnn): - # message[i] = 0 message[nnn - 1] = 0x80 return msg[:nrf] + bytes(message) @@ -698,7 +696,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. fn = '/dev/stdin' if filename is None else filename with open(fn, 'rb') as file: SHA3.initialise(r, c, o) - blksize = os.stat(os.path.realpath(fn)).st_size + blksize = (o + 7) >> 3 + try: + blksize = os.stat(os.path.realpath(fn)).st_size + except: + pass while True: chunk = file.read(blksize) if len(chunk) == 0: |