rops 0.1.7

SOPS-like library in pure Rust
Documentation
use crate::*;

#[impl_tools::autoimpl(Debug, PartialEq)]
pub struct SavedMacNonce<C: Cipher, H: Hasher>(Mac<H>, Nonce<C::NonceSize>);

impl<C: Cipher, H: Hasher> SavedMacNonce<C, H> {
    pub fn new(mac: Mac<H>, nonce: Nonce<C::NonceSize>) -> Self {
        Self(mac, nonce)
    }

    pub fn get_or_create(self, mac: &Mac<H>) -> Nonce<C::NonceSize> {
        match &self.0 == mac {
            true => self.1,
            false => Nonce::new(),
        }
    }
}

#[cfg(feature = "test-utils")]
mod mock {
    use super::*;

    impl<C: Cipher, H: Hasher> MockTestUtil for SavedMacNonce<C, H>
    where
        Mac<H>: MockTestUtil,
        EncryptedMac<C, H>: MockTestUtil,
    {
        fn mock() -> Self {
            Self::new(Mac::mock(), EncryptedMac::<C, H>::mock().0.nonce)
        }
    }
}