simplify ciphersuite encoding, without changing format

This commit is contained in:
Conrado Gouvea 2023-08-30 19:49:24 -03:00
parent 478f914b31
commit d7cb8de277
11 changed files with 173 additions and 186 deletions

View File

@ -13,6 +13,7 @@
use std::{
collections::{BTreeMap, BTreeSet, HashMap},
fmt::{self, Debug},
marker::PhantomData,
};
use derive_getters::Getters;
@ -203,11 +204,40 @@ fn derive_interpolating_value<C: Ciphersuite>(
)
}
/// Helper that encodes the ciphersuite ID in structs.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
struct CiphersuiteHelper<C: Ciphersuite> {
/// Ciphersuite ID for serialization
#[cfg_attr(
feature = "serde",
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
)]
#[cfg_attr(
feature = "serde",
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
)]
ciphersuite: (),
#[cfg_attr(feature = "serde", serde(skip))]
phantom: PhantomData<C>,
}
impl<C> Default for CiphersuiteHelper<C>
where
C: Ciphersuite,
{
fn default() -> Self {
Self {
ciphersuite: Default::default(),
phantom: Default::default(),
}
}
}
/// Generated by the coordinator of the signing operation and distributed to
/// each signing party
#[derive(Clone, Debug, PartialEq, Eq, Getters)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct SigningPackage<C: Ciphersuite> {
/// The set of commitments participants published in the first round of the
/// protocol.
@ -225,16 +255,9 @@ pub struct SigningPackage<C: Ciphersuite> {
)]
message: Vec<u8>,
/// Ciphersuite ID for serialization
#[cfg_attr(
feature = "serde",
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
)]
#[cfg_attr(
feature = "serde",
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
)]
#[getter(skip)]
ciphersuite: (),
#[cfg_attr(feature = "serde", serde(flatten))]
ciphersuite: CiphersuiteHelper<C>,
}
impl<C> SigningPackage<C>
@ -251,7 +274,7 @@ where
SigningPackage {
signing_commitments,
message: message.to_vec(),
ciphersuite: (),
ciphersuite: Default::default(),
}
}

View File

