Skip to content

Commit a7dc12a

Browse files
committed
added serde tests
1 parent 2e57bb3 commit a7dc12a

13 files changed

+286
-5
lines changed

Diff for: Cargo.lock

+24
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ base64ct = { version = "1", features = ["alloc"] }
3737
hex-literal = "0.4.1"
3838
proptest = "1"
3939
serde_test = "1.0.89"
40+
serde_json = "1.0.114"
4041
rand_xorshift = "0.3"
4142
rand_chacha = "0.3"
4243
rand = "0.8"

Diff for: src/oaep/decrypting_key.rs

+28-2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ use alloc::{
88
string::{String, ToString},
99
vec::Vec,
1010
};
11-
#[cfg(feature = "serde")]
12-
use serde::{Deserialize, Serialize};
1311
use core::marker::PhantomData;
1412
use digest::{Digest, FixedOutputReset};
1513
use rand_core::CryptoRngCore;
14+
#[cfg(feature = "serde")]
15+
use serde::{Deserialize, Serialize};
1616
use zeroize::ZeroizeOnDrop;
1717

1818
/// Decryption key for PKCS#1 v1.5 decryption as described in [RFC8017 § 7.1].
@@ -97,3 +97,29 @@ where
9797
MGD: Digest + FixedOutputReset,
9898
{
9999
}
100+
101+
#[cfg(test)]
102+
mod tests {
103+
use super::*;
104+
105+
#[test]
106+
#[cfg(feature = "serde")]
107+
fn test_serde() {
108+
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
109+
use sha2::Sha256;
110+
111+
let mut rng = ChaCha8Rng::from_seed([42; 32]);
112+
let decrypting_key = DecryptingKey::<Sha256>::new_with_label(
113+
RsaPrivateKey::new(&mut rng, 64).expect("failed to generate key"),
114+
"label",
115+
);
116+
117+
let ser_decrypting_key =
118+
serde_json::to_string(&decrypting_key).expect("unable to serialize decrypting key");
119+
let deser_decrypting_key = serde_json::from_str::<DecryptingKey<Sha256>>(&ser_decrypting_key)
120+
.expect("unable to serialize decrypting key");
121+
122+
assert_eq!(decrypting_key.label, deser_decrypting_key.label);
123+
assert_eq!(decrypting_key.inner, deser_decrypting_key.inner);
124+
}
125+
}

Diff for: src/oaep/encrypting_key.rs

+28
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,31 @@ where
6565
encrypt_digest::<_, D, MGD>(rng, &self.inner, msg, self.label.as_ref().cloned())
6666
}
6767
}
68+
69+
#[cfg(test)]
70+
mod tests {
71+
use super::*;
72+
73+
#[test]
74+
#[cfg(feature = "serde")]
75+
fn test_serde() {
76+
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
77+
use sha2::Sha256;
78+
79+
use crate::RsaPrivateKey;
80+
81+
let mut rng = ChaCha8Rng::from_seed([42; 32]);
82+
let encrypting_key = EncryptingKey::<Sha256>::new_with_label(
83+
RsaPrivateKey::new(&mut rng, 64).expect("failed to generate key").to_public_key(),
84+
"label",
85+
);
86+
87+
let ser_encrypting_key =
88+
serde_json::to_string(&encrypting_key).expect("unable to serialize encrypting key");
89+
let deser_encrypting_key = serde_json::from_str::<EncryptingKey<Sha256>>(&ser_encrypting_key)
90+
.expect("unable to serialize encrypting key");
91+
92+
assert_eq!(encrypting_key.label, deser_encrypting_key.label);
93+
assert_eq!(encrypting_key.inner, deser_encrypting_key.inner);
94+
}
95+
}

Diff for: src/pkcs1v15/decrypting_key.rs

