aboutsummaryrefslogtreecommitdiffstats
path: root/src/peer.rs
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 /src/peer.rs
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
Diffstat (limited to 'src/peer.rs')
-rw-r--r--src/peer.rs11
1 files changed, 6 insertions, 5 deletions
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 {