diff options
author | Jake McGinty <me@jake.su> | 2018-05-06 18:57:35 -0700 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-05-06 18:57:35 -0700 |
commit | cb26bebb52ef7682e727512cfdc250662ea45ef8 (patch) | |
tree | 33119e4633cbf2f24107080d2707f74c3ef20c0d | |
parent | bin: add alpha warning (diff) | |
download | wireguard-rs-cb26bebb52ef7682e727512cfdc250662ea45ef8.tar.xz wireguard-rs-cb26bebb52ef7682e727512cfdc250662ea45ef8.zip |
peer_server: hold on to single local csprng instance for performance
-rw-r--r-- | src/interface/peer_server.rs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs index 31b004b..f3d68b2 100644 --- a/src/interface/peer_server.rs +++ b/src/interface/peer_server.rs @@ -10,7 +10,7 @@ use timer::{Timer, TimerMessage}; use byteorder::{ByteOrder, LittleEndian}; use failure::{Error, err_msg}; use futures::{Async, Future, Stream, Sink, Poll, unsync::mpsc}; -use rand::{self, Rng}; +use rand::{self, Rng, ThreadRng}; use udp::{Endpoint, UdpSocket, PeerServerMessage, UdpChannel}; use tokio_core::reactor::Handle; @@ -49,6 +49,7 @@ pub struct PeerServer { timer : Timer, tunnel_tx : mpsc::Sender<Vec<u8>>, cookie : cookie::Validator, + rng : ThreadRng, } impl PeerServer { @@ -61,7 +62,8 @@ impl PeerServer { port : None, outgoing : mpsc::channel(1024).into(), channel : mpsc::channel(1024).into(), - cookie : cookie::Validator::new(&[0u8; 32]) + cookie : cookie::Validator::new(&[0u8; 32]), + rng : rand::thread_rng() }) } @@ -115,10 +117,9 @@ impl PeerServer { self.handle.spawn(self.tunnel_tx.clone().send(packet).then(|_| Ok(()))); } - fn unused_index(state: &mut State) -> u32 { - let mut rng = rand::thread_rng(); // TODO: cache the thread RNG for perf + fn unused_index(&mut self, state: &mut State) -> u32 { loop { - let tentative: u32 = rng.gen(); + let tentative: u32 = self.rng.gen(); if !state.index_map.contains_key(&tentative) { return tentative; } |