+24-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use zeroize::ZeroizeOnDrop;
1313
/// Decryption key for PKCS#1 v1.5 decryption as described in [RFC8017 § 7.2].
1414
///
1515
/// [RFC8017 § 7.2]: https://datatracker.ietf.org/doc/html/rfc8017#section-7.2
16-
#[derive(Debug, Clone)]
16+
#[derive(Debug, Clone, PartialEq)]
1717
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1818
pub struct DecryptingKey {
1919
inner: RsaPrivateKey,
@@ -52,3 +52,26 @@ impl EncryptingKeypair for DecryptingKey {
5252
}
5353

5454
impl ZeroizeOnDrop for DecryptingKey {}
55+
56+
#[cfg(test)]
57+
mod tests {
58+
use super::*;
59+
60+
#[test]
61+
#[cfg(feature = "serde")]
62+
fn test_serde() {
63+
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
64+
use serde_test::{assert_tokens, Configure, Token};
65+
66+
let mut rng = ChaCha8Rng::from_seed([42; 32]);
67+
let decrypting_key = DecryptingKey::new(RsaPrivateKey::new(&mut rng, 64).expect("failed to generate key"));
68+
69+
let tokens = [
70+
Token::Struct { name: "DecryptingKey", len: 1 },
71+
Token::Str("inner"),
72+
Token::Str("3054020100300d06092a864886f70d01010105000440303e020100020900cc6c6130e35b46bf0203010001020863de1ac858580019020500f65cff5d020500d46b68cb02046d9a09f102047b4e3a4f020500f45065cc"),
73+
Token::StructEnd,
74+
];
75+
assert_tokens(&decrypting_key.clone().readable(), &tokens);
76+
}
77+
}

Diff for: src/pkcs1v15/encrypting_key.rs

+25-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use rand_core::CryptoRngCore;
88
/// Encryption key for PKCS#1 v1.5 encryption as described in [RFC8017 § 7.2].
99
///
1010
/// [RFC8017 § 7.2]: https://datatracker.ietf.org/doc/html/rfc8017#section-7.2
11-
#[derive(Debug, Clone)]
11+
#[derive(Debug, Clone, PartialEq)]
1212
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1313
pub struct EncryptingKey {
1414
pub(super) inner: RsaPublicKey,
@@ -30,3 +30,27 @@ impl RandomizedEncryptor for EncryptingKey {
3030
encrypt(rng, &self.inner, msg)
3131
}
3232
}
33+
34+
#[cfg(test)]
35+
mod tests {
36+
use super::*;
37+
38+
#[test]
39+
#[cfg(feature = "serde")]
40+
fn test_serde() {
41+
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
42+
use serde_test::{assert_tokens, Configure, Token};
43+
44+
let mut rng = ChaCha8Rng::from_seed([42; 32]);
45+
let priv_key = crate::RsaPrivateKey::new(&mut rng, 64).expect("failed to generate key");
46+
let encrypting_key = EncryptingKey::new(priv_key.to_public_key());
47+
48+
let tokens = [
49+
Token::Struct { name: "EncryptingKey", len: 1 },
50+
Token::Str("inner"),
51+
Token::Str("3024300d06092a864886f70d01010105000313003010020900cc6c6130e35b46bf0203010001"),
52+
Token::StructEnd,
53+
];
54+
assert_tokens(&encrypting_key.clone().readable(), &tokens);
55+
}
56+
}

Diff for: src/pkcs1v15/signature.rs

+20
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,24 @@ impl<'de> Deserialize<'de> for Signature {
106106
len: bytes.len(),
107107
})
108108
}
109+
}
110+
111+
#[cfg(test)]
112+
mod tests {
113+
use super::*;
114+
115+
#[test]
116+
#[cfg(feature = "serde")]
117+
fn test_serde() {
118+
use serde_test::{assert_tokens, Configure, Token};
119+
let signature = Signature {
120+
inner: BigUint::new(Vec::from([42])),
121+
len: 1,
122+
};
123+
124+
let tokens = [
125+
Token::Str("2a"),
126+
];
127+
assert_tokens(&signature.readable(), &tokens);
128+
}
109129
}

Diff for: src/pkcs1v15/signing_key.rs

+22
Original file line numberDiff line numberDiff line change
@@ -289,3 +289,25 @@ where
289289
Self::try_from(pki).map_err(de::Error::custom)
290290
}
291291
}
292+
293+
#[cfg(test)]
294+
mod tests {
295+
use super::*;
296+
297+
#[test]
298+
#[cfg(feature = "serde")]
299+
fn test_serde() {
300+
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
301+
use sha2::Sha256;
302+
303+
let mut rng = ChaCha8Rng::from_seed([42; 32]);
304+
let priv_key = crate::RsaPrivateKey::new(&mut rng, 64).expect("failed to generate key");
305+
let signing_key = SigningKey::<Sha256>::new(priv_key);
306+
307+
let ser_signing_key = serde_json::to_string(&signing_key).expect("unable to serialize signing key");
308+
let deser_signing_key = serde_json::from_str::<SigningKey<Sha256>>(&ser_signing_key).expect("unable to deserialize signing key");
309+
310+
assert_eq!(signing_key.inner, deser_signing_key.inner);
311+
assert_eq!(signing_key.prefix, deser_signing_key.prefix);
312+
}
313+
}

