diff options
author | Jake McGinty <me@jake.su> | 2018-04-03 16:30:57 -0700 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-04-03 16:30:57 -0700 |
commit | c9a289f1552bb05f40bbfee56f02d738d7600a43 (patch) | |
tree | 5c6e5e58bcde01d79a6068ecbe296e889ee241f5 /src/peer.rs | |
parent | tools: fix typo in wg-quick.bash and speed up 'route' call (diff) | |
download | wireguard-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.rs | 11 |
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 { |