From cd490bcdee4235b2e3ab09f82dc3463e4f119187 Mon Sep 17 00:00:00 2001 From: Sebastian Geisler Date: Fri, 18 Jan 2019 14:09:09 -0800 Subject: [PATCH] Implement ser/de for SecretKeyShare --- src/serde_impl.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/serde_impl.rs b/src/serde_impl.rs index da634fe..8d60d25 100644 --- a/src/serde_impl.rs +++ b/src/serde_impl.rs @@ -147,6 +147,25 @@ impl SerializeSecret for crate::SecretKey { } } +#[cfg(not(feature = "use-insecure-test-only-mock-crypto"))] +impl<'de> Deserialize<'de> for crate::SecretKeyShare { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + Ok(crate::SecretKeyShare(Deserialize::deserialize( + deserializer, + )?)) + } +} + +#[cfg(not(feature = "use-insecure-test-only-mock-crypto"))] +impl SerializeSecret for crate::SecretKeyShare { + fn serialize_secret(&self, serializer: S) -> Result { + self.0.serialize_secret(serializer) + } +} + /// A type with the same content as `BivarCommitment`, but that has not been validated yet. #[derive(Serialize, Deserialize)] struct WireBivarCommitment<'a> { @@ -408,4 +427,28 @@ mod tests { assert_eq!(ser_ref, ser_val); } } + + #[test] + #[cfg(not(feature = "use-insecure-test-only-mock-crypto"))] + fn serde_secret_key_share() { + use crate::serde_impl::SerdeSecret; + use crate::SecretKeyShare; + use rand::{thread_rng, Rng}; + + let mut rng = thread_rng(); + for _ in 0..2048 { + let sk: SecretKeyShare = rng.gen(); + let ser_ref = bincode::serialize(&SerdeSecret(&sk)).expect("serialize secret key"); + + let de = bincode::deserialize(&ser_ref).expect("deserialize secret key"); + assert_eq!(sk, de); + + let de_serde_secret: SerdeSecret = + bincode::deserialize(&ser_ref).expect("deserialize secret key"); + assert_eq!(sk, de_serde_secret.into_inner()); + + let ser_val = bincode::serialize(&SerdeSecret(sk)).expect("serialize secret key"); + assert_eq!(ser_ref, ser_val); + } + } }