diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index cb4b80d83..daba681ed 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -7,7 +7,7 @@ CarthageVersion 0.34.0 OSXVersion - 10.15.1 + 10.15.2 WebRTCCommit 1445d719bf05280270e9f77576f80f973fd847f8 M73 diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 9fdde8490..d5f10b5ca 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -620,6 +620,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; failure:(RetryableFailureHandler)failureHandlerParam { AssertIsOnSendingQueue(); + OWSAssert(senderCertificate); void (^successHandler)(void) = ^() { dispatch_async([OWSDispatch sendingQueue], ^{ @@ -958,7 +959,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; NSString *contactID = messageSend.recipient.recipientId; BOOL isGroupMessage = messageSend.thread.isGroupThread; BOOL isDeviceLinkMessage = [message isKindOfClass:LKDeviceLinkMessage.class]; - if (isGroupMessage || isDeviceLinkMessage) { + if (isGroupMessage || isDeviceLinkMessage || messageSend.isUDSend) { [self sendMessage:messageSend]; } else { BOOL isSilentMessage = message.isSilent || [message isKindOfClass:LKEphemeralMessage.class] || [message isKindOfClass:OWSOutgoingSyncMessage.class]; diff --git a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift index 3c1de038f..05caa3df0 100644 --- a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift +++ b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift @@ -417,7 +417,8 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager { // Try to obtain a new sender certificate. return firstly { - requestSenderCertificate() +// requestSenderCertificate() + generateSenderCertificate() }.map { (certificateData: Data, certificate: SMKSenderCertificate) in // Cache the current sender certificate. @@ -426,6 +427,19 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager { return certificate } } + + private func generateSenderCertificate() -> Promise<(certificateData: Data, certificate: SMKSenderCertificate)> { + return Promise<(certificateData: Data, certificate: SMKSenderCertificate)> { seal in + //Loki: Generate a sender certifate locally + let sender = OWSIdentityManager.shared().identityKeyPair()?.hexEncodedPublicKey + let certificate = SMKSenderCertificate(senderDeviceId: OWSDevicePrimaryDeviceId, senderRecipientId: sender!) + let certificateData = try certificate.serialized() + guard self.isValidCertificate(certificate) else { + throw OWSUDError.invalidData(description: "Invalid sender certificate returned by server") + } + seal.fulfill((certificateData: certificateData, certificate: certificate)) + } + } private func requestSenderCertificate() -> Promise<(certificateData: Data, certificate: SMKSenderCertificate)> { return firstly {