use alloc::vec::Vec;
use core::fmt::Debug;
use hybrid_array::{Array, ArraySize};
pub trait EncryptionPrimitive {
type Key;
type NonceSize: ArraySize;
type Error: Debug;
fn encrypt(key: &Self::Key, plaintext: &[u8]) -> (Vec<u8>, Array<u8, Self::NonceSize>);
fn encrypt_with_nonce(
key: &Self::Key,
nonce: &Array<u8, Self::NonceSize>,
plaintext: &[u8],
) -> Vec<u8>;
fn decrypt(
key: &Self::Key,
nonce: &Array<u8, Self::NonceSize>,
ciphertext: &[u8],
) -> Result<Vec<u8>, Self::Error>;
}
#[cfg(feature = "chacha20poly1305")]
pub mod chacha20poly1305;
#[cfg(feature = "aes-gcm")]
pub mod aes_gcm;