diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c055943fa..814ba156d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,28 +1,26 @@ name: CI -on: - push: - branches: [ "main", "develop" ] - pull_request: +# This action is disabled until we can run it on Apple Silicon powered macOS runners - https://github.com/github/roadmap/issues/528 -jobs: - test: - name: Unit and UI Tests - runs-on: macOS-latest - steps: - - uses: actions/setup-go@v2 - with: - go-version: 1.16 - - uses: actions/checkout@v2 - - name: Set up config files - run: | - cp IVPNClient/Config/staging.template.xcconfig IVPNClient/Config/staging.xcconfig - cp IVPNClient/Config/release.template.xcconfig IVPNClient/Config/release.xcconfig - cp wireguard-tunnel-provider/Config/wg-staging.template.xcconfig wireguard-tunnel-provider/Config/wg-staging.xcconfig - cp wireguard-tunnel-provider/Config/wg-release.template.xcconfig wireguard-tunnel-provider/Config/wg-release.xcconfig - cp IVPNWidget/Config/widget-staging.template.xcconfig IVPNWidget/Config/widget-staging.xcconfig - cp IVPNWidget/Config/widget-release.template.xcconfig IVPNWidget/Config/widget-release.xcconfig - cp IVPNClient/Config/OpenVPNConf.template.swift IVPNClient/Config/OpenVPNConf.swift - cp fastlane/Appfile.template fastlane/Appfile - - name: Build and test - run: xcodebuild test -scheme IVPNClient -destination 'platform=iOS Simulator,name=iPhone 14' +# on: +# push: +# branches: [ "main", "develop" ] +# pull_request: + +# jobs: +# test: +# name: Unit and UI Tests +# runs-on: macOS-latest +# steps: +# - uses: actions/setup-go@v2 +# with: +# go-version: 1.18 +# - uses: actions/checkout@v2 +# - name: Set up config files +# run: | +# cp IVPNClient/Config/staging.template.xcconfig IVPNClient/Config/staging.xcconfig +# cp IVPNClient/Config/release.template.xcconfig IVPNClient/Config/release.xcconfig +# cp IVPNClient/Config/OpenVPNConf.template.swift IVPNClient/Config/OpenVPNConf.swift +# cp fastlane/Appfile.template fastlane/Appfile +# - name: Build and test +# run: xcodebuild test -scheme IVPNClient -destination 'platform=iOS Simulator,name=iPhone 14' diff --git a/.gitignore b/.gitignore index 636bce78f..ab0ae2197 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ build/ DerivedData/ +## Static libraries +IVPNClient/liboqs/liboqs-iphoneos.a +IVPNClient/liboqs/liboqs-iphonesimulator.a + ## Various settings *.pbxuser !default.pbxuser @@ -58,10 +62,6 @@ Carthage/Build # Rules for .xcconfig files staging.xcconfig release.xcconfig -wg-staging.xcconfig -wg-release.xcconfig -widget-staging.xcconfig -widget-release.xcconfig # Rules for .swift files OpenVPNConf.swift diff --git a/CHANGELOG.md b/CHANGELOG.md index e59defaf6..39dd15d90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. +## 2.10.0 - 2023-08-08 + +[NEW] Post-Quantum Resistant WireGuard Connections +[NEW] AntiTracker Plus additional block lists +[IMPROVED] WireGuard keys rotation when connected with OpenVPN +[NOTE] Kill Switch is removed for iOS 16+ devices; Disable Kill Switch before upgrading to avoid connection issues + ## 2.9.1 - 2023-06-29 [NOTE] Removed references to Port Forwarding diff --git a/IVPNClient.xcodeproj/project.pbxproj b/IVPNClient.xcodeproj/project.pbxproj index 0d77b1adc..0e58ec935 100644 --- a/IVPNClient.xcodeproj/project.pbxproj +++ b/IVPNClient.xcodeproj/project.pbxproj @@ -87,16 +87,13 @@ 8247A5ED215D037600E8D680 /* UserDefaults+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825A43FC215CCFE70076131F /* UserDefaults+Ext.swift */; }; 8247E1DA22686217006C0C08 /* IAPManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8247E1D922686217006C0C08 /* IAPManager.swift */; }; 8247E1DE22687C28006C0C08 /* ProductIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8247E1DD22687C28006C0C08 /* ProductIdentifier.swift */; }; + 82486FAD2A277058009B53F4 /* liboqs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 82486FAC2A277058009B53F4 /* liboqs.a */; }; 824B141C2609D5E700766B05 /* DNSProtocolTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 824B141B2609D5E700766B05 /* DNSProtocolTypeTests.swift */; }; 824B86B926D3D16100D0101A /* FileManager+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 824B86AD26D3D16100D0101A /* FileManager+Extension.swift */; }; 824B86BF26D3D16100D0101A /* ringlogger.c in Sources */ = {isa = PBXBuildFile; fileRef = 824B86B526D3D16100D0101A /* ringlogger.c */; }; - 824B86C526D3D7B600D0101A /* ExtensionKeyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 824B86C226D3D7B500D0101A /* ExtensionKeyManager.swift */; }; 824B86C626D3D7B600D0101A /* TimerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 824B86C326D3D7B600D0101A /* TimerManager.swift */; }; - 824B86C726D3D7B600D0101A /* ApiManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 824B86C426D3D7B600D0101A /* ApiManager.swift */; }; 824B86C826D3D7DE00D0101A /* Interface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8292E1A82174C11600123538 /* Interface.swift */; }; 824B86C926D3D7FB00D0101A /* CIDRAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F638CB217DC25600410318 /* CIDRAddress.swift */; }; - 824B86CB26D3E8D100D0101A /* ExtensionKeyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 824B86C226D3D7B500D0101A /* ExtensionKeyManager.swift */; }; - 824B86CC26D3E8F600D0101A /* ApiManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 824B86C426D3D7B600D0101A /* ApiManager.swift */; }; 824B86D226D40E7800D0101A /* FileManager+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 824B86AD26D3D16100D0101A /* FileManager+Extension.swift */; }; 824B86D426D40E9700D0101A /* ringlogger.c in Sources */ = {isa = PBXBuildFile; fileRef = 824B86B526D3D16100D0101A /* ringlogger.c */; }; 824B86DF26D42A4600D0101A /* WireGuardKit in Frameworks */ = {isa = PBXBuildFile; productRef = 824B86DE26D42A4600D0101A /* WireGuardKit */; }; @@ -109,6 +106,7 @@ 825E834F25A327EB00938240 /* CaptchaViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825E834E25A327EB00938240 /* CaptchaViewController.swift */; }; 825E836325A4834200938240 /* APIPublicKeyPin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825E836225A4834200938240 /* APIPublicKeyPin.swift */; }; 825E836425A4834200938240 /* APIPublicKeyPin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825E836225A4834200938240 /* APIPublicKeyPin.swift */; }; + 825ECB2C2A5582570032E986 /* AntiTrackerDns.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825ECB2B2A5582570032E986 /* AntiTrackerDns.swift */; }; 826470C42446F67100403A14 /* Signup.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 826470C32446F67100403A14 /* Signup.storyboard */; }; 8264CFFC22422F6700E1721E /* Date+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D90470216C7DAF0032F3BE /* Date+Ext.swift */; }; 8269CAC32264962F00CF488A /* AntiTrackerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8269CAC22264962F00CF488A /* AntiTrackerViewController.swift */; }; @@ -129,7 +127,11 @@ 8270753722AFC7E70067C323 /* StringProtocol+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8270753522AFC5B90067C323 /* StringProtocol+Ext.swift */; }; 8270D266241A477900B17B65 /* InfoAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8270D265241A477900B17B65 /* InfoAlertView.swift */; }; 8270D268241BB3D100B17B65 /* InfoAlertViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8270D267241BB3D000B17B65 /* InfoAlertViewModel.swift */; }; + 827123162A3C74D000882336 /* AppKeyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82989FDD2188981900F7EBE0 /* AppKeyManager.swift */; }; + 827123172A3C758100882336 /* AppKeyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82989FDD2188981900F7EBE0 /* AppKeyManager.swift */; }; 8271D2E32A092F7B0052AF61 /* UIDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8271D2E22A092F7B0052AF61 /* UIDevice.swift */; }; + 8271D2E42A1224530052AF61 /* ApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2833891D9D41A60024C553 /* ApiService.swift */; }; + 8271D2E52A1224A70052AF61 /* ErrorResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8232FBF32240DE19006B81D2 /* ErrorResult.swift */; }; 827694F3263C04C40058B4DC /* LoginConfirmation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 827694F2263C04C40058B4DC /* LoginConfirmation.swift */; }; 82774855237596DF0061BD46 /* OpenVPNConf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82774854237596DF0061BD46 /* OpenVPNConf.swift */; }; 8277F1CD22118D08007C6F15 /* ProofsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8277F1CC22118D08007C6F15 /* ProofsViewModel.swift */; }; @@ -149,6 +151,8 @@ 8292E1A72174C10700123538 /* Peer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8292E1A62174C10700123538 /* Peer.swift */; }; 8292E1A92174C11600123538 /* Interface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8292E1A82174C11600123538 /* Interface.swift */; }; 8292E1AB2174C12200123538 /* Tunnel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8292E1AA2174C12200123538 /* Tunnel.swift */; }; + 829407C02A3DCC5500E6B68E /* KemHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BBD9ED2A1F5FA100375252 /* KemHelper.swift */; }; + 829407C12A3DCE9200E6B68E /* liboqs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 82486FAC2A277058009B53F4 /* liboqs.a */; }; 82968A32298A970500077E0A /* TunnelKitOpenVPN in Frameworks */ = {isa = PBXBuildFile; productRef = 82968A31298A970500077E0A /* TunnelKitOpenVPN */; }; 82968A34298A970500077E0A /* TunnelKitOpenVPNAppExtension in Frameworks */ = {isa = PBXBuildFile; productRef = 82968A33298A970500077E0A /* TunnelKitOpenVPNAppExtension */; }; 82968A35298A98C300077E0A /* KeyChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C69422D1DD20FC200F9A801 /* KeyChain.swift */; }; @@ -160,6 +164,10 @@ 829DF27D2497949A000DC2DB /* PlanLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829DF27B2497949A000DC2DB /* PlanLabel.swift */; }; 829DF27E2497949A000DC2DB /* SelectPlanView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829DF27C2497949A000DC2DB /* SelectPlanView.swift */; }; 829DF2822497953C000DC2DB /* UIButton+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829DF2812497953C000DC2DB /* UIButton+Ext.swift */; }; + 829F5EAF2A56E067005919AF /* AntiTrackerListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829F5EAE2A56E067005919AF /* AntiTrackerListViewController.swift */; }; + 829F5EB02A570322005919AF /* AntiTrackerDns.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825ECB2B2A5582570032E986 /* AntiTrackerDns.swift */; }; + 829F5EB12A570323005919AF /* AntiTrackerDns.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825ECB2B2A5582570032E986 /* AntiTrackerDns.swift */; }; + 829F5EB22A570323005919AF /* AntiTrackerDns.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825ECB2B2A5582570032E986 /* AntiTrackerDns.swift */; }; 829F5FC729A13CAE009E1AD3 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = 829F5FC629A13CAE009E1AD3 /* KeychainAccess */; }; 829F5FC929A13CEA009E1AD3 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = 829F5FC829A13CEA009E1AD3 /* KeychainAccess */; }; 829F5FCB29A13CF2009E1AD3 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = 829F5FCA29A13CF2009E1AD3 /* KeychainAccess */; }; @@ -194,12 +202,15 @@ 82B81E4F235F2614005986E8 /* XCUIApplication+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82B81E4E235F2614005986E8 /* XCUIApplication+Ext.swift */; }; 82B81E51235F2A13005986E8 /* InitScreenTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82B81E50235F2A13005986E8 /* InitScreenTests.swift */; }; 82BA8AC122E5DC93004E8D8D /* NETunnelProviderProtocol+ExtTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BA8AC022E5DC93004E8D8D /* NETunnelProviderProtocol+ExtTests.swift */; }; + 82BBD9EE2A1F5FA100375252 /* KemHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BBD9ED2A1F5FA100375252 /* KemHelper.swift */; }; 82BBF25921AC799A00589766 /* NetworkProtectionRulesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BBF25821AC799A00589766 /* NetworkProtectionRulesViewController.swift */; }; 82BBF26121AD213500589766 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BBF26021AD213500589766 /* Theme.swift */; }; 82BBF26921AE802400589766 /* DispatchQueue+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BBF26821AE802400589766 /* DispatchQueue+Ext.swift */; }; 82BBF26D21AE95C000589766 /* UIApplication+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BBF26C21AE95C000589766 /* UIApplication+Ext.swift */; }; 82BBF27121AECC8100589766 /* UILabel+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BBF27021AECC8100589766 /* UILabel+Ext.swift */; }; 82BF32F624484E5100248E4F /* CreateAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BF32F524484E5100248E4F /* CreateAccountView.swift */; }; + 82BF79622A2F8DDC00061972 /* liboqs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 82486FAC2A277058009B53F4 /* liboqs.a */; }; + 82BF79752A2F98C500061972 /* KemHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BBD9ED2A1F5FA100375252 /* KemHelper.swift */; }; 82C1D5BC23FE78570059A915 /* MapScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C1D5BB23FE78570059A915 /* MapScrollView.swift */; }; 82C1D5BF23FE8C6D0059A915 /* ControlPanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C1D5BE23FE8C6D0059A915 /* ControlPanelViewController.swift */; }; 82C293BF21CCD49A000B74EC /* NavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C293BE21CCD49A000B74EC /* NavigationController.swift */; }; @@ -209,7 +220,6 @@ 82C34D6F26FB02F900F06016 /* WireGuardEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C34D6D26FB02F900F06016 /* WireGuardEndpoint.swift */; }; 82C61D9629E6ADEF00AF972A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9CDDD5B51D9D2F9F00D39924 /* Assets.xcassets */; }; 82C61D9929E6B4C600AF972A /* LocationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C61D9829E6B4C600AF972A /* LocationView.swift */; }; - 82C61D9D29E6C2D200AF972A /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C61D9C29E6C2D200AF972A /* APIService.swift */; }; 82C61D9E29E6C32400AF972A /* ApiRequestDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 821429BA22FC36100056B8FF /* ApiRequestDI.swift */; }; 82C61D9F29E6C33700AF972A /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 821429B622FC2BE90056B8FF /* Result.swift */; }; 82C61DA029E6C37300AF972A /* APIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82DC75BB22B277D200D3C73C /* APIClient.swift */; }; @@ -225,8 +235,6 @@ 82C61DB029E6C5E700AF972A /* Date+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D90470216C7DAF0032F3BE /* Date+Ext.swift */; }; 82C61DB229E6C6F600AF972A /* AddressType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F638C1217DA89000410318 /* AddressType.swift */; }; 82C61DB429E6C72700AF972A /* LocationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C61DB329E6C72700AF972A /* LocationViewModel.swift */; }; - 82C61DBA29E6CA7600AF972A /* widget-staging.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 82C61DB629E6CA7600AF972A /* widget-staging.xcconfig */; }; - 82C61DBC29E6CA7600AF972A /* widget-release.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 82C61DB829E6CA7600AF972A /* widget-release.xcconfig */; }; 82C973A0217DFA9C00CE06D4 /* Host.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C9739F217DFA9C00CE06D4 /* Host.swift */; }; 82CA214329379CCD008BADE8 /* FileSystemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB2CE371DB0F860007A4D2D /* FileSystemManager.swift */; }; 82CA214429379CEC008BADE8 /* UIDevice+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C2E5DE21620FF100C5A09F /* UIDevice+Ext.swift */; }; @@ -283,7 +291,6 @@ 82E7169A2181E96F00D6B7C2 /* OpenVPNProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82E716952181E96F00D6B7C2 /* OpenVPNProtocol.swift */; }; 82E7880C22B0DA0D00A98D76 /* NETunnelProviderProtocol+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82E7880B22B0DA0D00A98D76 /* NETunnelProviderProtocol+Ext.swift */; }; 82E81AE72449C44F00D81FB7 /* PaymentComponentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82E81AE62449C44F00D81FB7 /* PaymentComponentView.swift */; }; - 82E96A4B224BA1B3004FC1D6 /* ExtensionKeyManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82E96A4A224BA1B3004FC1D6 /* ExtensionKeyManagerTests.swift */; }; 82EA857A21DCF0C300EB0EC9 /* StorageManager+OnDemandRuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82EA857921DCF0C300EB0EC9 /* StorageManager+OnDemandRuleTests.swift */; }; 82EC883529A12BD30024CC40 /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = 82EC883429A12BD30024CC40 /* JGProgressHUD */; }; 82EC883829A12C1F0024CC40 /* Reachability in Frameworks */ = {isa = PBXBuildFile; productRef = 82EC883729A12C1F0024CC40 /* Reachability */; }; @@ -291,6 +298,19 @@ 82EC884129A12D170024CC40 /* ActiveLabel in Frameworks */ = {isa = PBXBuildFile; productRef = 82EC884029A12D170024CC40 /* ActiveLabel */; }; 82EC884429A12D370024CC40 /* FloatingPanel in Frameworks */ = {isa = PBXBuildFile; productRef = 82EC884329A12D370024CC40 /* FloatingPanel */; }; 82EC884729A12D510024CC40 /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = 82EC884629A12D510024CC40 /* SnapKit */; }; + 82ED173F2A1258E100E7926D /* ApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2833891D9D41A60024C553 /* ApiService.swift */; }; + 82ED17402A1258EA00E7926D /* ApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2833891D9D41A60024C553 /* ApiService.swift */; }; + 82ED17412A12594000E7926D /* ApiRequestDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 821429BA22FC36100056B8FF /* ApiRequestDI.swift */; }; + 82ED17422A12595900E7926D /* APIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82DC75BB22B277D200D3C73C /* APIClient.swift */; }; + 82ED17432A12596E00E7926D /* AddressType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F638C1217DA89000410318 /* AddressType.swift */; }; + 82ED17442A12598000E7926D /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 821429B622FC2BE90056B8FF /* Result.swift */; }; + 82ED17462A125A3000E7926D /* APIAccessManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 820535272302B9D7007BDD58 /* APIAccessManager.swift */; }; + 82ED17472A125A4700E7926D /* APIPublicKeyPin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825E836225A4834200938240 /* APIPublicKeyPin.swift */; }; + 82ED17482A125C9100E7926D /* TimerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 824B86C326D3D7B600D0101A /* TimerManager.swift */; }; + 82ED174B2A125D0900E7926D /* InterfaceResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 820EA86723223F7900E16B2D /* InterfaceResult.swift */; }; + 82ED17542A1261A000E7926D /* x25519.c in Sources */ = {isa = PBXBuildFile; fileRef = 82ED17512A1261A000E7926D /* x25519.c */; }; + 82ED17552A1262BA00E7926D /* Interface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8292E1A82174C11600123538 /* Interface.swift */; }; + 82ED17592A1262F800E7926D /* Data+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 828E9C94231E5780001E1FCF /* Data+Ext.swift */; }; 82EEB6C625F9398600915837 /* DNSProtocolType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82EEB6C525F9398600915837 /* DNSProtocolType.swift */; }; 82EEB6CD25F9422900915837 /* DNSProtocolType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82EEB6C525F9398600915837 /* DNSProtocolType.swift */; }; 82EEB6DB25F961BC00915837 /* URL+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE598F25ED3C7A0078099D /* URL+Ext.swift */; }; @@ -482,14 +502,24 @@ 824777E621A6BC3A001EEFAF /* Network+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Network+CoreDataProperties.swift"; sourceTree = ""; }; 8247E1D922686217006C0C08 /* IAPManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IAPManager.swift; sourceTree = ""; }; 8247E1DD22687C28006C0C08 /* ProductIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductIdentifier.swift; sourceTree = ""; }; + 82486FAC2A277058009B53F4 /* liboqs.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = liboqs.a; sourceTree = ""; }; + 82486FB02A27705F009B53F4 /* sha3x4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha3x4.h; sourceTree = ""; }; + 82486FB12A27705F009B53F4 /* oqsconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = oqsconfig.h; sourceTree = ""; }; + 82486FB22A27705F009B53F4 /* sha3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha3.h; sourceTree = ""; }; + 82486FB32A27705F009B53F4 /* sha2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha2.h; sourceTree = ""; }; + 82486FB42A27705F009B53F4 /* sig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sig.h; sourceTree = ""; }; + 82486FB52A27705F009B53F4 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; + 82486FB62A27705F009B53F4 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; }; + 82486FB72A27705F009B53F4 /* rand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rand.h; sourceTree = ""; }; + 82486FB82A27705F009B53F4 /* kem_kyber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kem_kyber.h; sourceTree = ""; }; + 82486FB92A27705F009B53F4 /* kem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kem.h; sourceTree = ""; }; + 82486FBA2A27705F009B53F4 /* oqs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = oqs.h; sourceTree = ""; }; 824B141B2609D5E700766B05 /* DNSProtocolTypeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DNSProtocolTypeTests.swift; sourceTree = ""; }; 824B86AB26D3D16100D0101A /* WireGuardNetworkExtension-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WireGuardNetworkExtension-Bridging-Header.h"; sourceTree = ""; }; 824B86AD26D3D16100D0101A /* FileManager+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FileManager+Extension.swift"; sourceTree = ""; }; 824B86B526D3D16100D0101A /* ringlogger.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ringlogger.c; sourceTree = ""; }; 824B86B726D3D16100D0101A /* ringlogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ringlogger.h; sourceTree = ""; }; - 824B86C226D3D7B500D0101A /* ExtensionKeyManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExtensionKeyManager.swift; sourceTree = ""; }; 824B86C326D3D7B600D0101A /* TimerManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimerManager.swift; sourceTree = ""; }; - 824B86C426D3D7B600D0101A /* ApiManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApiManager.swift; sourceTree = ""; }; 824BC465240906ED00A61B29 /* VPNStatusViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNStatusViewModel.swift; sourceTree = ""; }; 824F56072233FE6F00BCDD5C /* libwg-go.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libwg-go.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 82526BEE24123D2900E00880 /* NetworkViewTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkViewTableCell.swift; sourceTree = ""; }; @@ -501,6 +531,7 @@ 825A43FC215CCFE70076131F /* UserDefaults+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults+Ext.swift"; sourceTree = ""; }; 825E834E25A327EB00938240 /* CaptchaViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaptchaViewController.swift; sourceTree = ""; }; 825E836225A4834200938240 /* APIPublicKeyPin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIPublicKeyPin.swift; sourceTree = ""; }; + 825ECB2B2A5582570032E986 /* AntiTrackerDns.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AntiTrackerDns.swift; sourceTree = ""; }; 826470C32446F67100403A14 /* Signup.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Signup.storyboard; sourceTree = ""; }; 8269CAC22264962F00CF488A /* AntiTrackerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AntiTrackerViewController.swift; sourceTree = ""; }; 8269CD8E2164A8C700D083A1 /* servers-dev.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "servers-dev.json"; sourceTree = ""; }; @@ -546,6 +577,7 @@ 829DF27B2497949A000DC2DB /* PlanLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlanLabel.swift; sourceTree = ""; }; 829DF27C2497949A000DC2DB /* SelectPlanView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectPlanView.swift; sourceTree = ""; }; 829DF2812497953C000DC2DB /* UIButton+Ext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIButton+Ext.swift"; sourceTree = ""; }; + 829F5EAE2A56E067005919AF /* AntiTrackerListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AntiTrackerListViewController.swift; sourceTree = ""; }; 82A160B8221C4E2000730577 /* Server+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Server+CoreDataClass.swift"; sourceTree = ""; }; 82A160B9221C4E2000730577 /* Server+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Server+CoreDataProperties.swift"; sourceTree = ""; }; 82A3422224AB660C00761AB0 /* ApplicationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationTests.swift; sourceTree = ""; }; @@ -562,8 +594,6 @@ 82A7F10423C8661B0015A357 /* ServiceStatusTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceStatusTests.swift; sourceTree = ""; }; 82A9E8C323471EBE007BCA7E /* release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = release.xcconfig; sourceTree = ""; }; 82A9E8C423471EBE007BCA7E /* staging.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = staging.xcconfig; sourceTree = ""; }; - 82A9E8C723471FB2007BCA7E /* wg-release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "wg-release.xcconfig"; sourceTree = ""; }; - 82A9E8C823471FB2007BCA7E /* wg-staging.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "wg-staging.xcconfig"; sourceTree = ""; }; 82AA8817231E330A00E18ECB /* SessionStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionStatus.swift; sourceTree = ""; }; 82AAF0E82253A4A8005E792F /* StaticWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticWebViewController.swift; sourceTree = ""; }; 82AB0874291A6B5F0084625A /* AddCustomPortViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCustomPortViewController.swift; sourceTree = ""; }; @@ -583,6 +613,7 @@ 82B81E4E235F2614005986E8 /* XCUIApplication+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCUIApplication+Ext.swift"; sourceTree = ""; }; 82B81E50235F2A13005986E8 /* InitScreenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitScreenTests.swift; sourceTree = ""; }; 82BA8AC022E5DC93004E8D8D /* NETunnelProviderProtocol+ExtTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NETunnelProviderProtocol+ExtTests.swift"; sourceTree = ""; }; + 82BBD9ED2A1F5FA100375252 /* KemHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KemHelper.swift; sourceTree = ""; }; 82BBF25821AC799A00589766 /* NetworkProtectionRulesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRulesViewController.swift; sourceTree = ""; }; 82BBF26021AD213500589766 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = ""; }; 82BBF26821AE802400589766 /* DispatchQueue+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DispatchQueue+Ext.swift"; sourceTree = ""; }; @@ -596,11 +627,8 @@ 82C2E5DE21620FF100C5A09F /* UIDevice+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDevice+Ext.swift"; sourceTree = ""; }; 82C34D6D26FB02F900F06016 /* WireGuardEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WireGuardEndpoint.swift; sourceTree = ""; }; 82C61D9829E6B4C600AF972A /* LocationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationView.swift; sourceTree = ""; }; - 82C61D9C29E6C2D200AF972A /* APIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIService.swift; sourceTree = ""; }; 82C61DA829E6C4CF00AF972A /* Widget-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Widget-Bridging-Header.h"; sourceTree = ""; }; 82C61DB329E6C72700AF972A /* LocationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationViewModel.swift; sourceTree = ""; }; - 82C61DB629E6CA7600AF972A /* widget-staging.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "widget-staging.xcconfig"; sourceTree = ""; }; - 82C61DB829E6CA7600AF972A /* widget-release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "widget-release.xcconfig"; sourceTree = ""; }; 82C9739F217DFA9C00CE06D4 /* Host.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Host.swift; sourceTree = ""; }; 82CE598F25ED3C7A0078099D /* URL+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+Ext.swift"; sourceTree = ""; }; 82CE599825ED48D60078099D /* InternetAddress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternetAddress.swift; sourceTree = ""; }; @@ -645,8 +673,10 @@ 82E716952181E96F00D6B7C2 /* OpenVPNProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenVPNProtocol.swift; sourceTree = ""; }; 82E7880B22B0DA0D00A98D76 /* NETunnelProviderProtocol+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NETunnelProviderProtocol+Ext.swift"; sourceTree = ""; }; 82E81AE62449C44F00D81FB7 /* PaymentComponentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentComponentView.swift; sourceTree = ""; }; - 82E96A4A224BA1B3004FC1D6 /* ExtensionKeyManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionKeyManagerTests.swift; sourceTree = ""; }; 82EA857921DCF0C300EB0EC9 /* StorageManager+OnDemandRuleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StorageManager+OnDemandRuleTests.swift"; sourceTree = ""; }; + 82ED17452A1259CB00E7926D /* OpenVPNNetworkExtension-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OpenVPNNetworkExtension-Bridging-Header.h"; sourceTree = ""; }; + 82ED17512A1261A000E7926D /* x25519.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = x25519.c; sourceTree = ""; }; + 82ED17522A1261A000E7926D /* x25519.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x25519.h; sourceTree = ""; }; 82EEB6C525F9398600915837 /* DNSProtocolType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DNSProtocolType.swift; sourceTree = ""; }; 82F189A1225CE8A90038ABA0 /* UIView+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Ext.swift"; sourceTree = ""; }; 82F638C1217DA89000410318 /* AddressType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressType.swift; sourceTree = ""; }; @@ -726,6 +756,7 @@ buildActionMask = 2147483647; files = ( 82B6052F21708575004B40E6 /* NetworkExtension.framework in Frameworks */, + 82BF79622A2F8DDC00061972 /* liboqs.a in Frameworks */, 824B86E126D42A5700D0101A /* WireGuardKit in Frameworks */, 829F5FCB29A13CF2009E1AD3 /* KeychainAccess in Frameworks */, ); @@ -753,6 +784,7 @@ buildActionMask = 2147483647; files = ( 9CF7E35A20F7A86E008E0EC5 /* NetworkExtension.framework in Frameworks */, + 829407C12A3DCE9200E6B68E /* liboqs.a in Frameworks */, 82968A34298A970500077E0A /* TunnelKitOpenVPNAppExtension in Frameworks */, 829F5FC929A13CEA009E1AD3 /* KeychainAccess in Frameworks */, ); @@ -765,6 +797,7 @@ 82D598C621A6A5C7000FABDE /* SystemConfiguration.framework in Frameworks */, 9CB2CE311DAF9227007A4D2D /* CoreData.framework in Frameworks */, 9C6942251DD0CBF800F9A801 /* NetworkExtension.framework in Frameworks */, + 82486FAD2A277058009B53F4 /* liboqs.a in Frameworks */, 82EC884729A12D510024CC40 /* SnapKit in Frameworks */, 82EC883B29A12C7D0024CC40 /* SwiftyStoreKit in Frameworks */, 829F5FC729A13CAE009E1AD3 /* KeychainAccess in Frameworks */, @@ -900,6 +933,7 @@ 82234B6421BA7EB500B082DE /* Utilities */ = { isa = PBXGroup; children = ( + 82BBD9EC2A1F5F9000375252 /* Kem */, 82CE599725ED48AB0078099D /* DNSResolver */, 825A43FB215CCFC10076131F /* Extensions */, 82234B6521BA7F3500B082DE /* Logging */, @@ -960,6 +994,7 @@ 8243587025DBB73E005FDEBB /* SecureDNS.swift */, 827694F2263C04C40058B4DC /* LoginConfirmation.swift */, 821CA2DE288143470067F70D /* PortRange.swift */, + 825ECB2B2A5582570032E986 /* AntiTrackerDns.swift */, ); path = Models; sourceTree = ""; @@ -1019,6 +1054,32 @@ path = View; sourceTree = ""; }; + 82486FAE2A27705F009B53F4 /* include */ = { + isa = PBXGroup; + children = ( + 82486FAF2A27705F009B53F4 /* oqs */, + ); + path = include; + sourceTree = ""; + }; + 82486FAF2A27705F009B53F4 /* oqs */ = { + isa = PBXGroup; + children = ( + 82486FB02A27705F009B53F4 /* sha3x4.h */, + 82486FB12A27705F009B53F4 /* oqsconfig.h */, + 82486FB22A27705F009B53F4 /* sha3.h */, + 82486FB32A27705F009B53F4 /* sha2.h */, + 82486FB42A27705F009B53F4 /* sig.h */, + 82486FB52A27705F009B53F4 /* common.h */, + 82486FB62A27705F009B53F4 /* aes.h */, + 82486FB72A27705F009B53F4 /* rand.h */, + 82486FB82A27705F009B53F4 /* kem_kyber.h */, + 82486FB92A27705F009B53F4 /* kem.h */, + 82486FBA2A27705F009B53F4 /* oqs.h */, + ); + path = oqs; + sourceTree = ""; + }; 824B86AA26D3D16100D0101A /* WireGuard */ = { isa = PBXGroup; children = ( @@ -1132,15 +1193,6 @@ path = View; sourceTree = ""; }; - 829FCCDE230D23FE009C63DF /* Config */ = { - isa = PBXGroup; - children = ( - 82A9E8C723471FB2007BCA7E /* wg-release.xcconfig */, - 82A9E8C823471FB2007BCA7E /* wg-staging.xcconfig */, - ); - path = Config; - sourceTree = ""; - }; 82A208B321BAA4C500C9AD44 /* Scenes */ = { isa = PBXGroup; children = ( @@ -1178,6 +1230,7 @@ 821CA2D6287C5AB20067F70D /* PortViewController.swift */, 82AB0874291A6B5F0084625A /* AddCustomPortViewController.swift */, 82052E5529C1D83700227CF9 /* MTUViewController.swift */, + 829F5EAE2A56E067005919AF /* AntiTrackerListViewController.swift */, ); path = ViewControllers; sourceTree = ""; @@ -1243,7 +1296,6 @@ isa = PBXGroup; children = ( 8206BAF929ED69D300F916B7 /* DataService.swift */, - 82C61D9C29E6C2D200AF972A /* APIService.swift */, ); path = Service; sourceTree = ""; @@ -1265,10 +1317,7 @@ isa = PBXGroup; children = ( 824B86AA26D3D16100D0101A /* WireGuard */, - 829FCCDE230D23FE009C63DF /* Config */, 82B605252170840C004B40E6 /* PacketTunnelProvider.swift */, - 824B86C426D3D7B600D0101A /* ApiManager.swift */, - 824B86C226D3D7B500D0101A /* ExtensionKeyManager.swift */, 824B86C326D3D7B600D0101A /* TimerManager.swift */, 82B605272170840C004B40E6 /* Info.plist */, 82B605282170840C004B40E6 /* wireguard_tunnel_provider.entitlements */, @@ -1296,6 +1345,23 @@ path = Extensions; sourceTree = ""; }; + 82BBD9BB2A1E563700375252 /* liboqs */ = { + isa = PBXGroup; + children = ( + 82486FAC2A277058009B53F4 /* liboqs.a */, + 82486FAE2A27705F009B53F4 /* include */, + ); + path = liboqs; + sourceTree = ""; + }; + 82BBD9EC2A1F5F9000375252 /* Kem */ = { + isa = PBXGroup; + children = ( + 82BBD9ED2A1F5FA100375252 /* KemHelper.swift */, + ); + path = Kem; + sourceTree = ""; + }; 82BF32F424484E3800248E4F /* View */ = { isa = PBXGroup; children = ( @@ -1340,15 +1406,6 @@ path = Location; sourceTree = ""; }; - 82C61DB529E6CA7600AF972A /* Config */ = { - isa = PBXGroup; - children = ( - 82C61DB629E6CA7600AF972A /* widget-staging.xcconfig */, - 82C61DB829E6CA7600AF972A /* widget-release.xcconfig */, - ); - path = Config; - sourceTree = ""; - }; 82CE599725ED48AB0078099D /* DNSResolver */ = { isa = PBXGroup; children = ( @@ -1432,7 +1489,6 @@ 82E3B20D29DDCC6400998F67 /* IVPNWidget */ = { isa = PBXGroup; children = ( - 82C61DB529E6CA7600AF972A /* Config */, 82E3B21C29DDD2E800998F67 /* Scene */, 82A38A1929E3200000C88372 /* Service */, 8206BAF829ED65C600F916B7 /* Extension */, @@ -1464,6 +1520,15 @@ path = View; sourceTree = ""; }; + 82ED17502A12618E00E7926D /* Curve25519 */ = { + isa = PBXGroup; + children = ( + 82ED17512A1261A000E7926D /* x25519.c */, + 82ED17522A1261A000E7926D /* x25519.h */, + ); + path = Curve25519; + sourceTree = ""; + }; 82F81A33224CF36000CB778B /* WireGuard */ = { isa = PBXGroup; children = ( @@ -1473,7 +1538,6 @@ 82F81A47224CFADB00CB778B /* PeerTests.swift */, 82F81A48224CFADB00CB778B /* TunnelTests.swift */, 821BDE01224A6EC700F592BF /* AppKeyManagerTests.swift */, - 82E96A4A224BA1B3004FC1D6 /* ExtensionKeyManagerTests.swift */, ); path = WireGuard; sourceTree = ""; @@ -1508,8 +1572,10 @@ 9C7840A920CD8A8A00335736 /* openvpn-tunnel-provider */ = { isa = PBXGroup; children = ( + 82ED17502A12618E00E7926D /* Curve25519 */, 9C7840AA20CD8A8A00335736 /* PacketTunnelProvider.swift */, 9C7840AC20CD8A8A00335736 /* Info.plist */, + 82ED17452A1259CB00E7926D /* OpenVPNNetworkExtension-Bridging-Header.h */, 9C7840AD20CD8A8A00335736 /* openvpn_tunnel_provider.entitlements */, ); path = "openvpn-tunnel-provider"; @@ -1546,6 +1612,7 @@ 9CDDD5AD1D9D2F9F00D39924 /* IVPNClient */ = { isa = PBXGroup; children = ( + 82BBD9BB2A1E563700375252 /* liboqs */, 82234B6121BA7ACA00B082DE /* Config */, 8286638C21524D9F00C4D068 /* Enums */, 82234B7521BAA13D00B082DE /* Models */, @@ -1876,8 +1943,6 @@ buildActionMask = 2147483647; files = ( 82C61D9629E6ADEF00AF972A /* Assets.xcassets in Resources */, - 82C61DBA29E6CA7600AF972A /* widget-staging.xcconfig in Resources */, - 82C61DBC29E6CA7600AF972A /* widget-release.xcconfig in Resources */, 82E3B21329DDCC6500998F67 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1955,7 +2020,6 @@ 82A3422B24AB7F8600761AB0 /* VPNServerViewModelTests.swift in Sources */, 82F81A41224CF69900CB778B /* ArrayTests.swift in Sources */, 82F81A4A224CFADB00CB778B /* InterfaceTests.swift in Sources */, - 82E96A4B224BA1B3004FC1D6 /* ExtensionKeyManagerTests.swift in Sources */, 82555005220ACAAF004763A7 /* VPNServersTests.swift in Sources */, 82F81A40224CF69900CB778B /* StringTests.swift in Sources */, 82A3422324AB660C00761AB0 /* ApplicationTests.swift in Sources */, @@ -1986,6 +2050,7 @@ 828E9C96231E5780001E1FCF /* Data+Ext.swift in Sources */, 82E716942181E90500D6B7C2 /* ConnectionSettings.swift in Sources */, 8223C53F22326375006C4F14 /* Logger.swift in Sources */, + 827123162A3C74D000882336 /* AppKeyManager.swift in Sources */, 824B86C826D3D7DE00D0101A /* Interface.swift in Sources */, 824B86B926D3D16100D0101A /* FileManager+Extension.swift in Sources */, 820EA8692322406000E16B2D /* InterfaceResult.swift in Sources */, @@ -1995,8 +2060,10 @@ 8264CFFC22422F6700E1721E /* Date+Ext.swift in Sources */, 82E716822181E8AF00D6B7C2 /* TunnelType.swift in Sources */, 820EA86B232242F800E16B2D /* ApiRequestDI.swift in Sources */, + 82ED173F2A1258E100E7926D /* ApiService.swift in Sources */, 8270753722AFC7E70067C323 /* StringProtocol+Ext.swift in Sources */, 82B605262170840C004B40E6 /* PacketTunnelProvider.swift in Sources */, + 82BF79752A2F98C500061972 /* KemHelper.swift in Sources */, 82E7168E2181E8E900D6B7C2 /* WireGuardProtocol.swift in Sources */, 8292E19B21748B0500123538 /* UserDefaults+Ext.swift in Sources */, 82CA214329379CCD008BADE8 /* FileSystemManager.swift in Sources */, @@ -2005,11 +2072,10 @@ 824B86C926D3D7FB00D0101A /* CIDRAddress.swift in Sources */, 826C56D422FD551900D2B76A /* ServiceStatus.swift in Sources */, 82968A37298A98C900077E0A /* KeyChain.swift in Sources */, - 824B86C726D3D7B600D0101A /* ApiManager.swift in Sources */, 82EEB6CD25F9422900915837 /* DNSProtocolType.swift in Sources */, 820EA86C2322430700E16B2D /* Result.swift in Sources */, - 824B86C526D3D7B600D0101A /* ExtensionKeyManager.swift in Sources */, 823FFB092338E09A00F91A5D /* Capability.swift in Sources */, + 829F5EB12A570323005919AF /* AntiTrackerDns.swift in Sources */, 82DC75BD22B7647500D3C73C /* APIClient.swift in Sources */, 825E836425A4834200938240 /* APIPublicKeyPin.swift in Sources */, 823BD9E4231D4C8F002E631D /* ErrorResult.swift in Sources */, @@ -2042,12 +2108,13 @@ 82C61DA229E6C3F100AF972A /* UserDefaults+Ext.swift in Sources */, 8206BAFF29ED6FFF00F916B7 /* ConnectionInfoView.swift in Sources */, 82E3B20F29DDCC6400998F67 /* IVPNWidgetBundle.swift in Sources */, + 8271D2E52A1224A70052AF61 /* ErrorResult.swift in Sources */, 82C61DAB29E6C56400AF972A /* APIPublicKeyPin.swift in Sources */, 82C61DA529E6C48100AF972A /* OpenVPNProtocol.swift in Sources */, 82C61DA429E6C46900AF972A /* ConnectionSettings.swift in Sources */, - 82C61D9D29E6C2D200AF972A /* APIService.swift in Sources */, 82152C9929F14B4C007FCECC /* KeyChain.swift in Sources */, 82C61D9E29E6C32400AF972A /* ApiRequestDI.swift in Sources */, + 8271D2E42A1224530052AF61 /* ApiService.swift in Sources */, 8206BAFA29ED69D300F916B7 /* DataService.swift in Sources */, 82C61DB429E6C72700AF972A /* LocationViewModel.swift in Sources */, 82C61DA629E6C48700AF972A /* WireGuardProtocol.swift in Sources */, @@ -2060,6 +2127,7 @@ 82C61DA929E6C53C00AF972A /* Array+Ext.swift in Sources */, 82A38A1029E2D46000C88372 /* StatusViewModel.swift in Sources */, 8206BAFC29ED6C9600F916B7 /* Notification.swift in Sources */, + 829F5EB22A570323005919AF /* AntiTrackerDns.swift in Sources */, 82A38A1B29E3201F00C88372 /* UserDefaults.swift in Sources */, 82C61D9929E6B4C600AF972A /* LocationView.swift in Sources */, 82E3B21E29DDD32B00998F67 /* MainView.swift in Sources */, @@ -2071,19 +2139,34 @@ buildActionMask = 2147483647; files = ( 823BD9E3231D4C8E002E631D /* ErrorResult.swift in Sources */, + 82ED17422A12595900E7926D /* APIClient.swift in Sources */, + 82ED17442A12598000E7926D /* Result.swift in Sources */, 82E7168D2181E8E900D6B7C2 /* WireGuardProtocol.swift in Sources */, 9CF7E37820F7ABE3008E0EC5 /* PacketTunnelProvider.swift in Sources */, 82D90474216C7DAF0032F3BE /* Date+Ext.swift in Sources */, 82E716992181E96F00D6B7C2 /* OpenVPNProtocol.swift in Sources */, 822EE96C215CE0E300BE77F6 /* UserDefaults+Ext.swift in Sources */, 8223C54F22EAEC7000CD283D /* Session.swift in Sources */, + 82ED17432A12596E00E7926D /* AddressType.swift in Sources */, 826C56D322FD551800D2B76A /* ServiceStatus.swift in Sources */, 82E716932181E90500D6B7C2 /* ConnectionSettings.swift in Sources */, + 82ED17592A1262F800E7926D /* Data+Ext.swift in Sources */, 823FFB082338E09900F91A5D /* Capability.swift in Sources */, + 829F5EB02A570322005919AF /* AntiTrackerDns.swift in Sources */, + 82ED17482A125C9100E7926D /* TimerManager.swift in Sources */, 826F7F4323A7AAD200777DB9 /* Array+Ext.swift in Sources */, + 82ED17542A1261A000E7926D /* x25519.c in Sources */, + 82ED17402A1258EA00E7926D /* ApiService.swift in Sources */, 82968A36298A98C600077E0A /* KeyChain.swift in Sources */, + 82ED17462A125A3000E7926D /* APIAccessManager.swift in Sources */, + 82ED17412A12594000E7926D /* ApiRequestDI.swift in Sources */, + 829407C02A3DCC5500E6B68E /* KemHelper.swift in Sources */, + 82ED17472A125A4700E7926D /* APIPublicKeyPin.swift in Sources */, + 827123172A3C758100882336 /* AppKeyManager.swift in Sources */, + 82ED17552A1262BA00E7926D /* Interface.swift in Sources */, 82E716812181E8AF00D6B7C2 /* TunnelType.swift in Sources */, 82A208C121BAAC6C00C9AD44 /* Config.swift in Sources */, + 82ED174B2A125D0900E7926D /* InterfaceResult.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2176,10 +2259,9 @@ 82D598C821A6ADF1000FABDE /* NetworkType.swift in Sources */, 9CC29DF81E1D59E90080F799 /* Alerts+Ext.swift in Sources */, 9CB2CE1F1DAA5258007A4D2D /* Authentication.swift in Sources */, - 824B86CC26D3E8F600D0101A /* ApiManager.swift in Sources */, 82DAB37B2457013900302F4C /* Service.swift in Sources */, + 825ECB2C2A5582570032E986 /* AntiTrackerDns.swift in Sources */, 82C2E5DF21620FF100C5A09F /* UIDevice+Ext.swift in Sources */, - 824B86CB26D3E8D100D0101A /* ExtensionKeyManager.swift in Sources */, 8208525823FD5EB20008C112 /* MainViewController.swift in Sources */, 825E836325A4834200938240 /* APIPublicKeyPin.swift in Sources */, 82E716842181E8E100D6B7C2 /* ProviderConfigurationKeys.swift in Sources */, @@ -2192,6 +2274,7 @@ 9CB2CE2B1DABD120007A4D2D /* NavigationManager.swift in Sources */, 82BBF25921AC799A00589766 /* NetworkProtectionRulesViewController.swift in Sources */, 82DAB37D245725E200302F4C /* ServiceTitleTableViewCell.swift in Sources */, + 82BBD9EE2A1F5FA100375252 /* KemHelper.swift in Sources */, 82C293C321CCDA42000B74EC /* UIColor+Ext.swift in Sources */, 828772F7221C008100D5E330 /* ServerConfigurationCell.swift in Sources */, 825E834F25A327EB00938240 /* CaptchaViewController.swift in Sources */, @@ -2224,6 +2307,7 @@ 82C293BF21CCD49A000B74EC /* NavigationController.swift in Sources */, 82061F67238D2730009DDF4D /* PingManager.swift in Sources */, 9CDDD5AF1D9D2F9F00D39924 /* AppDelegate.swift in Sources */, + 829F5EAF2A56E067005919AF /* AntiTrackerListViewController.swift in Sources */, 82CE59A725ED491B0078099D /* DNSResolver.swift in Sources */, 82BBF26121AD213500589766 /* Theme.swift in Sources */, 829AA4732267372A00037198 /* Designable+Ext.swift in Sources */, @@ -2403,10 +2487,16 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = WQXXM75BYN; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)"; GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = UnitTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = net.ivpn.clients.ios.UnitTests; @@ -2428,10 +2518,16 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = WQXXM75BYN; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)"; GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = UnitTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = net.ivpn.clients.ios.UnitTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2443,7 +2539,7 @@ }; 82B6052D2170840C004B40E6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 82A9E8C723471FB2007BCA7E /* wg-release.xcconfig */; + baseConfigurationReference = 82A9E8C323471EBE007BCA7E /* release.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -2460,10 +2556,14 @@ "$(PROJECT_DIR)/**", ); GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = "wireguard-tunnel-provider/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; - LIBRARY_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MARKETING_VERSION = 2.7.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -2479,7 +2579,7 @@ }; 82B6052E2170840C004B40E6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 82A9E8C723471FB2007BCA7E /* wg-release.xcconfig */; + baseConfigurationReference = 82A9E8C323471EBE007BCA7E /* release.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -2496,10 +2596,14 @@ "$(PROJECT_DIR)/**", ); GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = "wireguard-tunnel-provider/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; - LIBRARY_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MARKETING_VERSION = 2.7.0; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -2522,10 +2626,16 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = WQXXM75BYN; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)"; GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = UITests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = net.ivpn.clients.ios.UITests; @@ -2545,10 +2655,16 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = WQXXM75BYN; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)"; GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = UITests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = net.ivpn.clients.ios.UITests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2567,10 +2683,16 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = WQXXM75BYN; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)"; GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = UITests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = net.ivpn.clients.ios.UITests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2659,12 +2781,17 @@ "$(inherited)", "$(PROJECT_DIR)/**", ); + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = "$(SRCROOT)/IVPNClient/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MARKETING_VERSION = 2.7.0; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "$(inherited)"; @@ -2688,10 +2815,16 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = WQXXM75BYN; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)"; GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = UnitTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = net.ivpn.clients.ios.UnitTests; @@ -2704,6 +2837,7 @@ }; 82D2D80022CA404C004BCC52 /* Staging */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 82A9E8C423471EBE007BCA7E /* staging.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; @@ -2729,6 +2863,7 @@ "$(PROJECT_DIR)/**", ); GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = "openvpn-tunnel-provider/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -2736,12 +2871,17 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MARKETING_VERSION = 2.7.0; ONLY_ACTIVE_ARCH = YES; OTHER_SWIFT_FLAGS = "-D DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = "net.ivpn.clients.ios.openvpn-tunnel-provider"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/openvpn-tunnel-provider/OpenVPNNetworkExtension-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -2749,7 +2889,7 @@ }; 82D2D80122CA404C004BCC52 /* Staging */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 82A9E8C823471FB2007BCA7E /* wg-staging.xcconfig */; + baseConfigurationReference = 82A9E8C423471EBE007BCA7E /* staging.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -2766,10 +2906,14 @@ "$(PROJECT_DIR)/**", ); GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = "wireguard-tunnel-provider/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; - LIBRARY_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MARKETING_VERSION = 2.7.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -2785,7 +2929,7 @@ }; 82E3B21929DDCC6500998F67 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 82C61DB829E6CA7600AF972A /* widget-release.xcconfig */; + baseConfigurationReference = 82A9E8C323471EBE007BCA7E /* release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; @@ -2820,7 +2964,7 @@ }; 82E3B21A29DDCC6500998F67 /* Staging */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 82C61DB629E6CA7600AF972A /* widget-staging.xcconfig */; + baseConfigurationReference = 82A9E8C423471EBE007BCA7E /* staging.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; @@ -2854,7 +2998,7 @@ }; 82E3B21B29DDCC6500998F67 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 82C61DB829E6CA7600AF972A /* widget-release.xcconfig */; + baseConfigurationReference = 82A9E8C323471EBE007BCA7E /* release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; @@ -2888,6 +3032,7 @@ }; 9C7840B220CD8A8A00335736 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 82A9E8C323471EBE007BCA7E /* release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; @@ -2913,6 +3058,7 @@ "$(PROJECT_DIR)/**", ); GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = "openvpn-tunnel-provider/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -2920,12 +3066,17 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MARKETING_VERSION = 2.7.0; ONLY_ACTIVE_ARCH = YES; OTHER_SWIFT_FLAGS = "-D DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = "net.ivpn.clients.ios.openvpn-tunnel-provider"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/openvpn-tunnel-provider/OpenVPNNetworkExtension-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -2933,6 +3084,7 @@ }; 9C7840B320CD8A8A00335736 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 82A9E8C323471EBE007BCA7E /* release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; @@ -2958,6 +3110,7 @@ "$(PROJECT_DIR)/**", ); GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = "openvpn-tunnel-provider/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -2965,12 +3118,17 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MARKETING_VERSION = 2.7.0; ONLY_ACTIVE_ARCH = YES; OTHER_SWIFT_FLAGS = "-D RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = "net.ivpn.clients.ios.openvpn-tunnel-provider"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/openvpn-tunnel-provider/OpenVPNNetworkExtension-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -3112,12 +3270,17 @@ "$(inherited)", "$(PROJECT_DIR)/**", ); + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = "$(SRCROOT)/IVPNClient/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MARKETING_VERSION = 2.7.0; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "$(inherited)"; @@ -3146,12 +3309,17 @@ "$(inherited)", "$(PROJECT_DIR)/**", ); + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/IVPNClient/liboqs/include\""; INFOPLIST_FILE = "$(SRCROOT)/IVPNClient/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/IVPNClient/liboqs", + ); MARKETING_VERSION = 2.7.0; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "$(inherited)"; diff --git a/IVPNClient.xcodeproj/xcshareddata/xcschemes/IVPNClient.xcscheme b/IVPNClient.xcodeproj/xcshareddata/xcschemes/IVPNClient.xcscheme index 7744f91d0..b86e17588 100644 --- a/IVPNClient.xcodeproj/xcshareddata/xcschemes/IVPNClient.xcscheme +++ b/IVPNClient.xcodeproj/xcshareddata/xcschemes/IVPNClient.xcscheme @@ -1,10 +1,28 @@ + version = "1.7"> + + + + + + + + + + (_ requestDI: ApiRequestDI, completion: @escaping (Result) -> Void) { - let requestName = "\(requestDI.method.description) \(requestDI.endpoint)" let request = APIRequest(method: requestDI.method, path: requestDI.endpoint, contentType: requestDI.contentType, addressType: requestDI.addressType) if let params = requestDI.params { request.queryItems = params } - log(.info, message: "\(requestName) started") - APIClient().perform(request) { result in DispatchQueue.main.async { switch result { @@ -60,7 +57,6 @@ class ApiService { do { let successResponse = try decoder.decode(T.self, from: data) completion(.success(successResponse)) - log(.info, message: "\(requestName) success") return } catch {} @@ -68,15 +64,12 @@ class ApiService { let errorResponse = try decoder.decode(ErrorResult.self, from: data) let error = self.getServiceError(message: errorResponse.message, code: errorResponse.status) completion(.failure(error)) - log(.info, message: "\(requestName) error response") return } catch {} } completion(.failure(nil)) - log(.info, message: "\(requestName) parse error") case .failure(let error): - log(.info, message: "\(requestName) failure") completion(.failure(error)) } } @@ -84,15 +77,12 @@ class ApiService { } func requestCustomError(_ requestDI: ApiRequestDI, completion: @escaping (ResultCustomError) -> Void) { - let requestName = "\(requestDI.method.description) \(requestDI.endpoint)" let request = APIRequest(method: requestDI.method, path: requestDI.endpoint, contentType: requestDI.contentType, addressType: requestDI.addressType) if let params = requestDI.params { request.queryItems = params } - log(.info, message: "\(requestName) started") - APIClient().perform(request) { result in DispatchQueue.main.async { switch result { @@ -104,22 +94,18 @@ class ApiService { do { let successResponse = try decoder.decode(T.self, from: data) completion(.success(successResponse)) - log(.info, message: "\(requestName) success") return } catch {} do { let errorResponse = try decoder.decode(E.self, from: data) completion(.failure(errorResponse)) - log(.info, message: "\(requestName) error response") return } catch {} } completion(.failure(nil)) - log(.info, message: "\(requestName) parse error") case .failure: - log(.info, message: "\(requestName) failure") completion(.failure(nil)) } } diff --git a/IVPNClient/Managers/AppKeyManager.swift b/IVPNClient/Managers/AppKeyManager.swift index 4c1922192..4a804693d 100644 --- a/IVPNClient/Managers/AppKeyManager.swift +++ b/IVPNClient/Managers/AppKeyManager.swift @@ -34,6 +34,7 @@ class AppKeyManager { // MARK: - Properties - weak var delegate: AppKeyManagerDelegate? + static let shared = AppKeyManager() static var keyTimestamp: Date { return UserDefaults.shared.wgKeyTimestamp @@ -70,8 +71,26 @@ class AppKeyManager { return true } - static var isKeyPairRequired: Bool { - return Application.shared.settings.connectionProtocol.tunnelType() == .wireguard + static var regenerationCheckInterval: TimeInterval { + if Config.useDebugWireGuardKeyUpgrade { + return TimeInterval(10) + } + + return TimeInterval(60 * 60) + } + + static var regenerationInterval: TimeInterval { + var regenerationRate = UserDefaults.shared.wgRegenerationRate + + if regenerationRate <= 0 { + regenerationRate = 1 + } + + if Config.useDebugWireGuardKeyUpgrade { + return TimeInterval(regenerationRate * 60) + } + + return TimeInterval(regenerationRate * 60 * 60 * 24) } // MARK: - Methods - @@ -84,14 +103,15 @@ class AppKeyManager { KeyChain.wgPublicKey = interface.publicKey } - func setNewKey() { + func setNewKey(completion: @escaping (String?, String?, String?) -> Void) { var interface = Interface() interface.privateKey = Interface.generatePrivateKey() - - let params = ApiService.authParams + [ + var params = ApiService.authParams + [ URLQueryItem(name: "public_key", value: interface.publicKey ?? "") ] + var kem = KEM() + params += [URLQueryItem(name: "kem_public_key1", value: kem.getPublicKey(algorithm: .Kyber1024))] let request = ApiRequestDI(method: .post, endpoint: Config.apiSessionWGKeySet, params: params) delegate?.setKeyStart() @@ -103,11 +123,28 @@ class AppKeyManager { KeyChain.wgPrivateKey = interface.privateKey KeyChain.wgPublicKey = interface.publicKey KeyChain.wgIpAddress = model.ipAddress + if let kemCipher1 = model.kemCipher1 { + kem.setCipher(algorithm: .Kyber1024, cipher: kemCipher1) + KeyChain.wgPresharedKey = kem.calculatePresharedKey() + completion(interface.privateKey, model.ipAddress, KeyChain.wgPresharedKey) + } else { + KeyChain.wgPresharedKey = nil + completion(interface.privateKey, model.ipAddress, nil) + } self.delegate?.setKeySuccess() case .failure: self.delegate?.setKeyFail() + completion(nil, nil, nil) } } } + static func needToRegenerate() -> Bool { + guard Date() > UserDefaults.shared.wgKeyTimestamp.addingTimeInterval(regenerationInterval) else { + return false + } + + return true + } + } diff --git a/IVPNClient/Managers/KeyChain.swift b/IVPNClient/Managers/KeyChain.swift index b15934e09..23a9a17c9 100644 --- a/IVPNClient/Managers/KeyChain.swift +++ b/IVPNClient/Managers/KeyChain.swift @@ -33,6 +33,7 @@ class KeyChain { private static let wgIpAddressKey = "WGIpAddressKey" private static let wgIpv6HostKey = "WGIPv6HostKey" private static let wgIpAddressesKey = "WGIpAddressesKey" + private static let wgPresharedKeyKey = "WGPresharedKey" private static let sessionTokenKey = "session_token" private static let vpnUsernameKey = "vpn_username" private static let vpnPasswordKey = "vpn_password" @@ -95,6 +96,15 @@ class KeyChain { } } + class var wgPresharedKey: String? { + get { + return KeyChain.bundle[wgPresharedKeyKey] + } + set { + KeyChain.bundle[wgPresharedKeyKey] = newValue + } + } + class var wgIpv6Host: String? { get { return KeyChain.bundle[wgIpv6HostKey] @@ -152,6 +162,7 @@ class KeyChain { wgPublicKey = nil wgIpAddress = nil wgIpAddresses = nil + wgPresharedKey = nil sessionToken = nil vpnUsername = nil vpnPassword = nil diff --git a/IVPNClient/Managers/SessionManager.swift b/IVPNClient/Managers/SessionManager.swift index a7c0ec0ff..e24c2327a 100644 --- a/IVPNClient/Managers/SessionManager.swift +++ b/IVPNClient/Managers/SessionManager.swift @@ -60,12 +60,13 @@ class SessionManager { func createSession(force: Bool = false, connecting: Bool = false, username: String? = nil, confirmation: String? = nil, captcha: String? = nil, captchaId: String? = nil) { delegate?.createSessionStart() - if AppKeyManager.isKeyPairRequired || connecting { + if Application.isKeyPairRequired || connecting { AppKeyManager.generateKeyPair() UserDefaults.shared.set(Date(), forKey: UserDefaults.Key.wgKeyTimestamp) } - let params = sessionNewParams(force: force, username: username, confirmation: confirmation, captcha: captcha, captchaId: captchaId) + var kem = KEM() + let params = sessionNewParams(force: force, username: username, confirmation: confirmation, captcha: captcha, captchaId: captchaId, kem: kem) let request = ApiRequestDI(method: .post, endpoint: Config.apiSessionNew, params: params) ApiService.shared.requestCustomError(request) { (result: ResultCustomError) in @@ -74,6 +75,13 @@ class SessionManager { Application.shared.serviceStatus = model.serviceStatus Application.shared.authentication.logIn(session: model) + if let kemCipher1 = model.wireguard?.kemCipher1 { + kem.setCipher(algorithm: .Kyber1024, cipher: kemCipher1) + KeyChain.wgPresharedKey = kem.calculatePresharedKey() + } else { + KeyChain.wgPresharedKey = nil + } + if !model.serviceStatus.isActive { log(.info, message: "Create session error: createSessionServiceNotActive") self.delegate?.createSessionServiceNotActive() @@ -196,12 +204,13 @@ class SessionManager { // MARK: - Helper methods - - private func sessionNewParams(force: Bool = false, username: String? = nil, confirmation: String? = nil, captcha: String? = nil, captchaId: String? = nil) -> [URLQueryItem] { + private func sessionNewParams(force: Bool = false, username: String? = nil, confirmation: String? = nil, captcha: String? = nil, captchaId: String? = nil, kem: KEM) -> [URLQueryItem] { let username = username ?? Application.shared.authentication.getStoredUsername() var params = [URLQueryItem(name: "username", value: username)] if let wgPublicKey = KeyChain.wgPublicKey { params.append(URLQueryItem(name: "wg_public_key", value: wgPublicKey)) + params.append(URLQueryItem(name: "kem_public_key1", value: kem.getPublicKey(algorithm: .Kyber1024))) } if let confirmation = confirmation { diff --git a/IVPNClient/Managers/VPNManager.swift b/IVPNClient/Managers/VPNManager.swift index 5b2086284..097f06cbb 100644 --- a/IVPNClient/Managers/VPNManager.swift +++ b/IVPNClient/Managers/VPNManager.swift @@ -132,7 +132,9 @@ class VPNManager { if let error = error, error.code == 5 { manager.isOnDemandEnabled = false if #available(iOS 15.1, *) { - manager.protocolConfiguration?.includeAllNetworks = false + if #available(iOS 16, *) { } else { + manager.protocolConfiguration?.includeAllNetworks = false + } } NotificationCenter.default.post(name: Notification.Name.VPNConfigurationDisabled, object: nil) return @@ -261,7 +263,9 @@ class VPNManager { manager.onDemandRules = [NEOnDemandRule]() manager.isOnDemandEnabled = false if #available(iOS 15.1, *) { - manager.protocolConfiguration?.includeAllNetworks = false + if #available(iOS 16, *) { } else { + manager.protocolConfiguration?.includeAllNetworks = false + } } manager.saveToPreferences { _ in } } @@ -316,7 +320,9 @@ class VPNManager { manager.onDemandRules = [NEOnDemandRule]() manager.isOnDemandEnabled = false if #available(iOS 15.1, *) { - manager.protocolConfiguration?.includeAllNetworks = false + if #available(iOS 16, *) { } else { + manager.protocolConfiguration?.includeAllNetworks = false + } } manager.saveToPreferences(completionHandler: completion) } diff --git a/IVPNClient/Models/AntiTrackerDns.swift b/IVPNClient/Models/AntiTrackerDns.swift new file mode 100644 index 000000000..97c33d530 --- /dev/null +++ b/IVPNClient/Models/AntiTrackerDns.swift @@ -0,0 +1,67 @@ +// +// AntiTrackerDns.swift +// IVPN iOS app +// https://github.com/ivpn/ios-app +// +// Created by Juraj Hilje on 2023-07-05. +// Copyright (c) 2023 Privatus Limited. +// +// This file is part of the IVPN iOS app. +// +// The IVPN iOS app is free software: you can redistribute it and/or +// modify it under the terms of the GNU General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any later version. +// +// The IVPN iOS app is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License +// along with the IVPN iOS app. If not, see . +// + +import Foundation + +struct AntiTrackerDns: Codable { + + let name: String + let description: String + let normal: String + let hardcore: String + + static let basicLists = ["Basic", "Comprehensive", "Restrictive"] + static let basicList = "Basic" + static let oisdbigList = "Oisdbig" + + func save() { + if let encoded = try? JSONEncoder().encode(self) { + UserDefaults.shared.set(encoded, forKey: UserDefaults.Key.antiTrackerDns) + } + } + + static func load() -> AntiTrackerDns? { + if let saved = UserDefaults.shared.object(forKey: UserDefaults.Key.antiTrackerDns) as? Data { + if let loaded = try? JSONDecoder().decode(AntiTrackerDns.self, from: saved) { + return loaded + } + } + + return nil + } + + static func == (lhs: AntiTrackerDns, rhs: AntiTrackerDns) -> Bool { + return lhs.name == rhs.name && lhs.normal == rhs.normal + } + + static func defaultList(lists: [AntiTrackerDns]) -> AntiTrackerDns? { + if !(KeyChain.sessionToken ?? "").isEmpty || UserDefaults.shared.isAntiTracker || UserDefaults.shared.isAntiTrackerHardcore { + let filteredList = lists.filter { $0.name == oisdbigList } + return filteredList.first + } + + let filteredList = lists.filter { $0.name == basicList } + return filteredList.first + } + +} diff --git a/IVPNClient/Models/Application.swift b/IVPNClient/Models/Application.swift index efa367d61..3eff575ad 100644 --- a/IVPNClient/Models/Application.swift +++ b/IVPNClient/Models/Application.swift @@ -66,6 +66,10 @@ class Application { var geoLookup = GeoLookup(ipAddress: "", countryCode: "", country: "", city: "", isIvpnServer: false, isp: "", latitude: 0, longitude: 0) + static var isKeyPairRequired: Bool { + return shared.settings.connectionProtocol.tunnelType() == .wireguard + } + // MARK: - Initialize - private init() { diff --git a/IVPNClient/Models/Authentication.swift b/IVPNClient/Models/Authentication.swift index f0d33b010..fc5057c41 100644 --- a/IVPNClient/Models/Authentication.swift +++ b/IVPNClient/Models/Authentication.swift @@ -67,6 +67,7 @@ class Authentication { UserDefaults.clearSession() Application.shared.settings.connectionProtocol = Config.defaultProtocol Application.shared.settings.saveConnectionProtocol() + Application.shared.settings.saveDefaultAntiTrackerDns() } } diff --git a/IVPNClient/Models/Settings.swift b/IVPNClient/Models/Settings.swift index 778ed4637..71905a7bb 100644 --- a/IVPNClient/Models/Settings.swift +++ b/IVPNClient/Models/Settings.swift @@ -152,4 +152,9 @@ class Settings { UserDefaults.shared.set(connectionProtocol.formatSave(), forKey: UserDefaults.Key.selectedProtocol) } + func saveDefaultAntiTrackerDns() { + let defaultDns = AntiTrackerDns.defaultList(lists: Application.shared.serverList.antiTrackerList) + defaultDns?.save() + } + } diff --git a/IVPNClient/Models/VPNServerList.swift b/IVPNClient/Models/VPNServerList.swift index 9a349b98e..1e4cd7248 100644 --- a/IVPNClient/Models/VPNServerList.swift +++ b/IVPNClient/Models/VPNServerList.swift @@ -33,6 +33,7 @@ class VPNServerList { open private(set) var servers: [VPNServer] open private(set) var ports: [ConnectionSettings] open private(set) var portRanges: [PortRange] + open private(set) var antiTrackerList: [AntiTrackerDns] var filteredFastestServers: [VPNServer] { if UserDefaults.standard.bool(forKey: UserDefaults.Key.fastestServerConfigured) { @@ -47,6 +48,14 @@ class VPNServerList { return serversWithPing.isEmpty } + var antiTrackerBasicList: [AntiTrackerDns] { + return antiTrackerList.filter { AntiTrackerDns.basicLists.contains($0.name) } + } + + var antiTrackerIndividualList: [AntiTrackerDns] { + return antiTrackerList.filter { !AntiTrackerDns.basicLists.contains($0.name) } + } + // MARK: - Initialize - // This initializer without parameters will try to load either cached servers.json file @@ -85,6 +94,7 @@ class VPNServerList { servers = [VPNServer]() ports = [ConnectionSettings]() portRanges = [PortRange]() + antiTrackerList = [AntiTrackerDns]() if let jsonData = data { var serversList: [[String: Any]]? @@ -119,15 +129,22 @@ class VPNServerList { } if let config = config { - if let antitracker = config["antitracker"] as? [String: Any] { - if let defaultObj = antitracker["default"] as? [String: Any] { - if let ipAddress = defaultObj["ip"] as? String { - UserDefaults.shared.set(ipAddress, forKey: UserDefaults.Key.antiTrackerDNS) + if let antiTrackerPlus = config["antitracker_plus"] as? [String: Any] { + if let jsonList = antiTrackerPlus["DnsServers"] as? [[String: Any]] { + var list = [AntiTrackerDns]() + for dns in jsonList { + list.append(AntiTrackerDns( + name: dns["Name"] as? String ?? "", + description: dns["Description"] as? String ?? "", + normal: dns["Normal"] as? String ?? "", + hardcore: dns["Hardcore"] as? String ?? "" + )) } - } - if let hardcore = antitracker["hardcore"] as? [String: Any] { - if let ipAddress = hardcore["ip"] as? String { - UserDefaults.shared.set(ipAddress, forKey: UserDefaults.Key.antiTrackerHardcoreDNS) + antiTrackerList = list + + if AntiTrackerDns.load() == nil { + let defaultDns = AntiTrackerDns.defaultList(lists: antiTrackerList) + defaultDns?.save() } } } diff --git a/IVPNClient/Models/WireGuard/Interface.swift b/IVPNClient/Models/WireGuard/Interface.swift index 8310f3802..acc3a5e56 100644 --- a/IVPNClient/Models/WireGuard/Interface.swift +++ b/IVPNClient/Models/WireGuard/Interface.swift @@ -62,7 +62,6 @@ struct Interface { if let ipAddress = dict.value(forKey: "ip_address") as? String { self.addresses = ipAddress } else { - log(.error, message: "Cannot create Interface: no 'ip_address' field specified") return nil } diff --git a/IVPNClient/Models/WireGuard/Tunnel.swift b/IVPNClient/Models/WireGuard/Tunnel.swift index 29f82b9d0..efc5768bd 100644 --- a/IVPNClient/Models/WireGuard/Tunnel.swift +++ b/IVPNClient/Models/WireGuard/Tunnel.swift @@ -91,8 +91,8 @@ struct Tunnel { settingsString += "public_key=\(hexPublicKey)\n" } - if let presharedKey = peer.presharedKey { - settingsString += "preshared_key=\(presharedKey)\n" + if let hexPresharedKey = peer.presharedKey?.base64KeyToHex() { + settingsString += "preshared_key=\(hexPresharedKey)\n" } if let endpoint = peer.endpoint { diff --git a/IVPNClient/Scenes/Base.lproj/Main.storyboard b/IVPNClient/Scenes/Base.lproj/Main.storyboard index f58026eb4..1fb8c854c 100644 --- a/IVPNClient/Scenes/Base.lproj/Main.storyboard +++ b/IVPNClient/Scenes/Base.lproj/Main.storyboard @@ -3,7 +3,7 @@ - + @@ -399,7 +399,7 @@ - + @@ -1628,7 +1628,7 @@ - + @@ -2068,9 +2068,49 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2101,7 +2141,7 @@ - + @@ -2137,7 +2177,7 @@ - + @@ -2180,6 +2220,7 @@ + @@ -2374,7 +2415,7 @@ - + @@ -2453,13 +2494,13 @@ - - + - + - + - + - + @@ -2753,7 +2794,7 @@ - + @@ -2833,13 +2874,13 @@ -