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];