use super::{decrypt, EncryptingKey};
use crate::{
dummy_rng::DummyRng,
traits::{Decryptor, EncryptingKeypair, RandomizedDecryptor},
Result, RsaPrivateKey,
};
use rand_core::CryptoRngCore;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use zeroize::ZeroizeOnDrop;
use crate::traits::UnsignedModularInt;
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct DecryptingKey<T>
where
T: UnsignedModularInt,
{
inner: RsaPrivateKey<T>,
}
impl<T> DecryptingKey<T>
where
T: UnsignedModularInt,
{
pub fn new(key: RsaPrivateKey<T>) -> Self {
Self { inner: key }
}
}
impl<T> Decryptor for DecryptingKey<T> where T: UnsignedModularInt {}
impl<T> RandomizedDecryptor for DecryptingKey<T> where T: UnsignedModularInt {}
impl<T> EncryptingKeypair for DecryptingKey<T>
where
T: UnsignedModularInt,
{
type EncryptingKey = EncryptingKey<T>;
fn encrypting_key(&self) -> EncryptingKey<T> {
todo!()
}
}
impl<T> ZeroizeOnDrop for DecryptingKey<T> where T: UnsignedModularInt {}
#[cfg(test)]
mod tests {
#[test]
#[cfg(feature = "serde")]
fn test_serde() {
use super::*;
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
use serde_test::{assert_tokens, Configure, Token};
let mut rng = ChaCha8Rng::from_seed([42; 32]);
}
}