From ce899edf108c2491bd2e03822bc5a4571e08eaaf Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 5 Dec 2017 10:44:11 -0500 Subject: [PATCH] Respond to CR. --- Signal.xcodeproj/project.pbxproj | 26 ------------------ Signal/src/util/ConversationSearcher.swift | 2 +- Signal/test/util/CryptoToolsTest.m | 27 ------------------- .../contacts/SystemContactsFetcher.swift | 10 ++++--- .../environment/SignalKeyingStorage.m | 8 +++--- SignalMessaging/utils/CryptoTools.h | 15 ----------- SignalMessaging/utils/CryptoTools.m | 19 ------------- SignalMessaging/utils/OWSFormat.h | 2 -- SignalMessaging/utils/OWSFormat.m | 22 +++++++-------- SignalServiceKit/src/Security/SecurityUtils.h | 2 +- SignalServiceKit/src/Security/SecurityUtils.m | 20 ++++++-------- 11 files changed, 29 insertions(+), 124 deletions(-) delete mode 100644 Signal/test/util/CryptoToolsTest.m delete mode 100644 SignalMessaging/utils/CryptoTools.h delete mode 100644 SignalMessaging/utils/CryptoTools.m diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 30405927e..052ade332 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -67,8 +67,6 @@ 346129961FD1E30000532771 /* OWSDatabaseMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129941FD1E30000532771 /* OWSDatabaseMigration.m */; }; 346129991FD1E4DA00532771 /* SignalApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129971FD1E4D900532771 /* SignalApp.m */; }; 3461299C1FD1EA9E00532771 /* NotificationsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3461299B1FD1EA9E00532771 /* NotificationsManager.m */; }; - 3461299F1FD1EFE200532771 /* CryptoTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3461299D1FD1EFE200532771 /* CryptoTools.h */; }; - 346129A01FD1EFE200532771 /* CryptoTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 3461299E1FD1EFE200532771 /* CryptoTools.m */; }; 346129A51FD1F09100532771 /* OWSContactsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129A21FD1F09100532771 /* OWSContactsManager.h */; }; 346129A61FD1F09100532771 /* OWSContactsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129A31FD1F09100532771 /* OWSContactsManager.m */; }; 346129A91FD1F0E000532771 /* OWSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129A81FD1F0DF00532771 /* OWSFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -359,7 +357,6 @@ B660F6BB1C29868000687D6E /* OWSContactsManagerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6761C29867F00687D6E /* OWSContactsManagerTest.m */; }; B660F6D21C29868000687D6E /* PushManagerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F69C1C29868000687D6E /* PushManagerTest.m */; }; B660F6D41C29868000687D6E /* whisperFake.cer in Resources */ = {isa = PBXBuildFile; fileRef = B660F69F1C29868000687D6E /* whisperFake.cer */; }; - B660F6D81C29868000687D6E /* CryptoToolsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6A71C29868000687D6E /* CryptoToolsTest.m */; }; B660F6DA1C29868000687D6E /* ExceptionsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6AB1C29868000687D6E /* ExceptionsTest.m */; }; B660F6DB1C29868000687D6E /* FunctionalUtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6AD1C29868000687D6E /* FunctionalUtilTest.m */; }; B660F6E01C29868000687D6E /* UtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6B41C29868000687D6E /* UtilTest.m */; }; @@ -601,8 +598,6 @@ 346129981FD1E4DA00532771 /* SignalApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalApp.h; sourceTree = ""; }; 3461299A1FD1EA9E00532771 /* NotificationsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotificationsManager.h; sourceTree = ""; }; 3461299B1FD1EA9E00532771 /* NotificationsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NotificationsManager.m; sourceTree = ""; }; - 3461299D1FD1EFE200532771 /* CryptoTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptoTools.h; sourceTree = ""; }; - 3461299E1FD1EFE200532771 /* CryptoTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CryptoTools.m; sourceTree = ""; }; 346129A21FD1F09100532771 /* OWSContactsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSContactsManager.h; sourceTree = ""; }; 346129A31FD1F09100532771 /* OWSContactsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSContactsManager.m; sourceTree = ""; }; 346129A81FD1F0DF00532771 /* OWSFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSFormat.h; sourceTree = ""; }; @@ -719,9 +714,6 @@ 34CCAF3A1F0C2748004084F4 /* OWSAddToContactViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSAddToContactViewController.m; sourceTree = ""; }; 34CE88E51F2FB9A10098030F /* ProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileViewController.h; sourceTree = ""; }; 34CE88E61F2FB9A10098030F /* ProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfileViewController.m; sourceTree = ""; }; - 34CE88E91F3237260098030F /* OWSProfileManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSProfileManager.h; sourceTree = ""; }; - 34CE88EA1F3237260098030F /* OWSProfileManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSProfileManager.m; sourceTree = ""; }; - 34CE88EB1F3237260098030F /* ProfileFetcherJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileFetcherJob.swift; sourceTree = ""; }; 34D1F04F1F7D45A60066283D /* GifPickerCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GifPickerCell.swift; sourceTree = ""; }; 34D1F0511F7E8EA30066283D /* GiphyDownloader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GiphyDownloader.swift; sourceTree = ""; }; 34D1F0651F8678AA0066283D /* ConversationHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConversationHeaderView.h; sourceTree = ""; }; @@ -969,7 +961,6 @@ B660F69E1C29868000687D6E /* SignalTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "SignalTests-Info.plist"; sourceTree = ""; }; B660F69F1C29868000687D6E /* whisperFake.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = whisperFake.cer; sourceTree = ""; }; B660F6A01C29868000687D6E /* TestUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestUtil.h; sourceTree = ""; }; - B660F6A71C29868000687D6E /* CryptoToolsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CryptoToolsTest.m; sourceTree = ""; }; B660F6AA1C29868000687D6E /* ExceptionsTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExceptionsTest.h; sourceTree = ""; }; B660F6AB1C29868000687D6E /* ExceptionsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExceptionsTest.m; sourceTree = ""; }; B660F6AC1C29868000687D6E /* FunctionalUtilTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FunctionalUtilTest.h; sourceTree = ""; }; @@ -1150,8 +1141,6 @@ 34480B471FD0A60200BC14EF /* utils */ = { isa = PBXGroup; children = ( - 3461299D1FD1EFE200532771 /* CryptoTools.h */, - 3461299E1FD1EFE200532771 /* CryptoTools.m */, 34480B4D1FD0A7A300BC14EF /* DebugLogger.h */, 34480B4E1FD0A7A300BC14EF /* DebugLogger.m */, 346129AC1FD1F34E00532771 /* ImageCache.swift */, @@ -1432,16 +1421,6 @@ path = Assets; sourceTree = ""; }; - 34CE88E81F3237260098030F /* Profiles */ = { - isa = PBXGroup; - children = ( - 34CE88E91F3237260098030F /* OWSProfileManager.h */, - 34CE88EA1F3237260098030F /* OWSProfileManager.m */, - 34CE88EB1F3237260098030F /* ProfileFetcherJob.swift */, - ); - path = Profiles; - sourceTree = ""; - }; 34D1F0951F867BFC0066283D /* Cells */ = { isa = PBXGroup; children = ( @@ -1681,7 +1660,6 @@ 45D231751DC7E8C50034FA89 /* Jobs */, 457F3AC01D14A0F700C51351 /* Models */, 76EB041D18170B33006006FC /* network */, - 34CE88E81F3237260098030F /* Profiles */, B60959791C2C0FA9004E8797 /* rating */, 45B201741DAECBFD00C461E0 /* Signal-Bridging-Header.h */, 45CD81A41DBFF8CF004C9430 /* Storyboards */, @@ -1918,7 +1896,6 @@ isa = PBXGroup; children = ( 45E7A6A61E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift */, - B660F6A71C29868000687D6E /* CryptoToolsTest.m */, B660F6AA1C29868000687D6E /* ExceptionsTest.h */, B660F6AB1C29868000687D6E /* ExceptionsTest.m */, B660F6AC1C29868000687D6E /* FunctionalUtilTest.h */, @@ -2105,7 +2082,6 @@ 346129A51FD1F09100532771 /* OWSContactsManager.h in Headers */, 34480B681FD0AA9400BC14EF /* UIFont+OWS.h in Headers */, 346129CC1FD2072E00532771 /* NSAttributedString+OWS.h in Headers */, - 3461299F1FD1EFE200532771 /* CryptoTools.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2748,7 +2724,6 @@ 346129341FD1A88700532771 /* OWSSwiftUtils.swift in Sources */, 346129D01FD207F300532771 /* OWSAlerts.swift in Sources */, 346129B61FD1F7E800532771 /* ProfileFetcherJob.swift in Sources */, - 346129A01FD1EFE200532771 /* CryptoTools.m in Sources */, 3461295B1FD1D74C00532771 /* Environment.m in Sources */, 346129D51FD20ADC00532771 /* UIViewController+OWS.m in Sources */, 346129C91FD2072E00532771 /* NSString+OWS.m in Sources */, @@ -3000,7 +2975,6 @@ B660F78A1C29988E00687D6E /* UIUtil.m in Sources */, B660F78C1C29988E00687D6E /* UIDevice+TSHardwareVersion.m in Sources */, 456F6E211E2411B400FD2210 /* CallUIAdapter.swift in Sources */, - B660F6D81C29868000687D6E /* CryptoToolsTest.m in Sources */, 456F6E221E24132D00FD2210 /* PeerConnectionClient.swift in Sources */, B660F6E01C29868000687D6E /* UtilTest.m in Sources */, 45F3AEB71DFDE7900080CE33 /* AvatarImageView.swift in Sources */, diff --git a/Signal/src/util/ConversationSearcher.swift b/Signal/src/util/ConversationSearcher.swift index 7464850de..53a1fe44f 100644 --- a/Signal/src/util/ConversationSearcher.swift +++ b/Signal/src/util/ConversationSearcher.swift @@ -78,7 +78,7 @@ class ConversationSearcher: NSObject { } private var contactsManager: OWSContactsManager { - return Environment.getCurrent().contactsManager + return Environment.current().contactsManager } private func indexingString(recipientId: String) -> String { diff --git a/Signal/test/util/CryptoToolsTest.m b/Signal/test/util/CryptoToolsTest.m deleted file mode 100644 index 1e61d41e5..000000000 --- a/Signal/test/util/CryptoToolsTest.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. -// - -#import -#import "Util.h" -#import "CryptoTools.h" -#import "TestUtil.h" - -@interface CryptoToolsTest : XCTestCase - -@end - -@implementation CryptoToolsTest - --(void) testRandomForVariance { - NSData* d = [CryptoTools generateSecureRandomData:8]; - NSData* d2 = [CryptoTools generateSecureRandomData:8]; - - test(5 == [[CryptoTools generateSecureRandomData:5] length]); - test(8 == d.length); - - // extremely unlikely to fail if any reasonable amount of entropy is going into d and d2 - test(![d isEqualToData:d2]); -} - -@end diff --git a/SignalMessaging/contacts/SystemContactsFetcher.swift b/SignalMessaging/contacts/SystemContactsFetcher.swift index a727171b1..ded3c3c22 100644 --- a/SignalMessaging/contacts/SystemContactsFetcher.swift +++ b/SignalMessaging/contacts/SystemContactsFetcher.swift @@ -397,10 +397,12 @@ public class SystemContactsFetcher: NSObject { switch authorizationStatus { case .notDetermined: - if UIApplication.shared.applicationState == .background { - Logger.error("\(self.TAG) do not request contacts permission when app is in background") - completion(nil) - return + if CurrentAppContext().isMainApp() { + if CurrentAppContext().mainApplicationState() == .background { + Logger.error("\(self.TAG) do not request contacts permission when app is in background") + completion(nil) + return + } } self.contactStoreAdapter.requestAccess { (granted, error) in if let error = error { diff --git a/SignalMessaging/environment/SignalKeyingStorage.m b/SignalMessaging/environment/SignalKeyingStorage.m index 1d380087e..2a0fe3d2f 100644 --- a/SignalMessaging/environment/SignalKeyingStorage.m +++ b/SignalMessaging/environment/SignalKeyingStorage.m @@ -3,7 +3,7 @@ // #import "SignalKeyingStorage.h" -#import "CryptoTools.h" +#import "SecurityUtils.h" #import "TSStorageManager.h" #import "Util.h" @@ -17,9 +17,9 @@ + (void)generateSignaling { - [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_MAC_KEY_LENGTH] forKey:SIGNALING_MAC_KEY]; - [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_CIPHER_KEY_LENGTH] forKey:SIGNALING_CIPHER_KEY]; - [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_EXTRA_KEY_LENGTH] forKey:SIGNALING_EXTRA_KEY]; + [self storeData:[SecurityUtils generateRandomBytes:SIGNALING_MAC_KEY_LENGTH] forKey:SIGNALING_MAC_KEY]; + [self storeData:[SecurityUtils generateRandomBytes:SIGNALING_CIPHER_KEY_LENGTH] forKey:SIGNALING_CIPHER_KEY]; + [self storeData:[SecurityUtils generateRandomBytes:SIGNALING_EXTRA_KEY_LENGTH] forKey:SIGNALING_EXTRA_KEY]; } + (int64_t)getAndIncrementOneTimeCounter diff --git a/SignalMessaging/utils/CryptoTools.h b/SignalMessaging/utils/CryptoTools.h deleted file mode 100644 index 0459b7f9d..000000000 --- a/SignalMessaging/utils/CryptoTools.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. -// - -/// All dependencies on external libraries used for cryptography should be hidden behind CryptoTools methods. -/// That way, changing to a different library affects only one part of the system. - -@interface CryptoTools : NSObject - -/// Returns data composed of 'length' cryptographically unpredictable bytes sampled uniformly from [0, 256). -// -// TODO: Is this redundant with: [SecurityUtils generateRandomBytes]? -+ (NSData *)generateSecureRandomData:(NSUInteger)length; - -@end diff --git a/SignalMessaging/utils/CryptoTools.m b/SignalMessaging/utils/CryptoTools.m deleted file mode 100644 index ff3b495dd..000000000 --- a/SignalMessaging/utils/CryptoTools.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. -// - -#import "CryptoTools.h" - -@implementation CryptoTools - -+ (NSData *)generateSecureRandomData:(NSUInteger)length -{ - NSMutableData *d = [NSMutableData dataWithLength:length]; - OSStatus status = SecRandomCopyBytes(kSecRandomDefault, length, [d mutableBytes]); - if (status != noErr) { - [SecurityFailure raise:@"SecRandomCopyBytes failed"]; - } - return [d copy]; -} - -@end diff --git a/SignalMessaging/utils/OWSFormat.h b/SignalMessaging/utils/OWSFormat.h index 00fce61bf..14c3b902a 100644 --- a/SignalMessaging/utils/OWSFormat.h +++ b/SignalMessaging/utils/OWSFormat.h @@ -2,8 +2,6 @@ // Copyright (c) 2017 Open Whisper Systems. All rights reserved. // -//#import - NS_ASSUME_NONNULL_BEGIN @interface OWSFormat : NSObject diff --git a/SignalMessaging/utils/OWSFormat.m b/SignalMessaging/utils/OWSFormat.m index f3b533337..effb40f4e 100644 --- a/SignalMessaging/utils/OWSFormat.m +++ b/SignalMessaging/utils/OWSFormat.m @@ -4,14 +4,6 @@ #import "OWSFormat.h" -//#import "Environment.h" -//#import "HomeViewController.h" -//#import "PhoneNumber.h" -//#import "Signal-Swift.h" -//#import "StringUtil.h" -//#import -//#import - NS_ASSUME_NONNULL_BEGIN @implementation OWSFormat @@ -29,17 +21,21 @@ NS_ASSUME_NONNULL_BEGIN + (NSString *)formatFileSize:(unsigned long)fileSize { + static NSNumberFormatter *formatter = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + formatter = [NSNumberFormatter new]; + formatter.numberStyle = NSNumberFormatterDecimalStyle; + }); + const unsigned long kOneKilobyte = 1024; const unsigned long kOneMegabyte = kOneKilobyte * kOneKilobyte; - NSNumberFormatter *numberFormatter = [NSNumberFormatter new]; - numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; - if (fileSize > kOneMegabyte * 10) { - return [[numberFormatter stringFromNumber:@((int)round(fileSize / (CGFloat)kOneMegabyte))] + return [[formatter stringFromNumber:@((int)round(fileSize / (CGFloat)kOneMegabyte))] stringByAppendingString:@" MB"]; } else if (fileSize > kOneKilobyte * 10) { - return [[numberFormatter stringFromNumber:@((int)round(fileSize / (CGFloat)kOneKilobyte))] + return [[formatter stringFromNumber:@((int)round(fileSize / (CGFloat)kOneKilobyte))] stringByAppendingString:@" KB"]; } else { return [NSString stringWithFormat:@"%lu Bytes", fileSize]; diff --git a/SignalServiceKit/src/Security/SecurityUtils.h b/SignalServiceKit/src/Security/SecurityUtils.h index 045d2959f..f448a0566 100644 --- a/SignalServiceKit/src/Security/SecurityUtils.h +++ b/SignalServiceKit/src/Security/SecurityUtils.h @@ -4,6 +4,6 @@ @interface SecurityUtils : NSObject -+ (NSData *)generateRandomBytes:(int)numberBytes; ++ (NSData *)generateRandomBytes:(NSUInteger)length; @end diff --git a/SignalServiceKit/src/Security/SecurityUtils.m b/SignalServiceKit/src/Security/SecurityUtils.m index bf3dbda89..cce1f8986 100644 --- a/SignalServiceKit/src/Security/SecurityUtils.m +++ b/SignalServiceKit/src/Security/SecurityUtils.m @@ -1,23 +1,19 @@ // -// SecurityUtils.m -// TextSecureKit -// -// Created by Frederic Jacobs on 28/10/14. -// Copyright (c) 2014 Open Whisper Systems. All rights reserved. +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. // #import "SecurityUtils.h" @implementation SecurityUtils -+ (NSData *)generateRandomBytes:(int)numberBytes { - NSMutableData *randomBytes = [NSMutableData dataWithLength:(NSUInteger)numberBytes]; - int err = 0; - err = SecRandomCopyBytes(kSecRandomDefault, (size_t)numberBytes, [randomBytes mutableBytes]); - if (err != noErr) { - @throw [NSException exceptionWithName:@"random problem" reason:@"problem generating the random " userInfo:nil]; ++ (NSData *)generateRandomBytes:(NSUInteger)length +{ + NSMutableData *d = [NSMutableData dataWithLength:length]; + OSStatus status = SecRandomCopyBytes(kSecRandomDefault, length, [d mutableBytes]); + if (status != noErr) { + [SecurityFailure raise:@"SecRandomCopyBytes failed"]; } - return randomBytes; + return [d copy]; } @end