Skip to main content

DeviceAuthenticator

Struct DeviceAuthenticator 

Source
pub struct DeviceAuthenticator { /* private fields */ }
Expand description

Device authenticator manages challenge-response authentication.

§Overview

The authenticator uses Ed25519 signatures for mutual authentication:

  1. Generate a challenge with random nonce and timestamp
  2. Peer signs the challenge and returns their public key
  3. Verify signature and cache the verified peer identity

§Example

use peat_protocol::security::{DeviceKeypair, DeviceAuthenticator};

let keypair = DeviceKeypair::generate();
let authenticator = DeviceAuthenticator::new(keypair);

// Generate challenge for peer
let challenge = authenticator.generate_challenge();

// Peer creates response
let response = peer_authenticator.respond_to_challenge(&challenge)?;

// Verify response
let peer_id = authenticator.verify_response(&response)?;
println!("Authenticated peer: {}", peer_id);

Implementations§

Source§

impl DeviceAuthenticator

Source

pub fn new(keypair: DeviceKeypair) -> Self

Create a new authenticator with the given keypair.

Source

pub fn with_timeout(keypair: DeviceKeypair, challenge_timeout: Duration) -> Self

Create an authenticator with a custom challenge timeout.

Source

pub fn device_id(&self) -> DeviceId

Get this device’s ID.

Source

pub fn public_key_bytes(&self) -> [u8; 32]

Get this device’s public key bytes.

Source

pub fn generate_challenge(&self) -> Challenge

Generate a challenge for authenticating a peer.

The challenge contains:

  • Random 32-byte nonce
  • Current timestamp
  • This device’s ID
  • Expiration timestamp
Source

pub fn respond_to_challenge( &self, challenge: &Challenge, ) -> Result<SignedChallengeResponse, SecurityError>

Create a signed response to a challenge.

Signs the challenge data with this device’s private key.

Source

pub fn verify_response( &self, response: &SignedChallengeResponse, ) -> Result<DeviceId, SecurityError>

Verify a peer’s challenge response.

On success, caches the peer’s identity and returns their DeviceId.

Source

pub fn is_verified(&self, device_id: &DeviceId) -> bool

Check if a peer is verified.

Source

pub fn get_verified_peer(&self, device_id: &DeviceId) -> Option<VerifiedPeer>

Get a verified peer’s info.

Source

pub fn remove_peer(&self, device_id: &DeviceId)

Remove a peer from the verified cache.

Source

pub fn clear_verified_peers(&self)

Clear all verified peers.

Source

pub fn verified_peer_count(&self) -> usize

Get number of verified peers.

Trait Implementations§

Source§

impl Debug for DeviceAuthenticator

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more