diff options
Diffstat (limited to 'src/noise.rs')
-rw-r--r-- | src/noise.rs | 16 |
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(()) + } } |