From 5037962d3cbd9e04c1a644a6ebbef3beebd271e2 Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Tue, 7 Mar 2023 03:37:25 -0500 Subject: [PATCH] Rename dkg serialize/deserialize to write/read --- crypto/dkg/src/lib.rs | 34 +++++++++++++++++++------------ crypto/dkg/src/tests/mod.rs | 2 +- crypto/frost/src/tests/vectors.rs | 2 +- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/crypto/dkg/src/lib.rs b/crypto/dkg/src/lib.rs index 20c3c06a..ca2c0204 100644 --- a/crypto/dkg/src/lib.rs +++ b/crypto/dkg/src/lib.rs @@ -10,7 +10,7 @@ use core::{ fmt::{self, Debug}, ops::Deref, }; -use std::{io::Read, sync::Arc, collections::HashMap}; +use std::{io, sync::Arc, collections::HashMap}; use thiserror::Error; @@ -251,21 +251,29 @@ impl ThresholdCore { self.verification_shares.clone() } - pub fn serialize(&self) -> Vec { - let mut serialized = vec![]; - serialized.extend(u32::try_from(C::ID.len()).unwrap().to_le_bytes()); - serialized.extend(C::ID); - serialized.extend(self.params.t.to_le_bytes()); - serialized.extend(self.params.n.to_le_bytes()); - serialized.extend(self.params.i.to_bytes()); - serialized.extend(self.secret_share.to_repr().as_ref()); - for l in (1 ..= self.params.n).map(Participant) { - serialized.extend(self.verification_shares[&l].to_bytes().as_ref()); + pub fn write(&self, writer: &mut W) -> io::Result<()> { + writer.write_all(&u32::try_from(C::ID.len()).unwrap().to_le_bytes())?; + writer.write_all(C::ID)?; + writer.write_all(&self.params.t.to_le_bytes())?; + writer.write_all(&self.params.n.to_le_bytes())?; + writer.write_all(&self.params.i.to_bytes())?; + let mut share_bytes = self.secret_share.to_repr(); + writer.write_all(share_bytes.as_ref())?; + share_bytes.as_mut().zeroize(); + for l in 1 ..= self.params.n { + writer + .write_all(self.verification_shares[&Participant::new(l).unwrap()].to_bytes().as_ref())?; } + Ok(()) + } + + pub fn serialize(&self) -> Zeroizing> { + let mut serialized = Zeroizing::new(vec![]); + self.write::>(serialized.as_mut()).unwrap(); serialized } - pub fn deserialize(reader: &mut R) -> Result, DkgError<()>> { + pub fn read(reader: &mut R) -> Result, DkgError<()>> { { let missing = DkgError::InternalError("ThresholdCore serialization is missing its curve"); let different = DkgError::InternalError("deserializing ThresholdCore for another curve"); @@ -413,7 +421,7 @@ impl ThresholdKeys { self.core.verification_shares() } - pub fn serialize(&self) -> Vec { + pub fn serialize(&self) -> Zeroizing> { self.core.serialize() } diff --git a/crypto/dkg/src/tests/mod.rs b/crypto/dkg/src/tests/mod.rs index 81e8a9ab..db14f250 100644 --- a/crypto/dkg/src/tests/mod.rs +++ b/crypto/dkg/src/tests/mod.rs @@ -53,7 +53,7 @@ pub fn key_gen( .drain() .map(|(i, core)| { assert_eq!( - &ThresholdCore::::deserialize::<&[u8]>(&mut core.serialize().as_ref()).unwrap(), + &ThresholdCore::::read::<&[u8]>(&mut core.serialize().as_ref()).unwrap(), &core ); (i, ThresholdKeys::new(core)) diff --git a/crypto/frost/src/tests/vectors.rs b/crypto/frost/src/tests/vectors.rs index c7aaf0ac..14c303af 100644 --- a/crypto/frost/src/tests/vectors.rs +++ b/crypto/frost/src/tests/vectors.rs @@ -128,7 +128,7 @@ fn vectors_to_multisig_keys(vectors: &Vectors) -> HashMap::deserialize::<&[u8]>(&mut serialized.as_ref()).unwrap(); + let these_keys = ThresholdCore::::read::<&[u8]>(&mut serialized.as_ref()).unwrap(); assert_eq!(these_keys.params().t(), vectors.threshold); assert_eq!(usize::from(these_keys.params().n()), shares.len()); let participant = Participant::new(i).unwrap();