diff --git a/common/src/main/java/bisq/common/crypto/Equihash.java b/common/src/main/java/bisq/common/crypto/Equihash.java index d78e13315b..e8eec1697d 100644 --- a/common/src/main/java/bisq/common/crypto/Equihash.java +++ b/common/src/main/java/bisq/common/crypto/Equihash.java @@ -42,6 +42,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Optional; import java.util.PrimitiveIterator; +import java.util.stream.IntStream; import lombok.ToString; @@ -244,15 +245,11 @@ public class Equihash { } private XorTable computeAllHashes() { - var tableValues = ImmutableIntArray.builder((k + 2) * N); - for (int i = 0; i < N; i++) { + var tableValues = IntStream.range(0, N).flatMap(i -> { int[] hash = hashInputs(i); - for (int j = 0; j <= k; j++) { - tableValues.add(hash[j] & (N / 2 - 1)); - } - tableValues.add(i); - } - return new XorTable(k + 1, 1, tableValues.build()); + return IntStream.range(0, k + 2).map(j -> j <= k ? hash[j] & (N / 2 - 1) : i); + }); + return new XorTable(k + 1, 1, ImmutableIntArray.copyOf(tableValues.parallel())); } private boolean testDifficultyCondition(int[] inputs) { diff --git a/common/src/main/java/bisq/common/util/Utilities.java b/common/src/main/java/bisq/common/util/Utilities.java index 7e665833c1..fca323ab4c 100644 --- a/common/src/main/java/bisq/common/util/Utilities.java +++ b/common/src/main/java/bisq/common/util/Utilities.java @@ -20,6 +20,7 @@ package bisq.common.util; import org.bitcoinj.core.Utils; import com.google.common.base.Splitter; +import com.google.common.primitives.Ints; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; @@ -42,7 +43,6 @@ import java.text.DecimalFormat; import java.net.URI; import java.net.URISyntaxException; -import java.nio.ByteBuffer; import java.nio.file.Paths; import java.io.File; @@ -536,13 +536,21 @@ public class Utilities { public static byte[] intsToBytesBE(int[] ints) { byte[] bytes = new byte[ints.length * 4]; - ByteBuffer.wrap(bytes).asIntBuffer().put(ints); + int i = 0; + for (int v : ints) { + bytes[i++] = (byte) (v >> 24); + bytes[i++] = (byte) (v >> 16); + bytes[i++] = (byte) (v >> 8); + bytes[i++] = (byte) v; + } return bytes; } public static int[] bytesToIntsBE(byte[] bytes) { int[] ints = new int[bytes.length / 4]; - ByteBuffer.wrap(bytes).asIntBuffer().get(ints); + for (int i = 0, j = 0; i < bytes.length / 4; i++) { + ints[i] = Ints.fromBytes(bytes[j++], bytes[j++], bytes[j++], bytes[j++]); + } return ints; }