rustls/crypto/aws_lc_rs/pq/
mod.rs1use aws_lc_rs::kem;
2
3use crate::crypto::SupportedKxGroup;
4use crate::crypto::aws_lc_rs::kx_group;
5use crate::crypto::aws_lc_rs::pq::mlkem::MlKem;
6use crate::{Error, NamedGroup, PeerMisbehaved};
7
8mod hybrid;
9mod mlkem;
10
11pub static X25519MLKEM768: &dyn SupportedKxGroup = &hybrid::Hybrid {
15 classical: kx_group::X25519,
16 post_quantum: MLKEM768,
17 name: NamedGroup::X25519MLKEM768,
18 layout: hybrid::Layout {
19 classical_share_len: X25519_LEN,
20 post_quantum_client_share_len: MLKEM768_ENCAP_LEN,
21 post_quantum_server_share_len: MLKEM768_CIPHERTEXT_LEN,
22 post_quantum_first: true,
23 },
24};
25
26pub static SECP256R1MLKEM768: &dyn SupportedKxGroup = &hybrid::Hybrid {
30 classical: kx_group::SECP256R1,
31 post_quantum: MLKEM768,
32 name: NamedGroup::secp256r1MLKEM768,
33 layout: hybrid::Layout {
34 classical_share_len: SECP256R1_LEN,
35 post_quantum_client_share_len: MLKEM768_ENCAP_LEN,
36 post_quantum_server_share_len: MLKEM768_CIPHERTEXT_LEN,
37 post_quantum_first: false,
38 },
39};
40
41pub static MLKEM768: &dyn SupportedKxGroup = &MlKem {
45 alg: &kem::ML_KEM_768,
46 group: NamedGroup::MLKEM768,
47};
48
49pub static MLKEM1024: &dyn SupportedKxGroup = &MlKem {
53 alg: &kem::ML_KEM_1024,
54 group: NamedGroup::MLKEM1024,
55};
56
57const INVALID_KEY_SHARE: Error = Error::PeerMisbehaved(PeerMisbehaved::InvalidKeyShare);
58
59const X25519_LEN: usize = 32;
60const SECP256R1_LEN: usize = 65;
61const MLKEM768_CIPHERTEXT_LEN: usize = 1088;
62const MLKEM768_ENCAP_LEN: usize = 1184;