use super::encrypt;
use crate::{traits::RandomizedEncryptor, Result, RsaPublicKey};
use rand_core::CryptoRngCore;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::traits::UnsignedModularInt;
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct EncryptingKey<T>
where
T: UnsignedModularInt,
{
pub(super) inner: RsaPublicKey<T>,
}
impl<T> EncryptingKey<T>
where
T: UnsignedModularInt,
{
pub fn new(key: RsaPublicKey<T>) -> Self {
Self { inner: key }
}
}
impl<T> RandomizedEncryptor for EncryptingKey<T>
where
T: UnsignedModularInt,
<T as num_traits::FromBytes>::Bytes: num_traits::ops::bytes::NumBytes + Default,
{
fn encrypt_with_rng<'a, R: CryptoRngCore + ?Sized>(
&self,
rng: &mut R,
msg: &[u8],
storage: &'a mut [u8],
) -> Result<&'a [u8]> {
encrypt(rng, &self.inner, msg, storage)
}
}
#[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]);
}
}