Struct DecapsulationKey
pub struct DecapsulationKey<Id = AlgorithmId>where
Id: AlgorithmIdentifier,{ /* private fields */ }Expand description
A serializable decapulsation key usable with KEMs. This can be randomly generated with DecapsulationKey::generate.
Implementations§
§impl<Id> DecapsulationKey<Id>where
Id: AlgorithmIdentifier,
impl<Id> DecapsulationKey<Id>where
Id: AlgorithmIdentifier,
pub fn new(
alg: &'static Algorithm<Id>,
bytes: &[u8],
) -> Result<DecapsulationKey<Id>, KeyRejected>
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>
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>
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>
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>
pub fn encapsulation_key(&self) -> Result<EncapsulationKey<Id>, Unspecified>
Returns the EncapsulationKey associated with this DecapsulationKey.
§Errors
Returns Unspecified in the following cases:
- The
DecapsulationKeywas constructed from raw bytes usingSelf::new, as the underlying key representation does not include the public key component. In this case, theEncapsulationKeymust be serialized and restored separately. - An internal error occurs while extracting the public key.
pub fn decapsulate(
&self,
ciphertext: Ciphertext<'_>,
) -> Result<SharedSecret, Unspecified>
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
ciphertextis malformed or was not generated for this key’s algorithm. - The
DecapsulationKeywas constructed from invalid bytes (e.g., corrupted or tampered key material passed toSelf::new). Note thatSelf::newonly validates the size of the key bytes, not their cryptographic validity. - An internal cryptographic error occurs.
Trait Implementations§
§impl<Id> Debug for DecapsulationKey<Id>where
Id: AlgorithmIdentifier,
impl<Id> Debug for DecapsulationKey<Id>where
Id: AlgorithmIdentifier,
impl<Id> Send for DecapsulationKey<Id>where
Id: AlgorithmIdentifier,
impl<Id> Sync for DecapsulationKey<Id>where
Id: AlgorithmIdentifier,
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§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more