rustls/crypto/aws_lc_rs/pq/
mod.rs

1use crate::crypto::SupportedKxGroup;
2use crate::crypto::aws_lc_rs::kx_group;
3use crate::{Error, NamedGroup, PeerMisbehaved};
4
5mod hybrid;
6mod mlkem;
7
8/// This is the [X25519MLKEM768] key exchange.
9///
10/// [X25519MLKEM768]: <https://datatracker.ietf.org/doc/draft-ietf-tls-ecdhe-mlkem/>
11pub static X25519MLKEM768: &dyn SupportedKxGroup = &hybrid::Hybrid {
12    classical: kx_group::X25519,
13    post_quantum: MLKEM768,
14    name: NamedGroup::X25519MLKEM768,
15    layout: hybrid::Layout {
16        classical_share_len: X25519_LEN,
17        post_quantum_client_share_len: MLKEM768_ENCAP_LEN,
18        post_quantum_server_share_len: MLKEM768_CIPHERTEXT_LEN,
19        post_quantum_first: true,
20    },
21};
22
23/// This is the [SECP256R1MLKEM768] key exchange.
24///
25/// [SECP256R1MLKEM768]: <https://datatracker.ietf.org/doc/draft-ietf-tls-ecdhe-mlkem/>
26pub static SECP256R1MLKEM768: &dyn SupportedKxGroup = &hybrid::Hybrid {
27    classical: kx_group::SECP256R1,
28    post_quantum: MLKEM768,
29    name: NamedGroup::secp256r1MLKEM768,
30    layout: hybrid::Layout {
31        classical_share_len: SECP256R1_LEN,
32        post_quantum_client_share_len: MLKEM768_ENCAP_LEN,
33        post_quantum_server_share_len: MLKEM768_CIPHERTEXT_LEN,
34        post_quantum_first: false,
35    },
36};
37
38/// This is the [MLKEM] key exchange.
39///
40/// [MLKEM]: https://datatracker.ietf.org/doc/draft-connolly-tls-mlkem-key-agreement
41pub static MLKEM768: &dyn SupportedKxGroup = &mlkem::MlKem768;
42
43const INVALID_KEY_SHARE: Error = Error::PeerMisbehaved(PeerMisbehaved::InvalidKeyShare);
44
45const X25519_LEN: usize = 32;
46const SECP256R1_LEN: usize = 65;
47const MLKEM768_CIPHERTEXT_LEN: usize = 1088;
48const MLKEM768_ENCAP_LEN: usize = 1184;