pub struct SecureMeshTransport<T: MeshTransport, A: AuthenticationChannel> { /* private fields */ }Expand description
Secure mesh transport that requires authentication before sync.
This wrapper adds Ed25519-based challenge-response authentication to any
MeshTransport implementation. Peers must complete mutual authentication
before the connection is considered established.
Implementations§
Source§impl<T: MeshTransport, A: AuthenticationChannel> SecureMeshTransport<T, A>
impl<T: MeshTransport, A: AuthenticationChannel> SecureMeshTransport<T, A>
Sourcepub fn new(keypair: DeviceKeypair, inner: Arc<T>, auth_channel: Arc<A>) -> Self
pub fn new(keypair: DeviceKeypair, inner: Arc<T>, auth_channel: Arc<A>) -> Self
Create a new secure transport wrapper.
§Arguments
keypair- This device’s keypair for authenticationinner- The underlying transport to wrapauth_channel- Channel for exchanging authentication messages
Sourcepub fn is_authenticated(&self, peer_id: &NodeId) -> bool
pub fn is_authenticated(&self, peer_id: &NodeId) -> bool
Check if a peer is authenticated.
Sourcepub fn get_peer_device_id(&self, peer_id: &NodeId) -> Option<DeviceId>
pub fn get_peer_device_id(&self, peer_id: &NodeId) -> Option<DeviceId>
Get the DeviceId for an authenticated peer.
Sourcepub async fn authenticate_peer(
&self,
peer_id: &NodeId,
) -> Result<DeviceId, SecurityError>
pub async fn authenticate_peer( &self, peer_id: &NodeId, ) -> Result<DeviceId, SecurityError>
Authenticate a peer using challenge-response.
This performs mutual authentication:
- We send a challenge to the peer
- Peer responds with signed challenge
- We verify the response
- Peer sends us a challenge
- We respond with signed challenge
- Both sides are now authenticated
Sourcepub fn remove_authenticated_peer(&self, peer_id: &NodeId)
pub fn remove_authenticated_peer(&self, peer_id: &NodeId)
Remove a peer from the authenticated cache.
Sourcepub fn authenticated_peer_count(&self) -> usize
pub fn authenticated_peer_count(&self) -> usize
Get the number of authenticated peers.
Sourcepub fn authenticator(&self) -> &DeviceAuthenticator
pub fn authenticator(&self) -> &DeviceAuthenticator
Get the underlying authenticator (for testing or advanced use).
Trait Implementations§
Source§impl<T: MeshTransport + 'static, A: AuthenticationChannel + 'static> MeshTransport for SecureMeshTransport<T, A>
impl<T: MeshTransport + 'static, A: AuthenticationChannel + 'static> MeshTransport for SecureMeshTransport<T, A>
Source§fn start<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = TransportResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn start<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = TransportResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Start the transport layer
Source§fn stop<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = TransportResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn stop<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = TransportResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Stop the transport layer
Source§fn connect<'life0, 'life1, 'async_trait>(
&'life0 self,
peer_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = TransportResult<Box<dyn MeshConnection>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn connect<'life0, 'life1, 'async_trait>(
&'life0 self,
peer_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = TransportResult<Box<dyn MeshConnection>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Connect to a peer by node ID
Source§fn disconnect<'life0, 'life1, 'async_trait>(
&'life0 self,
peer_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = TransportResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn disconnect<'life0, 'life1, 'async_trait>(
&'life0 self,
peer_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = TransportResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Disconnect from a peer
Source§fn get_connection(&self, peer_id: &NodeId) -> Option<Box<dyn MeshConnection>>
fn get_connection(&self, peer_id: &NodeId) -> Option<Box<dyn MeshConnection>>
Get an existing connection to a peer
Source§fn peer_count(&self) -> usize
fn peer_count(&self) -> usize
Get the number of connected peers
Source§fn connected_peers(&self) -> Vec<NodeId>
fn connected_peers(&self) -> Vec<NodeId>
Get list of connected peer IDs
Source§fn is_connected(&self, peer_id: &NodeId) -> bool
fn is_connected(&self, peer_id: &NodeId) -> bool
Check if connected to a specific peer
Source§fn subscribe_peer_events(&self) -> PeerEventReceiver
fn subscribe_peer_events(&self) -> PeerEventReceiver
Subscribe to peer connection events
Source§fn send_to<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
peer_id: &'life1 NodeId,
data: &'life2 [u8],
) -> Pin<Box<dyn Future<Output = Result<usize, TransportError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn send_to<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
peer_id: &'life1 NodeId,
data: &'life2 [u8],
) -> Pin<Box<dyn Future<Output = Result<usize, TransportError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Send data to a connected peer. Read more
Source§fn get_peer_health(&self, peer_id: &NodeId) -> Option<ConnectionHealth>
fn get_peer_health(&self, peer_id: &NodeId) -> Option<ConnectionHealth>
Get connection health for a specific peer
Auto Trait Implementations§
impl<T, A> !Freeze for SecureMeshTransport<T, A>
impl<T, A> RefUnwindSafe for SecureMeshTransport<T, A>where
T: RefUnwindSafe,
A: RefUnwindSafe,
impl<T, A> Send for SecureMeshTransport<T, A>
impl<T, A> Sync for SecureMeshTransport<T, A>
impl<T, A> Unpin for SecureMeshTransport<T, A>
impl<T, A> UnsafeUnpin for SecureMeshTransport<T, A>
impl<T, A> UnwindSafe for SecureMeshTransport<T, A>where
T: RefUnwindSafe,
A: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more