From 3f0e61617359ffe2beda039e5a7aa456b6815005 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Wed, 26 Feb 2020 16:58:37 +1100 Subject: [PATCH 1/6] fix unlink device --- SignalServiceKit/src/Messages/OWSMessageSender.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 066d66206..58ce19b64 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 @@ -979,7 +980,8 @@ 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]; + if (isPublicChatMessage || isDeviceLinkMessage || isUnlinkDeviceMessage) { [self sendMessage:messageSend]; } else { BOOL isSilentMessage = message.isSilent || [message isKindOfClass:LKEphemeralMessage.class] || [message isKindOfClass:OWSOutgoingSyncMessage.class]; From a8f61fdb14301c9ef1cc6dd24c9df6dcb79a7158 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Fri, 28 Feb 2020 14:02:26 +1100 Subject: [PATCH 2/6] WIP fix key invalid --- .../Loki/Database/OWSPrimaryStorage+Loki.h | 2 ++ .../Loki/Database/OWSPrimaryStorage+Loki.m | 26 +++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) 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..cb7475145 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 { + int failureCount = 0; + BOOL forceClean = NO; + while (failureCount < 3) { + @try { + PreKeyBundle *preKeyBundle = [self generatePreKeyBundleForContact:pubKey forceClean:forceClean]; + if (![Ed25519 throws_verifySignature:preKeyBundle.signedPreKeySignature + publicKey:preKeyBundle.preKeyPublic + 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 PreKeyBundle for %@", pubKey); + return nil; +} + - (PreKeyBundle *_Nullable)getPreKeyBundleForContact:(NSString *)pubKey { return [self.dbReadConnection preKeyBundleForKey:pubKey inCollection:LKPreKeyBundleCollection]; } From 9f02752164220ffe2416bdd1db2cdf3850d1aaae Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Fri, 28 Feb 2020 15:23:02 +1100 Subject: [PATCH 3/6] make sure the PrekeyBundle is valid before send it out --- SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m index cb7475145..b8ee300b8 100644 --- a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m +++ b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m @@ -124,7 +124,7 @@ @try { PreKeyBundle *preKeyBundle = [self generatePreKeyBundleForContact:pubKey forceClean:forceClean]; if (![Ed25519 throws_verifySignature:preKeyBundle.signedPreKeySignature - publicKey:preKeyBundle.preKeyPublic + publicKey:preKeyBundle.identityKey.throws_removeKeyType data:preKeyBundle.signedPreKeyPublic]) { @throw [NSException exceptionWithName:InvalidKeyException reason:@"KeyIsNotValidlySigned" userInfo:nil]; } From dad7194b50c766951847188d6d093ae04b370018 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Tue, 3 Mar 2020 16:06:34 +1100 Subject: [PATCH 4/6] Update version number --- Signal.xcodeproj/project.pbxproj | 12 ++++++------ Signal/Signal-Info.plist | 4 ++++ 2 files changed, 10 insertions(+), 6 deletions(-) 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 342d37adb..56199ac16 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -6,10 +6,14 @@ CarthageVersion 0.34.0 + DateTime + Tue Mar 3 04:59:55 UTC 2020 OSXVersion 10.15.3 WebRTCCommit 1445d719bf05280270e9f77576f80f973fd847f8 M73 + XCodeVersion + 1100.1120 CFBundleDevelopmentRegion en From 4ed1197547f3aafccf777812c8620617e0b27ae6 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Tue, 3 Mar 2020 16:26:32 +1100 Subject: [PATCH 5/6] Add comment --- Signal/Signal-Info.plist | 2 +- SignalServiceKit/src/Messages/OWSMessageSender.m | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index 56199ac16..9c1f14ca2 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -7,7 +7,7 @@ CarthageVersion 0.34.0 DateTime - Tue Mar 3 04:59:55 UTC 2020 + Tue Mar 3 05:11:41 UTC 2020 OSXVersion 10.15.3 WebRTCCommit diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 7a2f89e1b..388229e78 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -989,6 +989,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; BOOL isPublicChatMessage = isGroupMessage && ((TSGroupThread *)messageSend.thread).isPublicChat; BOOL isDeviceLinkMessage = [message isKindOfClass:LKDeviceLinkMessage.class]; BOOL isUnlinkDeviceMessage = [message isKindOfClass:LKUnlinkDeviceMessage.class]; + // FIXME: Clean this up if (isPublicChatMessage || isDeviceLinkMessage || isUnlinkDeviceMessage) { [self sendMessage:messageSend]; } else { From 89d039ffb05f618802f2601dbf2e9eba336d692e Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Tue, 3 Mar 2020 16:28:05 +1100 Subject: [PATCH 6/6] Clean --- SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m index b8ee300b8..38312b1fe 100644 --- a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m +++ b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m @@ -118,7 +118,7 @@ } - (PreKeyBundle *)generatePreKeyBundleForContact:(NSString *)pubKey { - int failureCount = 0; + NSInteger failureCount = 0; BOOL forceClean = NO; while (failureCount < 3) { @try { @@ -130,11 +130,11 @@ } return preKeyBundle; } @catch (NSException *exception) { - failureCount ++; + failureCount++; forceClean = YES; } } - OWSLogWarn(@"[Loki] Failed to generate a valid PreKeyBundle for %@", pubKey); + OWSLogWarn(@"[Loki] Failed to generate a valid pre key bundle for: %@.", pubKey); return nil; }