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 || isVerified();
78 }
79
80 public boolean isVerified() {
81 return trust == Trust.VERIFIED || trust == Trust.VERIFIED_X509;
82 }
83
84 public boolean isCompromised() {
85 return trust == Trust.COMPROMISED;
86 }
87
88 public boolean isActive() {
89 return active;
90 }
91
92 public FingerprintStatus toActive() {
93 FingerprintStatus status = new FingerprintStatus();
94 status.trust = trust;
95 status.active = true;
96 return status;
97 }
98
99 public FingerprintStatus toInactive() {
100 FingerprintStatus status = new FingerprintStatus();
101 status.trust = trust;
102 status.active = false;
103 return status;
104 }
105
106 public Trust getTrust() {
107 return trust;
108 }
109
110 public static FingerprintStatus createCompromised() {
111 FingerprintStatus status = new FingerprintStatus();
112 status.active = false;
113 status.trust = Trust.COMPROMISED;
114 return status;
115 }
116
117 public FingerprintStatus toVerified() {
118 FingerprintStatus status = new FingerprintStatus();
119 status.active = active;
120 status.trust = Trust.VERIFIED;
121 return status;
122 }
123
124 public static FingerprintStatus createInactiveVerified() {
125 final FingerprintStatus status = new FingerprintStatus();
126 status.trust = Trust.VERIFIED;
127 status.active = false;
128 return status;
129 }
130
131 public enum Trust {
132 COMPROMISED,
133 UNDECIDED,
134 UNTRUSTED,
135 TRUSTED,
136 VERIFIED,
137 VERIFIED_X509
138 }
139
140}