rustls/crypto/aws_lc_rs/pq/
mod.rs

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