mod group_context;
use std::fmt::Display;
#[cfg(test)]
use crate::ciphersuite::*;
use crate::extensions::*;
#[cfg(test)]
use crate::utils::*;
use openmls_traits::OpenMlsCryptoProvider;
use serde::{Deserialize, Serialize};
use tls_codec::*;
pub(crate) mod core_group;
pub(crate) mod public_group;
pub(crate) use core_group::*;
pub(crate) mod mls_group;
pub mod config;
pub(crate) mod errors;
pub use core_group::proposals::*;
pub use core_group::staged_commit::StagedCommit;
pub use errors::*;
pub use group_context::*;
pub use mls_group::config::*;
pub use mls_group::membership::*;
pub use mls_group::processing::*;
pub use mls_group::*;
pub use public_group::*;
#[cfg(test)]
pub(crate) use core_group::create_commit_params::*;
#[cfg(any(feature = "test-utils", test))]
pub(crate) mod tests;
#[cfg(any(feature = "test-utils", test))]
pub use group_context::GroupContext;
use openmls_traits::random::OpenMlsRand;
#[cfg(any(feature = "test-utils", test))]
pub use proposals::*;
#[derive(
Clone,
Debug,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Deserialize,
Serialize,
TlsDeserialize,
TlsSerialize,
TlsSize,
)]
pub struct GroupId {
value: VLBytes,
}
impl GroupId {
pub fn random(backend: &impl OpenMlsCryptoProvider) -> Self {
Self {
value: backend
.rand()
.random_vec(16)
.expect("Not enough randomness.")
.into(),
}
}
pub fn from_slice(bytes: &[u8]) -> Self {
GroupId {
value: bytes.into(),
}
}
pub fn as_slice(&self) -> &[u8] {
self.value.as_slice()
}
pub fn to_vec(&self) -> Vec<u8> {
self.value.clone().into()
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Deserialize,
Serialize,
TlsDeserialize,
TlsSerialize,
TlsSize,
)]
pub struct GroupEpoch(u64);
impl GroupEpoch {
pub(crate) fn increment(&mut self) {
self.0 += 1;
}
pub fn as_u64(&self) -> u64 {
self.0
}
}
impl From<u64> for GroupEpoch {
fn from(val: u64) -> Self {
Self(val)
}
}
impl Display for GroupEpoch {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_fmt(format_args!("{}", self.0))
}
}