import org.whispersystems.libsignal.ecc.Curve;
import org.whispersystems.libsignal.ecc.ECKeyPair;
import org.whispersystems.libsignal.ecc.ECPublicKey;
+import org.whispersystems.libsignal.fingerprint.Fingerprint;
+import org.whispersystems.libsignal.fingerprint.NumericFingerprintGenerator;
import org.whispersystems.libsignal.state.PreKeyRecord;
import org.whispersystems.libsignal.state.SignedPreKeyRecord;
import org.whispersystems.libsignal.util.KeyHelper;
return username;
}
+ private IdentityKey getIdentity() {
+ return signalProtocolStore.getIdentityKeyPair().getPublicKey();
+ }
+
public int getDeviceId() {
return deviceId;
}
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.identityKey))) {
+ continue;
+ }
+
+ signalProtocolStore.saveIdentity(name, id.identityKey, TrustLevel.TRUSTED_VERIFIED);
+ save();
+ return true;
+ }
+ return false;
+ }
+
/**
* Trust all keys of this identity without verification
*
save();
return true;
}
+
+ public String computeSafetyNumber(String theirUsername, IdentityKey theirIdentityKey) {
+ Fingerprint fingerprint = new NumericFingerprintGenerator(5200).createFor(username, getIdentity(), theirUsername, theirIdentityKey);
+ return fingerprint.getDisplayableFingerprint().getDisplayText();
+ }
}