Skip to main content

WireError

Enum WireError 

Source
#[non_exhaustive]
pub enum WireError { Codec(String), NoSessionKey, SealFailed, OpenFailed, SequenceExhausted, NoConsent, ConsentRevoked, ConsentProtocolViolation(ConsentViolation), }
Expand description

Errors returned by the wire codec.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Codec(String)

Bincode encode or decode failure. Wraps the inner reason for logs.

§

NoSessionKey

Session has no current or previous key. The caller must install a key via crate::Session::install_key before sealing or opening.

§

SealFailed

AEAD seal failed. In practice this means the key material was rejected by the underlying ChaCha20-Poly1305 implementation — should not happen with a valid 32-byte key and under-capacity plaintext.

§

OpenFailed

AEAD open failed. Either:

  • the envelope is under the minimum length (12 nonce + 16 tag),
  • the ciphertext fails Poly1305 verification (wrong key, corruption, or tampering), or
  • the replay window rejected a valid-ciphertext envelope as a duplicate or too-old sequence.

Callers SHOULD NOT distinguish these sub-cases in production — doing so leaks timing or structure to an attacker. Drop the envelope and keep the session alive.

§

SequenceExhausted

The 32-bit nonce sequence space is exhausted. The caller must rekey before sealing more envelopes; continuing would wrap the sequence counter and cause nonce reuse, which catastrophically breaks ChaCha20-Poly1305 confidentiality and integrity.

Reached after 2^32 seals on a single installed key — approximately 4.5 years at 30 fps, or ~40 hours at 30 kHz. Any production deployment should rekey on a much shorter cadence (the reference default is 30 minutes), so this variant surfaces a programming error: the caller disabled or failed to trigger rekey.

§

NoConsent

Available on crate feature consent only.

Seal or open of an application FRAME (or FRAME_LZ4) payload was attempted on a session whose consent state is not Approved. The peer must complete the consent ceremony — seal a ConsentRequest, receive an approving ConsentResponse — before application data can flow.

Only surfaced when the consent feature is enabled. Sessions compiled without the feature behave as draft-01 (no enforcement).

§

ConsentRevoked

Available on crate feature consent only.

Seal or open of an application FRAME (or FRAME_LZ4) payload was attempted on a session that entered the Revoked terminal state. The session is finished; the caller must tear it down and — if appropriate — start a new one with a new consent ceremony.

§

ConsentProtocolViolation(ConsentViolation)

Available on crate feature consent only.

Consent state machine transition is a protocol violation (SPEC draft-03 §12.6). Surfaced by crate::Session::observe_consent when the peer emits a consent event that cannot legally follow the current state — for example a Revocation from Requested (revoking something that was never approved), or a Denied that contradicts a prior Approved for the same request_id.

This variant signals “the peer’s state machine is broken or compromised.” The wire layer does NOT own the transport, so it cannot tear down the connection itself. Callers SHOULD treat this as a hard fault and terminate the session.

Implementations§

Source§

impl WireError

Source

pub fn encode<E: Display>(e: E) -> Self

Construct a Codec(...) from any Display encode error. Primarily used by Sealable::to_bin implementations.

Source

pub fn decode<E: Display>(e: E) -> Self

Construct a Codec(...) from any Display decode error. Primarily used by Sealable::from_bin implementations.

Trait Implementations§

Source§

impl Debug for WireError

Source§

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

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

impl Display for WireError

Source§

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

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

impl Error for WireError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. 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, 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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