@ -23,7 +23,7 @@ use crate::{
#[cfg(feature = "serde")]
use crate::{ElementSerialization, ScalarSerialization};
use super::compute_lagrange_coefficient;
use super::{compute_lagrange_coefficient, CiphersuiteHelper};
pub mod dkg;
pub mod repairable;
@ -349,7 +349,6 @@ where
/// .into(), which under the hood also performs validation.
#[derive(Clone, Debug, Zeroize, PartialEq, Eq, Getters)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct SecretShare<C: Ciphersuite> {
/// The participant identifier of this [`SecretShare`].
#[zeroize(skip)]
@ -360,16 +359,10 @@ pub struct SecretShare<C: Ciphersuite> {
/// The commitments to be distributed among signers.
pub(crate) commitment: VerifiableSecretSharingCommitment<C>,
/// Ciphersuite ID for serialization
#[cfg_attr(
feature = "serde",
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
)]
#[cfg_attr(
feature = "serde",
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
)]
#[getter(skip)]
ciphersuite: (),
#[zeroize(skip)]
#[cfg_attr(feature = "serde", serde(flatten))]
ciphersuite: CiphersuiteHelper<C>,
}
impl<C> SecretShare<C>
@ -386,7 +379,7 @@ where
identifier,
value,
commitment,
ciphersuite: (),
ciphersuite: Default::default(),
}
}
@ -503,7 +496,7 @@ pub fn split<C: Ciphersuite, R: RngCore + CryptoRng>(
PublicKeyPackage {
signer_pubkeys,
group_public,
ciphersuite: (),
ciphersuite: Default::default(),
},
))
}
@ -556,7 +549,6 @@ fn evaluate_vss<C: Ciphersuite>(
/// [`KeyPackage`]s, which they store to later use during signing.
#[derive(Clone, Debug, PartialEq, Eq, Getters, Zeroize)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct KeyPackage<C: Ciphersuite> {
/// Denotes the participant identifier each secret share key package is owned by.
#[zeroize(skip)]
@ -570,16 +562,10 @@ pub struct KeyPackage<C: Ciphersuite> {
#[zeroize(skip)]
pub(crate) group_public: VerifyingKey<C>,
/// Ciphersuite ID for serialization
#[cfg_attr(
feature = "serde",
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
)]
#[cfg_attr(
feature = "serde",
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
)]
#[getter(skip)]
ciphersuite: (),
#[zeroize(skip)]
#[cfg_attr(feature = "serde", serde(flatten))]
ciphersuite: CiphersuiteHelper<C>,
}
impl<C> KeyPackage<C>
@ -598,7 +584,7 @@ where
secret_share,
public,
group_public,
ciphersuite: (),
ciphersuite: Default::default(),
}
}
}
@ -625,7 +611,7 @@ where
secret_share: secret_share.value,
public,
group_public,
ciphersuite: (),
ciphersuite: Default::default(),
})
}
}
@ -636,7 +622,6 @@ where
/// Used for verification purposes before publishing a signature.
#[derive(Clone, Debug, PartialEq, Eq, Getters)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct PublicKeyPackage<C: Ciphersuite> {
/// The verifying shares for all participants. Used to validate signature
/// shares they generate.
@ -644,16 +629,9 @@ pub struct PublicKeyPackage<C: Ciphersuite> {
/// The joint public key for the entire group.
pub(crate) group_public: VerifyingKey<C>,
/// Ciphersuite ID for serialization
#[cfg_attr(
feature = "serde",
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
)]
#[cfg_attr(
feature = "serde",
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
)]
#[getter(skip)]
ciphersuite: (),
#[cfg_attr(feature = "serde", serde(flatten))]
ciphersuite: CiphersuiteHelper<C>,
}
impl<C> PublicKeyPackage<C>
@ -668,7 +646,7 @@ where
Self {
signer_pubkeys,
group_public,
ciphersuite: (),
ciphersuite: Default::default(),
}
}
}
@ -769,7 +747,7 @@ pub(crate) fn generate_secret_shares<C: Ciphersuite>(
identifier: *id,
value: SigningShare(value),
commitment: commitment.clone(),
ciphersuite: (),
ciphersuite: Default::default(),
});
}

View File

@ -50,29 +50,23 @@ pub mod round1 {
use derive_getters::Getters;
use zeroize::Zeroize;
use crate::frost::CiphersuiteHelper;
use super::*;
/// The package that must be broadcast by each participant to all other participants
/// between the first and second parts of the DKG protocol (round 1).
#[derive(Clone, Debug, PartialEq, Eq, Getters)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct Package<C: Ciphersuite> {
/// The public commitment from the participant (C_i)
pub(crate) commitment: VerifiableSecretSharingCommitment<C>,
/// The proof of knowledge of the temporary secret (σ_i = (R_i, μ_i))
pub(crate) proof_of_knowledge: Signature<C>,
/// Ciphersuite ID for serialization
#[cfg_attr(
feature = "serde",
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
)]
#[cfg_attr(
feature = "serde",
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
)]
#[getter(skip)]
pub(super) ciphersuite: (),
#[cfg_attr(feature = "serde", serde(flatten))]
pub(super) ciphersuite: CiphersuiteHelper<C>,
}
impl<C> Package<C>
@ -87,7 +81,7 @@ pub mod round1 {
Self {
commitment,
proof_of_knowledge,
ciphersuite: (),
ciphersuite: Default::default(),
}
}
}
@ -142,6 +136,8 @@ pub mod round2 {
use derive_getters::Getters;
use zeroize::Zeroize;
use crate::frost::CiphersuiteHelper;
use super::*;
/// A package that must be sent by each participant to some other participants
@ -153,21 +149,13 @@ pub mod round2 {
/// The package must be sent on an *confidential* and *authenticated* channel.
#[derive(Clone, Debug, PartialEq, Eq, Getters)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct Package<C: Ciphersuite> {
/// The secret share being sent.
pub(crate) secret_share: SigningShare<C>,
/// Ciphersuite ID for serialization
#[cfg_attr(
feature = "serde",
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
)]
#[cfg_attr(
feature = "serde",
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
)]
#[getter(skip)]
pub(super) ciphersuite: (),
#[cfg_attr(feature = "serde", serde(flatten))]
pub(super) ciphersuite: CiphersuiteHelper<C>,
}
impl<C> Package<C>
@ -178,7 +166,7 @@ pub mod round2 {
pub fn new(secret_share: SigningShare<C>) -> Self {
Self {
secret_share,
ciphersuite: (),
ciphersuite: Default::default(),
}
}
}
@ -278,7 +266,7 @@ pub fn part1<C: Ciphersuite, R: RngCore + CryptoRng>(
let package = round1::Package {
commitment,
proof_of_knowledge: Signature { R: R_i, z: mu_i },
ciphersuite: (),
ciphersuite: Default::default(),
};
Ok((secret_package, package))
@ -358,7 +346,7 @@ pub fn part2<C: Ciphersuite>(
ell,
round2::Package {
secret_share: SigningShare(value),
ciphersuite: (),
ciphersuite: Default::default(),
},
);
}
@ -474,7 +462,7 @@ pub fn part3<C: Ciphersuite>(
identifier: round2_secret_package.identifier,
value: f_ell_i,
commitment: commitment.clone(),
ciphersuite: (),
ciphersuite: Default::default(),
};
// Verify the share. We don't need the result.
@ -518,12 +506,12 @@ pub fn part3<C: Ciphersuite>(
secret_share: signing_share,
public: verifying_key,
group_public,
ciphersuite: (),
ciphersuite: Default::default(),
};
let public_key_package = PublicKeyPackage {
signer_pubkeys: all_verifying_keys,
group_public,
ciphersuite: (),
ciphersuite: Default::default(),
};
Ok((key_package, public_key_package))

