From 215c964fabd772d160a9759519479918f87f1b86 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Thu, 17 Sep 2020 19:33:25 +1000 Subject: [PATCH] fix padding for medium group --- ts/receiver/contentMessage.ts | 20 +++++++++++-------- ts/session/crypto/MessageEncrypter.ts | 2 +- .../outgoing/content/data/ChatMessage.ts | 2 +- .../data/ExpirationTimerUpdateMessage.ts | 2 +- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/ts/receiver/contentMessage.ts b/ts/receiver/contentMessage.ts index b37df76d2..646582bfb 100644 --- a/ts/receiver/contentMessage.ts +++ b/ts/receiver/contentMessage.ts @@ -21,15 +21,19 @@ import { StringUtils } from '../session/utils'; import { UserUtil } from '../util'; export async function handleContentMessage(envelope: EnvelopePlus) { - const plaintext = await decrypt(envelope, envelope.content); + try { + const plaintext = await decrypt(envelope, envelope.content); - if (!plaintext) { - window.log.warn('handleContentMessage: plaintext was falsey'); - return; - } else if (plaintext instanceof ArrayBuffer && plaintext.byteLength === 0) { - return; + if (!plaintext) { + window.log.warn('handleContentMessage: plaintext was falsey'); + return; + } else if (plaintext instanceof ArrayBuffer && plaintext.byteLength === 0) { + return; + } + await innerHandleContentMessage(envelope, plaintext); + } catch (e) { + window.log.warn(e); } - await innerHandleContentMessage(envelope, plaintext); } async function decryptForMediumGroup( @@ -86,7 +90,7 @@ async function decryptForMediumGroup( sourceAsStr ); - return plaintext; + return unpad(plaintext); } function unpad(paddedData: ArrayBuffer): ArrayBuffer { diff --git a/ts/session/crypto/MessageEncrypter.ts b/ts/session/crypto/MessageEncrypter.ts index 3380cb205..a605034cb 100644 --- a/ts/session/crypto/MessageEncrypter.ts +++ b/ts/session/crypto/MessageEncrypter.ts @@ -52,7 +52,7 @@ export async function encrypt( const plainText = padPlainTextBuffer(plainTextBuffer); if (encryptionType === EncryptionType.MediumGroup) { - return encryptForMediumGroup(device, plainTextBuffer); + return encryptForMediumGroup(device, plainText); } const address = new window.libsignal.SignalProtocolAddress(device.key, 1); diff --git a/ts/session/messages/outgoing/content/data/ChatMessage.ts b/ts/session/messages/outgoing/content/data/ChatMessage.ts index 3f07a3de4..83026306c 100644 --- a/ts/session/messages/outgoing/content/data/ChatMessage.ts +++ b/ts/session/messages/outgoing/content/data/ChatMessage.ts @@ -108,7 +108,7 @@ export class ChatMessage extends DataMessage { } dataMessage.profile = profile; } - if (this.profileKey) { + if (this.profileKey && this.profileKey.length) { dataMessage.profileKey = this.profileKey; } diff --git a/ts/session/messages/outgoing/content/data/ExpirationTimerUpdateMessage.ts b/ts/session/messages/outgoing/content/data/ExpirationTimerUpdateMessage.ts index 3a25caa7b..2da6fc6b3 100644 --- a/ts/session/messages/outgoing/content/data/ExpirationTimerUpdateMessage.ts +++ b/ts/session/messages/outgoing/content/data/ExpirationTimerUpdateMessage.ts @@ -48,7 +48,7 @@ export class ExpirationTimerUpdateMessage extends DataMessage { if (this.expireTimer) { data.expireTimer = this.expireTimer; } - if (this.profileKey) { + if (this.profileKey && this.profileKey.length) { data.profileKey = this.profileKey; }