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 {