Skip to content

Commit 0c04ca0

Browse files
acb-mvbuggmagnet
authored andcommitted
Backport TunnelSettingsV4 from quantum resistance exploratory branch
1 parent 365ca32 commit 0c04ca0

File tree

5 files changed

+76
-4
lines changed

5 files changed

+76
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//
2+
// QuantumResistanceSettings.swift
3+
// MullvadSettings
4+
//
5+
// Created by Andrew Bulhak on 2024-02-08.
6+
// Copyright © 2024 Mullvad VPN AB. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
public enum TunnelQuantumResistance: Codable {
12+
case automatic
13+
case on
14+
case off
15+
}

ios/MullvadSettings/TunnelSettings.swift

+7-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import Foundation
1010

1111
/// Alias to the latest version of the `TunnelSettings`.
12-
public typealias LatestTunnelSettings = TunnelSettingsV3
12+
public typealias LatestTunnelSettings = TunnelSettingsV4
1313

1414
/// Protocol all TunnelSettings must adhere to, for upgrade purposes.
1515
public protocol TunnelSettings: Codable {
@@ -27,22 +27,26 @@ public enum SchemaVersion: Int, Equatable {
2727
/// V2 format with WireGuard obfuscation options, stored as `TunnelSettingsV3`.
2828
case v3 = 3
2929

30+
case v4 = 4
31+
3032
var settingsType: any TunnelSettings.Type {
3133
switch self {
3234
case .v1: return TunnelSettingsV1.self
3335
case .v2: return TunnelSettingsV2.self
3436
case .v3: return TunnelSettingsV3.self
37+
case .v4: return TunnelSettingsV4.self
3538
}
3639
}
3740

3841
var nextVersion: Self {
3942
switch self {
4043
case .v1: return .v2
4144
case .v2: return .v3
42-
case .v3: return .v3
45+
case .v3: return .v4
46+
case .v4: return .v4
4347
}
4448
}
4549

4650
/// Current schema version.
47-
public static let current = SchemaVersion.v3
51+
public static let current = SchemaVersion.v4
4852
}

ios/MullvadSettings/TunnelSettingsV3.swift

+6-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ public struct TunnelSettingsV3: Codable, Equatable, TunnelSettings {
3030
}
3131

3232
public func upgradeToNextVersion() -> any TunnelSettings {
33-
self
33+
TunnelSettingsV4(
34+
relayConstraints: relayConstraints,
35+
dnsSettings: dnsSettings,
36+
wireGuardObfuscation: wireGuardObfuscation,
37+
tunnelQuantumResistance: .automatic
38+
)
3439
}
3540
}
+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//
2+
// TunnelSettingsV4.swift
3+
// MullvadSettings
4+
//
5+
// Created by Marco Nikic on 2024-02-06.
6+
// Copyright © 2024 Mullvad VPN AB. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import MullvadTypes
11+
12+
public struct TunnelSettingsV4: Codable, Equatable, TunnelSettings {
13+
/// Relay constraints.
14+
public var relayConstraints: RelayConstraints
15+
16+
/// DNS settings.
17+
public var dnsSettings: DNSSettings
18+
19+
/// WireGuard obfuscation settings
20+
public var wireGuardObfuscation: WireGuardObfuscationSettings
21+
22+
/// Whether Post Quantum exchanges are enabled.
23+
public var tunnelQuantumResistance: TunnelQuantumResistance
24+
25+
public init(
26+
relayConstraints: RelayConstraints = RelayConstraints(),
27+
dnsSettings: DNSSettings = DNSSettings(),
28+
wireGuardObfuscation: WireGuardObfuscationSettings = WireGuardObfuscationSettings(),
29+
tunnelQuantumResistance: TunnelQuantumResistance = .automatic
30+
) {
31+
self.relayConstraints = relayConstraints
32+
self.dnsSettings = dnsSettings
33+
self.wireGuardObfuscation = wireGuardObfuscation
34+
self.tunnelQuantumResistance = tunnelQuantumResistance
35+
}
36+
37+
public func upgradeToNextVersion() -> any TunnelSettings {
38+
self
39+
}
40+
}

ios/MullvadVPN.xcodeproj/project.pbxproj

