use openmls::prelude::Ciphersuite;
use crate::{
ds::OutboundPacket,
mls_crypto::{
CommitCandidate, DecryptResult, MlsCommitInput, MlsError, MlsMessageKind,
StagedCandidateResult,
},
protos::de_mls::messages::v1::AppMessage,
};
pub const CIPHERSUITE: Ciphersuite = Ciphersuite::MLS_128_DHKEMX25519_AES128GCM_SHA256_Ed25519;
pub const DEFAULT_COMMIT_BATCH_MAX: usize = 50;
pub trait MlsService {
fn conversation_id(&self) -> &str;
fn commit_batch_max(&self) -> usize {
DEFAULT_COMMIT_BATCH_MAX
}
fn delete(&mut self) -> Result<(), MlsError>;
fn members(&self) -> Result<Vec<Vec<u8>>, MlsError>;
fn is_member(&self, identity: &[u8]) -> bool;
fn current_epoch(&self) -> Result<u64, MlsError>;
fn create_commit_candidate(
&mut self,
updates: &[MlsCommitInput],
) -> Result<CommitCandidate, MlsError>;
fn merge_own_commit(&mut self) -> Result<(), MlsError>;
fn discard_own_commit(&mut self) -> Result<(), MlsError>;
fn stage_remote_commit(
&mut self,
proposals: &[Vec<u8>],
commit_bytes: &[u8],
) -> Result<StagedCandidateResult, MlsError>;
fn merge_staged_commit(&mut self) -> Result<(), MlsError>;
fn discard_staged_commit(&mut self) -> Result<(), MlsError>;
fn encrypt(&mut self, plaintext: &[u8]) -> Result<Vec<u8>, MlsError>;
fn build_message(
&mut self,
app_msg: &AppMessage,
app_id: &[u8],
) -> Result<OutboundPacket, MlsError>;
fn decrypt_application_only(&mut self, ciphertext: &[u8]) -> Result<DecryptResult, MlsError>;
fn decrypt(&mut self, ciphertext: &[u8]) -> Result<DecryptResult, MlsError>;
fn inspect_message_kind(&self, message_bytes: &[u8]) -> Result<MlsMessageKind, MlsError>;
}