mls_spec/drafts/
hpq_mls_combiner.rs1use crate::{
2 defs::{CiphersuiteId, Epoch},
3 group::GroupId,
4};
5
6use super::mls_extensions::safe_application::{Component, ComponentId};
7
8pub const COMPONENT_ID: ComponentId = 0xFCBE_0000; static_assertions::const_assert!(
10 *super::mls_extensions::COMPONENT_RESERVED_PRIVATE_RANGE.start() <= COMPONENT_ID
11 && COMPONENT_ID <= *super::mls_extensions::COMPONENT_RESERVED_PRIVATE_RANGE.end()
12);
13
14#[derive(
15 Debug,
16 Clone,
17 Copy,
18 PartialEq,
19 Eq,
20 Default,
21 tls_codec::TlsSize,
22 tls_codec::TlsDeserialize,
23 tls_codec::TlsSerialize,
24)]
25#[cfg_attr(
26 feature = "serde",
27 derive(serde_repr::Serialize_repr, serde_repr::Deserialize_repr)
28)]
29#[repr(u8)]
30pub enum HpqMode {
31 #[default]
32 ConfidentialityOnly = 0,
33 ConfidentialityAndAuthenticity = 1,
34}
35
36#[derive(
37 Debug,
38 Clone,
39 PartialEq,
40 Eq,
41 Default,
42 tls_codec::TlsSize,
43 tls_codec::TlsDeserialize,
44 tls_codec::TlsSerialize,
45)]
46#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
47pub struct HpqMlsInfo {
48 #[tls_codec(with = "crate::tlspl::bytes")]
49 pub traditional_session_group_id: GroupId,
50 #[tls_codec(with = "crate::tlspl::bytes")]
51 pub post_quantum_session_group_id: GroupId,
52 pub mode: HpqMode,
53 pub traditional_cipher_suite: CiphersuiteId,
54 pub post_quantum_cipher_suite: CiphersuiteId,
55 pub traditional_epoch: Epoch,
56 pub post_quantum_epoch: Epoch,
57}
58
59impl Component for HpqMlsInfo {
60 fn component_id() -> ComponentId {
61 COMPONENT_ID
62 }
63}