use crate::proto::encrypted::MessageKey;
pub mod aead;
pub mod passthrough;
#[derive(Debug)]
pub struct PublicKeyError;
#[derive(Debug)]
pub struct EncryptionError;
pub trait EncryptionSchemeBuilder {
type Scheme: EncryptionScheme;
fn public_key(&self) -> &[u8];
fn receiver_public_key(
&mut self,
receiver_index: usize,
public_key: &[u8],
) -> Result<(), PublicKeyError>;
fn build(self) -> Self::Scheme;
}
pub trait EncryptionScheme: Send {
type Key: MessageKey;
fn encryption_key(
&mut self,
receiver: usize,
) -> Result<Self::Key, EncryptionError>;
fn decrypt_message<'m>(
&self,
associated_data: &[u8],
buffer: &'m mut [u8],
sender: usize,
) -> Result<&'m mut [u8], EncryptionError>;
}