use core::ops::Deref;
use mls_rs_codec::{MlsDecode, MlsEncode, MlsSize};
#[derive(Debug, Copy, Clone, Eq, PartialEq, MlsSize, MlsEncode, MlsDecode, PartialOrd, Ord)]
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(transparent)]
pub struct CipherSuite(u16);
impl From<u16> for CipherSuite {
fn from(value: u16) -> Self {
CipherSuite(value)
}
}
impl From<CipherSuite> for u16 {
fn from(val: CipherSuite) -> Self {
val.0
}
}
impl Deref for CipherSuite {
type Target = u16;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl CipherSuite {
pub const CURVE25519_AES128: CipherSuite = CipherSuite(1);
pub const P256_AES128: CipherSuite = CipherSuite(2);
pub const CURVE25519_CHACHA: CipherSuite = CipherSuite(3);
pub const CURVE448_AES256: CipherSuite = CipherSuite(4);
pub const P521_AES256: CipherSuite = CipherSuite(5);
pub const CURVE448_CHACHA: CipherSuite = CipherSuite(6);
pub const P384_AES256: CipherSuite = CipherSuite(7);
#[cfg(feature = "post-quantum")]
pub const ML_KEM_512: CipherSuite = CipherSuite(65001);
#[cfg(feature = "post-quantum")]
pub const ML_KEM_768: CipherSuite = CipherSuite(65002);
#[cfg(feature = "post-quantum")]
pub const ML_KEM_1024: CipherSuite = CipherSuite(65003);
#[cfg(feature = "post-quantum")]
pub const ML_KEM_768_X25519: CipherSuite = CipherSuite(65100);
pub const fn new(value: u16) -> CipherSuite {
CipherSuite(value)
}
pub const fn raw_value(&self) -> u16 {
self.0
}
pub fn all() -> impl Iterator<Item = CipherSuite> {
(1..=7).map(CipherSuite)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[repr(u8)]
pub enum HpkeModeId {
Base = 0x00,
Psk = 0x01,
Auth = 0x02,
AuthPsk = 0x03,
}