object_rainbow_encrypted/
tuple_key.rs1use 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
11impl<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}