Improve SenderKeyDistributionMessage envelope validation.
This commit is contained in:
parent
6fc9055221
commit
9ce021afa2
1 changed files with 15 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
|||
package org.whispersystems.signalservice.api.messages
|
||||
|
||||
import org.signal.libsignal.protocol.message.DecryptionErrorMessage
|
||||
import org.signal.libsignal.protocol.message.SenderKeyDistributionMessage
|
||||
import org.signal.libsignal.zkgroup.InvalidInputException
|
||||
import org.signal.libsignal.zkgroup.groups.GroupMasterKey
|
||||
import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation
|
||||
|
@ -38,6 +39,10 @@ object EnvelopeContentValidator {
|
|||
return Result.Invalid("Envelope had an invalid sourceServiceId!")
|
||||
}
|
||||
|
||||
if (content.senderKeyDistributionMessage != null) {
|
||||
validateSenderKeyDistributionMessage(content.senderKeyDistributionMessage.toByteArray())?.let { return it }
|
||||
}
|
||||
|
||||
// Reminder: envelope.destinationServiceId was already validated since we need that for decryption
|
||||
|
||||
return when {
|
||||
|
@ -50,9 +55,9 @@ object EnvelopeContentValidator {
|
|||
content.typingMessage != null -> validateTypingMessage(envelope, content.typingMessage)
|
||||
content.decryptionErrorMessage != null -> validateDecryptionErrorMessage(content.decryptionErrorMessage.toByteArray())
|
||||
content.storyMessage != null -> validateStoryMessage(content.storyMessage)
|
||||
content.editMessage != null -> validateEditMessage(content.editMessage)
|
||||
content.pniSignatureMessage != null -> Result.Valid
|
||||
content.senderKeyDistributionMessage != null -> Result.Valid
|
||||
content.editMessage != null -> validateEditMessage(content.editMessage)
|
||||
else -> Result.Invalid("Content is empty!")
|
||||
}
|
||||
}
|
||||
|
@ -241,6 +246,15 @@ object EnvelopeContentValidator {
|
|||
}
|
||||
}
|
||||
|
||||
private fun validateSenderKeyDistributionMessage(serializedSenderKeyDistributionMessage: ByteArray): Result.Invalid? {
|
||||
return try {
|
||||
SenderKeyDistributionMessage(serializedSenderKeyDistributionMessage)
|
||||
null
|
||||
} catch (e: Exception) {
|
||||
Result.Invalid("[SenderKeyDistributionMessage] Bad sender key distribution message!", e)
|
||||
}
|
||||
}
|
||||
|
||||
private fun validateStoryMessage(storyMessage: StoryMessage): Result {
|
||||
if (storyMessage.group != null) {
|
||||
validateGroupContextV2(storyMessage.group, "[StoryMessage]")?.let { return it }
|
||||
|
|
Loading…
Add table
Reference in a new issue