Serde for dkg types via serde_bytes

This commit is contained in:
Jędrzej Stuczyński
2022-05-05 16:19:16 +01:00
parent 9d84e15a92
commit 48e5fcd244
4 changed files with 65 additions and 0 deletions
Generated
+1
View File
@@ -1382,6 +1382,7 @@ dependencies = [
"rand_chacha 0.3.1",
"rand_core 0.6.3",
"serde",
"serde_bytes",
"serde_derive",
"sha2",
"thiserror",
+1
View File
@@ -21,6 +21,7 @@ rand_chacha = "0.3"
rand_core = "0.6.3"
sha2 = "0.9"
serde = "1.0"
serde_bytes = { version = "0.11.6" }
serde_derive = "1.0"
thiserror = "1.0"
zeroize = { version = "1.4", features = ["zeroize_derive"] }
+41
View File
@@ -9,6 +9,9 @@ use bls12_381::{G1Projective, G2Projective, Scalar};
use ff::Field;
use group::GroupEncoding;
use rand_core::RngCore;
use serde::de::Error as SerdeError;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde_bytes::{ByteBuf as SerdeByteBuf, Bytes as SerdeBytes};
use zeroize::Zeroize;
#[derive(Debug, Zeroize)]
@@ -410,6 +413,25 @@ impl PublicKeyWithProof {
}
}
impl Serialize for PublicKeyWithProof {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
SerdeBytes::new(&self.to_bytes()).serialize(serializer)
}
}
impl<'d> Deserialize<'d> for PublicKeyWithProof {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'d>,
{
let bytes = <SerdeByteBuf>::deserialize(deserializer)?;
PublicKeyWithProof::try_from_bytes(bytes.as_ref()).map_err(SerdeError::custom)
}
}
#[derive(Debug, Zeroize)]
#[zeroize(drop)]
#[cfg_attr(test, derive(PartialEq))]
@@ -642,6 +664,25 @@ impl DecryptionKey {
}
}
impl Serialize for DecryptionKey {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
SerdeBytes::new(&self.to_bytes()).serialize(serializer)
}
}
impl<'d> Deserialize<'d> for DecryptionKey {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'d>,
{
let bytes = <SerdeByteBuf>::deserialize(deserializer)?;
DecryptionKey::try_from_bytes(bytes.as_ref()).map_err(SerdeError::custom)
}
}
#[cfg(test)]
mod tests {
use super::*;
+22
View File
@@ -14,6 +14,9 @@ use crate::interpolation::{
use crate::{NodeIndex, Share, Threshold};
use bls12_381::{G2Projective, Scalar};
use rand_core::RngCore;
use serde::de::Error as SerdeError;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde_bytes::{ByteBuf as SerdeByteBuf, Bytes as SerdeBytes};
use std::collections::BTreeMap;
use zeroize::Zeroize;
@@ -245,6 +248,25 @@ impl Dealing {
}
}
impl Serialize for Dealing {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
SerdeBytes::new(&self.to_bytes()).serialize(serializer)
}
}
impl<'d> Deserialize<'d> for Dealing {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'d>,
{
let bytes = <SerdeByteBuf>::deserialize(deserializer)?;
Dealing::try_from_bytes(bytes.as_ref()).map_err(SerdeError::custom)
}
}
// this assumes all dealings have been verified
pub fn try_recover_verification_keys(
dealings: &[Dealing],