+
+ public Map<String, List<JsonIdentityKeyStore.Identity>> getIdentities() {
+ return signalProtocolStore.getIdentities();
+ }
+
+ public List<JsonIdentityKeyStore.Identity> getIdentities(String number) {
+ return signalProtocolStore.getIdentities(number);
+ }
+
+ /**
+ * Trust this the identity with this fingerprint
+ *
+ * @param name username of the identity
+ * @param fingerprint Fingerprint
+ */
+ public boolean trustIdentityVerified(String name, byte[] fingerprint) {
+ List<JsonIdentityKeyStore.Identity> ids = signalProtocolStore.getIdentities(name);
+ if (ids == null) {
+ return false;
+ }
+ for (JsonIdentityKeyStore.Identity id : ids) {
+ if (!Arrays.equals(id.getIdentityKey().serialize(), fingerprint)) {
+ continue;
+ }
+
+ signalProtocolStore.saveIdentity(name, id.getIdentityKey(), TrustLevel.TRUSTED_VERIFIED);
+ try {
+ sendVerifiedMessage(name, id.getIdentityKey(), TrustLevel.TRUSTED_VERIFIED);
+ } catch (IOException | UntrustedIdentityException e) {
+ e.printStackTrace();
+ }
+ save();
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Trust this the identity with this safety number
+ *
+ * @param name username of the identity
+ * @param safetyNumber Safety number
+ */
+ public boolean trustIdentityVerifiedSafetyNumber(String name, String safetyNumber) {
+ List<JsonIdentityKeyStore.Identity> ids = signalProtocolStore.getIdentities(name);
+ if (ids == null) {
+ return false;
+ }
+ for (JsonIdentityKeyStore.Identity id : ids) {
+ if (!safetyNumber.equals(computeSafetyNumber(name, id.getIdentityKey()))) {
+ continue;
+ }
+
+ signalProtocolStore.saveIdentity(name, id.getIdentityKey(), TrustLevel.TRUSTED_VERIFIED);
+ try {
+ sendVerifiedMessage(name, id.getIdentityKey(), TrustLevel.TRUSTED_VERIFIED);
+ } catch (IOException | UntrustedIdentityException e) {
+ e.printStackTrace();
+ }
+ save();
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Trust all keys of this identity without verification
+ *
+ * @param name username of the identity
+ */
+ public boolean trustIdentityAllKeys(String name) {
+ List<JsonIdentityKeyStore.Identity> ids = signalProtocolStore.getIdentities(name);
+ if (ids == null) {
+ return false;
+ }
+ for (JsonIdentityKeyStore.Identity id : ids) {
+ if (id.getTrustLevel() == TrustLevel.UNTRUSTED) {
+ signalProtocolStore.saveIdentity(name, id.getIdentityKey(), TrustLevel.TRUSTED_UNVERIFIED);
+ try {
+ sendVerifiedMessage(name, id.getIdentityKey(), TrustLevel.TRUSTED_UNVERIFIED);
+ } catch (IOException | UntrustedIdentityException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ save();
+ return true;
+ }
+
+ public String computeSafetyNumber(String theirUsername, IdentityKey theirIdentityKey) {
+ Fingerprint fingerprint = new NumericFingerprintGenerator(5200).createFor(username, getIdentity(), theirUsername, theirIdentityKey);
+ return fingerprint.getDisplayableFingerprint().getDisplayText();
+ }