EncryptedMessage

Struct EncryptedMessage 

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

A secure encrypted message using IETF ChaCha20-Poly1305 authenticated encryption.

EncryptedMessage represents data that has been encrypted using a symmetric key with the ChaCha20-Poly1305 AEAD (Authenticated Encryption with Associated Data) construction as specified in RFC-8439.

An EncryptedMessage contains:

  • ciphertext: The encrypted data (same length as the original plaintext)
  • aad: Additional Authenticated Data that is not encrypted but is authenticated (optional)
  • nonce: A 12-byte number used once for this specific encryption operation
  • auth: A 16-byte authentication tag that verifies the integrity of the message

The aad field is often used to include the Digest of the plaintext, which allows verification of the plaintext after decryption and preserves the unique identity of the data when used with structures like Gordian Envelope.

To facilitate decoding, it is recommended that the plaintext of an EncryptedMessage be tagged CBOR.

CDDL:

EncryptedMessage =
    #6.40002([ ciphertext: bstr, nonce: bstr, auth: bstr, ? aad: bstr ]) ; TAG_ENCRYPTED

Implementations§

Source§

impl EncryptedMessage

Source

pub fn new( ciphertext: impl AsRef<[u8]>, aad: impl AsRef<[u8]>, nonce: Nonce, auth: AuthenticationTag, ) -> Self

Restores an EncryptedMessage from its CBOR representation.

This is a low-level function that is not normally needed.

Source

pub fn ciphertext(&self) -> &[u8]

Returns a reference to the ciphertext data.

Source

pub fn aad(&self) -> &[u8]

Returns a reference to the additional authenticated data (AAD).

Source

pub fn nonce(&self) -> &Nonce

Returns a reference to the nonce value used for encryption.

Source

pub fn authentication_tag(&self) -> &AuthenticationTag

Returns a reference to the authentication tag value used for encryption.

Source

pub fn aad_cbor(&self) -> Option<CBOR>

Returns a CBOR representation in the AAD field, if it exists.

Source

pub fn aad_digest(&self) -> Option<Digest>

Returns a Digest instance if the AAD data can be parsed as CBOR.

Source

pub fn has_digest(&self) -> bool

Returns true if the AAD data can be parsed as CBOR.

Trait Implementations§

Source§

impl AsRef<EncryptedMessage> for EncryptedMessage

Implements AsRef<EncryptedMessage> to allow self-reference.

Source§

fn as_ref(&self) -> &EncryptedMessage

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl CBORTagged for EncryptedMessage

Implements CBORTagged to provide the CBOR tag for the EncryptedMessage.

Source§

fn cbor_tags() -> Vec<Tag>

Returns the CBOR tags associated with this type. Read more
Source§

impl CBORTaggedDecodable for EncryptedMessage

Implements CBORTaggedDecodable to provide CBOR decoding functionality.

Source§

fn from_untagged_cbor(cbor: CBOR) -> Result<Self>

Creates an instance of this type by decoding it from untagged CBOR. Read more
Source§

fn from_tagged_cbor(cbor: CBOR) -> Result<Self, Error>
where Self: Sized,

Creates an instance of this type by decoding it from tagged CBOR. Read more
Source§

fn from_tagged_cbor_data(data: impl AsRef<[u8]>) -> Result<Self, Error>
where Self: Sized,

Creates an instance of this type by decoding it from binary encoded tagged CBOR. Read more
Source§

fn from_untagged_cbor_data(data: impl AsRef<[u8]>) -> Result<Self, Error>
where Self: Sized,

Creates an instance of this type by decoding it from binary encoded untagged CBOR. Read more
Source§

impl CBORTaggedEncodable for EncryptedMessage

Implements CBORTaggedEncodable to provide CBOR encoding functionality.

Source§

fn untagged_cbor(&self) -> CBOR

Returns the untagged CBOR encoding of this instance. Read more
Source§

fn tagged_cbor(&self) -> CBOR

Returns the tagged CBOR encoding of this instance. Read more
Source§

fn tagged_cbor_data(&self) -> Vec<u8>

Returns the tagged value in CBOR binary representation. Read more
Source§

impl Clone for EncryptedMessage

Source§

fn clone(&self) -> EncryptedMessage

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 EncryptedMessage

Implements Debug formatting to display the message contents in a structured format.

Source§

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

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

impl DigestProvider for EncryptedMessage

Implements DigestProvider to provide the digest stored in the AAD field.

Source§

fn digest(&self) -> Cow<'_, Digest>

Returns a digest that uniquely characterizes the content of the implementing type.
Source§

impl From<EncryptedMessage> for CBOR

Implements conversion from EncryptedMessage to CBOR for serialization.

Source§

fn from(value: EncryptedMessage) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for EncryptedMessage

Source§

fn eq(&self, other: &EncryptedMessage) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl TryFrom<CBOR> for EncryptedMessage

Implements TryFrom<CBOR> for EncryptedMessage to support conversion from CBOR data.

Source§

type Error = Error

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

fn try_from(cbor: CBOR) -> Result<Self>

Performs the conversion.
Source§

impl Eq for EncryptedMessage

Source§

impl StructuralPartialEq for EncryptedMessage

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> CBORDecodable for T
where T: TryFrom<CBOR, Error = Error>,

Source§

fn try_from_cbor(cbor: &CBOR) -> Result<Self, Error>

Source§

impl<T> CBOREncodable for T
where T: Into<CBOR> + Clone,

Source§

fn to_cbor(&self) -> CBOR

Converts this value to a CBOR object. Read more
Source§

fn to_cbor_data(&self) -> Vec<u8>

Converts this value directly to binary CBOR data. 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<T> URDecodable for T

Source§

fn from_ur(ur: impl AsRef<UR>) -> Result<Self, Error>
where Self: Sized,

Source§

fn from_ur_string(ur_string: impl Into<String>) -> Result<Self, Error>
where Self: Sized,

Source§

impl<T> UREncodable for T

Source§

fn ur(&self) -> UR

Returns the UR representation of the object.
Source§

fn ur_string(&self) -> String

Returns the UR string representation of the object.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> CBORCodable for T

Source§

impl<T> CBORTaggedCodable for T

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> URCodable for T