View File

@ -124,6 +124,6 @@ pub fn repair_share_step_3<C: Ciphersuite>(
identifier,
value: SigningShare(share),
commitment: commitment.clone(),
ciphersuite: (),
ciphersuite: Default::default(),
}
}

View File

@ -17,7 +17,7 @@ use crate::{frost, Ciphersuite, Element, Error, Field, Group, Scalar};
#[cfg(feature = "serde")]
use crate::ElementSerialization;
use super::{keys::SigningShare, Identifier};
use super::{keys::SigningShare, CiphersuiteHelper, Identifier};
/// A scalar that is a signing nonce.
#[derive(Clone, PartialEq, Eq)]
@ -246,23 +246,15 @@ where
/// SigningCommitment can be used for exactly *one* signature.
#[derive(Copy, Clone, Debug, Eq, PartialEq, Getters)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct SigningCommitments<C: Ciphersuite> {
/// Commitment to the hiding [`Nonce`].
pub(crate) hiding: NonceCommitment<C>,
/// Commitment to the binding [`Nonce`].
pub(crate) binding: NonceCommitment<C>,
/// Ciphersuite ID for serialization
#[cfg_attr(
feature = "serde",
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
)]
#[cfg_attr(
feature = "serde",
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
)]
#[getter(skip)]
ciphersuite: (),
#[cfg_attr(feature = "serde", serde(flatten))]
ciphersuite: CiphersuiteHelper<C>,
}
impl<C> SigningCommitments<C>
@ -274,7 +266,7 @@ where
Self {
hiding,
binding,
ciphersuite: (),
ciphersuite: Default::default(),
}
}
@ -298,7 +290,7 @@ where
Self {
hiding: nonces.hiding.clone().into(),
binding: nonces.binding.clone().into(),
ciphersuite: (),
ciphersuite: Default::default(),
}
}
}

View File

