Skip to content

Commit

Permalink
Make Tunn::new infallible
Browse files Browse the repository at this point in the history
  • Loading branch information
thomaseizinger committed Oct 16, 2023
1 parent e1d6360 commit 623ea19
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 23 deletions.
3 changes: 1 addition & 2 deletions boringtun/src/device/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -334,8 +334,7 @@ impl Device {
keepalive,
next_index,
None,
)
.unwrap();
);

let peer = Peer::new(tunn, next_index, endpoint, allowed_ips, preshared_key);

Expand Down
7 changes: 2 additions & 5 deletions boringtun/src/ffi/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -292,17 +292,14 @@ pub unsafe extern "C" fn new_tunnel(
Some(keep_alive)
};

let tunnel = match Tunn::new(
let tunnel = Box::new(Mutex::new(Tunn::new(
private_key,
public_key,
preshared_key,
keep_alive,
index,
None,
) {
Ok(t) => Box::new(Mutex::new(t)),
Err(_) => return ptr::null_mut(),
};
)));

PANIC_HOOK.call_once(|| {
// FFI won't properly unwind on panic, but it will if we cause a segmentation fault
Expand Down
14 changes: 7 additions & 7 deletions boringtun/src/noise/handshake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -375,19 +375,19 @@ impl NoiseParams {
static_public: x25519::PublicKey,
peer_static_public: x25519::PublicKey,
preshared_key: Option<[u8; 32]>,
) -> Result<NoiseParams, WireGuardError> {
) -> NoiseParams {
let static_shared = static_private.diffie_hellman(&peer_static_public);

let initial_sending_mac_key = b2s_hash(LABEL_MAC1, peer_static_public.as_bytes());

Ok(NoiseParams {
NoiseParams {
static_public,
static_private,
peer_static_public,
static_shared,
sending_mac1_key: initial_sending_mac_key,
preshared_key,
})
}
}

/// Set a new private key
Expand Down Expand Up @@ -415,15 +415,15 @@ impl Handshake {
peer_static_public: x25519::PublicKey,
global_idx: u32,
preshared_key: Option<[u8; 32]>,
) -> Result<Handshake, WireGuardError> {
) -> Handshake {
let params = NoiseParams::new(
static_private,
static_public,
peer_static_public,
preshared_key,
)?;
);

Ok(Handshake {
Handshake {
params,
next_index: global_idx,
previous: HandshakeState::None,
Expand All @@ -432,7 +432,7 @@ impl Handshake {
stamper: TimeStamper::new(),
cookies: Default::default(),
last_rtt: None,
})
}
}

pub(crate) fn is_in_progress(&self) -> bool {
Expand Down
15 changes: 6 additions & 9 deletions boringtun/src/noise/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,18 +198,17 @@ impl Tunn {
persistent_keepalive: Option<u16>,
index: u32,
rate_limiter: Option<Arc<RateLimiter>>,
) -> Result<Self, &'static str> {
) -> Self {
let static_public = x25519::PublicKey::from(&static_private);

let tunn = Tunn {
Tunn {
handshake: Handshake::new(
static_private,
static_public,
peer_static_public,
index << 8,
preshared_key,
)
.map_err(|_| "Invalid parameters")?,
),
sessions: Default::default(),
current: Default::default(),
tx_bytes: Default::default(),
Expand All @@ -221,9 +220,7 @@ impl Tunn {
rate_limiter: rate_limiter.unwrap_or_else(|| {
Arc::new(RateLimiter::new(&static_public, PEER_HANDSHAKE_RATE_LIMIT))
}),
};

Ok(tunn)
}
}

/// Update the private key and clear existing sessions
Expand Down Expand Up @@ -606,10 +603,10 @@ mod tests {
let their_public_key = x25519_dalek::PublicKey::from(&their_secret_key);
let their_idx = OsRng.next_u32();

let my_tun = Tunn::new(my_secret_key, their_public_key, None, None, my_idx, None).unwrap();
let my_tun = Tunn::new(my_secret_key, their_public_key, None, None, my_idx, None);

let their_tun =
Tunn::new(their_secret_key, my_public_key, None, None, their_idx, None).unwrap();
Tunn::new(their_secret_key, my_public_key, None, None, their_idx, None);

(my_tun, their_tun)
}
Expand Down

0 comments on commit 623ea19

Please sign in to comment.