Skip to main content

object_rainbow_encrypted/
tuple_key.rs

1use crate::Key;
2
3#[derive(Debug, thiserror::Error)]
4pub enum LayeredError<O, I> {
5    #[error(transparent)]
6    Outer(O),
7    #[error(transparent)]
8    Inner(I),
9}
10
11/// Inner "key" here is expected to be more of a "data filter" like compression.
12impl<O: Key, I: Key> Key for (O, I) {
13    type Error = LayeredError<O::Error, I::Error>;
14
15    fn encrypt(&self, data: &[u8]) -> Vec<u8> {
16        self.0.encrypt(&self.1.encrypt(data))
17    }
18
19    fn decrypt(&self, data: &[u8]) -> Result<Vec<u8>, Self::Error> {
20        self.1
21            .decrypt(&self.0.decrypt(data).map_err(LayeredError::Outer)?)
22            .map_err(LayeredError::Inner)
23    }
24}