diff options
author | Jake McGinty <me@jake.su> | 2018-02-12 23:56:38 +0000 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-02-13 01:26:39 +0000 |
commit | 43c80f2489d429d168ec3e9c3664908971ffeac3 (patch) | |
tree | bc12f596c8a6633d9f597ecd62c090a4605e4d81 /src/interface/mod.rs | |
parent | consolidate more handshake crypto (diff) | |
download | wireguard-rs-43c80f2489d429d168ec3e9c3664908971ffeac3.tar.xz wireguard-rs-43c80f2489d429d168ec3e9c3664908971ffeac3.zip |
verify mac1 for handshake messages
Diffstat (limited to 'src/interface/mod.rs')
-rw-r--r-- | src/interface/mod.rs | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/interface/mod.rs b/src/interface/mod.rs index 41b4a66..38c306c 100644 --- a/src/interface/mod.rs +++ b/src/interface/mod.rs @@ -18,6 +18,7 @@ use std::collections::HashMap; use std::net::{Ipv4Addr, Ipv6Addr, IpAddr, SocketAddr}; use std::time::Duration; use types::{InterfaceInfo}; +use x25519_dalek as x25519; use pnet::packet::ipv4::Ipv4Packet; @@ -190,7 +191,10 @@ impl Interface { let mut state = state.borrow_mut(); match event { UpdateEvent::PrivateKey(private_key) => { + let pub_key = x25519::generate_public(&private_key); + info!("our pubkey: {}", base64::encode(pub_key.as_bytes())); state.interface_info.private_key = Some(private_key); + state.interface_info.pub_key = Some(*pub_key.as_bytes()); debug!("set new private key"); }, UpdateEvent::ListenPort(port) => { @@ -202,7 +206,7 @@ impl Interface { let mut peer = Peer::new(info.clone()); let private_key = &state.interface_info.private_key.expect("no private key!"); - let (init_packet, our_index) = peer.initiate_new_session(private_key).unwrap(); + let (init_packet, our_index) = peer.initiate_new_session(private_key).expect("initiate_new_session"); let peer = Rc::new(RefCell::new(peer)); @@ -219,7 +223,7 @@ impl Interface { future::ok(()) } - }).map_err(|_| ()); + }).map_err(|e| { warn!("error {:?}", e); () }); core.run(peer_server.join(utun_fut.join(config_fut.join(config_server)))).unwrap(); } |