From a6a179d17517fde6db7dd8c33718b7c80f86e559 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Thu, 15 Oct 2020 13:06:57 +1100 Subject: [PATCH] Handle self sends more gracefully --- .../src/Loki/Protocol/Closed Groups/ClosedGroupUtilities.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupUtilities.swift b/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupUtilities.swift index 706a5ab14..4fb7e8bbf 100644 --- a/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupUtilities.swift +++ b/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupUtilities.swift @@ -10,6 +10,7 @@ public final class ClosedGroupUtilities : NSObject { @objc public static let invalidGroupPublicKey = SSKDecryptionError(domain: "SSKErrorDomain", code: 1, userInfo: [ NSLocalizedDescriptionKey : "Invalid group public key." ]) @objc public static let noData = SSKDecryptionError(domain: "SSKErrorDomain", code: 2, userInfo: [ NSLocalizedDescriptionKey : "Received an empty envelope." ]) @objc public static let noGroupPrivateKey = SSKDecryptionError(domain: "SSKErrorDomain", code: 3, userInfo: [ NSLocalizedDescriptionKey : "Missing group private key." ]) + @objc public static let selfSend = SSKDecryptionError(domain: "SSKErrorDomain", code: 4, userInfo: [ NSLocalizedDescriptionKey : "Message addressed at self." ]) } @objc(encryptData:usingGroupPublicKey:transaction:error:) @@ -59,6 +60,7 @@ public final class ClosedGroupUtilities : NSObject { // 4. ) Parse the closed group ciphertext message let closedGroupCiphertextMessage = ClosedGroupCiphertextMessage(_throws_with: closedGroupCiphertextMessageAsData) let senderPublicKey = closedGroupCiphertextMessage.senderPublicKey.toHexString() + guard senderPublicKey != getUserHexEncodedPublicKey() else { throw SSKDecryptionError.selfSend } // 5. ) Use the info inside the closed group ciphertext message to decrypt the actual message content let plaintext = try SharedSenderKeysImplementation.shared.decrypt(closedGroupCiphertextMessage.ivAndCiphertext, forGroupWithPublicKey: groupPublicKey, senderPublicKey: senderPublicKey, keyIndex: UInt(closedGroupCiphertextMessage.keyIndex), protocolContext: transaction)