HandshakeState

Struct HandshakeState 

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

A state machine encompassing the handshake phase of a Noise session.

Note: you are probably looking for Builder to get started.

See: https://noiseprotocol.org/noise.html#the-handshakestate-object

Implementations§

Source§

impl HandshakeState

Source

pub fn was_write_payload_encrypted(&self) -> bool

This method will return true if the previous write payload was encrypted.

See Payload Security Properties for more information on the specific properties of your chosen handshake pattern.

§Examples
ⓘ
let mut session = Builder::new("Noise_NN_25519_AESGCM_SHA256".parse()?)
    .build_initiator()?;

// write message...

assert!(session.was_write_payload_encrypted());
Source

pub fn write_message( &mut self, payload: &[u8], message: &mut [u8], ) -> Result<usize, Error>

Construct a message from payload (and pending handshake tokens if in handshake state), and writes it to the message buffer.

Returns the size of the written payload.

§Errors

Will result in Error::Input if the size of the output exceeds the max message length in the Noise Protocol (65535 bytes).

Source

pub fn read_message( &mut self, message: &[u8], payload: &mut [u8], ) -> Result<usize, Error>

Reads a noise message from input

Returns the size of the payload written to payload.

§Errors

Will result in Error::Decrypt if the contents couldn’t be decrypted and/or the authentication tag didn’t verify.

Will result in StateProblem::Exhausted if the max nonce count overflows.

Source

pub fn set_psk(&mut self, location: usize, key: &[u8]) -> Result<(), Error>

Set the preshared key at the specified location. It is up to the caller to correctly set the location based on the specified handshake - Snow won’t stop you from placing a PSK in an unused slot.

§Errors

Will result in Error::Input if the PSK is not the right length or the location is out of bounds.

Source

pub fn get_remote_static(&self) -> Option<&[u8]>

Get the remote party’s static public key, if available.

Note: will return None if either the chosen Noise pattern doesn’t necessitate a remote static key, or if the remote static key is not yet known (as can be the case in the XX pattern, for example).

Source

pub fn get_handshake_hash(&self) -> &[u8] ⓘ

Get the handshake hash.

Returns a slice of length Hasher.hash_len() (i.e. HASHLEN for the chosen Hash function).

Source

pub fn is_initiator(&self) -> bool

Check if this session was started with the “initiator” role.

Source

pub fn is_handshake_finished(&self) -> bool

Check if the handshake is finished and into_transport_mode() can now be called.

Source

pub fn is_my_turn(&self) -> bool

Check whether it is our turn to send in the handshake state machine

Source

pub fn into_transport_mode(self) -> Result<TransportState, Error>

Convert this HandshakeState into a TransportState with an internally stored nonce.

Source

pub fn into_stateless_transport_mode( self, ) -> Result<StatelessTransportState, Error>

Convert this HandshakeState into a StatelessTransportState without an internally stored nonce.

Trait Implementations§

Source§

impl Debug for HandshakeState

Source§

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

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

impl TryFrom<HandshakeState> for StatelessTransportState

Source§

type Error = Error

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

fn try_from(old: HandshakeState) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl TryFrom<HandshakeState> for TransportState

Source§

type Error = Error

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

fn try_from(old: HandshakeState) -> Result<Self, Self::Error>

Performs the conversion.

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, 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, 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.