1#[cfg(feature = "alloc")]
4use alloc::vec::Vec;
5use rand_core::{CryptoRng, TryCryptoRng};
6
7use crate::errors::Result;
8
9pub trait RandomizedEncryptor {
11 fn encrypt_with_rng_into<'a, R: TryCryptoRng + ?Sized>(
13 &self,
14 rng: &mut R,
15 msg: &[u8],
16 storage: &'a mut [u8],
17 ) -> Result<&'a [u8]>;
18
19 #[cfg(feature = "alloc")]
21 fn encrypt_with_rng<R: CryptoRng + ?Sized>(&self, rng: &mut R, msg: &[u8]) -> Result<Vec<u8>>;
22}
23
24pub trait Decryptor {
26 #[cfg(feature = "alloc")]
28 fn decrypt(&self, ciphertext: &[u8]) -> Result<Vec<u8>>;
29}
30
31pub trait RandomizedDecryptor {
33 #[cfg(feature = "alloc")]
35 fn decrypt_with_rng<R: CryptoRng + ?Sized>(
36 &self,
37 rng: &mut R,
38 ciphertext: &[u8],
39 ) -> Result<Vec<u8>>;
40}
41
42pub trait EncryptingKeypair {
44 type EncryptingKey: Clone;
46
47 fn encrypting_key(&self) -> Self::EncryptingKey;
50}