EncapsulationScheme

Enum EncapsulationScheme 

Source
pub enum EncapsulationScheme {
    X25519,
    MLKEM512,
    MLKEM768,
    MLKEM1024,
}
Expand description

Supported key encapsulation mechanisms.

Key Encapsulation Mechanisms (KEMs) are cryptographic algorithms designed to securely establish a shared secret between parties in public-key cryptography. They are often used to encapsulate (wrap) symmetric keys for secure key exchange.

This enum represents the various KEM schemes supported in this crate:

  • X25519: A Diffie-Hellman key exchange mechanism using the Curve25519 elliptic curve
  • ML-KEM (Module Lattice-based Key Encapsulation Mechanism): Post-quantum secure KEM at different security levels (512, 768, 1024)

Variants§

§

X25519

X25519 key agreement (default)

§

MLKEM512

ML-KEM512 post-quantum key encapsulation (NIST level 1)

§

MLKEM768

ML-KEM768 post-quantum key encapsulation (NIST level 3)

§

MLKEM1024

ML-KEM1024 post-quantum key encapsulation (NIST level 5)

Implementations§

Source§

impl EncapsulationScheme

Source

pub fn keypair(self) -> (EncapsulationPrivateKey, EncapsulationPublicKey)

Generates a new random key pair for the specified encapsulation scheme.

§Returns

A tuple containing the private key and public key for the selected encapsulation scheme.

§Example
use bc_components::EncapsulationScheme;

// Generate a key pair using X25519 (default)
let (private_key, public_key) = EncapsulationScheme::default().keypair();

// Generate a key pair using ML-KEM768
let (private_key, public_key) = EncapsulationScheme::MLKEM768.keypair();
Source

pub fn keypair_using( self, rng: &mut impl RandomNumberGenerator, ) -> Result<(EncapsulationPrivateKey, EncapsulationPublicKey)>

Generates a deterministic key pair using the provided random number generator.

§Parameters
  • rng - A mutable reference to a random number generator
§Returns

A Result containing a tuple with the private key and public key if successful, or an error if deterministic key generation is not supported for the selected scheme.

§Errors

Returns an error if deterministic key generation is not supported for the selected encapsulation scheme (currently only X25519 supports this).

§Example
use bc_components::EncapsulationScheme;
use bc_rand::SecureRandomNumberGenerator;

let mut rng = SecureRandomNumberGenerator;
let result = EncapsulationScheme::X25519.keypair_using(&mut rng);
assert!(result.is_ok());

// ML-KEM schemes don't support deterministic key generation
let result = EncapsulationScheme::MLKEM512.keypair_using(&mut rng);
assert!(result.is_err());

Trait Implementations§

Source§

impl Clone for EncapsulationScheme

Source§

fn clone(&self) -> EncapsulationScheme

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 EncapsulationScheme

Source§

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

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

impl Default for EncapsulationScheme

Source§

fn default() -> EncapsulationScheme

Returns the “default value” for a type. Read more
Source§

impl PartialEq for EncapsulationScheme

Source§

fn eq(&self, other: &EncapsulationScheme) -> 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 Copy for EncapsulationScheme

Source§

impl StructuralPartialEq for EncapsulationScheme

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> 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

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