bug: signalc receiver decryption errors in loadtest

as of sometime last week we started observing an error in which receiver_signalc always throws decryption errors on every message it receives from the sender_signalc. we do not observe such errors when using signalc in dev to talk to normal phones using the normal signal server.

things that are different:

  • (1) our phones are not running signalc (unlike loadtest receivers)
  • (2) signalc is using real signal server to talk to our phones (unlike fake signal server in loadtests)

error:

0000000000) to +10000000007
2021-05-10 20:30:07.760 [i.s.s.l.SignalReceiver] DEBUG | Got PREKEY_BUNDLE from Optional.of(+20000000000) to +10000000002
2021-05-10 20:30:07.760 [i.s.s.l.SignalReceiver] DEBUG | Got PREKEY_BUNDLE from Optional.of(+20000000000) to +10000000002

# snip #

2021-05-10 20:30:08.001 [i.s.s.l.SignalReceiver] ERROR | Decryption Error:
 org.signal.libsignal.metadata.ProtocolInvalidMessageException: org.whispersystems.libsignal.InvalidMessageException: Message from +20000000000:1 failed to decrypt; sender ratchet public key 47ef9fee16172c744c2da928c41e39d70b8a6496325a34c9b25dbb5f9eee6b40 message counter 6
Candidate session 0 failed with 'invalid ciphertext message', had 0 receiver chains
        at org.whispersystems.signalservice.api.crypto.SignalServiceCipher.decrypt(SignalServiceCipher.java:210)
        at org.whispersystems.signalservice.api.crypto.SignalServiceCipher.decrypt(SignalServiceCipher.java:138)
        at info.signalboost.signalc.logic.SignalReceiver$relay$2.invokeSuspend(SignalReceiver.kt:170)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.whispersystems.libsignal.InvalidMessageException: Message from +20000000000:1 failed to decrypt; sender ratchet public key 47ef9fee16172c744c2da928c41e39d70b8a6496325a34c9b25dbb5f9eee6b40 message counter 6
Candidate session 0 failed with 'invalid ciphertext message', had 0 receiver chains
        at org.signal.client.internal.Native.SessionCipher_DecryptPreKeySignalMessage(Native Method)
        at org.whispersystems.libsignal.SessionCipher.decrypt(SessionCipher.java:100)
        at org.whispersystems.signalservice.api.crypto.SignalServiceCipher.decrypt(SignalServiceCipher.java:178)
        ... 7 more
Edited by aguestuser