summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-05-19 14:28:33 +0200
committerDavid Lönnhager <david.l@mullvad.net>2022-06-14 12:37:04 +0200
commitd8e1e030af2d8a1f900a83c6f8f6f23a6d736be6 (patch)
treec56ebdb2ea781ab3d8b7bf0ce04429cd675eb6c3
parent4c7b7b66e9412da5d040fef4828bacbf483c1334 (diff)
downloadmullvadvpn-d8e1e030af2d8a1f900a83c6f8f6f23a6d736be6.tar.xz
mullvadvpn-d8e1e030af2d8a1f900a83c6f8f6f23a6d736be6.zip
Add PQ PSK exchange tunnel option
-rw-r--r--mullvad-management-interface/proto/management_interface.proto1
-rw-r--r--mullvad-management-interface/src/types.rs2
-rw-r--r--talpid-core/src/tunnel/mod.rs13
-rw-r--r--talpid-types/src/net/wireguard.rs3
4 files changed, 18 insertions, 1 deletions
diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto
index 20d5318a58..eb132b2a52 100644
--- a/mullvad-management-interface/proto/management_interface.proto
+++ b/mullvad-management-interface/proto/management_interface.proto
@@ -435,6 +435,7 @@ message TunnelOptions {
uint32 mtu = 1;
google.protobuf.Duration rotation_interval = 2;
bool use_wireguard_nt = 3;
+ bool use_pq_safe_psk = 4;
}
message GenericOptions {
bool enable_ipv6 = 1;
diff --git a/mullvad-management-interface/src/types.rs b/mullvad-management-interface/src/types.rs
index cad371aa49..640d97d676 100644
--- a/mullvad-management-interface/src/types.rs
+++ b/mullvad-management-interface/src/types.rs
@@ -680,6 +680,7 @@ impl From<&mullvad_types::settings::TunnelOptions> for TunnelOptions {
use_wireguard_nt: options.wireguard.options.use_wireguard_nt,
#[cfg(not(windows))]
use_wireguard_nt: false,
+ use_pq_safe_psk: options.wireguard.options.use_pq_safe_psk,
}),
generic: Some(tunnel_options::GenericOptions {
enable_ipv6: options.generic.enable_ipv6,
@@ -1413,6 +1414,7 @@ impl TryFrom<TunnelOptions> for mullvad_types::settings::TunnelOptions {
} else {
None
},
+ use_pq_safe_psk: wireguard_options.use_pq_safe_psk,
#[cfg(windows)]
use_wireguard_nt: wireguard_options.use_wireguard_nt,
},
diff --git a/talpid-core/src/tunnel/mod.rs b/talpid-core/src/tunnel/mod.rs
index 8820f26c72..9d93a6e3f1 100644
--- a/talpid-core/src/tunnel/mod.rs
+++ b/talpid-core/src/tunnel/mod.rs
@@ -198,7 +198,18 @@ impl TunnelMonitor {
let monitor = wireguard::WireguardMonitor::start(
runtime,
config,
- Some(params.connection.peer.public_key.clone()),
+ if params.options.use_pq_safe_psk {
+ Some(
+ params
+ .connection
+ .exit_peer
+ .as_ref()
+ .map(|peer| peer.public_key.clone())
+ .unwrap_or(params.connection.peer.public_key.clone()),
+ )
+ } else {
+ None
+ },
log.as_deref(),
resource_dir,
on_event,
diff --git a/talpid-types/src/net/wireguard.rs b/talpid-types/src/net/wireguard.rs
index 16cd7390b7..cccfc167fc 100644
--- a/talpid-types/src/net/wireguard.rs
+++ b/talpid-types/src/net/wireguard.rs
@@ -80,6 +80,8 @@ pub struct TunnelOptions {
jnix(map = "|maybe_mtu| maybe_mtu.map(|mtu| mtu as i32)")
)]
pub mtu: Option<u16>,
+ /// Obtain a PSK using the relay config client.
+ pub use_pq_safe_psk: bool,
/// Temporary switch for wireguard-nt
#[cfg(windows)]
#[serde(default = "default_wgnt_setting")]
@@ -96,6 +98,7 @@ impl Default for TunnelOptions {
fn default() -> Self {
Self {
mtu: None,
+ use_pq_safe_psk: false,
#[cfg(windows)]
use_wireguard_nt: default_wgnt_setting(),
}