From ae0d6b5926e22558585cee85d34eadfcfebf5432 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 10 Feb 2022 11:00:30 -0500 Subject: [PATCH] Handle unsealed PlaintextContent messages. Closes #11885 Co-authored-by: AsamK --- .../signalservice/api/crypto/SignalServiceCipher.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java index c42c5ae8e7..30b9760979 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java @@ -38,6 +38,7 @@ import org.whispersystems.libsignal.UntrustedIdentityException; import org.whispersystems.libsignal.groups.GroupCipher; import org.whispersystems.libsignal.logging.Log; import org.whispersystems.libsignal.protocol.CiphertextMessage; +import org.whispersystems.libsignal.protocol.PlaintextContent; import org.whispersystems.libsignal.protocol.PreKeySignalMessage; import org.whispersystems.libsignal.protocol.SignalMessage; import org.whispersystems.libsignal.util.guava.Optional; @@ -203,6 +204,9 @@ public class SignalServiceCipher { paddedMessage = sessionCipher.decrypt(new SignalMessage(ciphertext)); metadata = new SignalServiceMetadata(envelope.getSourceAddress(), envelope.getSourceDevice(), envelope.getTimestamp(), envelope.getServerReceivedTimestamp(), envelope.getServerDeliveredTimestamp(), false, envelope.getServerGuid(), Optional.absent()); + } else if (envelope.isPlaintextContent()) { + paddedMessage = new PlaintextContent(ciphertext).getBody(); + metadata = new SignalServiceMetadata(envelope.getSourceAddress(), envelope.getSourceDevice(), envelope.getTimestamp(), envelope.getServerReceivedTimestamp(), envelope.getServerDeliveredTimestamp(), false, envelope.getServerGuid(), Optional.absent()); } else if (envelope.isUnidentifiedSender()) { SignalSealedSessionCipher sealedSessionCipher = new SignalSealedSessionCipher(sessionLock, new SealedSessionCipher(signalProtocolStore, localAddress.getAci().uuid(), localAddress.getNumber().orNull(), localDeviceId)); DecryptionResult result = sealedSessionCipher.decrypt(certificateValidator, ciphertext, envelope.getServerReceivedTimestamp());