Diff for: src/pkcs1v15/verifying_key.rs

+26-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use pkcs8::{
1515
use {
1616
pkcs8::SubjectPublicKeyInfo,
1717
serdect::serde::{de, ser, Deserialize, Serialize},
18-
spki::der::Decode,
18+
spki::der::Decode,
1919
};
2020

2121
use signature::{hazmat::PrehashVerifier, DigestVerifier, Verifier};
@@ -239,3 +239,28 @@ where
239239
Self::try_from(spki).map_err(de::Error::custom)
240240
}
241241
}
242+
243+
#[cfg(test)]
244+
mod tests {
245+
use super::*;
246+
247+
#[test]
248+
#[cfg(feature = "serde")]
249+
fn test_serde() {
250+
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
251+
use sha2::Sha256;
252+
253+
let mut rng = ChaCha8Rng::from_seed([42; 32]);
254+
let priv_key = crate::RsaPrivateKey::new(&mut rng, 64).expect("failed to generate key");
255+
let pub_key = priv_key.to_public_key();
256+
let verifying_key = VerifyingKey::<Sha256>::new(pub_key);
257+
258+
let ser_verifying_key =
259+
serde_json::to_string(&verifying_key).expect("unable to serialize verifying key");
260+
let deser_verifying_key = serde_json::from_str::<VerifyingKey<Sha256>>(&ser_verifying_key)
261+
.expect("unable to deserialize verifying key");
262+
263+
assert_eq!(verifying_key.inner, deser_verifying_key.inner);
264+
assert_eq!(verifying_key.prefix, deser_verifying_key.prefix);
265+
}
266+
}

Diff for: src/pss/blinded_signing_key.rs

+21
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,24 @@ where
234234
.map(Self::new)
235235
}
236236
}
237+
238+
#[cfg(test)]
239+
mod tests {
240+
use super::*;
241+
242+
#[test]
243+
#[cfg(feature = "serde")]
244+
fn test_serde() {
245+
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
246+
use sha2::Sha256;
247+
248+
let mut rng = ChaCha8Rng::from_seed([42; 32]);
249+
let signing_key = BlindedSigningKey::<Sha256>::new(RsaPrivateKey::new(&mut rng, 64).expect("failed to generate key"));
250+
251+
let ser_signing_key = serde_json::to_string(&signing_key).expect("unable to serialize signing key");
252+
let deser_signing_key = serde_json::from_str::<BlindedSigningKey<Sha256>>(&ser_signing_key).expect("unable to deserialize signing key");
253+
254+
assert_eq!(signing_key.inner, deser_signing_key.inner);
255+
assert_eq!(signing_key.salt_len, deser_signing_key.salt_len);
256+
}
257+
}

Diff for: src/pss/signature.rs

+20
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,24 @@ impl<'de> Deserialize<'de> for Signature {
100100
len: bytes.len(),
101101
})
102102
}
103+
}
104+
105+
#[cfg(test)]
106+
mod tests {
107+
use super::*;
108+
109+
#[test]
110+
#[cfg(feature = "serde")]
111+
fn test_serde() {
112+
use serde_test::{assert_tokens, Configure, Token};
113+
let signature = Signature {
114+
inner: BigUint::new(Vec::from([42])),
115+
len: 1,
116+
};
117+
118+
let tokens = [
119+
Token::Str("2a"),
120+
];
121+
assert_tokens(&signature.readable(), &tokens);
122+
}
103123
}

Diff for: src/pss/signing_key.rs

+22
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,25 @@ where
257257
.map(Self::new)
258258
}
259259
}
260+
261+
#[cfg(test)]
262+
mod tests {
263+
use super::*;
264+
265+
#[test]
266+
#[cfg(feature = "serde")]
267+
fn test_serde() {
268+
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
269+
use sha2::Sha256;
270+
271+
let mut rng = ChaCha8Rng::from_seed([42; 32]);
272+
let priv_key = crate::RsaPrivateKey::new(&mut rng, 64).expect("failed to generate key");
273+
let signing_key = SigningKey::<Sha256>::new(priv_key);
274+
275+
let ser_signing_key = serde_json::to_string(&signing_key).expect("unable to serialize signing key");
276+
let deser_signing_key = serde_json::from_str::<SigningKey<Sha256>>(&ser_signing_key).expect("unable to deserialize signing key");
277+
278+
assert_eq!(signing_key.inner, deser_signing_key.inner);
279+
assert_eq!(signing_key.salt_len, deser_signing_key.salt_len);
280+
}
281+
}

0 commit comments

Comments
 (0)