aboutsummaryrefslogtreecommitdiffstats
path: root/src/wireguard/tests.rs
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2019-10-23 14:00:21 +0200
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2019-10-23 14:00:21 +0200
commit8107973342a31e8d654d31c1bb06786fc033d86c (patch)
treeb0de39c32c76e098480f4237b02ed66e542b813c /src/wireguard/tests.rs
parentMoved IO traits into platform module (diff)
downloadwireguard-rs-8107973342a31e8d654d31c1bb06786fc033d86c.tar.xz
wireguard-rs-8107973342a31e8d654d31c1bb06786fc033d86c.zip
Work on pure WireGuard test
Diffstat (limited to '')
-rw-r--r--src/wireguard/tests.rs71
1 files changed, 69 insertions, 2 deletions
diff --git a/src/wireguard/tests.rs b/src/wireguard/tests.rs
index 4ecd43b..0dc9296 100644
--- a/src/wireguard/tests.rs
+++ b/src/wireguard/tests.rs
@@ -1,13 +1,53 @@
use super::wireguard::Wireguard;
use super::{bind, dummy, tun};
+use std::net::IpAddr;
use std::thread;
use std::time::Duration;
+use rand::rngs::OsRng;
+use x25519_dalek::{PublicKey, StaticSecret};
+
+use pnet::packet::ipv4::MutableIpv4Packet;
+use pnet::packet::ipv6::MutableIpv6Packet;
+
+fn make_packet(size: usize, src: IpAddr, dst: IpAddr) -> Vec<u8> {
+ // create "IP packet"
+ let mut msg = Vec::with_capacity(size);
+ msg.resize(size, 0);
+ match dst {
+ IpAddr::V4(dst) => {
+ let mut packet = MutableIpv4Packet::new(&mut msg[..]).unwrap();
+ packet.set_destination(dst);
+ packet.set_source(if let IpAddr::V4(src) = src {
+ src
+ } else {
+ panic!("src.version != dst.version")
+ });
+ packet.set_version(4);
+ }
+ IpAddr::V6(dst) => {
+ let mut packet = MutableIpv6Packet::new(&mut msg[..]).unwrap();
+ packet.set_destination(dst);
+ packet.set_source(if let IpAddr::V6(src) = src {
+ src
+ } else {
+ panic!("src.version != dst.version")
+ });
+ packet.set_version(6);
+ }
+ }
+ msg
+}
+
fn init() {
let _ = env_logger::builder().is_test(true).try_init();
}
+fn wait() {
+ thread::sleep(Duration::from_millis(500));
+}
+
/* Create and configure two matching pure instances of WireGuard
*
*/
@@ -37,9 +77,36 @@ fn test_pure_wireguard() {
// generate (public, pivate) key pairs
+ let mut rng = OsRng::new().unwrap();
+ let sk1 = StaticSecret::new(&mut rng);
+ let sk2 = StaticSecret::new(&mut rng);
+ let pk1 = PublicKey::from(&sk1);
+ let pk2 = PublicKey::from(&sk2);
+
+ wg1.new_peer(pk2);
+ wg2.new_peer(pk1);
+
+ wg1.set_key(Some(sk1));
+ wg2.set_key(Some(sk2));
+
// configure cryptkey router
- // create IP packets
+ let peer2 = wg1.lookup_peer(&pk2).unwrap();
+ let peer1 = wg2.lookup_peer(&pk1).unwrap();
- thread::sleep(Duration::from_millis(500));
+ peer1.router.add_subnet("192.168.2.0".parse().unwrap(), 24);
+ peer2.router.add_subnet("192.168.1.0".parse().unwrap(), 24);
+
+ // set endpoints
+
+ peer1.router.set_endpoint(dummy::UnitEndpoint::new());
+ peer2.router.set_endpoint(dummy::UnitEndpoint::new());
+
+ // create IP packets (causing a new handshake)
+
+ let packet_p1_to_p2 = make_packet(
+ 1000,
+ "192.168.2.20".parse().unwrap(), // src
+ "192.168.1.10".parse().unwrap(), // dst
+ );
}