libcrux-kem

Crates.iolibcrux-kem
lib.rslibcrux-kem
version0.0.3
created_at2024-07-03 08:06:13.653603+00
updated_at2025-07-01 06:52:07.348386+00
descriptionLibcrux KEM implementation
homepagehttps://github.com/cryspen/libcrux
repositoryhttps://github.com/cryspen/libcrux
max_upload_size
id1290311
size56,229
Crates (github:cryspen:crates)

documentation

README

Key Encapsulation Mechanism (KEM)

pre-verification

This crate provides a KEM interface.

Available algorithms:

  • [Algorithm::X25519]: x25519 ECDH KEM.
  • [Algorithm::Secp256r1]: NIST P256 ECDH KEM.
  • [Algorithm::MlKem512]: ML-KEM 512 from FIPS 203.
  • [Algorithm::MlKem768]: ML-KEM 768 from FIPS 203.
  • [Algorithm::MlKem1024]: ML-KEM 1024 from FIPS 203.
  • [Algorithm::X25519MlKem768Draft00]: Hybrid x25519 - ML-KEM 768 draft kem for hpke.
  • [Algorithm::XWingKemDraft06]: Hybrid x25519 - ML-KEM 768 draft xwing kem for hpke.
use libcrux_kem::*;

let mut rng = rand::rngs::OsRng;
let (sk_a, pk_a) = key_gen(Algorithm::MlKem768, &mut rng).unwrap();
let received_pk = pk_a.encode();

let pk = PublicKey::decode(Algorithm::MlKem768, &received_pk).unwrap();
let (ss_b, ct_b) = pk.encapsulate(&mut rng).unwrap();
let received_ct = ct_b.encode();

let ct_a = Ct::decode(Algorithm::MlKem768, &received_ct).unwrap();
let ss_a = ct_a.decapsulate(&sk_a).unwrap();
assert_eq!(ss_b.encode(), ss_a.encode());
Commit count: 4151

cargo fmt