X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/086bdb937af839544a49b91c4b22272a7070d292..f97b0c0faad04f9475d4248a1f09c775d1c3df3f:/src/main/java/org/asamk/signal/Manager.java diff --git a/src/main/java/org/asamk/signal/Manager.java b/src/main/java/org/asamk/signal/Manager.java index 6ed8b045..e02258f1 100644 --- a/src/main/java/org/asamk/signal/Manager.java +++ b/src/main/java/org/asamk/signal/Manager.java @@ -31,6 +31,8 @@ import org.whispersystems.libsignal.*; 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; @@ -125,6 +127,10 @@ class Manager implements Signal { return username; } + private IdentityKey getIdentity() { + return signalProtocolStore.getIdentityKeyPair().getPublicKey(); + } + public int getDeviceId() { return deviceId; } @@ -1330,6 +1336,29 @@ class Manager implements Signal { 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 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 * @@ -1348,4 +1377,9 @@ class Manager implements Signal { save(); return true; } + + public String computeSafetyNumber(String theirUsername, IdentityKey theirIdentityKey) { + Fingerprint fingerprint = new NumericFingerprintGenerator(5200).createFor(username, getIdentity(), theirUsername, theirIdentityKey); + return fingerprint.getDisplayableFingerprint().getDisplayText(); + } }