Crash after importing encrypted backup
In order to test different versions for #767, I exported Silence data to an encrypted backup from v0.15.16, wiped Silence storage and installed other versions.
When re-importing the data, the identity key was empty. I don't exactly remember what happened after that, but there was issues encrypting or decrypting messages with my contacts that were using Silence too.
When one of my contacts tried to restart a new secure session, silence crashed upon receiving the key exchange message and crashed again every time I tried to open it.
This is the stacktrace from ADB when trying to start Silence:
09-07 13:10:46.595 3949 3965 W JobConsumer: java.lang.IllegalArgumentException: Null values!
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.whispersystems.libsignal.ratchet.SymmetricSignalProtocolParameters.<init>(SymmetricSignalProtocolParameters.java:37)
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.whispersystems.libsignal.ratchet.SymmetricSignalProtocolParameters$Builder.create(SymmetricSignalProtocolParameters.java:109)
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.smssecure.smssecure.crypto.SessionBuilder.processInitiate(SessionBuilder.java:255)
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.smssecure.smssecure.crypto.SessionBuilder.process(SessionBuilder.java:220)
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.smssecure.smssecure.crypto.SmsCipher.process(SmsCipher.java:118)
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.smssecure.smssecure.jobs.SmsDecryptJob.handleKeyExchangeMessage(SmsDecryptJob.java:168)
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.smssecure.smssecure.jobs.SmsDecryptJob.onRun(SmsDecryptJob.java:89)
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.smssecure.smssecure.jobs.MasterSecretJob.onRun(MasterSecretJob.java:18)
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.whispersystems.jobqueue.JobConsumer.runJob(JobConsumer.java:76)
09-07 13:10:46.595 3949 3965 W JobConsumer: at org.whispersystems.jobqueue.JobConsumer.run(JobConsumer.java:46)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: FATAL EXCEPTION: JobConsumer-4
09-07 13:10:40.776 3890 3911 E AndroidRuntime: Process: org.smssecure.smssecure, PID: 3890
09-07 13:10:40.776 3890 3911 E AndroidRuntime: java.lang.IllegalArgumentException: Null values!
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.whispersystems.libsignal.ratchet.SymmetricSignalProtocolParameters.<init>(SymmetricSignalProtocolParameters.java:37)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.whispersystems.libsignal.ratchet.SymmetricSignalProtocolParameters$Builder.create(SymmetricSignalProtocolParameters.java:109)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.smssecure.smssecure.crypto.SessionBuilder.processInitiate(SessionBuilder.java:255)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.smssecure.smssecure.crypto.SessionBuilder.process(SessionBuilder.java:220)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.smssecure.smssecure.crypto.SmsCipher.process(SmsCipher.java:118)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.smssecure.smssecure.jobs.SmsDecryptJob.handleKeyExchangeMessage(SmsDecryptJob.java:168)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.smssecure.smssecure.jobs.SmsDecryptJob.onRun(SmsDecryptJob.java:89)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.smssecure.smssecure.jobs.MasterSecretJob.onRun(MasterSecretJob.java:18)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.whispersystems.jobqueue.JobConsumer.runJob(JobConsumer.java:76)
09-07 13:10:40.776 3890 3911 E AndroidRuntime: at org.whispersystems.jobqueue.JobConsumer.run(JobConsumer.java:46)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: FATAL EXCEPTION: JobConsumer-0
09-07 13:10:46.595 3949 3965 E AndroidRuntime: Process: org.smssecure.smssecure, PID: 3949
09-07 13:10:46.595 3949 3965 E AndroidRuntime: java.lang.IllegalArgumentException: Null values!
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.whispersystems.libsignal.ratchet.SymmetricSignalProtocolParameters.<init>(SymmetricSignalProtocolParameters.java:37)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.whispersystems.libsignal.ratchet.SymmetricSignalProtocolParameters$Builder.create(SymmetricSignalProtocolParameters.java:109)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.smssecure.smssecure.crypto.SessionBuilder.processInitiate(SessionBuilder.java:255)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.smssecure.smssecure.crypto.SessionBuilder.process(SessionBuilder.java:220)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.smssecure.smssecure.crypto.SmsCipher.process(SmsCipher.java:118)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.smssecure.smssecure.jobs.SmsDecryptJob.handleKeyExchangeMessage(SmsDecryptJob.java:168)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.smssecure.smssecure.jobs.SmsDecryptJob.onRun(SmsDecryptJob.java:89)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.smssecure.smssecure.jobs.MasterSecretJob.onRun(MasterSecretJob.java:18)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.whispersystems.jobqueue.JobConsumer.runJob(JobConsumer.java:76)
09-07 13:10:46.595 3949 3965 E AndroidRuntime: at org.whispersystems.jobqueue.JobConsumer.run(JobConsumer.java:46)
I finally returned to a working state by exporting all SMS to unencrypted storage and re-importing it and restarting secure sessions with the new identity key.