use source from decoded content and not envelope on ssk

pull/1337/head
Audric Ackermann 5 years ago
parent ec64ad80b4
commit 7054268b14
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -18,6 +18,7 @@ import ByteBuffer from 'bytebuffer';
import { BlockedNumberController } from '../util/blockedNumberController';
import { decryptWithSenderKey } from '../session/medium_group/ratchet';
import { StringUtils } from '../session/utils';
import { UserUtil } from '../util';
export async function handleContentMessage(envelope: EnvelopePlus) {
const plaintext = await decrypt(envelope, envelope.content);
@ -46,8 +47,6 @@ async function decryptForMediumGroup(
throw new Error(`Secret key is empty for group ${groupId}!`);
}
const { senderIdentity } = envelope;
const {
ciphertext: outerCiphertext,
ephemeralKey,
@ -64,15 +63,27 @@ async function decryptForMediumGroup(
outerCiphertext
);
const { ciphertext, keyIdx } = SignalService.MediumGroupCiphertext.decode(
const {
source,
ciphertext,
keyIdx,
} = SignalService.MediumGroupCiphertext.decode(
new Uint8Array(mediumGroupCiphertext)
);
const ourNumber = (await UserUtil.getCurrentDevicePubKey()) as string;
if (source === ourNumber) {
window.console.info(
'Dropping message from ourself after decryptForMediumGroup'
);
return;
}
const plaintext = await decryptWithSenderKey(
ciphertext,
keyIdx,
groupId,
senderIdentity
source
);
return plaintext;

@ -39,7 +39,12 @@ export async function send(
plainTextBuffer,
encryption
);
const envelope = await buildEnvelope(envelopeType, timestamp, cipherText);
const envelope = await buildEnvelope(
envelopeType,
device.key,
timestamp,
cipherText
);
const data = wrapEnvelope(envelope);
return pRetry(
@ -54,11 +59,15 @@ export async function send(
async function buildEnvelope(
type: SignalService.Envelope.Type,
sskSource: string | undefined,
timestamp: number,
content: Uint8Array
): Promise<SignalService.Envelope> {
let source: string | undefined;
if (type !== SignalService.Envelope.Type.UNIDENTIFIED_SENDER) {
if (type === SignalService.Envelope.Type.MEDIUM_GROUP_CIPHERTEXT) {
source = sskSource;
} else if (type !== SignalService.Envelope.Type.UNIDENTIFIED_SENDER) {
source = await UserUtil.getCurrentDevicePubKey();
}

Loading…
Cancel
Save