aboutsummaryrefslogtreecommitdiffstats
path: root/src/noise.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/noise.rs')
-rw-r--r--src/noise.rs16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/noise.rs b/src/noise.rs
index beddbfa..3e08099 100644
--- a/src/noise.rs
+++ b/src/noise.rs
@@ -2,6 +2,7 @@ use blake2_rfc::blake2s::{Blake2s, blake2s};
use failure::{Error, SyncFailure};
use snow::{NoiseBuilder, Session};
use snow::params::NoiseParams;
+use snow::wrappers::crypto_wrapper::Dh25519;
use types::{InterfaceInfo, PeerInfo};
@@ -30,10 +31,9 @@ impl Noise {
Ok(Noise::new_foundation(local_privkey)
.build_responder()
.map_err(SyncFailure::new)?)
-
}
- pub fn build_mac1(pub_key: &[u8], mac_input: &mut [u8], mac_output: &mut [u8]) {
+ pub fn build_mac1(pub_key: &[u8], mac_input: &[u8], mac_output: &mut [u8]) {
debug_assert!(mac_output.len() == 16);
let mut mac_key_input = [0; 40];
mac_key_input[..8].copy_from_slice(b"mac1----");
@@ -42,4 +42,16 @@ impl Noise {
let mac = blake2s(16, mac_key.as_bytes(), mac_input);
mac_output.copy_from_slice(mac.as_bytes());
}
+
+ pub fn verify_mac1(pub_key: &[u8], mac_input: &[u8], mac: &[u8]) -> Result<(), Error> {
+ debug_assert!(mac.len() == 16);
+ let mut mac_key_input = [0; 40];
+ mac_key_input[..8].copy_from_slice(b"mac1----");
+ mac_key_input[8..40].copy_from_slice(pub_key);
+ let mac_key = blake2s(32, &[], &mac_key_input);
+ let our_mac = blake2s(16, mac_key.as_bytes(), mac_input);
+
+ ensure!(mac == our_mac.as_bytes(), "mac mismatch");
+ Ok(())
+ }
}