diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj
index 74a74c662..597d39279 100644
--- a/Signal.xcodeproj/project.pbxproj
+++ b/Signal.xcodeproj/project.pbxproj
@@ -4248,7 +4248,7 @@
INFOPLIST_FILE = SignalShareExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 1.0.5;
+ MARKETING_VERSION = 1.0.6;
MTL_ENABLE_DEBUG_INFO = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.share-extension";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -4315,7 +4315,7 @@
INFOPLIST_FILE = SignalShareExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 1.0.5;
+ MARKETING_VERSION = 1.0.6;
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.share-extension";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -4369,7 +4369,7 @@
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- MARKETING_VERSION = 1.0.5;
+ MARKETING_VERSION = 1.0.6;
MTL_ENABLE_DEBUG_INFO = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.utilities";
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
@@ -4443,7 +4443,7 @@
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- MARKETING_VERSION = 1.0.5;
+ MARKETING_VERSION = 1.0.6;
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.utilities";
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
@@ -4663,7 +4663,7 @@
"$(SRCROOT)",
);
LLVM_LTO = NO;
- MARKETING_VERSION = 1.0.5;
+ MARKETING_VERSION = 1.0.6;
OTHER_LDFLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger";
PRODUCT_NAME = Session;
@@ -4730,7 +4730,7 @@
"$(SRCROOT)",
);
LLVM_LTO = NO;
- MARKETING_VERSION = 1.0.5;
+ MARKETING_VERSION = 1.0.6;
OTHER_LDFLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger";
PRODUCT_NAME = Session;
diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist
index 9d7c02e10..e75634ca7 100644
--- a/Signal/Signal-Info.plist
+++ b/Signal/Signal-Info.plist
@@ -6,10 +6,14 @@
CarthageVersion
0.34.0
+ DateTime
+ Tue Mar 3 05:11:41 UTC 2020
OSXVersion
10.15.2
WebRTCCommit
1445d719bf05280270e9f77576f80f973fd847f8 M73
+ XCodeVersion
+ 1100.1120
CFBundleDevelopmentRegion
en
diff --git a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.h b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.h
index fc86ec9df..da9e6e721 100644
--- a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.h
+++ b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.h
@@ -2,6 +2,8 @@
#import
#import
#import
+#import
+#import
NS_ASSUME_NONNULL_BEGIN
diff --git a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m
index 9b9e9e7cf..38312b1fe 100644
--- a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m
+++ b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m
@@ -81,15 +81,16 @@
#define LKPreKeyBundleCollection @"LKPreKeyBundleCollection"
-- (PreKeyBundle *)generatePreKeyBundleForContact:(NSString *)pubKey {
+- (PreKeyBundle *)generatePreKeyBundleForContact:(NSString *)pubKey forceClean:(BOOL)forceClean {
// Check pre keys to make sure we have them
[TSPreKeyManager checkPreKeys];
ECKeyPair *_Nullable keyPair = self.identityManager.identityKeyPair;
OWSAssertDebug(keyPair);
+
// Refresh the signed pre key if needed
- if (self.currentSignedPreKey == nil) {
+ if (self.currentSignedPreKey == nil || forceClean) {
SignedPreKeyRecord *signedPreKeyRecord = [self generateRandomSignedRecord];
[signedPreKeyRecord markAsAcceptedByService];
[self storeSignedPreKey:signedPreKeyRecord.Id signedPreKeyRecord:signedPreKeyRecord];
@@ -116,6 +117,27 @@
return bundle;
}
+- (PreKeyBundle *)generatePreKeyBundleForContact:(NSString *)pubKey {
+ NSInteger failureCount = 0;
+ BOOL forceClean = NO;
+ while (failureCount < 3) {
+ @try {
+ PreKeyBundle *preKeyBundle = [self generatePreKeyBundleForContact:pubKey forceClean:forceClean];
+ if (![Ed25519 throws_verifySignature:preKeyBundle.signedPreKeySignature
+ publicKey:preKeyBundle.identityKey.throws_removeKeyType
+ data:preKeyBundle.signedPreKeyPublic]) {
+ @throw [NSException exceptionWithName:InvalidKeyException reason:@"KeyIsNotValidlySigned" userInfo:nil];
+ }
+ return preKeyBundle;
+ } @catch (NSException *exception) {
+ failureCount++;
+ forceClean = YES;
+ }
+ }
+ OWSLogWarn(@"[Loki] Failed to generate a valid pre key bundle for: %@.", pubKey);
+ return nil;
+}
+
- (PreKeyBundle *_Nullable)getPreKeyBundleForContact:(NSString *)pubKey {
return [self.dbReadConnection preKeyBundleForKey:pubKey inCollection:LKPreKeyBundleCollection];
}
diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m
index e54d7f908..388229e78 100644
--- a/SignalServiceKit/src/Messages/OWSMessageSender.m
+++ b/SignalServiceKit/src/Messages/OWSMessageSender.m
@@ -48,6 +48,7 @@
#import "LKSessionRequestMessage.h"
#import "LKSessionRestoreMessage.h"
#import "LKDeviceLinkMessage.h"
+#import "LKUnlinkDeviceMessage.h"
#import "LKAddressMessage.h"
#import
#import
@@ -987,7 +988,9 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
BOOL isGroupMessage = messageSend.thread.isGroupThread;
BOOL isPublicChatMessage = isGroupMessage && ((TSGroupThread *)messageSend.thread).isPublicChat;
BOOL isDeviceLinkMessage = [message isKindOfClass:LKDeviceLinkMessage.class];
- if (isPublicChatMessage || isDeviceLinkMessage) {
+ BOOL isUnlinkDeviceMessage = [message isKindOfClass:LKUnlinkDeviceMessage.class];
+ // FIXME: Clean this up
+ if (isPublicChatMessage || isDeviceLinkMessage || isUnlinkDeviceMessage) {
[self sendMessage:messageSend];
} else {
BOOL isSilentMessage = message.isSilent || [message isKindOfClass:LKEphemeralMessage.class] || [message isKindOfClass:OWSOutgoingSyncMessage.class];