object-rainbow-encrypted 0.0.0-a.23

encryption for object-rainbow
Documentation
use crate::Key;

#[derive(Debug, thiserror::Error)]
pub enum LayeredError<O, I> {
    #[error(transparent)]
    Outer(O),
    #[error(transparent)]
    Inner(I),
}

/// Inner "key" here is expected to be more of a "data filter" like compression.
impl<O: Key, I: Key> Key for (O, I) {
    type Error = LayeredError<O::Error, I::Error>;

    fn encrypt(&self, data: &[u8]) -> Vec<u8> {
        self.0.encrypt(&self.1.encrypt(data))
    }

    fn decrypt(&self, data: &[u8]) -> Result<Vec<u8>, Self::Error> {
        self.1
            .decrypt(&self.0.decrypt(data).map_err(LayeredError::Outer)?)
            .map_err(LayeredError::Inner)
    }
}