use openmls::key_packages::KeyPackage as MlsKeyPackage;
use super::error::{MlsError, MlsServiceError};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct KeyPackageBytes {
bytes: Vec<u8>,
identity: Vec<u8>,
}
impl KeyPackageBytes {
pub fn new(bytes: Vec<u8>, identity: Vec<u8>) -> Self {
Self { bytes, identity }
}
pub fn as_bytes(&self) -> &[u8] {
&self.bytes
}
}
#[derive(Clone, Debug)]
pub enum GroupUpdate {
Add(KeyPackageBytes),
Remove(Vec<u8>),
}
#[derive(Clone, Debug)]
pub enum DecryptResult {
Application(Vec<u8>),
Removed,
ProposalStored,
CommitProcessed,
Ignored,
}
#[derive(Clone, Debug)]
pub struct CommitResult {
pub proposals: Vec<Vec<u8>>,
pub commit: Vec<u8>,
pub welcome: Option<Vec<u8>>,
}
pub fn key_package_bytes_from_json(json_bytes: Vec<u8>) -> Result<(Vec<u8>, Vec<u8>), MlsError> {
let kp: MlsKeyPackage =
serde_json::from_slice(&json_bytes).map_err(MlsServiceError::InvalidKeyPackage)?;
let identity = kp.leaf_node().credential().serialized_content().to_vec();
Ok((json_bytes, identity))
}