From ff54cc4030feccf7dda0b9b969abd6a137b7be15 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Fri, 14 Feb 2020 15:49:08 +1100 Subject: [PATCH] Removed duplicate DiffieHellman and FallbackSessionCipher files --- Pods | 2 +- Signal/Signal-Info.plist | 4 +- .../src/Loki/API/LokiDotNetAPI.swift | 1 + .../src/Loki/API/LokiFileServerProxy.swift | 1 + .../src/Loki/API/LokiSnodeProxy.swift | 1 + .../src/Loki/Crypto/DiffieHellman.swift | 47 --------- .../Loki/Crypto/FallbackSessionCipher.swift | 95 ------------------- .../src/Messages/OWSMessageDecrypter.m | 3 +- .../src/Messages/OWSMessageSender.m | 3 +- 9 files changed, 10 insertions(+), 147 deletions(-) delete mode 100644 SignalServiceKit/src/Loki/Crypto/DiffieHellman.swift delete mode 100644 SignalServiceKit/src/Loki/Crypto/FallbackSessionCipher.swift diff --git a/Pods b/Pods index 6fae72d48..693c9ae5f 160000 --- a/Pods +++ b/Pods @@ -1 +1 @@ -Subproject commit 6fae72d48c06c35c8219ebfc58116450c473b8f1 +Subproject commit 693c9ae5f51386e0570110a98541952bdfd62963 diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index 342d37adb..92e102579 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -5,9 +5,9 @@ BuildDetails CarthageVersion - 0.34.0 + 0.33.0 OSXVersion - 10.15.3 + 10.15.1 WebRTCCommit 1445d719bf05280270e9f77576f80f973fd847f8 M73 diff --git a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift index 4cb21c49e..53aae20c7 100644 --- a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift @@ -1,4 +1,5 @@ import PromiseKit +import SignalMetadataKit /// Base class for `LokiFileServerAPI` and `LokiPublicChatAPI`. public class LokiDotNetAPI : NSObject { diff --git a/SignalServiceKit/src/Loki/API/LokiFileServerProxy.swift b/SignalServiceKit/src/Loki/API/LokiFileServerProxy.swift index d3a007f3b..0982cc492 100644 --- a/SignalServiceKit/src/Loki/API/LokiFileServerProxy.swift +++ b/SignalServiceKit/src/Loki/API/LokiFileServerProxy.swift @@ -1,4 +1,5 @@ import PromiseKit +import SignalMetadataKit internal class LokiFileServerProxy : LokiHTTPClient { private let server: String diff --git a/SignalServiceKit/src/Loki/API/LokiSnodeProxy.swift b/SignalServiceKit/src/Loki/API/LokiSnodeProxy.swift index 3898e36ed..1f55d8ca5 100644 --- a/SignalServiceKit/src/Loki/API/LokiSnodeProxy.swift +++ b/SignalServiceKit/src/Loki/API/LokiSnodeProxy.swift @@ -1,4 +1,5 @@ import PromiseKit +import SignalMetadataKit internal class LokiSnodeProxy : LokiHTTPClient { private let target: LokiAPITarget diff --git a/SignalServiceKit/src/Loki/Crypto/DiffieHellman.swift b/SignalServiceKit/src/Loki/Crypto/DiffieHellman.swift deleted file mode 100644 index 946f02aea..000000000 --- a/SignalServiceKit/src/Loki/Crypto/DiffieHellman.swift +++ /dev/null @@ -1,47 +0,0 @@ -import CryptoSwift -import Curve25519Kit - -@objc public final class DiffieHellman : NSObject { - - @objc public class DiffieHellmanError : NSError { // Not called `Error` for Obj-C interoperablity - - @objc public static let decryptionFailed = DiffieHellmanError(domain: "DiffieHellmanErrorDomain", code: 1, userInfo: [ NSLocalizedDescriptionKey : "Couldn't decrypt data." ]) - } - - public static let ivLength: Int32 = 16; - - private override init() { } - - public static func encrypt(_ plainTextData: Data, using symmetricKey: Data) throws -> Data { - let iv = Randomness.generateRandomBytes(ivLength)! - let ivBytes = [UInt8](iv) - let symmetricKeyBytes = [UInt8](symmetricKey) - let messageBytes = [UInt8](plainTextData) - let blockMode = CBC(iv: ivBytes) - let aes = try AES(key: symmetricKeyBytes, blockMode: blockMode) - let cipherText = try aes.encrypt(messageBytes) - let ivAndCipher = ivBytes + cipherText - return Data(bytes: ivAndCipher, count: ivAndCipher.count) - } - - public static func encrypt(_ plainTextData: Data, publicKey: Data, privateKey: Data) throws -> Data { - let symmetricKey = try Curve25519.generateSharedSecret(fromPublicKey: publicKey, privateKey: privateKey) - return try encrypt(plainTextData, using: symmetricKey) - } - - public static func decrypt(_ encryptedData: Data, using symmetricKey: Data) throws -> Data { - let symmetricKeyBytes = [UInt8](symmetricKey) - guard encryptedData.count >= ivLength else { throw DiffieHellmanError.decryptionFailed } - let ivBytes = [UInt8](encryptedData[.. Data { - let symmetricKey = try Curve25519.generateSharedSecret(fromPublicKey: publicKey, privateKey: privateKey) - return try decrypt(encryptedData, using: symmetricKey) - } -} diff --git a/SignalServiceKit/src/Loki/Crypto/FallbackSessionCipher.swift b/SignalServiceKit/src/Loki/Crypto/FallbackSessionCipher.swift deleted file mode 100644 index bb3f77dff..000000000 --- a/SignalServiceKit/src/Loki/Crypto/FallbackSessionCipher.swift +++ /dev/null @@ -1,95 +0,0 @@ -import CryptoSwift -import Curve25519Kit - -private extension String { - - // Convert hex string to Data - fileprivate var hexData: Data { - var hex = self - var data = Data() - while(hex.count > 0) { - let subIndex = hex.index(hex.startIndex, offsetBy: 2) - let c = String(hex[.. Data? { - guard let symmetricKey = symmetricKey else { return nil } - do { - return try DiffieHellman.encrypt(message, using: symmetricKey) - } catch { - Logger.warn("FallBackSessionCipher: Failed to encrypt message") - return nil - } - } - - /// Decrypt a message - /// - /// - Parameter message: The message to decrypt - /// - Returns: The decrypted message or `nil` if it failed - @objc public func decrypt(message: Data) -> Data? { - guard let symmetricKey = symmetricKey else { return nil } - do { - return try DiffieHellman.decrypt(message, using: symmetricKey) - } catch { - Logger.warn("FallBackSessionCipher: Failed to decrypt message") - return nil - } - } -} diff --git a/SignalServiceKit/src/Messages/OWSMessageDecrypter.m b/SignalServiceKit/src/Messages/OWSMessageDecrypter.m index 600ceadd2..6924747e2 100644 --- a/SignalServiceKit/src/Messages/OWSMessageDecrypter.m +++ b/SignalServiceKit/src/Messages/OWSMessageDecrypter.m @@ -336,7 +336,8 @@ NSError *EnsureDecryptError(NSError *_Nullable error, NSString *fallbackErrorDes } NSString *recipientId = envelope.source; - FallBackSessionCipher *cipher = [[FallBackSessionCipher alloc] initWithRecipientId:recipientId identityKeyStore:self.identityManager]; + ECKeyPair *identityKeyPair = self.identityManager.identityKeyPair; + FallBackSessionCipher *cipher = [[FallBackSessionCipher alloc] initWithRecipientId:recipientId privateKey:identityKeyPair.privateKey]; NSData *_Nullable plaintextData = [[cipher decryptWithMessage:encryptedData] removePadding]; if (!plaintextData) { diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index de5102393..066d66206 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -1924,7 +1924,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; NSString *recipientId = recipient.recipientId; TSOutgoingMessage *message = messageSend.message; - FallBackSessionCipher *cipher = [[FallBackSessionCipher alloc] initWithRecipientId:recipientId identityKeyStore:self.identityManager]; + ECKeyPair *identityKeyPair = self.identityManager.identityKeyPair; + FallBackSessionCipher *cipher = [[FallBackSessionCipher alloc] initWithRecipientId:recipientId privateKey:identityKeyPair.privateKey]; // This will return nil if encryption failed NSData *_Nullable serializedMessage = [cipher encryptWithMessage:[plainText paddedMessageBody]];