From 88efb461dc3d1d32c353a1d7aeeafa90786dae77 Mon Sep 17 00:00:00 2001 From: Bernie Dolan Date: Mon, 2 Oct 2023 10:11:10 -0700 Subject: [PATCH] Fog Seed Order Fix (#136) * Fix FogSeed Ordering * Fix FogSeed Order * Revert serialization change * Remove unused serialization code --- android-sdk/publish.gradle | 2 +- .../main/java/com/mobilecoin/lib/FogSeed.java | 51 +++---------------- 2 files changed, 8 insertions(+), 45 deletions(-) diff --git a/android-sdk/publish.gradle b/android-sdk/publish.gradle index f528df45..d56961d5 100644 --- a/android-sdk/publish.gradle +++ b/android-sdk/publish.gradle @@ -1,6 +1,6 @@ apply plugin: 'maven-publish' -version '5.0.0' +version '5.0.1-pre0' group 'com.mobilecoin' Properties properties = new Properties() diff --git a/android-sdk/src/main/java/com/mobilecoin/lib/FogSeed.java b/android-sdk/src/main/java/com/mobilecoin/lib/FogSeed.java index 29b0910c..a3778797 100644 --- a/android-sdk/src/main/java/com/mobilecoin/lib/FogSeed.java +++ b/android-sdk/src/main/java/com/mobilecoin/lib/FogSeed.java @@ -33,7 +33,7 @@ class FogSeed implements Parcelable, Comparable { private int rngVersion; // True if the seed is (a) decommissioned and (b) all utxos have been retrieved. private boolean isObsolete; - private long ingestInvocationId; + private UnsignedLong ingestInvocationId; private UnsignedLong startBlock; private ArrayList utxos; @@ -42,7 +42,7 @@ class FogSeed implements Parcelable, Comparable { @NonNull View.RngRecord rngRecord ) throws KexRngException { Logger.i(TAG, "Initializing Fog Seed"); - ingestInvocationId = rngRecord.getIngestInvocationId(); + ingestInvocationId = UnsignedLong.fromLongBits(rngRecord.getIngestInvocationId()); nonce = rngRecord.getPubkey().getPubkey().toByteArray(); rngVersion = rngRecord.getPubkey().getVersion(); startBlock = UnsignedLong.fromLongBits(rngRecord.getStartBlock()); @@ -122,7 +122,7 @@ List getTxOuts() { return utxos; } - long getIngestInvocationId() { + UnsignedLong getIngestInvocationId() { return ingestInvocationId; } @@ -134,43 +134,6 @@ void markObsolete() { isObsolete = true; } - - private void writeObject(ObjectOutputStream out) throws IOException, KexRngException { - out.write(nonce.length); - out.write(nonce); - - byte[] storedRngProtobufBytes = kexRng.getProtobufBytes(); - out.write(storedRngProtobufBytes.length); - out.write(storedRngProtobufBytes); - - out.writeInt(rngVersion); - out.writeObject(startBlock); - out.writeObject(utxos); - out.writeLong(ingestInvocationId); - } - - @SuppressWarnings("unchecked") - private void readObject(ObjectInputStream in) - throws IOException, ClassNotFoundException, KexRngException { - int nonceLength = in.read(); - nonce = new byte[nonceLength]; - int bytesRead = in.read(nonce); - if (bytesRead != nonceLength) { - throw new IOException(); - } - int storedRngProtobufBytesLength = in.read(); - byte[] storedRngProtobufBytes = new byte[storedRngProtobufBytesLength]; - int kexRngProtobufBytesRead = in.read(storedRngProtobufBytes); - if (kexRngProtobufBytesRead != storedRngProtobufBytesLength) { - throw new IOException(); - } - kexRng = new ClientKexRng(storedRngProtobufBytes); - rngVersion = in.readInt(); - startBlock = (UnsignedLong) in.readObject(); - utxos = (ArrayList) in.readObject(); - ingestInvocationId = in.readLong(); - } - @Override public boolean equals(Object o) { if (this == o) { @@ -182,7 +145,7 @@ public boolean equals(Object o) { FogSeed fogSeed = (FogSeed) o; return rngVersion == fogSeed.rngVersion && isObsolete == fogSeed.isObsolete && - ingestInvocationId == fogSeed.ingestInvocationId && + ingestInvocationId.equals(fogSeed.ingestInvocationId) && Objects.equals(kexRng, fogSeed.kexRng) && Arrays.equals(nonce, fogSeed.nonce) && Objects.equals(startBlock, fogSeed.startBlock) && @@ -221,7 +184,7 @@ public void writeToParcel(Parcel parcel, int flags) { parcel.writeByteArray(nonce); parcel.writeInt(rngVersion); parcel.writeByte((byte) (isObsolete ? 1 : 0)); - parcel.writeLong(ingestInvocationId); + parcel.writeLong(ingestInvocationId.longValue()); parcel.writeParcelable(startBlock, flags); parcel.writeTypedList(utxos); } @@ -235,7 +198,7 @@ private FogSeed(Parcel parcel) { nonce = parcel.createByteArray(); rngVersion = parcel.readInt(); isObsolete = parcel.readByte() != 0; - ingestInvocationId = parcel.readLong(); + ingestInvocationId = UnsignedLong.fromLongBits(parcel.readLong()); startBlock = parcel.readParcelable(UnsignedLong.class.getClassLoader()); utxos = parcel.createTypedArrayList(OwnedTxOut.CREATOR); } @@ -262,6 +225,6 @@ public FogSeed[] newArray(int length) { @Override public int compareTo(FogSeed fogSeed) { - return this.startBlock.compareTo(fogSeed.startBlock); + return this.ingestInvocationId.compareTo(fogSeed.ingestInvocationId); } }