From 711740d156df7ed46a43548b4ae44a08a0dd2e4e Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Fri, 2 Jun 2017 09:49:29 -0700 Subject: [PATCH] Update to libsignal-service 2.5.10 // FREEBIE --- build.gradle | 10 +++++----- .../crypto/storage/SignalProtocolStoreImpl.java | 4 ++-- .../storage/TextSecureIdentityKeyStore.java | 16 +++++++++------- .../securesms/jobs/RetrieveProfileJob.java | 17 +++++++++++++++-- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/build.gradle b/build.gradle index 6290447f95..92b3f51acb 100644 --- a/build.gradle +++ b/build.gradle @@ -61,7 +61,7 @@ dependencies { compile 'org.whispersystems:jobmanager:1.0.2' compile 'org.whispersystems:libpastelog:1.0.7' - compile 'org.whispersystems:signal-service-android:2.5.9' + compile 'org.whispersystems:signal-service-android:2.5.10' compile 'org.whispersystems:webrtc-android:M57-S2' compile "me.leolin:ShortcutBadger:1.1.16" @@ -135,7 +135,7 @@ dependencyVerification { 'com.google.android.exoplayer:exoplayer:955085aa611a8f7cf6c61b88ae03d1a392f4ad94c9bfbc153f3dedb9ffb14718', 'org.whispersystems:jobmanager:506f679fc2fcf7bb6d10f00f41d6f6ea0abf75c70dc95b913398661ad538a181', 'org.whispersystems:libpastelog:bb331d9a98240fc139101128ba836c1edec3c40e000597cdbb29ebf4cbf34d88', - 'org.whispersystems:signal-service-android:1985dc870662c7468cb2b9b99455e1fcec5e921739b5213a11f9ac94dbdf51ea', + 'org.whispersystems:signal-service-android:0c6937decce77b94807d100a16bcffc9e69489057b4430ca07a5bce618637b6e', 'org.whispersystems:webrtc-android:9d11e39d4b3823713e5b1486226e0ce09f989d6f47f52da1815e406c186701d5', 'me.leolin:ShortcutBadger:e3cb3e7625892129b0c92dd5e4bc649faffdd526d5af26d9c45ee31ff8851774', 'se.emilsjolander:stickylistheaders:a08ca948aa6b220f09d82f16bbbac395f6b78897e9eeac6a9f0b0ba755928eeb', @@ -169,8 +169,8 @@ dependencyVerification { 'com.google.android.gms:play-services-base:0ca636a8fc9a5af45e607cdcd61783bf5d561cbbb0f862021ce69606eee5ad49', 'com.google.android.gms:play-services-basement:95dd882c5ffba15b9a99de3fefb05d3a01946623af67454ca00055d222f85a8d', 'com.google.android.gms:play-services-iid:54e919f9957b8b7820da7ee9b83471d00d0cac1cf08ddea8b5b41aea80bb1a70', - 'org.whispersystems:signal-service-java:6350eec3804ae8e5a30f56f8be5c34cf5eac82e5140d6fbcffd7c83ec38e889b', - 'org.whispersystems:signal-protocol-android:132d1b56921d10868d3a88e113f5d3611036b56f01f825a8eb7a588397437db9', + 'org.whispersystems:signal-service-java:1de66a4068523098951529a363b4f02436e654d3d3fcf9228154b8c2cf94945b', + 'org.whispersystems:signal-protocol-android:b05cd9570d2e262afeb6610b70f473a936c54dd23a7c967d76e8f288766731fd', 'com.nineoldandroids:library:68025a14e3e7673d6ad2f95e4b46d78d7d068343aa99256b686fe59de1b3163a', 'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff', 'com.madgag.spongycastle:core:8d6240b974b0aca4d3da9c7dd44d42339d8a374358aca5fc98e50a995764511f', @@ -181,7 +181,7 @@ dependencyVerification { 'com.fasterxml.jackson.core:jackson-databind:835097bcdd11f5bc8a08378c70d4c8054dfa4b911691cc2752063c75534d198d', 'com.squareup.okhttp3:okhttp:a992938d7203ca557cd7a116f002e8c427ec9cdae7ea852441abb8aec891f948', 'org.whispersystems:curve25519-android:bf6c34223d45d2f2813a8efcab9923caf99115115c760c9acea680bcb42d23c0', - 'org.whispersystems:signal-protocol-java:f96dab329848ef079ad9c4826020c19046f9208cac1f31e6693827b2b3529fd4', + 'org.whispersystems:signal-protocol-java:720eba8d75f14b1c91198c21843326b9d487e60479929a0dfa550ad4ffea3492', 'com.fasterxml.jackson.core:jackson-annotations:0ca408c24202a7626ec8b861e99d85eca5e38b73311dd6dd12e3e9deecc3fe94', 'com.fasterxml.jackson.core:jackson-core:cbf4604784b4de226262845447a1ad3bb38a6728cebe86562e2c5afada8be2c0', 'com.squareup.okio:okio:8c5436cadfab36bbd97db5f5c43b7bfdb5bf2f5f894ec8709b1929f14bdd010c', diff --git a/src/org/thoughtcrime/securesms/crypto/storage/SignalProtocolStoreImpl.java b/src/org/thoughtcrime/securesms/crypto/storage/SignalProtocolStoreImpl.java index 8cfcb244c8..6d1ee8a96b 100644 --- a/src/org/thoughtcrime/securesms/crypto/storage/SignalProtocolStoreImpl.java +++ b/src/org/thoughtcrime/securesms/crypto/storage/SignalProtocolStoreImpl.java @@ -42,8 +42,8 @@ public class SignalProtocolStoreImpl implements SignalProtocolStore { } @Override - public void saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) { - identityKeyStore.saveIdentity(address, identityKey); + public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) { + return identityKeyStore.saveIdentity(address, identityKey); } @Override diff --git a/src/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java b/src/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java index 99c0d70f94..1e0524585e 100644 --- a/src/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java +++ b/src/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java @@ -42,8 +42,8 @@ public class TextSecureIdentityKeyStore implements IdentityKeyStore { return TextSecurePreferences.getLocalRegistrationId(context); } - public void saveIdentity(SignalProtocolAddress address, IdentityKey identityKey, - boolean blockingApproval, boolean nonBlockingApproval) + public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey, + boolean blockingApproval, boolean nonBlockingApproval) { synchronized (LOCK) { IdentityDatabase identityDatabase = DatabaseFactory.getIdentityDatabase(context); @@ -54,27 +54,29 @@ public class TextSecureIdentityKeyStore implements IdentityKeyStore { if (!identityRecord.isPresent()) { Log.w(TAG, "Saving new identity..."); identityDatabase.saveIdentity(recipientId, identityKey, true, System.currentTimeMillis(), blockingApproval, nonBlockingApproval); - return; + return false; } if (!identityRecord.get().getIdentityKey().equals(identityKey)) { Log.w(TAG, "Replacing existing identity..."); identityDatabase.saveIdentity(recipientId, identityKey, false, System.currentTimeMillis(), blockingApproval, nonBlockingApproval); IdentityUtil.markIdentityUpdate(context, recipients.getPrimaryRecipient()); - return; + return true; } if (isBlockingApprovalRequired(identityRecord.get()) || isNonBlockingApprovalRequired(identityRecord.get())) { Log.w(TAG, "Setting approval status..."); identityDatabase.setApproval(recipientId, blockingApproval, nonBlockingApproval); - return; + return false; } + + return false; } } @Override - public void saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) { - saveIdentity(address, identityKey, !TextSecurePreferences.isSendingIdentityApprovalRequired(context), false); + public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) { + return saveIdentity(address, identityKey, !TextSecurePreferences.isSendingIdentityApprovalRequired(context), false); } @Override diff --git a/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java b/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java index 6ed8bb6444..a2765b6d52 100644 --- a/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java +++ b/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java @@ -6,6 +6,7 @@ import android.support.annotation.NonNull; import android.util.Log; import org.thoughtcrime.securesms.crypto.storage.TextSecureIdentityKeyStore; +import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.dependencies.InjectableType; import org.thoughtcrime.securesms.recipients.Recipient; @@ -20,6 +21,8 @@ import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.state.IdentityKeyStore; +import org.whispersystems.libsignal.state.SessionRecord; +import org.whispersystems.libsignal.state.SessionStore; import org.whispersystems.signalservice.api.SignalServiceMessagePipe; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.push.SignalServiceAddress; @@ -89,8 +92,18 @@ public class RetrieveProfileJob extends ContextJob implements InjectableType { } synchronized (SESSION_LOCK) { - IdentityKeyStore identityKeyStore = new TextSecureIdentityKeyStore(context); - identityKeyStore.saveIdentity(new SignalProtocolAddress(recipient.getNumber(), 1), identityKey); + IdentityKeyStore identityKeyStore = new TextSecureIdentityKeyStore(context); + SessionStore sessionStore = new TextSecureSessionStore(context); + SignalProtocolAddress address = new SignalProtocolAddress(number, 1); + + if (identityKeyStore.saveIdentity(address, identityKey)) { + if (sessionStore.containsSession(address)) { + SessionRecord sessionRecord = sessionStore.loadSession(address); + sessionRecord.archiveCurrentState(); + + sessionStore.storeSession(address, sessionRecord); + } + } } }