aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-04-03 16:30:57 -0700
committerJake McGinty <me@jake.su>2018-04-03 16:30:57 -0700
commitc9a289f1552bb05f40bbfee56f02d738d7600a43 (patch)
tree5c6e5e58bcde01d79a6068ecbe296e889ee241f5
parenttools: fix typo in wg-quick.bash and speed up 'route' call (diff)
downloadwireguard-rs-c9a289f1552bb05f40bbfee56f02d738d7600a43.tar.xz
wireguard-rs-c9a289f1552bb05f40bbfee56f02d738d7600a43.zip
peer: set session birthday at moment of symmetric key derivation
just like main WireGuard source
-rw-r--r--src/interface/peer_server.rs2
-rw-r--r--src/peer.rs11
2 files changed, 7 insertions, 6 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs
index 7abce1d..c807bd8 100644
--- a/src/interface/peer_server.rs
+++ b/src/interface/peer_server.rs
@@ -146,7 +146,7 @@ impl PeerServer {
let _ = state.index_map.insert(index, peer_ref.clone());
self.send_to_peer((addr, response))?;
- info!("sent handshake response, ratcheted session (index {}).", index);
+ info!("sent handshake response (index {}).", index);
Ok(())
}
diff --git a/src/peer.rs b/src/peer.rs
index 9e9a01e..2331a09 100644
--- a/src/peer.rs
+++ b/src/peer.rs
@@ -275,9 +275,11 @@ impl Peer {
_ => unreachable!()
}
- let mut next_session = Session::with_their_index(noise, index, their_index);
- let response_packet = self.get_response_packet(&mut next_session)?;
- let old_next = mem::replace(&mut self.sessions.next, Some(next_session.into_transport_mode()?));
+ let mut next_session = Session::with_their_index(noise, index, their_index);
+ next_session.birthday = Timestamp::now();
+
+ let response_packet = self.get_response_packet(&mut next_session)?;
+ let old_next = mem::replace(&mut self.sessions.next, Some(next_session.into_transport_mode()?));
let dead_index = if old_next.is_some() {
mem::replace(&mut self.sessions.past, old_next).map(|session| session.our_index)
@@ -360,8 +362,7 @@ impl Peer {
let current = std::mem::replace(&mut self.sessions.current, next);
let dead = std::mem::replace(&mut self.sessions.past, current);
- self.sessions.current.as_mut().unwrap().birthday = Timestamp::now();
- self.last_handshake = Timestamp::now();
+ self.last_handshake = Timestamp::now();
SessionTransition::Transition(dead.map(|session| session.our_index))
} else {