recipher 0.2.2

CipherStash key generation library for ZeroKMS
Documentation
use serde::{Deserialize, Serialize};
use zeroize::{Zeroize, ZeroizeOnDrop};

// KeySet Generation
use super::encryption_keyset::EncryptionKeySet;
use crate::permutation::Permutation;

#[derive(Deserialize, Serialize, Clone, Zeroize, ZeroizeOnDrop)]
pub struct ProxyKeySet {
    pub(crate) p1: Permutation,
    pub(crate) p2_from: Permutation,
    pub(crate) p2_to: Permutation,
    pub(crate) p3: Permutation,
}

opaque_debug::implement!(ProxyKeySet);

impl ProxyKeySet {
    pub fn generate(from: &EncryptionKeySet, to: &EncryptionKeySet) -> Self {
        Self {
            p1: to.p1.complement(&from.p1),
            p2_from: from.p2.clone(),
            p2_to: to.p2.clone(),
            p3: to.p3.complement(&from.p3),
        }
    }

    pub fn to_bytes(&self) -> Result<Vec<u8>, serde_cbor::Error> {
        serde_cbor::to_vec(self)
    }

    pub fn from_bytes(bytes: &[u8]) -> serde_cbor::Result<Self> {
        serde_cbor::from_slice(bytes)
    }
}