rsa/pkcs1v15/
encrypting_key.rs1use super::encrypt;
2use crate::{traits::RandomizedEncryptor, Result, RsaPublicKey};
3use alloc::vec::Vec;
4use rand_core::CryptoRng;
5#[cfg(feature = "serde")]
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, PartialEq)]
12#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13pub struct EncryptingKey {
14 pub(super) inner: RsaPublicKey,
15}
16
17impl EncryptingKey {
18 pub fn new(key: RsaPublicKey) -> Self {
20 Self { inner: key }
21 }
22}
23
24impl RandomizedEncryptor for EncryptingKey {
25 fn encrypt_with_rng<R: CryptoRng + ?Sized>(&self, rng: &mut R, msg: &[u8]) -> Result<Vec<u8>> {
26 encrypt(rng, &self.inner, msg)
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 #[test]
33 #[cfg(all(feature = "hazmat", feature = "serde"))]
34 fn test_serde() {
35 use super::*;
36 use crate::RsaPrivateKey;
37 use rand::rngs::ChaCha8Rng;
38 use rand_core::SeedableRng;
39 use serde_test::{assert_tokens, Configure, Token};
40
41 let mut rng = ChaCha8Rng::from_seed([42; 32]);
42 let priv_key = RsaPrivateKey::new_unchecked(&mut rng, 64).expect("failed to generate key");
43 let encrypting_key = EncryptingKey::new(priv_key.to_public_key());
44
45 let tokens = [
46 Token::Struct {
47 name: "EncryptingKey",
48 len: 1,
49 },
50 Token::Str("inner"),
51 Token::Str(
52 "3024300d06092a864886f70d01010105000313003010020900ab240c3361d02e370203010001",
53 ),
54 Token::StructEnd,
55 ];
56 assert_tokens(&encrypting_key.clone().readable(), &tokens);
57 }
58}