1package eu.siacs.conversations.crypto.axolotl;
2
3import android.content.ContentValues;
4import android.database.Cursor;
5
6public class FingerprintStatus {
7
8 private Trust trust = Trust.UNTRUSTED;
9 private boolean active = false;
10
11 @Override
12 public boolean equals(Object o) {
13 if (this == o) return true;
14 if (o == null || getClass() != o.getClass()) return false;
15
16 FingerprintStatus that = (FingerprintStatus) o;
17
18 return active == that.active && trust == that.trust;
19 }
20
21 @Override
22 public int hashCode() {
23 int result = trust.hashCode();
24 result = 31 * result + (active ? 1 : 0);
25 return result;
26 }
27
28 private FingerprintStatus() {
29
30
31 }
32
33 public ContentValues toContentValues() {
34 final ContentValues contentValues = new ContentValues();
35 contentValues.put(SQLiteAxolotlStore.TRUST,trust.toString());
36 contentValues.put(SQLiteAxolotlStore.ACTIVE,active ? 1 : 0);
37 return contentValues;
38 }
39
40 public static FingerprintStatus fromCursor(Cursor cursor) {
41 final FingerprintStatus status = new FingerprintStatus();
42 try {
43 status.trust = Trust.valueOf(cursor.getString(cursor.getColumnIndex(SQLiteAxolotlStore.TRUST)));
44 } catch(IllegalArgumentException e) {
45 status.trust = Trust.UNTRUSTED;
46 }
47 status.active = cursor.getInt(cursor.getColumnIndex(SQLiteAxolotlStore.ACTIVE)) > 0;
48 return status;
49 }
50
51 public static FingerprintStatus createActiveUndecided() {
52 final FingerprintStatus status = new FingerprintStatus();
53 status.trust = Trust.UNDECIDED;
54 status.active = true;
55 return status;
56 }
57
58 public static FingerprintStatus createActiveVerified(boolean x509) {
59 final FingerprintStatus status = new FingerprintStatus();
60 status.trust = x509 ? Trust.VERIFIED_X509 : Trust.VERIFIED;
61 status.active = true;
62 return status;
63 }
64
65 public static FingerprintStatus createActive(boolean trusted) {
66 final FingerprintStatus status = new FingerprintStatus();
67 status.trust = trusted ? Trust.TRUSTED : Trust.UNTRUSTED;
68 status.active = true;
69 return status;
70 }
71
72 public boolean isTrustedAndActive() {
73 return active && isTrusted();
74 }
75
76 public boolean isTrusted() {
77 return trust == Trust.TRUSTED || trust == Trust.VERIFIED || trust == Trust.VERIFIED_X509;
78 }
79
80 public boolean isCompromised() {
81 return trust == Trust.COMPROMISED;
82 }
83
84 public boolean isActive() {
85 return active;
86 }
87
88 public FingerprintStatus toActive() {
89 FingerprintStatus status = new FingerprintStatus();
90 status.trust = trust;
91 status.active = true;
92 return status;
93 }
94
95 public FingerprintStatus toInactive() {
96 FingerprintStatus status = new FingerprintStatus();
97 status.trust = trust;
98 status.active = false;
99 return status;
100 }
101
102 public Trust getTrust() {
103 return trust;
104 }
105
106 public static FingerprintStatus createCompromised() {
107 FingerprintStatus status = new FingerprintStatus();
108 status.active = false;
109 status.trust = Trust.COMPROMISED;
110 return status;
111 }
112
113 public enum Trust {
114 COMPROMISED,
115 UNDECIDED,
116 UNTRUSTED,
117 TRUSTED,
118 VERIFIED,
119 VERIFIED_X509
120 }
121
122}