Allow DoS mitigation to take any endpoint impl.

This commit is contained in:
Mathias Hall-Andersen
2019-08-23 11:43:29 +02:00
parent 9528d19cc9
commit e88ed5d02d

View File

@@ -197,12 +197,12 @@ where
/// # Arguments /// # Arguments
/// ///
/// * `msg` - Byte slice containing the message (untrusted input) /// * `msg` - Byte slice containing the message (untrusted input)
pub fn process<R: RngCore + CryptoRng>( pub fn process<'a, R: RngCore + CryptoRng, S>(
&self, &self,
rng: &mut R, rng: &mut R, // rng instance to sample randomness from
msg: &[u8], // message buffer msg: &[u8], // message buffer
src: Option<&SocketAddr>, // optional source address, set when "under load" src: Option<&'a S>, // optional source endpoint, set when "under load"
) -> Result<Output<T>, HandshakeError> { ) -> Result<Output<T>, HandshakeError> where &'a S: Into<&'a SocketAddr> {
match msg.get(0) { match msg.get(0) {
Some(&TYPE_INITIATION) => { Some(&TYPE_INITIATION) => {
// parse message // parse message
@@ -213,6 +213,9 @@ where
// address validation & DoS mitigation // address validation & DoS mitigation
if let Some(src) = src { if let Some(src) = src {
// obtain ref to socket addr
let src = src.into();
// check mac2 field // check mac2 field
if !self.macs.check_mac2(msg.noise.as_bytes(), src, &msg.macs) { if !self.macs.check_mac2(msg.noise.as_bytes(), src, &msg.macs) {
let mut reply = Default::default(); let mut reply = Default::default();
@@ -269,6 +272,9 @@ where
// address validation & DoS mitigation // address validation & DoS mitigation
if let Some(src) = src { if let Some(src) = src {
// obtain ref to socket addr
let src = src.into();
// check mac2 field // check mac2 field
if !self.macs.check_mac2(msg.noise.as_bytes(), src, &msg.macs) { if !self.macs.check_mac2(msg.noise.as_bytes(), src, &msg.macs) {
let mut reply = Default::default(); let mut reply = Default::default();