@ -50,7 +50,6 @@ where
/// shares into the joint signature.
#[derive(Clone, Copy, Eq, PartialEq, Getters)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
#[cfg_attr(feature = "serde", serde(try_from = "SignatureShareSerialization<C>"))]
#[cfg_attr(feature = "serde", serde(into = "SignatureShareSerialization<C>"))]
pub struct SignatureShare<C: Ciphersuite> {
@ -105,19 +104,11 @@ where
#[cfg(feature = "serde")]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
struct SignatureShareSerialization<C: Ciphersuite> {
share: SignatureShareHelper<C>,
/// Ciphersuite ID for serialization
#[cfg_attr(
feature = "serde",
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
)]
#[cfg_attr(
feature = "serde",
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
)]
ciphersuite: (),
#[cfg_attr(feature = "serde", serde(flatten))]
ciphersuite: CiphersuiteHelper<C>,
}
#[cfg(feature = "serde")]
@ -140,7 +131,7 @@ where
fn from(value: SignatureShare<C>) -> Self {
Self {
share: SignatureShareHelper(value.share),
ciphersuite: (),
ciphersuite: Default::default(),
}
}
}

View File

@ -47,6 +47,7 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
"ciphersuite": "FROST(Ed25519, SHA-512)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
@ -54,23 +55,25 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"foo": "5866666666666666666666666666666666666666666666666666666666666666",
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
"ciphersuite": "FROST(Ed25519, SHA-512)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Missing field
let invalid_json = r#"{
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
"ciphersuite": "FROST(Ed25519, SHA-512)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
"ciphersuite": "FROST(Ed25519, SHA-512)",
"extra": 1
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_ok());
}
#[test]
@ -141,7 +144,7 @@ fn check_signing_package_serialization() {
}"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signing_commitments": {
"2a00000000000000000000000000000000000000000000000000000000000000": {
@ -155,7 +158,7 @@ fn check_signing_package_serialization() {
"ciphersuite": "FROST(Ed25519, SHA-512)"
}
"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_ok());
}
#[test]
@ -191,13 +194,13 @@ fn check_signature_share_serialization() {
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
"extra": 1,
"ciphersuite": "FROST(Ed25519, SHA-512)"
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_ok());
}
#[test]
@ -256,7 +259,7 @@ fn check_secret_share_serialization() {
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
"value": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
@ -266,7 +269,7 @@ fn check_secret_share_serialization() {
"extra": 1,
"ciphersuite": "FROST(Ed25519, SHA-512)"
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_ok());
}
#[test]
@ -321,7 +324,7 @@ fn check_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
"secret_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
@ -330,7 +333,7 @@ fn check_key_package_serialization() {
"extra_field": 1,
"ciphersuite": "FROST(Ed25519, SHA-512)"
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_ok());
}
#[test]
@ -385,7 +388,7 @@ fn check_public_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signer_pubkeys": {
"2a00000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
@ -394,7 +397,7 @@ fn check_public_key_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(Ed25519, SHA-512)"
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_ok());
}
#[test]
@ -439,7 +442,7 @@ fn check_round1_package_serialization() {
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"commitment": [
"5866666666666666666666666666666666666666666666666666666666666666"
@ -448,7 +451,7 @@ fn check_round1_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(Ed25519, SHA-512)"
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_ok());
}
#[test]
@ -484,11 +487,11 @@ fn check_round2_package_serialization() {
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"secret_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
"extra": 1,
"ciphersuite": "FROST(Ed25519, SHA-512)"
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_ok());
}

View File

