use openmls::group::GroupId;
use tls_codec::{TlsByteVecU8, TlsDeserialize, TlsSerialize, TlsSize};
use crate::hash::Hash;
use crate::secret_group::lts::{LongTermSecretEpoch, LongTermSecretError};
#[derive(Debug, Clone, PartialEq, TlsDeserialize, TlsSerialize, TlsSize)]
pub struct LongTermSecretCiphertext {
group_id: GroupId,
long_term_epoch: LongTermSecretEpoch,
nonce: TlsByteVecU8,
ciphertext_tag: TlsByteVecU8,
}
impl LongTermSecretCiphertext {
pub fn new(
group_instance_id: Hash,
long_term_epoch: LongTermSecretEpoch,
ciphertext: Vec<u8>,
nonce: Vec<u8>,
) -> Self {
Self {
group_id: GroupId::from_slice(&group_instance_id.to_bytes()),
long_term_epoch,
nonce: nonce.into(),
ciphertext_tag: ciphertext.into(),
}
}
pub fn group_instance_id(&self) -> Result<Hash, LongTermSecretError> {
let hex_str = hex::encode(&self.group_id.as_slice());
Ok(Hash::new(&hex_str)?)
}
pub fn long_term_epoch(&self) -> LongTermSecretEpoch {
self.long_term_epoch
}
pub fn nonce(&self) -> Vec<u8> {
self.nonce.as_slice().to_vec()
}
pub fn ciphertext_with_tag(&self) -> Vec<u8> {
self.ciphertext_tag.as_slice().to_vec()
}
}