mirror of
https://github.com/oxen-io/session-android.git
synced 2025-10-26 00:58:51 +00:00
Only use MasterSecret for local message encryption.
Not for the axolotl store. // FREEBIE
This commit is contained in:
@@ -28,6 +28,7 @@ import android.os.Binder;
|
||||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
import android.os.SystemClock;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.util.Log;
|
||||
import android.widget.RemoteViews;
|
||||
@@ -40,6 +41,7 @@ import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.crypto.InvalidPassphraseException;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
|
||||
import org.thoughtcrime.securesms.jobs.MasterSecretDecryptJob;
|
||||
import org.thoughtcrime.securesms.notifications.MessageNotifier;
|
||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
||||
import org.thoughtcrime.securesms.util.ParcelUtil;
|
||||
@@ -78,7 +80,7 @@ public class KeyCachingService extends Service {
|
||||
|
||||
public KeyCachingService() {}
|
||||
|
||||
public static synchronized MasterSecret getMasterSecret(Context context) {
|
||||
public static synchronized @Nullable MasterSecret getMasterSecret(Context context) {
|
||||
if (masterSecret == null && TextSecurePreferences.isPasswordDisabled(context)) {
|
||||
try {
|
||||
MasterSecret masterSecret = MasterSecretUtil.getMasterSecret(context, MasterSecretUtil.UNENCRYPTED_PASSPHRASE);
|
||||
@@ -103,13 +105,14 @@ public class KeyCachingService extends Service {
|
||||
broadcastNewSecret();
|
||||
startTimeoutIfAppropriate();
|
||||
|
||||
if (!TextSecurePreferences.isPasswordDisabled(this)) {
|
||||
ApplicationContext.getInstance(this).getJobManager().add(new MasterSecretDecryptJob(this));
|
||||
}
|
||||
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
if (!DatabaseUpgradeActivity.isUpdate(KeyCachingService.this)) {
|
||||
ApplicationContext.getInstance(KeyCachingService.this)
|
||||
.getJobManager()
|
||||
.setEncryptionKeys(new EncryptionKeys(ParcelUtil.serialize(masterSecret)));
|
||||
MessageNotifier.updateNotification(KeyCachingService.this, masterSecret);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -14,7 +14,6 @@ import com.google.android.gms.gcm.GoogleCloudMessaging;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.crypto.PreKeyUtil;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.jobs.GcmRefreshJob;
|
||||
@@ -153,15 +152,14 @@ public class RegistrationService extends Service {
|
||||
private void handleVoiceRegistrationIntent(Intent intent) {
|
||||
markAsVerifying(true);
|
||||
|
||||
String number = intent.getStringExtra("e164number");
|
||||
String password = intent.getStringExtra("password" );
|
||||
String signalingKey = intent.getStringExtra("signaling_key");
|
||||
MasterSecret masterSecret = intent.getParcelableExtra("master_secret");
|
||||
String number = intent.getStringExtra("e164number");
|
||||
String password = intent.getStringExtra("password");
|
||||
String signalingKey = intent.getStringExtra("signaling_key");
|
||||
|
||||
try {
|
||||
TextSecureAccountManager accountManager = TextSecureCommunicationFactory.createManager(this, number, password);
|
||||
|
||||
handleCommonRegistration(masterSecret, accountManager, number);
|
||||
handleCommonRegistration(accountManager, number);
|
||||
|
||||
markAsVerified(number, password, signalingKey);
|
||||
|
||||
@@ -181,9 +179,8 @@ public class RegistrationService extends Service {
|
||||
private void handleSmsRegistrationIntent(Intent intent) {
|
||||
markAsVerifying(true);
|
||||
|
||||
String number = intent.getStringExtra("e164number");
|
||||
MasterSecret masterSecret = intent.getParcelableExtra("master_secret");
|
||||
int registrationId = TextSecurePreferences.getLocalRegistrationId(this);
|
||||
String number = intent.getStringExtra("e164number");
|
||||
int registrationId = TextSecurePreferences.getLocalRegistrationId(this);
|
||||
|
||||
if (registrationId == 0) {
|
||||
registrationId = KeyHelper.generateRegistrationId(false);
|
||||
@@ -204,7 +201,7 @@ public class RegistrationService extends Service {
|
||||
String challenge = waitForChallenge();
|
||||
accountManager.verifyAccount(challenge, signalingKey, true, registrationId);
|
||||
|
||||
handleCommonRegistration(masterSecret, accountManager, number);
|
||||
handleCommonRegistration(accountManager, number);
|
||||
markAsVerified(number, password, signalingKey);
|
||||
|
||||
setState(new RegistrationState(RegistrationState.STATE_COMPLETE, number));
|
||||
@@ -230,15 +227,15 @@ public class RegistrationService extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
private void handleCommonRegistration(MasterSecret masterSecret, TextSecureAccountManager accountManager, String number)
|
||||
private void handleCommonRegistration(TextSecureAccountManager accountManager, String number)
|
||||
throws IOException
|
||||
{
|
||||
setState(new RegistrationState(RegistrationState.STATE_GENERATING_KEYS, number));
|
||||
Recipient self = RecipientFactory.getRecipientsFromString(this, number, false).getPrimaryRecipient();
|
||||
IdentityKeyPair identityKey = IdentityKeyUtil.getIdentityKeyPair(this, masterSecret);
|
||||
List<PreKeyRecord> records = PreKeyUtil.generatePreKeys(this, masterSecret);
|
||||
PreKeyRecord lastResort = PreKeyUtil.generateLastResortKey(this, masterSecret);
|
||||
SignedPreKeyRecord signedPreKey = PreKeyUtil.generateSignedPreKey(this, masterSecret, identityKey);
|
||||
IdentityKeyPair identityKey = IdentityKeyUtil.getIdentityKeyPair(this);
|
||||
List<PreKeyRecord> records = PreKeyUtil.generatePreKeys(this);
|
||||
PreKeyRecord lastResort = PreKeyUtil.generateLastResortKey(this);
|
||||
SignedPreKeyRecord signedPreKey = PreKeyUtil.generateSignedPreKey(this, identityKey);
|
||||
accountManager.setPreKeys(identityKey.getPublicKey(),lastResort, signedPreKey, records);
|
||||
|
||||
setState(new RegistrationState(RegistrationState.STATE_GCM_REGISTERING, number));
|
||||
@@ -249,7 +246,7 @@ public class RegistrationService extends Service {
|
||||
TextSecurePreferences.setGcmRegistrationId(this, gcmRegistrationId);
|
||||
TextSecurePreferences.setWebsocketRegistered(this, true);
|
||||
|
||||
DatabaseFactory.getIdentityDatabase(this).saveIdentity(masterSecret, self.getRecipientId(), identityKey.getPublicKey());
|
||||
DatabaseFactory.getIdentityDatabase(this).saveIdentity(self.getRecipientId(), identityKey.getPublicKey());
|
||||
DirectoryHelper.refreshDirectory(this, accountManager, number);
|
||||
|
||||
DirectoryRefreshListener.schedule(this);
|
||||
|
||||
Reference in New Issue
Block a user