From 81245b79c0e2a1e0dec8e23b7142f17cbda12c65 Mon Sep 17 00:00:00 2001 From: Chris Ballinger Date: Sat, 13 Jul 2019 15:23:53 -0700 Subject: [PATCH] Working on replacing CPAProxy with Tor.framework --- .gitmodules | 3 + ChatSecure.xcodeproj/project.pbxproj | 58 +++++++++++++++-- .../Classes/Controllers/OTRTorManager.h | 12 +++- .../Classes/Controllers/OTRTorManager.m | 63 ++++++++++++++----- .../Classes/Controllers/OTRTorManager.swift | 1 + .../Classes/Controllers/XMPP/OTRXMPPManager.m | 5 +- .../Controllers/XMPP/OTRXMPPTorManager.m | 6 +- .../OTRXMPPCreateAccountHandler.m | 14 +++-- .../OTRXMPPLoginHandler.m | 15 +++-- ...om.mono0926.LicensePlist.latest_result.txt | 8 +++ ChatSecureCore.podspec | 1 + Podfile | 1 + Podfile.lock | 10 ++- Submodules/Tor_framework | 1 + 14 files changed, 153 insertions(+), 45 deletions(-) create mode 100644 ChatSecure/Classes/Controllers/OTRTorManager.swift create mode 160000 Submodules/Tor_framework diff --git a/.gitmodules b/.gitmodules index 7381ef001..1ff26cc48 100644 --- a/.gitmodules +++ b/.gitmodules @@ -40,3 +40,6 @@ [submodule "Submodules/libsqlfs"] path = Submodules/libsqlfs url = git@github.com:ChatSecure/libsqlfs.git +[submodule "Submodules/Tor_framework"] + path = Submodules/Tor_framework + url = git@github.com:ChatSecure/Tor.framework.git diff --git a/ChatSecure.xcodeproj/project.pbxproj b/ChatSecure.xcodeproj/project.pbxproj index d1fec677b..67a6d6b5c 100644 --- a/ChatSecure.xcodeproj/project.pbxproj +++ b/ChatSecure.xcodeproj/project.pbxproj @@ -192,9 +192,6 @@ 633105181A16D1A300C17BAE /* OTREncryptionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTREncryptionManager.m; sourceTree = ""; }; 6331051B1A16D1A300C17BAE /* OTRLanguageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRLanguageManager.h; sourceTree = ""; }; 6331051C1A16D1A300C17BAE /* OTRLanguageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTRLanguageManager.m; sourceTree = ""; }; - 6331051D1A16D1A300C17BAE /* OTROAuthRefresher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTROAuthRefresher.h; sourceTree = ""; }; - 6331051E1A16D1A300C17BAE /* OTROAuthRefresher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTROAuthRefresher.m; sourceTree = ""; }; - 633105211A16D1A300C17BAE /* OTRProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRProtocol.h; sourceTree = ""; }; 633105221A16D1A300C17BAE /* OTRProtocolManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRProtocolManager.h; sourceTree = ""; }; 633105231A16D1A300C17BAE /* OTRProtocolManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTRProtocolManager.m; sourceTree = ""; }; 6331052E1A16D1A300C17BAE /* OTRSettingsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRSettingsManager.h; sourceTree = ""; }; @@ -641,6 +638,7 @@ D9C6E6A01B71575300572273 /* OTRUsernameCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OTRUsernameCell.swift; sourceTree = ""; }; D9CBBC571C642BAA005CD715 /* EnablePushViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EnablePushViewController.swift; path = "ChatSecure/Classes/View Controllers/Onboarding/EnablePushViewController.swift"; sourceTree = SOURCE_ROOT; }; D9DB2D131F37AEBB005D64E4 /* OTRYapMessageSendAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OTRYapMessageSendAction.swift; sourceTree = ""; }; + D9DE95F322DA86AD00E76C7A /* OTRTorManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OTRTorManager.swift; sourceTree = ""; }; D9DEC3491FABC9F900BF1F7C /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; }; D9E8277D1E2819F20071F40D /* strings.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = strings.json; path = OTRAssets/Strings/strings.json; sourceTree = SOURCE_ROOT; }; D9EEEDD11D27388600B8BC54 /* OTRvCard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OTRvCard.h; path = "Yap Storage/OTRvCard.h"; sourceTree = ""; }; @@ -800,13 +798,11 @@ 633105161A16D1A300C17BAE /* OTRDatabaseView.m */, 633105171A16D1A300C17BAE /* OTREncryptionManager.h */, 633105181A16D1A300C17BAE /* OTREncryptionManager.m */, - 6331051D1A16D1A300C17BAE /* OTROAuthRefresher.h */, - 6331051E1A16D1A300C17BAE /* OTROAuthRefresher.m */, - 633105211A16D1A300C17BAE /* OTRProtocol.h */, 633105221A16D1A300C17BAE /* OTRProtocolManager.h */, 633105231A16D1A300C17BAE /* OTRProtocolManager.m */, 6331052E1A16D1A300C17BAE /* OTRSettingsManager.h */, 6331052F1A16D1A300C17BAE /* OTRSettingsManager.m */, + D9DE95F322DA86AD00E76C7A /* OTRTorManager.swift */, 633105301A16D1A300C17BAE /* OTRTorManager.h */, 633105311A16D1A300C17BAE /* OTRTorManager.m */, 633AF2F81A7C3DBB0030A3FF /* OTRAudioSessionManager.h */, @@ -1563,6 +1559,7 @@ D9EC47841EFA043B00C39B25 /* [Carthage] Copy Frameworks */, D92F96D821BA1E7A0056EA35 /* LicensePlist */, 42829843B1DFA068A70F83E8 /* [CP] Copy Pods Resources */, + 2D0230D0CF74A4A7D7BA77AB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -1584,6 +1581,7 @@ 6396AFB11A169D54009F3E6C /* Resources */, D9BE0B531EFAFED800BDF8D8 /* [Carthage] Copy Frameworks */, 3CDE4234E348F4E767DA1980 /* [CP] Copy Pods Resources */, + 142353818BBDB61EA63263C1 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -1795,6 +1793,30 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 142353818BBDB61EA63263C1 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ChatSecureCorePods-ChatSecureTests/Pods-ChatSecureCorePods-ChatSecureTests-frameworks.sh", + "${PODS_ROOT}/Tor/Build/iOS/Tor.framework", + "${PODS_ROOT}/Tor/Build/iOS/Tor.framework.dSYM", + "${PODS_ROOT}/Tor/Build/iOS/93C43FE0-93A2-3408-873F-124872631203.bcsymbolmap", + "${PODS_ROOT}/Tor/Build/iOS/3534DE4E-110A-335A-9AFF-D9BBFF6BC8FE.bcsymbolmap", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Tor.framework", + "${DWARF_DSYM_FOLDER_PATH}/Tor.framework.dSYM", + "${BUILT_PRODUCTS_DIR}/93C43FE0-93A2-3408-873F-124872631203.bcsymbolmap", + "${BUILT_PRODUCTS_DIR}/3534DE4E-110A-335A-9AFF-D9BBFF6BC8FE.bcsymbolmap", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ChatSecureCorePods-ChatSecureTests/Pods-ChatSecureCorePods-ChatSecureTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 26A8ED395C5418B361347335 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1813,6 +1835,30 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 2D0230D0CF74A4A7D7BA77AB /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ChatSecureCorePods-ChatSecure/Pods-ChatSecureCorePods-ChatSecure-frameworks.sh", + "${PODS_ROOT}/Tor/Build/iOS/Tor.framework", + "${PODS_ROOT}/Tor/Build/iOS/Tor.framework.dSYM", + "${PODS_ROOT}/Tor/Build/iOS/93C43FE0-93A2-3408-873F-124872631203.bcsymbolmap", + "${PODS_ROOT}/Tor/Build/iOS/3534DE4E-110A-335A-9AFF-D9BBFF6BC8FE.bcsymbolmap", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Tor.framework", + "${DWARF_DSYM_FOLDER_PATH}/Tor.framework.dSYM", + "${BUILT_PRODUCTS_DIR}/93C43FE0-93A2-3408-873F-124872631203.bcsymbolmap", + "${BUILT_PRODUCTS_DIR}/3534DE4E-110A-335A-9AFF-D9BBFF6BC8FE.bcsymbolmap", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ChatSecureCorePods-ChatSecure/Pods-ChatSecureCorePods-ChatSecure-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3CDE4234E348F4E767DA1980 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/ChatSecure/Classes/Controllers/OTRTorManager.h b/ChatSecure/Classes/Controllers/OTRTorManager.h index 402db1df2..0a29bfce1 100644 --- a/ChatSecure/Classes/Controllers/OTRTorManager.h +++ b/ChatSecure/Classes/Controllers/OTRTorManager.h @@ -7,12 +7,20 @@ // @import Foundation; -@import CPAProxy; +@import Tor; +NS_ASSUME_NONNULL_BEGIN @interface OTRTorManager : NSObject -@property (nonatomic, strong) CPAProxyManager *torManager; +//@property (nonatomic, strong) CPAProxyManager *torManager; +@property (nonatomic, strong, readonly) TORController *torController; + +@property (nonatomic, class, readonly) OTRTorManager *shared; + +@property (nonatomic, class, readonly) NSString *SOCKSHost; +@property (nonatomic, class, readonly) uint16_t SOCKSPort; + (instancetype) sharedInstance; @end +NS_ASSUME_NONNULL_END diff --git a/ChatSecure/Classes/Controllers/OTRTorManager.m b/ChatSecure/Classes/Controllers/OTRTorManager.m index 69a66090f..22efed4f7 100644 --- a/ChatSecure/Classes/Controllers/OTRTorManager.m +++ b/ChatSecure/Classes/Controllers/OTRTorManager.m @@ -7,32 +7,49 @@ // #import "OTRTorManager.h" - -@import CPAProxy; +@import Tor; @implementation OTRTorManager - (instancetype) init { if (self = [super init]) { - // Get resource paths for the torrc and geoip files from the main bundle - NSBundle *cpaProxyFrameworkBundle = [NSBundle bundleForClass:[CPAProxyManager class]]; - NSURL *cpaProxyBundleURL = [cpaProxyFrameworkBundle URLForResource:@"CPAProxy" withExtension:@"bundle"]; - NSBundle *cpaProxyBundle = [[NSBundle alloc] initWithURL:cpaProxyBundleURL]; - NSParameterAssert(cpaProxyBundle != nil); - - NSString *torrcPath = [[NSBundle mainBundle] pathForResource:@"torrc" ofType:nil]; // use custom torrc - NSString *geoipPath = [cpaProxyBundle pathForResource:@"geoip" ofType:nil]; - NSString *dataDirectory = [[[[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"com.ChatSecure.Tor"] path]; - - // Initialize a CPAProxyManager - CPAConfiguration *configuration = [CPAConfiguration configurationWithTorrcPath:torrcPath geoipPath:geoipPath torDataDirectoryPath:dataDirectory]; - configuration.isolateDestinationAddress = YES; - configuration.isolateDestinationPort = YES; - self.torManager = [CPAProxyManager proxyWithConfiguration:configuration]; + // Tor.framework + [self setupTorFramework]; } return self; } +- (void) setupTorFramework { + NSString *dataDirectory = [[[[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"com.ChatSecure.Tor"] path]; + + TORConfiguration *configuration = [TORConfiguration new]; + configuration.cookieAuthentication = @(YES); + configuration.dataDirectory = dataDirectory; + NSString *SOCKSPort = @(OTRTorManager.SOCKSPort).stringValue; + configuration.arguments = @[@"--ignore-missing-torrc", + @"--socksport", SOCKSPort, + @"--controlport", @"127.0.0.1:49060",]; + + TORThread *thread = [[TORThread alloc] initWithConfiguration:configuration]; + [thread start]; + + NSURL *cookieURL = [configuration.dataDirectory URLByAppendingPathComponent:@"control_auth_cookie"]; + NSData *cookie = [NSData dataWithContentsOfURL:cookieURL]; + _torController = [[TORController alloc] initWithSocketHost:@"127.0.0.1" port:49060]; + [_torController authenticateWithData:cookie completion:^(BOOL success, NSError *error) { + if (!success) + return; + + id circuitObserver = nil; + circuitObserver = [_torController addObserverForCircuitEstablished:^(BOOL established) { + if (!established) + return; + NSLog(@"Tor connected"); + [_torController removeObserver:circuitObserver]; + }]; + }]; +} + #pragma - mark Singleton Methodd + (instancetype)sharedInstance @@ -46,4 +63,16 @@ + (instancetype)sharedInstance return _sharedInstance; } ++ (OTRTorManager*) shared { + return [self sharedInstance]; +} + ++ (NSString*) SOCKSHost { + return @"127.0.0.1"; +} + ++ (uint16_t) SOCKSPort { + return 49050; +} + @end diff --git a/ChatSecure/Classes/Controllers/OTRTorManager.swift b/ChatSecure/Classes/Controllers/OTRTorManager.swift new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/ChatSecure/Classes/Controllers/OTRTorManager.swift @@ -0,0 +1 @@ + diff --git a/ChatSecure/Classes/Controllers/XMPP/OTRXMPPManager.m b/ChatSecure/Classes/Controllers/XMPP/OTRXMPPManager.m index 93f57d33c..3eaa2519f 100644 --- a/ChatSecure/Classes/Controllers/XMPP/OTRXMPPManager.m +++ b/ChatSecure/Classes/Controllers/XMPP/OTRXMPPManager.m @@ -217,9 +217,8 @@ - (void)setupStream // File Transfer NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; if ([self isKindOfClass:[OTRXMPPTorManager class]]) { - CPAProxyManager *tor = [OTRTorManager sharedInstance].torManager; - NSString *proxyHost = tor.SOCKSHost; - NSUInteger proxyPort = tor.SOCKSPort; + NSString *proxyHost = OTRTorManager.SOCKSHost; + NSUInteger proxyPort = OTRTorManager.SOCKSPort; NSDictionary *proxyDict = @{ (NSString *)kCFStreamPropertySOCKSProxyHost : proxyHost, (NSString *)kCFStreamPropertySOCKSProxyPort : @(proxyPort) diff --git a/ChatSecure/Classes/Controllers/XMPP/OTRXMPPTorManager.m b/ChatSecure/Classes/Controllers/XMPP/OTRXMPPTorManager.m index 1952c4d04..db2b87ad3 100644 --- a/ChatSecure/Classes/Controllers/XMPP/OTRXMPPTorManager.m +++ b/ChatSecure/Classes/Controllers/XMPP/OTRXMPPTorManager.m @@ -21,7 +21,7 @@ @interface OTRXMPPTorManager() @implementation OTRXMPPTorManager - (void) connectUserInitiated:(BOOL)userInitiated { - if ([OTRTorManager sharedInstance].torManager.isConnected) { + if (OTRTorManager.shared.torController.isConnected) { [super connectUserInitiated:userInitiated]; } else { NSError * error = [NSError errorWithDomain:OTRXMPPErrorDomain code:OTRXMPPErrorCodeTorError userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"Need to connect to Tor first.", @"")}]; @@ -37,8 +37,8 @@ - (XMPPStream*) newStream { // override - (void) setupStream { [super setupStream]; - NSString *proxyHost = [OTRTorManager sharedInstance].torManager.SOCKSHost; - NSUInteger proxyPort = [OTRTorManager sharedInstance].torManager.SOCKSPort; + NSString *proxyHost = OTRTorManager.SOCKSHost; + NSUInteger proxyPort = OTRTorManager.SOCKSPort; if ([self.xmppStream isKindOfClass:[ProxyXMPPStream class]]) { ProxyXMPPStream *proxyStream = (ProxyXMPPStream*)self.xmppStream; [proxyStream setProxyHost:proxyHost port:proxyPort version:GCDAsyncSocketSOCKSVersion5]; diff --git a/ChatSecure/Classes/View Controllers/Login View Controllers/OTRXMPPCreateAccountHandler.m b/ChatSecure/Classes/View Controllers/Login View Controllers/OTRXMPPCreateAccountHandler.m index 2434e9403..c941a97cc 100644 --- a/ChatSecure/Classes/View Controllers/Login View Controllers/OTRXMPPCreateAccountHandler.m +++ b/ChatSecure/Classes/View Controllers/Login View Controllers/OTRXMPPCreateAccountHandler.m @@ -56,19 +56,21 @@ - (void)performActionWithValidForm:(XLFormDescriptor *)form account:(OTRAccount if (account.accountType == OTRAccountTypeXMPPTor) { //check tor is running - if ([OTRTorManager sharedInstance].torManager.status == CPAStatusOpen) { + if (OTRTorManager.shared.torController.isConnected) { [self finishRegisteringWithForm:form account:account]; - } else if ([OTRTorManager sharedInstance].torManager.status == CPAStatusClosed) { - [[OTRTorManager sharedInstance].torManager setupWithCompletion:^(NSString *socksHost, NSUInteger socksPort, NSError *error) { - - if (error) { + } else { + id circuitObserver = nil; + circuitObserver = [OTRTorManager.shared.torController addObserverForCircuitEstablished:^(BOOL established) { + if (!established) { + NSError *error = [NSError errorWithDomain:@"com.tor.error" code:1 userInfo:nil]; dispatch_async(dispatch_get_main_queue(), ^{ completion(account,error); }); } else { + [OTRTorManager.shared.torController removeObserver:circuitObserver]; [self finishRegisteringWithForm:form account:account]; } - } progress:progress]; + }]; } } else { [self finishRegisteringWithForm:form account:account]; diff --git a/ChatSecure/Classes/View Controllers/Login View Controllers/OTRXMPPLoginHandler.m b/ChatSecure/Classes/View Controllers/Login View Controllers/OTRXMPPLoginHandler.m index 34cf27f95..5373c14b1 100644 --- a/ChatSecure/Classes/View Controllers/Login View Controllers/OTRXMPPLoginHandler.m +++ b/ChatSecure/Classes/View Controllers/Login View Controllers/OTRXMPPLoginHandler.m @@ -210,19 +210,22 @@ - (void)performActionWithValidForm:(XLFormDescriptor *)form account:(OTRXMPPAcco if (account.accountType == OTRAccountTypeXMPPTor) { //check tor is running - if ([OTRTorManager sharedInstance].torManager.status == CPAStatusOpen) { + + if (OTRTorManager.shared.torController.isConnected) { [self finishConnectingWithForm:form account:account]; - } else if ([OTRTorManager sharedInstance].torManager.status == CPAStatusClosed) { - [[OTRTorManager sharedInstance].torManager setupWithCompletion:^(NSString *socksHost, NSUInteger socksPort, NSError *error) { - - if (error) { + } else { + id circuitObserver = nil; + circuitObserver = [OTRTorManager.shared.torController addObserverForCircuitEstablished:^(BOOL established) { + if (!established) { + NSError *error = [NSError errorWithDomain:@"com.tor.error" code:1 userInfo:nil]; dispatch_async(dispatch_get_main_queue(), ^{ completion(account,error); }); } else { + [OTRTorManager.shared.torController removeObserver:circuitObserver]; [self finishConnectingWithForm:form account:account]; } - } progress:progress]; + }]; } } else { [self finishConnectingWithForm:form account:account]; diff --git a/ChatSecure/Settings.bundle/com.mono0926.LicensePlist.latest_result.txt b/ChatSecure/Settings.bundle/com.mono0926.LicensePlist.latest_result.txt index 6723b70df..2e9a52c8d 100644 --- a/ChatSecure/Settings.bundle/com.mono0926.LicensePlist.latest_result.txt +++ b/ChatSecure/Settings.bundle/com.mono0926.LicensePlist.latest_result.txt @@ -344,6 +344,14 @@ name: SQLCipher, nameSpecified: body: Copyright (c) 2008, … version: 4.2.0 +name: Tor, nameSpecified: +body: Copyright (c) 2015-2… +version: 400.5.1 + +name: Tor, nameSpecified: +body: Copyright (c) 2015-2… +version: 400.5.1 + name: TTTAttributedLabel, nameSpecified: body: Copyright (c) 2011 M… version: 2.0.0 diff --git a/ChatSecureCore.podspec b/ChatSecureCore.podspec index 5ba98807e..1265e1b39 100644 --- a/ChatSecureCore.podspec +++ b/ChatSecureCore.podspec @@ -51,6 +51,7 @@ TODO: Add long description of the pod here. s.dependency 'ProxyKit/Client', '~> 1.2.0' s.dependency 'GCDWebServer', '~> 3.4' s.dependency 'CPAProxy' + s.dependency 'Tor' s.dependency 'XMPPFramework/Swift' s.dependency 'ChatSecure-Push-iOS' diff --git a/Podfile b/Podfile index 68887e10f..a03c4cfef 100755 --- a/Podfile +++ b/Podfile @@ -52,6 +52,7 @@ abstract_target 'ChatSecureCorePods' do pod 'ProxyKit/Client', '~> 1.2.0' pod 'GCDWebServer', '~> 3.4' pod 'CPAProxy', :path => 'Submodules/CPAProxy/CPAProxy.podspec' + pod 'Tor', :podspec => 'Submodules/Tor_framework/Tor.podspec' pod 'XMPPFramework/Swift', :path => 'Submodules/XMPPFramework/XMPPFramework.podspec' pod 'ChatSecure-Push-iOS', :path => 'Submodules/ChatSecure-Push-iOS/ChatSecure-Push-iOS.podspec' diff --git a/Podfile.lock b/Podfile.lock index 9e738f2bf..0cef979a7 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -63,6 +63,7 @@ PODS: - SAMKeychain (~> 1.5) - SignalProtocolObjC - SQLCipher (~> 4.2.0) + - Tor - TTTAttributedLabel (~> 2.0) - TUSafariActivity (~> 1.0) - XLForm (~> 4.0.0) @@ -174,6 +175,7 @@ PODS: - SQLCipher/common (4.2.0) - SQLCipher/standard (4.2.0): - SQLCipher/common + - Tor (400.5.1) - TTTAttributedLabel (2.0.0) - TUSafariActivity (1.0.4) - XLForm (4.0.1) @@ -283,6 +285,7 @@ DEPENDENCIES: - QRCodeReaderViewController (~> 4.0) - SignalProtocolObjC (from `Submodules/SignalProtocol-ObjC/SignalProtocolObjC.podspec`) - SQLCipher (~> 4.2) + - Tor (from `Submodules/Tor_framework/Tor.podspec`) - TUSafariActivity (~> 1.0) - XMPPFramework/Swift (from `Submodules/XMPPFramework/XMPPFramework.podspec`) - YapDatabase/SQLCipher (from `Submodules/YapDatabase/YapDatabase.podspec`) @@ -350,6 +353,8 @@ EXTERNAL SOURCES: :git: https://github.com/gmertk/ParkedTextField.git SignalProtocolObjC: :path: Submodules/SignalProtocol-ObjC/SignalProtocolObjC.podspec + Tor: + :podspec: Submodules/Tor_framework/Tor.podspec XMPPFramework: :path: Submodules/XMPPFramework/XMPPFramework.podspec YapDatabase: @@ -373,7 +378,7 @@ SPEC CHECKSUMS: BBlock: c56d7f72597ffe1634fcdc73836c5c0fed3271be BButton: ab0f2ed3b998ae73c5188b57d270d81e4a1eeb27 ChatSecure-Push-iOS: ed51f98bc019be9e2d859604677a21a4ee68422e - ChatSecureCore: ae0bc3f0fa3d811121d7ec103e1b827aeb344d96 + ChatSecureCore: c9a76fc1a5e1f0546e45f740d31cdc60de5e2a1f CocoaAsyncSocket: eafaa68a7e0ec99ead0a7b35015e0bf25d2c8987 CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947 CPAProxy: b1b33221b6ad297169cb813b6bbefd2a69ea9aad @@ -407,6 +412,7 @@ SPEC CHECKSUMS: SignalProtocolC: 051512e9f3abfeb4120c5e9673af9ae0ee370070 SignalProtocolObjC: b992ed29c3b7b453510ff0102ed16ef143f7efd2 SQLCipher: 0187a2180ac288ea686b670b7141da62cd013b16 + Tor: 0dc8a8b0384133645b97faa589220d58432ec593 TTTAttributedLabel: 8cffe8e127e4e82ff3af1e5386d4cd0ad000b656 TUSafariActivity: afc55a00965377939107ce4fdc7f951f62454546 XLForm: b8d47a9a00fb6166981cb40de7169d70d611e9be @@ -415,6 +421,6 @@ SPEC CHECKSUMS: YapTaskQueue: f3b23875bead71a7ee57b65637ce9c0e98b68c34 ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb -PODFILE CHECKSUM: b141f51290d05663f08b633a34ffb15eee02707b +PODFILE CHECKSUM: e37c7446a07a8cba3c312b14db6732f79e95c63f COCOAPODS: 1.7.4 diff --git a/Submodules/Tor_framework b/Submodules/Tor_framework new file mode 160000 index 000000000..40e90e97d --- /dev/null +++ b/Submodules/Tor_framework @@ -0,0 +1 @@ +Subproject commit 40e90e97d2f01fe0fc2ebac00e2caeca941c9f75