diff --git a/crates/net/ecies/src/error.rs b/crates/net/ecies/src/error.rs index f476e00c4..79965f733 100644 --- a/crates/net/ecies/src/error.rs +++ b/crates/net/ecies/src/error.rs @@ -13,6 +13,11 @@ impl ECIESError { pub fn into_inner(self) -> ECIESErrorImpl { *self.inner } + + /// Returns a reference to the inner error + pub const fn inner(&self) -> &ECIESErrorImpl { + &self.inner + } } impl fmt::Display for ECIESError { diff --git a/crates/net/network/src/error.rs b/crates/net/network/src/error.rs index 055bcddd6..2709c4a29 100644 --- a/crates/net/network/src/error.rs +++ b/crates/net/network/src/error.rs @@ -3,6 +3,7 @@ use std::{fmt, io, io::ErrorKind, net::SocketAddr}; use reth_dns_discovery::resolver::ResolveError; +use reth_ecies::ECIESErrorImpl; use reth_eth_wire::{ errors::{EthHandshakeError, EthStreamError, P2PHandshakeError, P2PStreamError}, DisconnectReason, @@ -206,7 +207,17 @@ impl SessionError for PendingSessionHandshakeError { fn merits_discovery_ban(&self) -> bool { match self { Self::Eth(eth) => eth.merits_discovery_ban(), - Self::Ecies(_) => true, + Self::Ecies(err) => matches!( + err.inner(), + ECIESErrorImpl::TagCheckDecryptFailed | + ECIESErrorImpl::TagCheckHeaderFailed | + ECIESErrorImpl::TagCheckBodyFailed | + ECIESErrorImpl::InvalidAuthData | + ECIESErrorImpl::InvalidAckData | + ECIESErrorImpl::InvalidHeader | + ECIESErrorImpl::Secp256k1(_) | + ECIESErrorImpl::InvalidHandshake { .. } + ), Self::Timeout => false, } } @@ -214,7 +225,17 @@ impl SessionError for PendingSessionHandshakeError { fn is_fatal_protocol_error(&self) -> bool { match self { Self::Eth(eth) => eth.is_fatal_protocol_error(), - Self::Ecies(_) => true, + Self::Ecies(err) => matches!( + err.inner(), + ECIESErrorImpl::TagCheckDecryptFailed | + ECIESErrorImpl::TagCheckHeaderFailed | + ECIESErrorImpl::TagCheckBodyFailed | + ECIESErrorImpl::InvalidAuthData | + ECIESErrorImpl::InvalidAckData | + ECIESErrorImpl::InvalidHeader | + ECIESErrorImpl::Secp256k1(_) | + ECIESErrorImpl::InvalidHandshake { .. } + ), Self::Timeout => false, } }