diff options
Diffstat (limited to 'src/handshake/device.rs')
-rw-r--r-- | src/handshake/device.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/handshake/device.rs b/src/handshake/device.rs index 2a06fa7..6178831 100644 --- a/src/handshake/device.rs +++ b/src/handshake/device.rs @@ -64,10 +64,16 @@ impl Device { self.macs = macs::Validator::new(pk); // recalculate the shared secrets for every peer - for &mut peer in self.pk_map.values_mut() { - peer.reset_state().map(|id| self.release(id)); + let mut ids = vec![]; + for mut peer in self.pk_map.values_mut() { + peer.reset_state().map(|id| ids.push(id)); peer.ss = self.sk.diffie_hellman(&peer.pk) } + + // release ids from aborted handshakes + for id in ids { + self.release(id) + } } /// Add a new public key to the state machine |