@ -47,6 +47,7 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
"ciphersuite": "FROST(Ed448, SHAKE256)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
@ -54,23 +55,25 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"foo": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
"ciphersuite": "FROST(Ed448, SHAKE256)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Missing field
let invalid_json = r#"{
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
"ciphersuite": "FROST(Ed448, SHAKE256)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
"ciphersuite": "FROST(Ed448, SHAKE256)",
"extra": 1
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_ok());
}
#[test]
@ -141,7 +144,7 @@ fn check_signing_package_serialization() {
}"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signing_commitments": {
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": {
@ -155,7 +158,7 @@ fn check_signing_package_serialization() {
"ciphersuite": "FROST(Ed448, SHAKE256)"
}
"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_ok());
}
#[test]
@ -191,13 +194,13 @@ fn check_signature_share_serialization() {
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
"extra": 1,
"ciphersuite": "FROST(Ed448, SHAKE256)"
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_ok());
}
#[test]
@ -256,7 +259,7 @@ fn check_secret_share_serialization() {
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"value": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
@ -266,7 +269,7 @@ fn check_secret_share_serialization() {
"extra": 1,
"ciphersuite": "FROST(Ed448, SHAKE256)"
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_ok());
}
#[test]
@ -321,7 +324,7 @@ fn check_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"secret_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
@ -330,7 +333,7 @@ fn check_key_package_serialization() {
"extra_field": 1,
"ciphersuite": "FROST(Ed448, SHAKE256)"
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_ok());
}
#[test]
@ -385,7 +388,7 @@ fn check_public_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signer_pubkeys": {
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
@ -394,7 +397,7 @@ fn check_public_key_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(Ed448, SHAKE256)"
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_ok());
}
#[test]
@ -439,7 +442,7 @@ fn check_round1_package_serialization() {
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"commitment": [
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
@ -448,7 +451,7 @@ fn check_round1_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(Ed448, SHAKE256)"
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_ok());
}
#[test]
@ -484,11 +487,11 @@ fn check_round2_package_serialization() {
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"secret_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
"extra": 1,
"ciphersuite": "FROST(Ed448, SHAKE256)"
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_ok());
}

View File

@ -47,6 +47,7 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
"ciphersuite": "FROST(P-256, SHA-256)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
@ -54,23 +55,25 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"foo": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
"ciphersuite": "FROST(P-256, SHA-256)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Missing field
let invalid_json = r#"{
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
"ciphersuite": "FROST(P-256, SHA-256)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
"ciphersuite": "FROST(P-256, SHA-256)",
"extra": 1
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_ok());
}
#[test]
@ -141,7 +144,7 @@ fn check_signing_package_serialization() {
}"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signing_commitments": {
"000000000000000000000000000000000000000000000000000000000000002a": {
@ -155,7 +158,7 @@ fn check_signing_package_serialization() {
"ciphersuite": "FROST(P-256, SHA-256)"
}
"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_ok());
}
#[test]
@ -191,13 +194,13 @@ fn check_signature_share_serialization() {
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
"extra": 1,
"ciphersuite": "FROST(P-256, SHA-256)"
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_ok());
}
#[test]
@ -256,7 +259,7 @@ fn check_secret_share_serialization() {
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
"value": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
@ -266,7 +269,7 @@ fn check_secret_share_serialization() {
"extra": 1,
"ciphersuite": "FROST(P-256, SHA-256)"
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_ok());
}
#[test]
@ -321,7 +324,7 @@ fn check_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
"secret_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
@ -330,7 +333,7 @@ fn check_key_package_serialization() {
"extra_field": 1,
"ciphersuite": "FROST(P-256, SHA-256)"
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_ok());
}
#[test]
@ -385,7 +388,7 @@ fn check_public_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signer_pubkeys": {
"000000000000000000000000000000000000000000000000000000000000002a": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
@ -394,7 +397,7 @@ fn check_public_key_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(P-256, SHA-256)"
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_ok());
}
#[test]
@ -439,7 +442,7 @@ fn check_round1_package_serialization() {
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"commitment": [
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
@ -448,7 +451,7 @@ fn check_round1_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(P-256, SHA-256)"
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_ok());
}
#[test]
@ -484,11 +487,11 @@ fn check_round2_package_serialization() {
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"secret_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
"extra": 1,
"ciphersuite": "FROST(P-256, SHA-256)"
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_ok());
}

View File

