Skip to main content

DecapsulationKey

Struct DecapsulationKey 

pub struct DecapsulationKey<Id = AlgorithmId>{ /* private fields */ }
Expand description

A serializable decapulsation key usable with KEMs. This can be randomly generated with DecapsulationKey::generate.

Implementations§

§

impl<Id> DecapsulationKey<Id>

pub fn new( alg: &'static Algorithm<Id>, bytes: &[u8], ) -> Result<DecapsulationKey<Id>, KeyRejected>

Creates a new KEM decapsulation key from raw bytes. This method MUST NOT be used to generate a new decapsulation key, rather it MUST be used to construct DecapsulationKey previously serialized to raw bytes.

alg is the Algorithm to be associated with the generated DecapsulationKey.

bytes is a slice of raw bytes representing a DecapsulationKey.

§Security Considerations

This function performs size validation but does not fully validate key material integrity. Invalid key bytes (e.g., corrupted or tampered data) may be accepted by this function but will cause Self::decapsulate to fail. Only use bytes that were previously obtained from Self::key_bytes on a validly generated key.

§Limitations

The DecapsulationKey returned by this function will NOT provide the associated EncapsulationKey via Self::encapsulation_key. The EncapsulationKey must be serialized and restored separately using EncapsulationKey::key_bytes and EncapsulationKey::new.

§Errors

Returns KeyRejected::too_small() if bytes.len() < alg.decapsulate_key_size().

Returns KeyRejected::too_large() if bytes.len() > alg.decapsulate_key_size().

Returns KeyRejected::unexpected_error() if the underlying cryptographic operation fails.

pub fn generate( alg: &'static Algorithm<Id>, ) -> Result<DecapsulationKey<Id>, Unspecified>

Generate a new KEM decapsulation key for the given algorithm.

§Errors

error::Unspecified when operation fails due to internal error.

pub fn algorithm(&self) -> &'static Algorithm<Id>

Return the algorithm associated with the given KEM decapsulation key.

pub fn key_bytes(&self) -> Result<DecapsulationKeyBytes<'static>, Unspecified>

Returns the raw bytes of the DecapsulationKey.

The returned bytes can be used with Self::new to reconstruct the DecapsulationKey.

§Errors

Returns Unspecified if the key bytes cannot be retrieved from the underlying cryptographic implementation.

pub fn encapsulation_key(&self) -> Result<EncapsulationKey<Id>, Unspecified>

Returns the EncapsulationKey associated with this DecapsulationKey.

§Errors

Returns Unspecified in the following cases:

  • The DecapsulationKey was constructed from raw bytes using Self::new, as the underlying key representation does not include the public key component. In this case, the EncapsulationKey must be serialized and restored separately.
  • An internal error occurs while extracting the public key.

pub fn decapsulate( &self, ciphertext: Ciphertext<'_>, ) -> Result<SharedSecret, Unspecified>

Performs the decapsulate operation using this DecapsulationKey on the given ciphertext.

ciphertext is the ciphertext generated by the encapsulate operation using the EncapsulationKey associated with this DecapsulationKey.

§Errors

Returns Unspecified in the following cases:

  • The ciphertext is malformed or was not generated for this key’s algorithm.
  • The DecapsulationKey was constructed from invalid bytes (e.g., corrupted or tampered key material passed to Self::new). Note that Self::new only validates the size of the key bytes, not their cryptographic validity.
  • An internal cryptographic error occurs.

Trait Implementations§

§

impl<Id> Debug for DecapsulationKey<Id>

§

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

Formats the value using the given formatter. Read more
§

impl<Id> Send for DecapsulationKey<Id>

§

impl<Id> Sync for DecapsulationKey<Id>

Auto Trait Implementations§

§

impl<Id> Freeze for DecapsulationKey<Id>

§

impl<Id> RefUnwindSafe for DecapsulationKey<Id>
where Id: RefUnwindSafe,

§

impl<Id> Unpin for DecapsulationKey<Id>

§

impl<Id> UnsafeUnpin for DecapsulationKey<Id>

§

impl<Id> UnwindSafe for DecapsulationKey<Id>
where Id: RefUnwindSafe,

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a rama_grpc::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
§

impl<T, U> RamaFrom<T> for U
where U: From<T>,

§

fn rama_from(value: T) -> U

§

impl<T, U, CrateMarker> RamaInto<U, CrateMarker> for T
where U: RamaFrom<T, CrateMarker>,

§

fn rama_into(self) -> U

§

impl<T, U> RamaTryFrom<T> for U
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

§

fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>

§

impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for T
where U: RamaTryFrom<T, CrateMarker>,

§

type Error = <U as RamaTryFrom<T, CrateMarker>>::Error

§

fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<T> Extension for T
where T: Any + Send + Sync + Debug + 'static,