+8
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
06799AFC28F98EE300ACD94E /* AddressCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06AC114128F8413A0037AF9A /* AddressCache.swift */; };
3939
0697D6E728F01513007A9E99 /* TransportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0697D6E628F01513007A9E99 /* TransportMonitor.swift */; };
4040
06AC116228F94C450037AF9A /* ApplicationConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BFA5CB22A7CE1F00A6173D /* ApplicationConfiguration.swift */; };
41+
44DD7D2D2B74E44A0005F67F /* QuantumResistanceSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44DD7D2C2B74E44A0005F67F /* QuantumResistanceSettings.swift */; };
4142
44DD7D242B6CFFD70005F67F /* StartTunnelOperationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44DD7D232B6CFFD70005F67F /* StartTunnelOperationTests.swift */; };
4243
44DD7D272B6D18FB0005F67F /* MockTunnelInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44DD7D262B6D18FB0005F67F /* MockTunnelInteractor.swift */; };
4344
44DD7D292B7113CA0005F67F /* MockTunnel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44DD7D282B7113CA0005F67F /* MockTunnel.swift */; };
@@ -627,6 +628,7 @@
627628
A917352129FAAA5200D5DCFD /* TransportStrategyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A917352029FAAA5200D5DCFD /* TransportStrategyTests.swift */; };
628629
A91D78E32B03BDF200FCD5D3 /* TunnelObfuscation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5840231F2A406BF5007B27AC /* TunnelObfuscation.framework */; };
629630
A91D78E42B03C01600FCD5D3 /* MullvadSettings.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B2FDD32AA71D2A003EB5C6 /* MullvadSettings.framework */; };
631+
A93181A12B727ED700E341D2 /* TunnelSettingsV4.swift in Sources */ = {isa = PBXBuildFile; fileRef = A93181A02B727ED700E341D2 /* TunnelSettingsV4.swift */; };
630632
A932D9EF2B5ADD0700999395 /* ProxyConfigurationTransportProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A932D9EE2B5ADD0700999395 /* ProxyConfigurationTransportProvider.swift */; };
631633
A932D9F32B5EB61100999395 /* HeadRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A932D9F22B5EB61100999395 /* HeadRequestTests.swift */; };
632634
A932D9F52B5EBB9D00999395 /* RESTTransportStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = A932D9F42B5EBB9D00999395 /* RESTTransportStub.swift */; };
@@ -1241,6 +1243,7 @@
12411243
06FAE67A28F83CA50033DD93 /* RESTDevicesProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTDevicesProxy.swift; sourceTree = "<group>"; };
12421244
06FAE67B28F83CA50033DD93 /* REST.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = REST.swift; sourceTree = "<group>"; };
12431245
06FAE67D28F83CA50033DD93 /* RESTTransport.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTTransport.swift; sourceTree = "<group>"; };
1246+
44DD7D2C2B74E44A0005F67F /* QuantumResistanceSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuantumResistanceSettings.swift; sourceTree = "<group>"; };
12441247
44DD7D232B6CFFD70005F67F /* StartTunnelOperationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartTunnelOperationTests.swift; sourceTree = "<group>"; };
12451248
44DD7D262B6D18FB0005F67F /* MockTunnelInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockTunnelInteractor.swift; sourceTree = "<group>"; };
12461249
44DD7D282B7113CA0005F67F /* MockTunnel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockTunnel.swift; sourceTree = "<group>"; };
@@ -1809,6 +1812,7 @@
18091812
A92ECC232A7802520052F1B1 /* StoredAccountData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoredAccountData.swift; sourceTree = "<group>"; };
18101813
A92ECC272A7802AB0052F1B1 /* StoredDeviceData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoredDeviceData.swift; sourceTree = "<group>"; };
18111814
A92ECC2B2A7803A50052F1B1 /* DeviceState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceState.swift; sourceTree = "<group>"; };
1815+
A93181A02B727ED700E341D2 /* TunnelSettingsV4.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelSettingsV4.swift; sourceTree = "<group>"; };
18121816
A932D9EE2B5ADD0700999395 /* ProxyConfigurationTransportProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyConfigurationTransportProvider.swift; sourceTree = "<group>"; };
18131817
A932D9F22B5EB61100999395 /* HeadRequestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadRequestTests.swift; sourceTree = "<group>"; };
18141818
A932D9F42B5EBB9D00999395 /* RESTTransportStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RESTTransportStub.swift; sourceTree = "<group>"; };
@@ -2839,6 +2843,7 @@
28392843
A9D96B192A8247C100A5C673 /* MigrationManager.swift */,
28402844
58B2FDD52AA71D2A003EB5C6 /* MullvadSettings.h */,
28412845
586C0D962B04E0AC00E7CDD7 /* PersistentAccessMethod.swift */,
2846+
44DD7D2C2B74E44A0005F67F /* QuantumResistanceSettings.swift */,
28422847
58FF2C02281BDE02009EF542 /* SettingsManager.swift */,
28432848
06410E03292D0F7100AFC18C /* SettingsParser.swift */,
28442849
06410E06292D108E00AFC18C /* SettingsStore.swift */,
@@ -2850,6 +2855,7 @@
28502855
587AD7C523421D7000E93A53 /* TunnelSettingsV1.swift */,
28512856
580F8B8228197881002E0998 /* TunnelSettingsV2.swift */,
28522857
A988DF282ADE880300D807EF /* TunnelSettingsV3.swift */,
2858+
A93181A02B727ED700E341D2 /* TunnelSettingsV4.swift */,
28532859
A988DF252ADE86ED00D807EF /* WireGuardObfuscationSettings.swift */,
28542860
);
28552861
path = MullvadSettings;
@@ -4687,13 +4693,15 @@
46874693
58B2FDE42AA71D5C003EB5C6 /* SettingsManager.swift in Sources */,
46884694
F0164EBC2B482E430020268D /* AppStorage.swift in Sources */,
46894695
58B2FDE62AA71D5C003EB5C6 /* DeviceState.swift in Sources */,
4696+
A93181A12B727ED700E341D2 /* TunnelSettingsV4.swift in Sources */,
46904697
58FE25BF2AA72311003D1918 /* MigrationManager.swift in Sources */,
46914698
58B2FDEF2AA720C4003EB5C6 /* ApplicationTarget.swift in Sources */,
46924699
A988DF272ADE86ED00D807EF /* WireGuardObfuscationSettings.swift in Sources */,
46934700
58B2FDDE2AA71D5C003EB5C6 /* Migration.swift in Sources */,
46944701
F0D7FF8F2B31DF5900E0FDE5 /* AccessMethodRepository.swift in Sources */,
46954702
58B2FDE12AA71D5C003EB5C6 /* TunnelSettingsV1.swift in Sources */,
46964703
58B2FDE72AA71D5C003EB5C6 /* SettingsStore.swift in Sources */,
4704+
44DD7D2D2B74E44A0005F67F /* QuantumResistanceSettings.swift in Sources */,
46974705
F08827872B318C840020A383 /* ShadowsocksCipherOptions.swift in Sources */,
46984706
58B2FDE92AA71D5C003EB5C6 /* SettingsParser.swift in Sources */,
46994707
F08827892B3192110020A383 /* AccessMethodRepositoryProtocol.swift in Sources */,

0 commit comments

Comments
 (0)