Crates.io | libcrux-kem |
lib.rs | libcrux-kem |
version | 0.0.3 |
created_at | 2024-07-03 08:06:13.653603+00 |
updated_at | 2025-07-01 06:52:07.348386+00 |
description | Libcrux KEM implementation |
homepage | https://github.com/cryspen/libcrux |
repository | https://github.com/cryspen/libcrux |
max_upload_size | |
id | 1290311 |
size | 56,229 |
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());