@ -47,6 +47,7 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
"ciphersuite": "FROST(ristretto255, SHA-512)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
@ -54,23 +55,25 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"foo": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
"ciphersuite": "FROST(ristretto255, SHA-512)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Missing field
let invalid_json = r#"{
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
"ciphersuite": "FROST(ristretto255, SHA-512)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
"ciphersuite": "FROST(ristretto255, SHA-512)",
"extra": 1
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_ok());
}
#[test]
@ -141,7 +144,7 @@ fn check_signing_package_serialization() {
}"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signing_commitments": {
"2a00000000000000000000000000000000000000000000000000000000000000": {
@ -155,7 +158,7 @@ fn check_signing_package_serialization() {
"ciphersuite": "FROST(ristretto255, SHA-512)"
}
"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_ok());
}
#[test]
@ -191,13 +194,13 @@ fn check_signature_share_serialization() {
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
"extra": 1,
"ciphersuite": "FROST(ristretto255, SHA-512)"
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_ok());
}
#[test]
@ -256,7 +259,7 @@ fn check_secret_share_serialization() {
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
"value": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
@ -266,7 +269,7 @@ fn check_secret_share_serialization() {
"extra": 1,
"ciphersuite": "FROST(ristretto255, SHA-512)"
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_ok());
}
#[test]
@ -321,7 +324,7 @@ fn check_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
"secret_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
@ -330,7 +333,7 @@ fn check_key_package_serialization() {
"extra_field": 1,
"ciphersuite": "FROST(ristretto255, SHA-512)"
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_ok());
}
#[test]
@ -385,7 +388,7 @@ fn check_public_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signer_pubkeys": {
"2a00000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
@ -394,7 +397,7 @@ fn check_public_key_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(ristretto255, SHA-512)"
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_ok());
}
#[test]
@ -439,7 +442,7 @@ fn check_round1_package_serialization() {
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"commitment": [
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
@ -448,7 +451,7 @@ fn check_round1_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(ristretto255, SHA-512)"
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_ok());
}
#[test]
@ -484,11 +487,11 @@ fn check_round2_package_serialization() {
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"secret_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
"extra": 1,
"ciphersuite": "FROST(ristretto255, SHA-512)"
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_ok());
}

View File

@ -47,6 +47,7 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
"ciphersuite": "FROST(secp256k1, SHA-256)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
@ -54,23 +55,25 @@ fn check_signing_commitments_serialization() {
let invalid_json = r#"{
"foo": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
"ciphersuite": "FROST(secp256k1, SHA-256)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Missing field
let invalid_json = r#"{
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
"ciphersuite": "FROST(secp256k1, SHA-256)"
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
"ciphersuite": "FROST(secp256k1, SHA-256)",
"extra": 1
}"#;
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_ok());
}
#[test]
@ -141,7 +144,7 @@ fn check_signing_package_serialization() {
}"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signing_commitments": {
"000000000000000000000000000000000000000000000000000000000000002a": {
@ -155,7 +158,7 @@ fn check_signing_package_serialization() {
"ciphersuite": "FROST(secp256k1, SHA-256)"
}
"#;
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_ok());
}
#[test]
@ -191,13 +194,13 @@ fn check_signature_share_serialization() {
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
"extra": 1,
"ciphersuite": "FROST(secp256k1, SHA-256)"
}"#;
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_ok());
}
#[test]
@ -256,7 +259,7 @@ fn check_secret_share_serialization() {
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
"value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
@ -266,7 +269,7 @@ fn check_secret_share_serialization() {
"extra": 1,
"ciphersuite": "FROST(secp256k1, SHA-256)"
}"#;
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_ok());
}
#[test]
@ -321,7 +324,7 @@ fn check_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
"secret_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
@ -330,7 +333,7 @@ fn check_key_package_serialization() {
"extra_field": 1,
"ciphersuite": "FROST(secp256k1, SHA-256)"
}"#;
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_ok());
}
#[test]
@ -385,7 +388,7 @@ fn check_public_key_package_serialization() {
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"signer_pubkeys": {
"000000000000000000000000000000000000000000000000000000000000002a": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
@ -394,7 +397,7 @@ fn check_public_key_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(secp256k1, SHA-256)"
}"#;
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_ok());
}
#[test]
@ -439,7 +442,7 @@ fn check_round1_package_serialization() {
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"commitment": [
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
@ -448,7 +451,7 @@ fn check_round1_package_serialization() {
"extra": 1,
"ciphersuite": "FROST(secp256k1, SHA-256)"
}"#;
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round1::Package>(invalid_json).is_ok());
}
#[test]
@ -484,11 +487,11 @@ fn check_round2_package_serialization() {
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
// Extra field
// Extra field is ignored
let invalid_json = r#"{
"secret_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
"extra": 1,
"ciphersuite": "FROST(secp256k1, SHA-256)"
}"#;
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_ok());
}