use super::{HpkeAead, HpkeKdf, HpkeKem};
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub struct CipherSuite {
pub kem: HpkeKem,
pub kdf: HpkeKdf,
pub aead: HpkeAead,
}
impl CipherSuite {
pub const fn new(kem: HpkeKem, kdf: HpkeKdf, aead: HpkeAead) -> Self {
Self { kem, kdf, aead }
}
pub(crate) fn suite_id(self) -> [u8; 10] {
let mut out = [0u8; 10];
out[0..4].copy_from_slice(b"HPKE");
out[4..6].copy_from_slice(&self.kem.id().to_be_bytes());
out[6..8].copy_from_slice(&self.kdf.id().to_be_bytes());
out[8..10].copy_from_slice(&self.aead.id().to_be_bytes());
out
}
}
pub(crate) fn kem_suite_id(kem_id: u16) -> [u8; 5] {
let mut out = [0u8; 5];
out[0..3].copy_from_slice(b"KEM");
out[3..5].copy_from_slice(&kem_id.to_be_bytes());
out
}