aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Weeks <me@brandonweeks.com>2023-06-19 08:21:06 -0700
committerGitHub <noreply@github.com>2023-06-19 16:21:06 +0100
commitd2576d8856d74ece8cc9694f370aedb7bfee241c (patch)
treefd4892340849e2de38ea353b864b4db4ebe9925a
parenta4f2e3d7cdaa037c8f02bf2a94c9a9cd9f21cae6 (diff)
downloadandroid-key-attestation-d2576d8856d74ece8cc9694f370aedb7bfee241c.tar.gz
Remove Comparable<T> for AttestationApplicationId (#44)
Application IDs do not have a "natural" ordering, in collections IDs should be in the order they appear in the DER-encoded ASN.1.
-rw-r--r--server/src/main/java/com/google/android/attestation/AttestationApplicationId.java74
1 files changed, 13 insertions, 61 deletions
diff --git a/server/src/main/java/com/google/android/attestation/AttestationApplicationId.java b/server/src/main/java/com/google/android/attestation/AttestationApplicationId.java
index c63c847..564e8f7 100644
--- a/server/src/main/java/com/google/android/attestation/AttestationApplicationId.java
+++ b/server/src/main/java/com/google/android/attestation/AttestationApplicationId.java
@@ -43,7 +43,7 @@ import org.bouncycastle.asn1.DERSet;
*
* <p>The Attestation Application ID data from KeyMint will not exceed 1K bytes.
*/
-public class AttestationApplicationId implements Comparable<AttestationApplicationId> {
+public class AttestationApplicationId {
public final List<AttestationPackageInfo> packageInfos;
public final List<byte[]> signatureDigests;
@@ -103,35 +103,13 @@ public class AttestationApplicationId implements Comparable<AttestationApplicati
}
@Override
- public int compareTo(AttestationApplicationId other) {
- int res = Integer.compare(packageInfos.size(), other.packageInfos.size());
- if (res != 0) {
- return res;
+ public boolean equals(Object object) {
+ if (object instanceof AttestationApplicationId) {
+ AttestationApplicationId that = (AttestationApplicationId) object;
+ return this.packageInfos.equals(that.packageInfos)
+ && Arrays.deepEquals(this.signatureDigests.toArray(), that.signatureDigests.toArray());
}
- for (int i = 0; i < packageInfos.size(); ++i) {
- res = packageInfos.get(i).compareTo(other.packageInfos.get(i));
- if (res != 0) {
- return res;
- }
- }
- res = Integer.compare(signatureDigests.size(), other.signatureDigests.size());
- if (res != 0) {
- return res;
- }
- ByteArrayComparator cmp = new ByteArrayComparator();
- for (int i = 0; i < signatureDigests.size(); ++i) {
- res = cmp.compare(signatureDigests.get(i), other.signatureDigests.get(i));
- if (res != 0) {
- return res;
- }
- }
- return res;
- }
-
- @Override
- public boolean equals(Object o) {
- return (o instanceof AttestationApplicationId)
- && (compareTo((AttestationApplicationId) o) == 0);
+ return false;
}
@Override
@@ -140,7 +118,7 @@ public class AttestationApplicationId implements Comparable<AttestationApplicati
}
/** Provides package's name and version number. */
- public static class AttestationPackageInfo implements Comparable<AttestationPackageInfo> {
+ public static class AttestationPackageInfo {
public final String packageName;
public final long version;
@@ -171,21 +149,12 @@ public class AttestationApplicationId implements Comparable<AttestationApplicati
}
@Override
- public int compareTo(AttestationPackageInfo other) {
- int res = packageName.compareTo(other.packageName);
- if (res != 0) {
- return res;
- }
- res = Long.compare(version, other.version);
- if (res != 0) {
- return res;
+ public boolean equals(Object object) {
+ if (object instanceof AttestationPackageInfo) {
+ AttestationPackageInfo that = (AttestationPackageInfo) object;
+ return this.packageName.equals(that.packageName) && this.version == that.version;
}
- return res;
- }
-
- @Override
- public boolean equals(Object o) {
- return (o instanceof AttestationPackageInfo) && (compareTo((AttestationPackageInfo) o) == 0);
+ return false;
}
@Override
@@ -193,21 +162,4 @@ public class AttestationApplicationId implements Comparable<AttestationApplicati
return Objects.hash(packageName, version);
}
}
-
- private static class ByteArrayComparator implements java.util.Comparator<byte[]> {
- @Override
- public int compare(byte[] a, byte[] b) {
- int res = Integer.compare(a.length, b.length);
- if (res != 0) {
- return res;
- }
- for (int i = 0; i < a.length; ++i) {
- res = Byte.compare(a[i], b[i]);
- if (res != 0) {
- return res;
- }
- }
- return res;
- }
- }
}