From 97258a1838d3c5761b54e6bb88b0d40748c55682 Mon Sep 17 00:00:00 2001 From: Roman Mandeleil Date: Wed, 25 Feb 2015 19:13:03 +0200 Subject: [PATCH] Tweak sha3 to work on part of the byte array by (start, length) --- .../java/org/ethereum/crypto/HashUtil.java | 18 ++++++------------ .../java/org/ethereum/crypto/SHA3Helper.java | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/ethereumj-core/src/main/java/org/ethereum/crypto/HashUtil.java b/ethereumj-core/src/main/java/org/ethereum/crypto/HashUtil.java index 8b5414ed..f587142a 100644 --- a/ethereumj-core/src/main/java/org/ethereum/crypto/HashUtil.java +++ b/ethereumj-core/src/main/java/org/ethereum/crypto/HashUtil.java @@ -1,16 +1,12 @@ package org.ethereum.crypto; -import org.ethereum.db.ByteArrayWrapper; -import org.ethereum.util.LRUMap; import org.ethereum.util.RLP; import org.ethereum.util.Utils; - import org.spongycastle.crypto.Digest; import org.spongycastle.crypto.digests.RIPEMD160Digest; import org.spongycastle.util.encoders.Hex; import java.math.BigInteger; - import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -20,7 +16,6 @@ import static org.ethereum.util.ByteUtil.EMPTY_BYTE_ARRAY; public class HashUtil { private static final int MAX_ENTRIES = 100; // Should contain most commonly hashed values - private static LRUMap sha3Cache = new LRUMap<>(0, MAX_ENTRIES); public static final byte[] EMPTY_DATA_HASH = sha3(EMPTY_BYTE_ARRAY); public static final byte[] EMPTY_LIST_HASH = sha3(RLP.encodeList()); public static final byte[] EMPTY_TRIE_HASH = sha3(RLP.encodeElement(EMPTY_BYTE_ARRAY)); @@ -40,15 +35,14 @@ public class HashUtil { } public static byte[] sha3(byte[] input) { - ByteArrayWrapper inputByteArray = new ByteArrayWrapper(input); - byte[] result = sha3Cache.get(inputByteArray); - if (result != null) - return result; - result = SHA3Helper.sha3(input); - sha3Cache.put(inputByteArray, result); - return result; + return SHA3Helper.sha3(input); } + public static byte[] sha3(byte[] input, int start, int length) { + return SHA3Helper.sha3(input, start, length); + } + + public static byte[] ripemd160(byte[] message) { Digest digest = new RIPEMD160Digest(); if (message != null) { diff --git a/ethereumj-core/src/main/java/org/ethereum/crypto/SHA3Helper.java b/ethereumj-core/src/main/java/org/ethereum/crypto/SHA3Helper.java index 9be34af7..ded97718 100644 --- a/ethereumj-core/src/main/java/org/ethereum/crypto/SHA3Helper.java +++ b/ethereumj-core/src/main/java/org/ethereum/crypto/SHA3Helper.java @@ -25,6 +25,10 @@ public class SHA3Helper { return sha3(message, new SHA3Digest(DEFAULT_SIZE), true); } + public static byte[] sha3(byte[] message, int start, int length) { + return sha3(message, start, length, new SHA3Digest(DEFAULT_SIZE), true); + } + protected static String sha3String(String message, Size bitSize) { SHA3Digest digest = new SHA3Digest(bitSize.bits); return sha3String(message, digest, true); @@ -66,6 +70,17 @@ public class SHA3Helper { return doSha3(message, digest, bouncyencoder); } + private static byte[] sha3(byte[] message, int start, int length, SHA3Digest digest, boolean bouncyencoder) { + byte[] hash = new byte[digest.getDigestSize()]; + + if (message.length != 0) { + digest.update(message, start, length); + } + digest.doFinal(hash, 0); + return hash; + } + + private static byte[] doSha3(byte[] message, SHA3Digest digest, boolean bouncyencoder) { byte[] hash = new byte[digest.getDigestSize()];