From eb5a604fbab23caba2674d0bc0a7c79452164817 Mon Sep 17 00:00:00 2001 From: "Nelson R. Perez" Date: Fri, 22 Feb 2019 18:25:36 -0500 Subject: [PATCH 1/3] - Added equals() and hashCode() to the Address class - Fixed potential exception at Util.decryptAES() method --- .../java/cy/agorise/graphenej/Address.java | 15 +++++++++++ .../main/java/cy/agorise/graphenej/Memo.java | 25 +++++-------------- .../main/java/cy/agorise/graphenej/Util.java | 13 +++------- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/graphenej/src/main/java/cy/agorise/graphenej/Address.java b/graphenej/src/main/java/cy/agorise/graphenej/Address.java index 0a60048..94340c0 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/Address.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/Address.java @@ -1,5 +1,6 @@ package cy.agorise.graphenej; +import com.google.common.base.Objects; import com.google.common.primitives.Bytes; import cy.agorise.graphenej.errors.MalformedAddressException; import org.bitcoinj.core.Base58; @@ -61,4 +62,18 @@ public class Address { ripemd160Digest.doFinal(checksum, 0); return Arrays.copyOfRange(checksum, 0, 4); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Address address = (Address) o; + return Objects.equal(publicKey, address.publicKey) && + Objects.equal(prefix, address.prefix); + } + + @Override + public int hashCode() { + return Objects.hashCode(publicKey, prefix); + } } diff --git a/graphenej/src/main/java/cy/agorise/graphenej/Memo.java b/graphenej/src/main/java/cy/agorise/graphenej/Memo.java index b5d2356..dddd10d 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/Memo.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/Memo.java @@ -1,15 +1,11 @@ package cy.agorise.graphenej; import com.google.common.primitives.Bytes; -import com.google.gson.Gson; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - +import com.google.gson.*; +import cy.agorise.graphenej.errors.ChecksumException; +import cy.agorise.graphenej.errors.MalformedAddressException; +import cy.agorise.graphenej.interfaces.ByteSerializable; +import cy.agorise.graphenej.interfaces.JsonSerializable; import org.bitcoinj.core.ECKey; import org.spongycastle.math.ec.ECPoint; @@ -19,11 +15,6 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; -import cy.agorise.graphenej.errors.ChecksumException; -import cy.agorise.graphenej.errors.MalformedAddressException; -import cy.agorise.graphenej.interfaces.ByteSerializable; -import cy.agorise.graphenej.interfaces.JsonSerializable; - /** * Class used to represent a memo data structure * {@url https://bitshares.org/doxygen/structgraphene_1_1chain_1_1memo__data.html} @@ -186,10 +177,6 @@ public class Memo implements ByteSerializable, JsonSerializable { byte[] seed = Bytes.concat(nonceBytes, Util.hexlify(Util.bytesToHex(ss))); - // Calculating checksum - byte[] sha256Msg = sha256.digest(message); - - // Applying decryption byte[] temp = Util.decryptAES(message, seed); byte[] checksum = Arrays.copyOfRange(temp, 0, 4); @@ -201,7 +188,7 @@ public class Memo implements ByteSerializable, JsonSerializable { throw new ChecksumException("Invalid checksum found while performing decryption"); } } catch (NoSuchAlgorithmException e) { - System.out.println("NoSuchAlgotithmException. Msg:"+ e.getMessage()); + System.out.println("NoSuchAlgorithmException. Msg:"+ e.getMessage()); } return plaintext; } diff --git a/graphenej/src/main/java/cy/agorise/graphenej/Util.java b/graphenej/src/main/java/cy/agorise/graphenej/Util.java index 4f80a85..52a743d 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/Util.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/Util.java @@ -2,7 +2,6 @@ package cy.agorise.graphenej; import com.google.common.primitives.Bytes; import com.google.common.primitives.UnsignedLong; - import org.spongycastle.crypto.DataLengthException; import org.spongycastle.crypto.InvalidCipherTextException; import org.spongycastle.crypto.engines.AESFastEngine; @@ -10,13 +9,7 @@ import org.spongycastle.crypto.modes.CBCBlockCipher; import org.spongycastle.crypto.paddings.PaddedBufferedBlockCipher; import org.spongycastle.crypto.params.KeyParameter; import org.spongycastle.crypto.params.ParametersWithIV; -import org.tukaani.xz.CorruptedInputException; -import org.tukaani.xz.FinishableOutputStream; -import org.tukaani.xz.LZMA2Options; -import org.tukaani.xz.LZMAInputStream; -import org.tukaani.xz.LZMAOutputStream; -import org.tukaani.xz.XZInputStream; -import org.tukaani.xz.XZOutputStream; +import org.tukaani.xz.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -320,7 +313,9 @@ public class Util { } byte[] temp = new byte[count]; - System.arraycopy(out, out.length - count, temp, 0, temp.length); + int srcPos = out.length - count > 0 ? out.length - count : 0; + int length = count < out.length ? count : out.length; + System.arraycopy(out, srcPos, temp, 0, length); byte[] temp2 = new byte[count]; Arrays.fill(temp2, (byte) count); if (Arrays.equals(temp, temp2)) { From d0d1e79ab787cb724ca2effcb726f5220d9908f4 Mon Sep 17 00:00:00 2001 From: "Nelson R. Perez" Date: Thu, 14 Mar 2019 13:17:00 -0500 Subject: [PATCH 2/3] Updated the gradle plugin version --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 35db456..8d36b05 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,6 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.1' + classpath 'com.android.tools.build:gradle:3.3.2' } -} \ No newline at end of file +} From 8da72ab26a02e7f514fdde31276bf04cd0c70ff1 Mon Sep 17 00:00:00 2001 From: Severiano Jaramillo Date: Fri, 22 Mar 2019 14:25:15 -0600 Subject: [PATCH 3/3] Fixed issue with the GetLimitOrders call in the demo app. It was not showing the correct fields to enter the necessary data to perform a test call. --- .../main/java/cy/agorise/labs/sample/PerformCallActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java b/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java index c2208b0..87c0bd4 100644 --- a/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java +++ b/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java @@ -157,6 +157,7 @@ public class PerformCallActivity extends ConnectedActivity { break; case RPC.CALL_GET_LIMIT_ORDERS: setupGetLimitOrders(); + break; case RPC.CALL_GET_FULL_ACCOUNTS: setupGetFullAccounts(); break;