Struct noise_protocol::HandshakeState [−][src]
Noise handshake state.
Methods
impl<D, C, H> HandshakeState<D, C, H> where
D: DH,
C: Cipher,
H: Hash,
[src]
impl<D, C, H> HandshakeState<D, C, H> where
D: DH,
C: Cipher,
H: Hash,
pub fn new<P>(
pattern: HandshakePattern,
is_initiator: bool,
prologue: P,
s: Option<D::Key>,
e: Option<D::Key>,
rs: Option<D::Pubkey>,
re: Option<D::Pubkey>
) -> Self where
P: AsRef<[u8]>,
[src]
pub fn new<P>(
pattern: HandshakePattern,
is_initiator: bool,
prologue: P,
s: Option<D::Key>,
e: Option<D::Key>,
rs: Option<D::Pubkey>,
re: Option<D::Pubkey>
) -> Self where
P: AsRef<[u8]>,
Initialize a handshake state.
If e
is None
, a new ephemeral key will be generated if necessary
when write_message
.
Setting Explicit Ephemeral Key
An explicit e
should only be specified for testing purposes, or in
fallback patterns. If you do pass in an explicit e
, HandshakeState
will use it as is and will not generate new ephemeral keys in
write_message
.
pub fn get_next_message_overhead(&self) -> usize
[src]
pub fn get_next_message_overhead(&self) -> usize
Calculate the size overhead of the next message.
Panics
If these is no more message to read/write, i.e., if the handshake is already completed.
pub fn write_message_vec(&mut self, payload: &[u8]) -> Result<Vec<u8>, Error>
[src]
pub fn write_message_vec(&mut self, payload: &[u8]) -> Result<Vec<u8>, Error>
Like write_message
, but returns a Vec
.
pub fn write_message(
&mut self,
payload: &[u8],
out: &mut [u8]
) -> Result<(), Error>
[src]
pub fn write_message(
&mut self,
payload: &[u8],
out: &mut [u8]
) -> Result<(), Error>
Takes a payload and write the generated handshake message to
out
.
Error Kinds
Panics
-
If a required static key is not set.
-
If
out.len() != payload.len() + self.get_next_message_overhead()
. -
If it is not our turn to write.
-
If the handshake has already completed.
pub fn read_message(&mut self, data: &[u8], out: &mut [u8]) -> Result<(), Error>
[src]
pub fn read_message(&mut self, data: &[u8], out: &mut [u8]) -> Result<(), Error>
Takes a handshake message, process it and update our internal
state, and write the encapsulated payload to out
.
Error Kinds
- DH: DH operation failed.
- NeedPSK: A PSK token is encountered but none is available.
- Decryption: Decryption failed.
Error Recovery
If read_message
fails, the whole
HandshakeState
may be in invalid state and should not be used to
read or write any further messages. (But
get_re()
and
get_rs()
is allowed.) In case error recovery
is desirable, clone
the HandshakeState
before
calling read_message
.
Panics
-
If
out.len() + self.get_next_message_overhead() != data.len()
.(Notes that this implies
data.len() >= overhead
.) -
If a required static key is not set.
-
If it is not our turn to read.
-
If the handshake has already completed.
pub fn read_message_vec(&mut self, data: &[u8]) -> Result<Vec<u8>, Error>
[src]
pub fn read_message_vec(&mut self, data: &[u8]) -> Result<Vec<u8>, Error>
Similar to read_message
, but returns
result as a Vec
.
In addition to possible errors from
read_message
,
TooShort may be returned.
pub fn push_psk(&mut self, psk: &[u8])
[src]
pub fn push_psk(&mut self, psk: &[u8])
pub fn completed(&self) -> bool
[src]
pub fn completed(&self) -> bool
Whether handshake has completed.
pub fn get_hash(&self) -> &[u8]
[src]
pub fn get_hash(&self) -> &[u8]
Get handshake hash. Useful for e.g., channel binding.
pub fn get_ciphers(&self) -> (CipherState<C>, CipherState<C>)
[src]
pub fn get_ciphers(&self) -> (CipherState<C>, CipherState<C>)
Get ciphers that can be used to encrypt/decrypt further messages. The
first CipherState
is for initiator to responder, and the second for
responder to initiator.
Should be called after handshake is
completed
.
pub fn get_rs(&self) -> Option<D::Pubkey>
[src]
pub fn get_rs(&self) -> Option<D::Pubkey>
Get remote static pubkey, if available.
pub fn get_re(&self) -> Option<D::Pubkey>
[src]
pub fn get_re(&self) -> Option<D::Pubkey>
pub fn get_is_initiator(&self) -> bool
[src]
pub fn get_is_initiator(&self) -> bool
Get whether this HandshakeState
is created as initiator.
pub fn get_pattern(&self) -> &HandshakePattern
[src]
pub fn get_pattern(&self) -> &HandshakePattern
Get handshake pattern this HandshakeState
uses.
Trait Implementations
Auto Trait Implementations
impl<D, C, H> Send for HandshakeState<D, C, H> where
<C as Cipher>::Key: Send,
<D as DH>::Key: Send,
<H as Hash>::Output: Send,
<D as DH>::Pubkey: Send,
impl<D, C, H> Send for HandshakeState<D, C, H> where
<C as Cipher>::Key: Send,
<D as DH>::Key: Send,
<H as Hash>::Output: Send,
<D as DH>::Pubkey: Send,
impl<D, C, H> Sync for HandshakeState<D, C, H> where
<C as Cipher>::Key: Sync,
<D as DH>::Key: Sync,
<H as Hash>::Output: Sync,
<D as DH>::Pubkey: Sync,
impl<D, C, H> Sync for HandshakeState<D, C, H> where
<C as Cipher>::Key: Sync,
<D as DH>::Key: Sync,
<H as Hash>::Output: Sync,
<D as DH>::Pubkey: Sync,