Skip to main content

Messages

Enum Messages 

Source
pub enum Messages {
    AuthChallenge(Challenge),
    AuthResponse(Identity, ChallengeResponse),
    GetRendezvous,
    RendezvousInfo(RendezvousCode),
    GetIdentity(RendezvousCode),
    IdentityInfo {
        fingerprint: IdentityFingerprint,
        identity: Identity,
    },
    Send {
        source: Option<IdentityFingerprint>,
        destination: IdentityFingerprint,
        payload: Vec<u8>,
    },
}
Expand description

Protocol messages exchanged between clients and the proxy server.

Messages flow through three distinct phases: authentication, optional rendezvous for peer discovery, and message routing between authenticated clients.

Variants§

§

AuthChallenge(Challenge)

Server sends a random challenge to a newly connected client.

The client must sign this challenge with its private key to authenticate. Sent immediately after WebSocket connection establishment.

§

AuthResponse(Identity, ChallengeResponse)

Client responds to authentication challenge with identity and signature.

Contains the client’s public Identity and a ChallengeResponse (signature). The server verifies the signature to authenticate the client.

§

GetRendezvous

Client requests a temporary rendezvous code.

The server will generate a unique code (format: “ABC-DEF-GHI”) and send it back via Messages::RendezvousInfo. The code expires after 5 minutes.

§

RendezvousInfo(RendezvousCode)

Server responds with the generated rendezvous code.

The code can be shared with other clients to enable them to discover this client’s identity via Messages::GetIdentity.

§

GetIdentity(RendezvousCode)

Client looks up an identity using a rendezvous code.

If the code is valid and hasn’t expired, the server responds with Messages::IdentityInfo. Codes are single-use and deleted after lookup.

§

IdentityInfo

Server responds with the identity associated with a rendezvous code.

Contains both the IdentityFingerprint (SHA256 hash) and full Identity (public key). After sending this, the rendezvous code is deleted.

Fields

§fingerprint: IdentityFingerprint

SHA256 fingerprint of the identity’s public key

§identity: Identity

The full public identity (MlDsa65 public key)

§

Send

A message routed from one client to another through the proxy.

When sent by clients, only contains destination and payload. The source is automatically set by the proxy based on the authenticated identity. When forwarded to recipients, includes the validated source fingerprint.

Fields

§source: Option<IdentityFingerprint>

The authenticated sender’s fingerprint (added by proxy)

§destination: IdentityFingerprint

The recipient’s fingerprint

§payload: Vec<u8>

Arbitrary payload data (should be encrypted by clients)

Trait Implementations§

Source§

impl Clone for Messages

Source§

fn clone(&self) -> Messages

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Messages

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Messages

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for Messages

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,