add version field to serialization at the beginning; move ciphersuite after it (#540)
* add version field into a Header field along with the ciphersuite ID * Change Ciphersuite ID to be the contextString from the spec * Apply suggestions from code review Co-authored-by: natalie <n.l.eskinazi@gmail.com> --------- Co-authored-by: natalie <n.l.eskinazi@gmail.com>
This commit is contained in:
parent
eee505a49e
commit
4ba88c0210
|
@ -4,7 +4,8 @@ With the `serialization` feature, which is enabled by default, all structs that
|
||||||
need to communicated will have `serialize()` and `deserialize()` methods.
|
need to communicated will have `serialize()` and `deserialize()` methods.
|
||||||
|
|
||||||
The format is basically the `serde` encoding of the structs using the
|
The format is basically the `serde` encoding of the structs using the
|
||||||
[`postcard`](https://docs.rs/postcard/latest/postcard/) crate.
|
[`postcard`](https://docs.rs/postcard/latest/postcard/) crate. But since this is
|
||||||
|
an implementation detail, we describe the format as follows:
|
||||||
|
|
||||||
- Integers are encoded in [varint
|
- Integers are encoded in [varint
|
||||||
format](https://postcard.jamesmunns.com/wire-format#varint-encoded-integers)
|
format](https://postcard.jamesmunns.com/wire-format#varint-encoded-integers)
|
||||||
|
@ -15,37 +16,45 @@ The format is basically the `serde` encoding of the structs using the
|
||||||
and the array as-is (e.g. the message)
|
and the array as-is (e.g. the message)
|
||||||
- Maps are encoded as the varint-encoded item count, followed by concatenated
|
- Maps are encoded as the varint-encoded item count, followed by concatenated
|
||||||
item encodings.
|
item encodings.
|
||||||
- Ciphersuite IDs are encoded as the 4-byte CRC-32 of the ID string.
|
- Structs are encoded as the concatenation of the encodings of its items, with
|
||||||
- Structs are encoded as the concatenation of the encodings of its items.
|
a Header struct as the first item, which contains the format version (a u8)
|
||||||
|
and the ciphersuite ID.
|
||||||
|
- The format currently described is identified by the constant 0.
|
||||||
|
- Ciphersuite IDs are encoded as the 4-byte CRC-32 of the ID string (the
|
||||||
|
constant Ciphersuite::ID, which for default ciphersuites is the contextString
|
||||||
|
of the ciphersuite, per the FROST spec).
|
||||||
|
|
||||||
For example, the following Signing Package:
|
For example, the following Signing Package:
|
||||||
|
|
||||||
|
- Header (map):
|
||||||
|
- Version (u8): 0
|
||||||
|
- Ciphersuite ID (4 bytes): CRC-32 of `FROST-RISTRETTO255-SHA512-v1`
|
||||||
- Commitments (map):
|
- Commitments (map):
|
||||||
- Identifier (byte array): `2a00000000000000000000000000000000000000000000000000000000000000`
|
- Identifier (byte array): `2a00000000000000000000000000000000000000000000000000000000000000`
|
||||||
- Signing Commitments:
|
- Signing Commitments:
|
||||||
- Hiding (byte array): `e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76`
|
- Hiding (byte array): `e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76`
|
||||||
- Bindng (byte array): `6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919`
|
- Bindng (byte array): `6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919`
|
||||||
- Ciphersuite ID: `"FROST(ristretto255, SHA-512)"`
|
- Ciphersuite ID (4 bytes): CRC-32 of `FROST-RISTRETTO255-SHA512-v1`
|
||||||
- Message (variable size byte array): `68656c6c6f20776f726c64` (`"hello world"` in UTF-8)
|
- Message (variable size byte array): `68656c6c6f20776f726c64` (`"hello world"` in UTF-8)
|
||||||
- Ciphersuite ID (4 bytes): `"FROST(ristretto255, SHA-512)"`
|
|
||||||
|
|
||||||
Is encoded as
|
Is encoded as
|
||||||
|
|
||||||
```
|
```
|
||||||
012a000000000000000000000000000000000000000000000000000000000000
|
00d76ecff5012a00000000000000000000000000000000000000000000000000
|
||||||
00e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d
|
00000000000000d76ecff5e2f2ae0a6abc4e71a884a961c500515f58e30b6aa5
|
||||||
766a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b9
|
82dd8db6a65945e08d2d766a493210f7499cd17fecb510ae0cea23a110e8d5b9
|
||||||
19e6811b690b68656c6c6f20776f726c64e6811b69
|
01f8acadd3095c73a3b9190b68656c6c6f20776f726c64
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- `00`: the version of the format
|
||||||
|
- `d76ecff5`: the ciphersuite ID of the SigningPackage; CRC-32 of `FROST-RISTRETTO255-SHA512-v1`
|
||||||
- `01`: the length of the map
|
- `01`: the length of the map
|
||||||
- `2a00000000000000000000000000000000000000000000000000000000000000`: the identifier
|
- `2a00000000000000000000000000000000000000000000000000000000000000`: the identifier
|
||||||
|
- `d76ecff5`: the ciphersuite ID of the SigningCommitments; CRC-32 of `FROST-RISTRETTO255-SHA512-v1`
|
||||||
- `e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76`: the hinding commitment
|
- `e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76`: the hinding commitment
|
||||||
- `6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919`: the binding commitment
|
- `6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919`: the binding commitment
|
||||||
- `e6811b69`: the ciphersuite ID of the SigningCommitments, CRC-32 of "FROST(ristretto255, SHA-512)"
|
|
||||||
- `0b`: the length of the message
|
- `0b`: the length of the message
|
||||||
- `68656c6c6f20776f726c64`: the message
|
- `68656c6c6f20776f726c64`: the message
|
||||||
- `e6811b69`: the ciphersuite ID of the SigningPackage, CRC-32 of "FROST(ristretto255, SHA-512)"
|
|
||||||
|
|
||||||
```admonish note
|
```admonish note
|
||||||
The ciphersuite ID is encoded multiple times in this case because `SigningPackage` includes
|
The ciphersuite ID is encoded multiple times in this case because `SigningPackage` includes
|
||||||
|
|
|
@ -6,6 +6,14 @@ Entries are listed in reverse chronological order.
|
||||||
|
|
||||||
## 0.8.0
|
## 0.8.0
|
||||||
|
|
||||||
|
* Both serde serialization and the default byte-oriented serialization now
|
||||||
|
include a version field (a u8) at the beginning which is always 0 for now. The
|
||||||
|
ciphersuite ID field was moved from the last field to the second field, after
|
||||||
|
the version. Both version and ciphersuite ID are now grouped into a "header"
|
||||||
|
struct, which affects self-describing formats like JSON. The ciphersuite ID
|
||||||
|
string was also changed for all ciphersuites: it is now equal to the
|
||||||
|
`contextString` of each ciphersuite per the FROST spec.
|
||||||
|
|
||||||
## Released
|
## Released
|
||||||
|
|
||||||
## 0.7.0
|
## 0.7.0
|
||||||
|
|
|
@ -24,7 +24,7 @@ pub mod round2;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
scalar_mul::VartimeMultiscalarMul, Ciphersuite, Deserialize, Element, Error, Field, Group,
|
scalar_mul::VartimeMultiscalarMul, Ciphersuite, Deserialize, Element, Error, Field, Group,
|
||||||
Scalar, Serialize, Signature, VerifyingKey,
|
Header, Scalar, Serialize, Signature, VerifyingKey,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use self::identifier::Identifier;
|
pub use self::identifier::Identifier;
|
||||||
|
@ -214,6 +214,9 @@ fn derive_interpolating_value<C: Ciphersuite>(
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
||||||
pub struct SigningPackage<C: Ciphersuite> {
|
pub struct SigningPackage<C: Ciphersuite> {
|
||||||
|
/// Serialization header
|
||||||
|
#[getter(skip)]
|
||||||
|
pub(crate) header: Header<C>,
|
||||||
/// The set of commitments participants published in the first round of the
|
/// The set of commitments participants published in the first round of the
|
||||||
/// protocol.
|
/// protocol.
|
||||||
signing_commitments: BTreeMap<Identifier<C>, round1::SigningCommitments<C>>,
|
signing_commitments: BTreeMap<Identifier<C>, round1::SigningCommitments<C>>,
|
||||||
|
@ -229,17 +232,6 @@ pub struct SigningPackage<C: Ciphersuite> {
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
message: Vec<u8>,
|
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: (),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C> SigningPackage<C>
|
impl<C> SigningPackage<C>
|
||||||
|
@ -254,9 +246,9 @@ where
|
||||||
message: &[u8],
|
message: &[u8],
|
||||||
) -> SigningPackage<C> {
|
) -> SigningPackage<C> {
|
||||||
SigningPackage {
|
SigningPackage {
|
||||||
|
header: Header::default(),
|
||||||
signing_commitments,
|
signing_commitments,
|
||||||
message: message.to_vec(),
|
message: message.to_vec(),
|
||||||
ciphersuite: (),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,8 @@ use rand_core::{CryptoRng, RngCore};
|
||||||
use zeroize::{DefaultIsZeroes, Zeroize};
|
use zeroize::{DefaultIsZeroes, Zeroize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
frost::Identifier, Ciphersuite, Deserialize, Element, Error, Field, Group, Scalar, Serialize,
|
frost::Identifier, Ciphersuite, Deserialize, Element, Error, Field, Group, Header, Scalar,
|
||||||
SigningKey, VerifyingKey,
|
Serialize, SigningKey, VerifyingKey,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
|
@ -352,6 +352,9 @@ where
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
||||||
pub struct SecretShare<C: Ciphersuite> {
|
pub struct SecretShare<C: Ciphersuite> {
|
||||||
|
/// Serialization header
|
||||||
|
#[getter(skip)]
|
||||||
|
pub(crate) header: Header<C>,
|
||||||
/// The participant identifier of this [`SecretShare`].
|
/// The participant identifier of this [`SecretShare`].
|
||||||
#[zeroize(skip)]
|
#[zeroize(skip)]
|
||||||
pub(crate) identifier: Identifier<C>,
|
pub(crate) identifier: Identifier<C>,
|
||||||
|
@ -360,17 +363,6 @@ pub struct SecretShare<C: Ciphersuite> {
|
||||||
#[zeroize(skip)]
|
#[zeroize(skip)]
|
||||||
/// The commitments to be distributed among signers.
|
/// The commitments to be distributed among signers.
|
||||||
pub(crate) commitment: VerifiableSecretSharingCommitment<C>,
|
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: (),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C> SecretShare<C>
|
impl<C> SecretShare<C>
|
||||||
|
@ -384,10 +376,10 @@ where
|
||||||
commitment: VerifiableSecretSharingCommitment<C>,
|
commitment: VerifiableSecretSharingCommitment<C>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
SecretShare {
|
SecretShare {
|
||||||
|
header: Header::default(),
|
||||||
identifier,
|
identifier,
|
||||||
signing_share,
|
signing_share,
|
||||||
commitment,
|
commitment,
|
||||||
ciphersuite: (),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,9 +512,9 @@ pub fn split<C: Ciphersuite, R: RngCore + CryptoRng>(
|
||||||
Ok((
|
Ok((
|
||||||
secret_shares_by_id,
|
secret_shares_by_id,
|
||||||
PublicKeyPackage {
|
PublicKeyPackage {
|
||||||
|
header: Header::default(),
|
||||||
verifying_shares,
|
verifying_shares,
|
||||||
verifying_key,
|
verifying_key,
|
||||||
ciphersuite: (),
|
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -577,6 +569,9 @@ fn evaluate_vss<C: Ciphersuite>(
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
||||||
pub struct KeyPackage<C: Ciphersuite> {
|
pub struct KeyPackage<C: Ciphersuite> {
|
||||||
|
/// Serialization header
|
||||||
|
#[getter(skip)]
|
||||||
|
pub(crate) header: Header<C>,
|
||||||
/// Denotes the participant identifier each secret share key package is owned by.
|
/// Denotes the participant identifier each secret share key package is owned by.
|
||||||
#[zeroize(skip)]
|
#[zeroize(skip)]
|
||||||
pub(crate) identifier: Identifier<C>,
|
pub(crate) identifier: Identifier<C>,
|
||||||
|
@ -589,17 +584,6 @@ pub struct KeyPackage<C: Ciphersuite> {
|
||||||
#[zeroize(skip)]
|
#[zeroize(skip)]
|
||||||
pub(crate) verifying_key: VerifyingKey<C>,
|
pub(crate) verifying_key: VerifyingKey<C>,
|
||||||
pub(crate) min_signers: u16,
|
pub(crate) min_signers: u16,
|
||||||
/// 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: (),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C> KeyPackage<C>
|
impl<C> KeyPackage<C>
|
||||||
|
@ -615,12 +599,12 @@ where
|
||||||
min_signers: u16,
|
min_signers: u16,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
header: Header::default(),
|
||||||
identifier,
|
identifier,
|
||||||
signing_share,
|
signing_share,
|
||||||
verifying_share,
|
verifying_share,
|
||||||
verifying_key,
|
verifying_key,
|
||||||
min_signers,
|
min_signers,
|
||||||
ciphersuite: (),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -659,12 +643,12 @@ where
|
||||||
let (verifying_share, verifying_key) = secret_share.verify()?;
|
let (verifying_share, verifying_key) = secret_share.verify()?;
|
||||||
|
|
||||||
Ok(KeyPackage {
|
Ok(KeyPackage {
|
||||||
|
header: Header::default(),
|
||||||
identifier: secret_share.identifier,
|
identifier: secret_share.identifier,
|
||||||
signing_share: secret_share.signing_share,
|
signing_share: secret_share.signing_share,
|
||||||
verifying_share,
|
verifying_share,
|
||||||
verifying_key,
|
verifying_key,
|
||||||
min_signers: secret_share.commitment.0.len() as u16,
|
min_signers: secret_share.commitment.0.len() as u16,
|
||||||
ciphersuite: (),
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -677,22 +661,14 @@ where
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
||||||
pub struct PublicKeyPackage<C: Ciphersuite> {
|
pub struct PublicKeyPackage<C: Ciphersuite> {
|
||||||
|
/// Serialization header
|
||||||
|
#[getter(skip)]
|
||||||
|
pub(crate) header: Header<C>,
|
||||||
/// The verifying shares for all participants. Used to validate signature
|
/// The verifying shares for all participants. Used to validate signature
|
||||||
/// shares they generate.
|
/// shares they generate.
|
||||||
pub(crate) verifying_shares: HashMap<Identifier<C>, VerifyingShare<C>>,
|
pub(crate) verifying_shares: HashMap<Identifier<C>, VerifyingShare<C>>,
|
||||||
/// The joint public key for the entire group.
|
/// The joint public key for the entire group.
|
||||||
pub(crate) verifying_key: VerifyingKey<C>,
|
pub(crate) verifying_key: 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: (),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C> PublicKeyPackage<C>
|
impl<C> PublicKeyPackage<C>
|
||||||
|
@ -705,9 +681,9 @@ where
|
||||||
verifying_key: VerifyingKey<C>,
|
verifying_key: VerifyingKey<C>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
header: Header::default(),
|
||||||
verifying_shares,
|
verifying_shares,
|
||||||
verifying_key,
|
verifying_key,
|
||||||
ciphersuite: (),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -821,10 +797,10 @@ pub(crate) fn generate_secret_shares<C: Ciphersuite>(
|
||||||
let value = evaluate_polynomial(*id, &coefficients);
|
let value = evaluate_polynomial(*id, &coefficients);
|
||||||
|
|
||||||
secret_shares.push(SecretShare {
|
secret_shares.push(SecretShare {
|
||||||
|
header: Header::default(),
|
||||||
identifier: *id,
|
identifier: *id,
|
||||||
signing_share: SigningShare(value),
|
signing_share: SigningShare(value),
|
||||||
commitment: commitment.clone(),
|
commitment: commitment.clone(),
|
||||||
ciphersuite: (),
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,8 +35,8 @@ use std::{collections::HashMap, iter};
|
||||||
use rand_core::{CryptoRng, RngCore};
|
use rand_core::{CryptoRng, RngCore};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
frost::Identifier, Challenge, Ciphersuite, Element, Error, Field, Group, Scalar, Signature,
|
frost::Identifier, Challenge, Ciphersuite, Element, Error, Field, Group, Header, Scalar,
|
||||||
SigningKey, VerifyingKey,
|
Signature, SigningKey, VerifyingKey,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
|
@ -60,21 +60,13 @@ pub mod round1 {
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
||||||
pub struct Package<C: Ciphersuite> {
|
pub struct Package<C: Ciphersuite> {
|
||||||
|
/// Serialization header
|
||||||
|
#[getter(skip)]
|
||||||
|
pub(crate) header: Header<C>,
|
||||||
/// The public commitment from the participant (C_i)
|
/// The public commitment from the participant (C_i)
|
||||||
pub(crate) commitment: VerifiableSecretSharingCommitment<C>,
|
pub(crate) commitment: VerifiableSecretSharingCommitment<C>,
|
||||||
/// The proof of knowledge of the temporary secret (σ_i = (R_i, μ_i))
|
/// The proof of knowledge of the temporary secret (σ_i = (R_i, μ_i))
|
||||||
pub(crate) proof_of_knowledge: Signature<C>,
|
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: (),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C> Package<C>
|
impl<C> Package<C>
|
||||||
|
@ -87,9 +79,9 @@ pub mod round1 {
|
||||||
proof_of_knowledge: Signature<C>,
|
proof_of_knowledge: Signature<C>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
header: Header::default(),
|
||||||
commitment,
|
commitment,
|
||||||
proof_of_knowledge,
|
proof_of_knowledge,
|
||||||
ciphersuite: (),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,19 +170,11 @@ pub mod round2 {
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
||||||
pub struct Package<C: Ciphersuite> {
|
pub struct Package<C: Ciphersuite> {
|
||||||
|
/// Serialization header
|
||||||
|
#[getter(skip)]
|
||||||
|
pub(crate) header: Header<C>,
|
||||||
/// The secret share being sent.
|
/// The secret share being sent.
|
||||||
pub(crate) signing_share: SigningShare<C>,
|
pub(crate) signing_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: (),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C> Package<C>
|
impl<C> Package<C>
|
||||||
|
@ -200,8 +184,8 @@ pub mod round2 {
|
||||||
/// Create a new [`Package`] instance.
|
/// Create a new [`Package`] instance.
|
||||||
pub fn new(signing_share: SigningShare<C>) -> Self {
|
pub fn new(signing_share: SigningShare<C>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
header: Header::default(),
|
||||||
signing_share,
|
signing_share,
|
||||||
ciphersuite: (),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -319,9 +303,9 @@ pub fn part1<C: Ciphersuite, R: RngCore + CryptoRng>(
|
||||||
max_signers,
|
max_signers,
|
||||||
};
|
};
|
||||||
let package = round1::Package {
|
let package = round1::Package {
|
||||||
|
header: Header::default(),
|
||||||
commitment,
|
commitment,
|
||||||
proof_of_knowledge: Signature { R: R_i, z: mu_i },
|
proof_of_knowledge: Signature { R: R_i, z: mu_i },
|
||||||
ciphersuite: (),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok((secret_package, package))
|
Ok((secret_package, package))
|
||||||
|
@ -400,8 +384,8 @@ pub fn part2<C: Ciphersuite>(
|
||||||
round2_packages.insert(
|
round2_packages.insert(
|
||||||
ell,
|
ell,
|
||||||
round2::Package {
|
round2::Package {
|
||||||
|
header: Header::default(),
|
||||||
signing_share: SigningShare(value),
|
signing_share: SigningShare(value),
|
||||||
ciphersuite: (),
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -515,10 +499,10 @@ pub fn part3<C: Ciphersuite>(
|
||||||
// however the required components are in different places.
|
// however the required components are in different places.
|
||||||
// Build a temporary SecretShare so what we can call verify().
|
// Build a temporary SecretShare so what we can call verify().
|
||||||
let secret_share = SecretShare {
|
let secret_share = SecretShare {
|
||||||
|
header: Header::default(),
|
||||||
identifier: round2_secret_package.identifier,
|
identifier: round2_secret_package.identifier,
|
||||||
signing_share: f_ell_i,
|
signing_share: f_ell_i,
|
||||||
commitment: commitment.clone(),
|
commitment: commitment.clone(),
|
||||||
ciphersuite: (),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Verify the share. We don't need the result.
|
// Verify the share. We don't need the result.
|
||||||
|
@ -559,17 +543,17 @@ pub fn part3<C: Ciphersuite>(
|
||||||
all_verifying_shares.insert(round2_secret_package.identifier, verifying_share);
|
all_verifying_shares.insert(round2_secret_package.identifier, verifying_share);
|
||||||
|
|
||||||
let key_package = KeyPackage {
|
let key_package = KeyPackage {
|
||||||
|
header: Header::default(),
|
||||||
identifier: round2_secret_package.identifier,
|
identifier: round2_secret_package.identifier,
|
||||||
signing_share,
|
signing_share,
|
||||||
verifying_share,
|
verifying_share,
|
||||||
verifying_key,
|
verifying_key,
|
||||||
min_signers: round2_secret_package.min_signers,
|
min_signers: round2_secret_package.min_signers,
|
||||||
ciphersuite: (),
|
|
||||||
};
|
};
|
||||||
let public_key_package = PublicKeyPackage {
|
let public_key_package = PublicKeyPackage {
|
||||||
|
header: Header::default(),
|
||||||
verifying_shares: all_verifying_shares,
|
verifying_shares: all_verifying_shares,
|
||||||
verifying_key,
|
verifying_key,
|
||||||
ciphersuite: (),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok((key_package, public_key_package))
|
Ok((key_package, public_key_package))
|
||||||
|
|
|
@ -8,7 +8,7 @@ use std::collections::{BTreeSet, HashMap};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
frost::{compute_lagrange_coefficient, Identifier},
|
frost::{compute_lagrange_coefficient, Identifier},
|
||||||
Ciphersuite, CryptoRng, Error, Field, Group, RngCore, Scalar,
|
Ciphersuite, CryptoRng, Error, Field, Group, Header, RngCore, Scalar,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{generate_coefficients, SecretShare, SigningShare, VerifiableSecretSharingCommitment};
|
use super::{generate_coefficients, SecretShare, SigningShare, VerifiableSecretSharingCommitment};
|
||||||
|
@ -121,9 +121,9 @@ pub fn repair_share_step_3<C: Ciphersuite>(
|
||||||
}
|
}
|
||||||
|
|
||||||
SecretShare {
|
SecretShare {
|
||||||
|
header: Header::default(),
|
||||||
identifier,
|
identifier,
|
||||||
signing_share: SigningShare(share),
|
signing_share: SigningShare(share),
|
||||||
commitment: commitment.clone(),
|
commitment: commitment.clone(),
|
||||||
ciphersuite: (),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,9 @@ use hex::FromHex;
|
||||||
use rand_core::{CryptoRng, RngCore};
|
use rand_core::{CryptoRng, RngCore};
|
||||||
use zeroize::Zeroize;
|
use zeroize::Zeroize;
|
||||||
|
|
||||||
use crate::{frost, Ciphersuite, Deserialize, Element, Error, Field, Group, Scalar, Serialize};
|
use crate::{
|
||||||
|
frost, Ciphersuite, Deserialize, Element, Error, Field, Group, Header, Scalar, Serialize,
|
||||||
|
};
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
use crate::ElementSerialization;
|
use crate::ElementSerialization;
|
||||||
|
@ -268,21 +270,13 @@ where
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
||||||
pub struct SigningCommitments<C: Ciphersuite> {
|
pub struct SigningCommitments<C: Ciphersuite> {
|
||||||
|
/// Serialization header
|
||||||
|
#[getter(skip)]
|
||||||
|
pub(crate) header: Header<C>,
|
||||||
/// Commitment to the hiding [`Nonce`].
|
/// Commitment to the hiding [`Nonce`].
|
||||||
pub(crate) hiding: NonceCommitment<C>,
|
pub(crate) hiding: NonceCommitment<C>,
|
||||||
/// Commitment to the binding [`Nonce`].
|
/// Commitment to the binding [`Nonce`].
|
||||||
pub(crate) binding: NonceCommitment<C>,
|
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: (),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C> SigningCommitments<C>
|
impl<C> SigningCommitments<C>
|
||||||
|
@ -292,9 +286,9 @@ where
|
||||||
/// Create new SigningCommitments
|
/// Create new SigningCommitments
|
||||||
pub fn new(hiding: NonceCommitment<C>, binding: NonceCommitment<C>) -> Self {
|
pub fn new(hiding: NonceCommitment<C>, binding: NonceCommitment<C>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
header: Header::default(),
|
||||||
hiding,
|
hiding,
|
||||||
binding,
|
binding,
|
||||||
ciphersuite: (),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,17 +106,9 @@ where
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
||||||
struct SignatureShareSerialization<C: Ciphersuite> {
|
struct SignatureShareSerialization<C: Ciphersuite> {
|
||||||
|
/// Serialization header
|
||||||
|
pub(crate) header: Header<C>,
|
||||||
share: SignatureShareHelper<C>,
|
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(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
|
@ -138,8 +130,8 @@ where
|
||||||
{
|
{
|
||||||
fn from(value: SignatureShare<C>) -> Self {
|
fn from(value: SignatureShare<C>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
header: Header::default(),
|
||||||
share: SignatureShareHelper(value.share),
|
share: SignatureShareHelper(value.share),
|
||||||
ciphersuite: (),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
use std::{
|
use std::{
|
||||||
default::Default,
|
default::Default,
|
||||||
fmt::Debug,
|
fmt::Debug,
|
||||||
|
marker::PhantomData,
|
||||||
ops::{Add, Mul, Sub},
|
ops::{Add, Mul, Sub},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -38,6 +39,7 @@ pub use error::{Error, FieldError, GroupError};
|
||||||
pub use signature::Signature;
|
pub use signature::Signature;
|
||||||
pub use signing_key::SigningKey;
|
pub use signing_key::SigningKey;
|
||||||
pub use verifying_key::VerifyingKey;
|
pub use verifying_key::VerifyingKey;
|
||||||
|
use zeroize::Zeroize;
|
||||||
|
|
||||||
/// A prime order finite field GF(q) over which all scalar values for our prime order group can be
|
/// A prime order finite field GF(q) over which all scalar values for our prime order group can be
|
||||||
/// multiplied are defined.
|
/// multiplied are defined.
|
||||||
|
@ -252,7 +254,10 @@ where
|
||||||
///
|
///
|
||||||
/// [FROST ciphersuite]: https://www.ietf.org/archive/id/draft-irtf-cfrg-frost-14.html#name-ciphersuites
|
/// [FROST ciphersuite]: https://www.ietf.org/archive/id/draft-irtf-cfrg-frost-14.html#name-ciphersuites
|
||||||
pub trait Ciphersuite: Copy + Clone + PartialEq + Debug {
|
pub trait Ciphersuite: Copy + Clone + PartialEq + Debug {
|
||||||
/// The ciphersuite ID string
|
/// The ciphersuite ID string. It should be equal to the contextString in
|
||||||
|
/// the spec. For new ciphersuites, this should be a string that identifies
|
||||||
|
/// the ciphersuite; it's recommended to use a similar format to the
|
||||||
|
/// ciphersuites in the FROST spec, e.g. "FROST-RISTRETTO255-SHA512-v1".
|
||||||
const ID: &'static str;
|
const ID: &'static str;
|
||||||
|
|
||||||
/// The prime order group (or subgroup) that this ciphersuite operates over.
|
/// The prime order group (or subgroup) that this ciphersuite operates over.
|
||||||
|
@ -426,6 +431,43 @@ pub(crate) fn random_nonzero<C: Ciphersuite, R: RngCore + CryptoRng>(rng: &mut R
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Zeroize)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
|
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
|
||||||
|
struct Header<C: Ciphersuite> {
|
||||||
|
/// Format version
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "serde",
|
||||||
|
serde(deserialize_with = "crate::version_deserialize::<_>")
|
||||||
|
)]
|
||||||
|
version: u8,
|
||||||
|
/// Ciphersuite ID
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "serde",
|
||||||
|
serde(serialize_with = "crate::ciphersuite_serialize::<_, C>")
|
||||||
|
)]
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "serde",
|
||||||
|
serde(deserialize_with = "crate::ciphersuite_deserialize::<_, C>")
|
||||||
|
)]
|
||||||
|
ciphersuite: (),
|
||||||
|
#[serde(skip)]
|
||||||
|
phantom: PhantomData<C>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<C> Default for Header<C>
|
||||||
|
where
|
||||||
|
C: Ciphersuite,
|
||||||
|
{
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
version: Default::default(),
|
||||||
|
ciphersuite: Default::default(),
|
||||||
|
phantom: Default::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Serialize a placeholder ciphersuite field with the ciphersuite ID string.
|
/// Serialize a placeholder ciphersuite field with the ciphersuite ID string.
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
pub(crate) fn ciphersuite_serialize<S, C>(_: &(), s: S) -> Result<S::Ok, S::Error>
|
pub(crate) fn ciphersuite_serialize<S, C>(_: &(), s: S) -> Result<S::Ok, S::Error>
|
||||||
|
@ -466,6 +508,23 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deserialize a version. For now, since there is a single version 0,
|
||||||
|
/// simply validate if it's 0.
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
pub(crate) fn version_deserialize<'de, D>(deserializer: D) -> Result<u8, D::Error>
|
||||||
|
where
|
||||||
|
D: serde::Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let version: u8 = serde::de::Deserialize::deserialize(deserializer)?;
|
||||||
|
if version != 0 {
|
||||||
|
Err(serde::de::Error::custom(
|
||||||
|
"wrong format version, only 0 supported",
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
Ok(version)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Default byte-oriented serialization for structs that need to be communicated.
|
// Default byte-oriented serialization for structs that need to be communicated.
|
||||||
//
|
//
|
||||||
// Note that we still manually implement these methods in each applicable type,
|
// Note that we still manually implement these methods in each applicable type,
|
||||||
|
|
|
@ -160,7 +160,7 @@ const CONTEXT_STRING: &str = "FROST-ED25519-SHA512-v1";
|
||||||
pub struct Ed25519Sha512;
|
pub struct Ed25519Sha512;
|
||||||
|
|
||||||
impl Ciphersuite for Ed25519Sha512 {
|
impl Ciphersuite for Ed25519Sha512 {
|
||||||
const ID: &'static str = "FROST(Ed25519, SHA-512)";
|
const ID: &'static str = CONTEXT_STRING;
|
||||||
|
|
||||||
type Group = Ed25519Group;
|
type Group = Ed25519Group;
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,12 @@ fn check_signing_commitments_serialization() {
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
@ -37,21 +40,21 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Wrong ciphersuite
|
// Wrong ciphersuite
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Wrong, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
||||||
"ciphersuite": "FROST(Wrong, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid identifier
|
|
||||||
let invalid_json = r#"{
|
|
||||||
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
|
||||||
}"#;
|
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"foo": "5866666666666666666666666666666666666666666666666666666666666666",
|
"foo": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -59,6 +62,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -66,6 +73,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
|
||||||
"extra": 1
|
"extra": 1
|
||||||
|
@ -87,72 +98,102 @@ fn check_signing_package_serialization() {
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(signing_package == decoded_signing_package);
|
assert!(signing_package == decoded_signing_package);
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": {
|
"0000000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"foo": "5866666666666666666666666666666666666666666666666666666666666666",
|
"foo": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
"hiding": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022",
|
"binding": "c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64",
|
||||||
"extra": 1,
|
"extra": 1
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}
|
}
|
||||||
"#;
|
"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
@ -169,8 +210,11 @@ fn check_signature_share_serialization() {
|
||||||
assert!(signature_share == decoded_signature_share);
|
assert!(signature_share == decoded_signature_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
|
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(signature_share == decoded_commitments);
|
assert!(signature_share == decoded_commitments);
|
||||||
|
@ -180,22 +224,31 @@ fn check_signature_share_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
|
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -211,12 +264,15 @@ fn check_secret_share_serialization() {
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"5866666666666666666666666666666666666666666666666666666666666666"
|
"5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
@ -226,45 +282,57 @@ fn check_secret_share_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"5866666666666666666666666666666666666666666666666666666666666666"
|
"5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"5866666666666666666666666666666666666666666666666666666666666666"
|
"5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"5866666666666666666666666666666666666666666666666666666666666666"
|
"5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"5866666666666666666666666666666666666666666666666666666666666666"
|
"5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
],
|
]
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -280,12 +348,15 @@ fn check_key_package_serialization() {
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"min_signers": 2,
|
"min_signers": 2
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
@ -295,41 +366,68 @@ fn check_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_share": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"extra_field": 1,
|
"extra_field": 1
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
}"#;
|
||||||
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
|
// Invalid version
|
||||||
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 1,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
"secret_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
|
"public": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
|
"group_public": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
}
|
}
|
||||||
|
@ -345,11 +443,14 @@ fn check_public_key_package_serialization() {
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
"2a00000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
},
|
},
|
||||||
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
@ -359,41 +460,53 @@ fn check_public_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
"0000000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
},
|
},
|
||||||
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
"2a00000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
},
|
},
|
||||||
"foo": "5866666666666666666666666666666666666666666666666666666666666666",
|
"foo": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
"2a00000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
},
|
}
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
"2a00000000000000000000000000000000000000000000000000000000000000": "5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
},
|
},
|
||||||
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
"verifying_key": "5866666666666666666666666666666666666666666666666666666666666666",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -409,11 +522,14 @@ fn check_round1_package_serialization() {
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"5866666666666666666666666666666666666666666666666666666666666666"
|
"5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "5866666666666666666666666666666666666666666666666666666666666666498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"proof_of_knowledge": "5866666666666666666666666666666666666666666666666666666666666666498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
@ -423,31 +539,40 @@ fn check_round1_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"5866666666666666666666666666666666666666666666666666666666666666"
|
"5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
],
|
],
|
||||||
"foo": "5866666666666666666666666666666666666666666666666666666666666666498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"foo": "5866666666666666666666666666666666666666666666666666666666666666498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"5866666666666666666666666666666666666666666666666666666666666666"
|
"5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
],
|
]
|
||||||
"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_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"5866666666666666666666666666666666666666666666666666666666666666"
|
"5866666666666666666666666666666666666666666666666666666666666666"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "5866666666666666666666666666666666666666666666666666666666666666498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"proof_of_knowledge": "5866666666666666666666666666666666666666666666666666666666666666498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -463,8 +588,11 @@ fn check_round2_package_serialization() {
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
@ -474,22 +602,31 @@ fn check_round2_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
|
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED25519-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed25519/tests/serialization_tests.rs
|
source: frost-ed25519/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
2a00000000000000000000000000000000000000000000000000000000000000498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a5866666666666666666666666666666666666666666666666666666666666666586666666666666666666666666666666666666666666666666666666666666602ea38536e
|
00b169f0da2a00000000000000000000000000000000000000000000000000000000000000498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a5866666666666666666666666666666666666666666666666666666666666666586666666666666666666666666666666666666666666666666666666666666602
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed25519/tests/serialization_tests.rs
|
source: frost-ed25519/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
012a0000000000000000000000000000000000000000000000000000000000000058666666666666666666666666666666666666666666666666666666666666665866666666666666666666666666666666666666666666666666666666666666ea38536e
|
00b169f0da012a0000000000000000000000000000000000000000000000000000000000000058666666666666666666666666666666666666666666666666666666666666665866666666666666666666666666666666666666666666666666666666666666
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed25519/tests/serialization_tests.rs
|
source: frost-ed25519/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
015866666666666666666666666666666666666666666666666666666666666666405866666666666666666666666666666666666666666666666666666666666666498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0aea38536e
|
00b169f0da015866666666666666666666666666666666666666666666666666666666666666405866666666666666666666666666666666666666666666666666666666666666498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed25519/tests/serialization_tests.rs
|
source: frost-ed25519/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0aea38536e
|
00b169f0da498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed25519/tests/serialization_tests.rs
|
source: frost-ed25519/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
2a00000000000000000000000000000000000000000000000000000000000000498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a015866666666666666666666666666666666666666666666666666666666666666ea38536e
|
00b169f0da2a00000000000000000000000000000000000000000000000000000000000000498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a015866666666666666666666666666666666666666666666666666666666666666
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed25519/tests/serialization_tests.rs
|
source: frost-ed25519/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
5866666666666666666666666666666666666666666666666666666666666666c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022ea38536e
|
00b169f0da5866666666666666666666666666666666666666666666666666666666666666c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed25519/tests/serialization_tests.rs
|
source: frost-ed25519/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
012a000000000000000000000000000000000000000000000000000000000000005866666666666666666666666666666666666666666666666666666666666666c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd6022ea38536e0b68656c6c6f20776f726c64ea38536e
|
00b169f0da012a0000000000000000000000000000000000000000000000000000000000000000b169f0da5866666666666666666666666666666666666666666666666666666666666666c9a3f86aae465f0e56513864510f3997561fa2c9e85ea21dc2292309f3cd60220b68656c6c6f20776f726c64
|
||||||
|
|
|
@ -155,7 +155,7 @@ const CONTEXT_STRING: &str = "FROST-ED448-SHAKE256-v1";
|
||||||
pub struct Ed448Shake256;
|
pub struct Ed448Shake256;
|
||||||
|
|
||||||
impl Ciphersuite for Ed448Shake256 {
|
impl Ciphersuite for Ed448Shake256 {
|
||||||
const ID: &'static str = "FROST(Ed448, SHAKE256)";
|
const ID: &'static str = CONTEXT_STRING;
|
||||||
|
|
||||||
type Group = Ed448Group;
|
type Group = Ed448Group;
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,12 @@ fn check_signing_commitments_serialization() {
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
@ -37,21 +40,21 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Wrong ciphersuite
|
// Wrong ciphersuite
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Wrong, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
||||||
"ciphersuite": "FROST(Wrong, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid identifier
|
|
||||||
let invalid_json = r#"{
|
|
||||||
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
|
||||||
}"#;
|
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"foo": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"foo": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -59,6 +62,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -66,6 +73,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
|
||||||
"extra": 1
|
"extra": 1
|
||||||
|
@ -87,72 +98,102 @@ fn check_signing_package_serialization() {
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": {
|
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(signing_package == decoded_signing_package);
|
assert!(signing_package == decoded_signing_package);
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": {
|
"0000000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": {
|
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"foo": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"foo": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": {
|
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": {
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": {
|
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"hiding": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80",
|
"binding": "ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64",
|
||||||
"extra": 1,
|
"extra": 1
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}
|
}
|
||||||
"#;
|
"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
@ -169,8 +210,11 @@ fn check_signature_share_serialization() {
|
||||||
assert!(signature_share == decoded_signature_share);
|
assert!(signature_share == decoded_signature_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
|
"share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(signature_share == decoded_commitments);
|
assert!(signature_share == decoded_commitments);
|
||||||
|
@ -180,22 +224,31 @@ fn check_signature_share_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
|
"foo": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -211,12 +264,15 @@ fn check_secret_share_serialization() {
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
@ -226,45 +282,57 @@ fn check_secret_share_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"foo": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"foo": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
],
|
]
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -280,12 +348,15 @@ fn check_key_package_serialization() {
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"min_signers": 2,
|
"min_signers": 2
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
@ -295,41 +366,68 @@ fn check_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"foo": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"foo": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_share": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"extra_field": 1,
|
"extra_field": 1
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
}"#;
|
||||||
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
|
// Invalid version
|
||||||
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 1,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
|
"identifier": "2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
"secret_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
|
"public": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
|
"group_public": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
}
|
}
|
||||||
|
@ -345,11 +443,14 @@ fn check_public_key_package_serialization() {
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
},
|
},
|
||||||
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
@ -359,41 +460,53 @@ fn check_public_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"0000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
},
|
},
|
||||||
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
},
|
},
|
||||||
"foo": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"foo": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
},
|
}
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
},
|
},
|
||||||
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
"verifying_key": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -409,11 +522,14 @@ fn check_round1_package_serialization() {
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"proof_of_knowledge": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00"
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
@ -423,31 +539,40 @@ fn check_round1_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
],
|
],
|
||||||
"foo": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"foo": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
],
|
]
|
||||||
"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_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
"14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"proof_of_knowledge": "14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -463,8 +588,11 @@ fn check_round2_package_serialization() {
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
|
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
@ -474,22 +602,31 @@ fn check_round2_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"header": {
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
|
"foo": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(Ed448, SHAKE256)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-ED448-SHAKE256-v1"
|
||||||
|
},
|
||||||
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
"signing_share": "4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed448/tests/serialization_tests.rs
|
source: frost-ed448/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
2a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a0014fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f690014fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f690002854361d9
|
005a064cfd2a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a0014fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f690014fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f690002
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed448/tests/serialization_tests.rs
|
source: frost-ed448/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
012a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f690014fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900854361d9
|
005a064cfd012a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f690014fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed448/tests/serialization_tests.rs
|
source: frost-ed448/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
0114fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69007214fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00854361d9
|
005a064cfd0114fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69007214fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f69004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed448/tests/serialization_tests.rs
|
source: frost-ed448/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00854361d9
|
005a064cfd4d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a00
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed448/tests/serialization_tests.rs
|
source: frost-ed448/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
2a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a000114fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900854361d9
|
005a064cfd2a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d83e51cb78150c2380ad9b3a18148166024e4c9db3cdf82466d3153aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2a000114fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed448/tests/serialization_tests.rs
|
source: frost-ed448/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80854361d9
|
005a064cfd14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ed448/tests/serialization_tests.rs
|
source: frost-ed448/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
012a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae80854361d90b68656c6c6f20776f726c64854361d9
|
005a064cfd012a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a064cfd14fa30f25b790898adc8d74e2c13bdfdc4397ce61cffd33ad7c2a0051e9c78874098a36c7373ea4b62c7c9563720768824bcb66e71463f6900ed8693eacdfbeada6ba0cdd1beb2bcbb98302a3a8365650db8c4d88a726de3b7d74d8835a0d76e03b0c2865020d659b38d04d74a63e905ae800b68656c6c6f20776f726c64
|
||||||
|
|
|
@ -180,7 +180,7 @@ const CONTEXT_STRING: &str = "FROST-P256-SHA256-v1";
|
||||||
pub struct P256Sha256;
|
pub struct P256Sha256;
|
||||||
|
|
||||||
impl Ciphersuite for P256Sha256 {
|
impl Ciphersuite for P256Sha256 {
|
||||||
const ID: &'static str = "FROST(P-256, SHA-256)";
|
const ID: &'static str = CONTEXT_STRING;
|
||||||
|
|
||||||
type Group = P256Group;
|
type Group = P256Group;
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,12 @@ fn check_signing_commitments_serialization() {
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
@ -37,21 +40,21 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Wrong ciphersuite
|
// Wrong ciphersuite
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Wrong, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
||||||
"ciphersuite": "FROST(Wrong, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid identifier
|
|
||||||
let invalid_json = r#"{
|
|
||||||
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
|
||||||
}"#;
|
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"foo": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"foo": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -59,6 +62,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -66,6 +73,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
|
||||||
"extra": 1
|
"extra": 1
|
||||||
|
@ -87,72 +98,102 @@ fn check_signing_package_serialization() {
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": {
|
"000000000000000000000000000000000000000000000000000000000000002a": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(signing_package == decoded_signing_package);
|
assert!(signing_package == decoded_signing_package);
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": {
|
"0000000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": {
|
"000000000000000000000000000000000000000000000000000000000000002a": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"foo": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"foo": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": {
|
"000000000000000000000000000000000000000000000000000000000000002a": {
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
|
"header": {
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": {
|
"000000000000000000000000000000000000000000000000000000000000002a": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"hiding": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978",
|
"binding": "037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978"
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64",
|
||||||
"extra": 1,
|
"extra": 1
|
||||||
"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_err());
|
||||||
|
@ -169,8 +210,11 @@ fn check_signature_share_serialization() {
|
||||||
assert!(signature_share == decoded_signature_share);
|
assert!(signature_share == decoded_signature_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"header": {
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
|
"share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(signature_share == decoded_commitments);
|
assert!(signature_share == decoded_commitments);
|
||||||
|
@ -180,22 +224,31 @@ fn check_signature_share_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"header": {
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
|
"foo": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -211,12 +264,15 @@ fn check_secret_share_serialization() {
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
@ -226,45 +282,57 @@ fn check_secret_share_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
],
|
]
|
||||||
"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_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"foo": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"foo": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
],
|
]
|
||||||
"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_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
],
|
]
|
||||||
"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_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
],
|
]
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -280,12 +348,15 @@ fn check_key_package_serialization() {
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"min_signers": 2,
|
"min_signers": 2
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
@ -295,41 +366,68 @@ fn check_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"foo": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"foo": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_share": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"extra_field": 1,
|
"extra_field": 1
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
}"#;
|
||||||
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
|
// Invalid version
|
||||||
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 1,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
|
"secret_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
|
"public": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
|
"group_public": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
}
|
}
|
||||||
|
@ -345,11 +443,14 @@ fn check_public_key_package_serialization() {
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"000000000000000000000000000000000000000000000000000000000000002a": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
},
|
},
|
||||||
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
@ -359,41 +460,53 @@ fn check_public_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"0000000000000000000000000000000000000000000000000000000000000000": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
},
|
},
|
||||||
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"000000000000000000000000000000000000000000000000000000000000002a": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
},
|
},
|
||||||
"foo": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"foo": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"000000000000000000000000000000000000000000000000000000000000002a": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
},
|
}
|
||||||
"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_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"000000000000000000000000000000000000000000000000000000000000002a": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
},
|
},
|
||||||
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
"verifying_key": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -409,11 +522,14 @@ fn check_round1_package_serialization() {
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"proof_of_knowledge": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1"
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
@ -423,31 +539,40 @@ fn check_round1_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
],
|
],
|
||||||
"foo": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"foo": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
],
|
]
|
||||||
"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_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
"036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"proof_of_knowledge": "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -463,8 +588,11 @@ fn check_round2_package_serialization() {
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"header": {
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
|
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
@ -474,22 +602,31 @@ fn check_round2_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"header": {
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
|
"foo": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(P-256, SHA-256)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-P256-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
"signing_share": "aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-p256/tests/serialization_tests.rs
|
source: frost-p256/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
000000000000000000000000000000000000000000000000000000000000002aaaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296029bf7b2e7
|
00a132f0c9000000000000000000000000000000000000000000000000000000000000002aaaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29602
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-p256/tests/serialization_tests.rs
|
source: frost-p256/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
01000000000000000000000000000000000000000000000000000000000000002a036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2969bf7b2e7
|
00a132f0c901000000000000000000000000000000000000000000000000000000000000002a036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-p256/tests/serialization_tests.rs
|
source: frost-p256/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
01036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29641036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e19bf7b2e7
|
00a132f0c901036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29641036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-p256/tests/serialization_tests.rs
|
source: frost-p256/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e19bf7b2e7
|
00a132f0c9aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-p256/tests/serialization_tests.rs
|
source: frost-p256/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
000000000000000000000000000000000000000000000000000000000000002aaaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e101036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2969bf7b2e7
|
00a132f0c9000000000000000000000000000000000000000000000000000000000000002aaaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e101036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-p256/tests/serialization_tests.rs
|
source: frost-p256/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699789bf7b2e7
|
00a132f0c9036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-p256/tests/serialization_tests.rs
|
source: frost-p256/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
01000000000000000000000000000000000000000000000000000000000000002a036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699789bf7b2e70b68656c6c6f20776f726c649bf7b2e7
|
00a132f0c901000000000000000000000000000000000000000000000000000000000000002a00a132f0c9036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296037cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699780b68656c6c6f20776f726c64
|
||||||
|
|
|
@ -146,7 +146,7 @@ const CONTEXT_STRING: &str = "FROST-RISTRETTO255-SHA512-v1";
|
||||||
pub struct Ristretto255Sha512;
|
pub struct Ristretto255Sha512;
|
||||||
|
|
||||||
impl Ciphersuite for Ristretto255Sha512 {
|
impl Ciphersuite for Ristretto255Sha512 {
|
||||||
const ID: &'static str = "FROST(ristretto255, SHA-512)";
|
const ID: &'static str = CONTEXT_STRING;
|
||||||
|
|
||||||
type Group = RistrettoGroup;
|
type Group = RistrettoGroup;
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,12 @@ fn check_signing_commitments_serialization() {
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
@ -37,21 +40,21 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Wrong ciphersuite
|
// Wrong ciphersuite
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Wrong, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
||||||
"ciphersuite": "FROST(Wrong, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid identifier
|
|
||||||
let invalid_json = r#"{
|
|
||||||
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
|
||||||
}"#;
|
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"foo": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"foo": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -59,6 +62,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -66,6 +73,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
|
||||||
"extra": 1
|
"extra": 1
|
||||||
|
@ -87,72 +98,102 @@ fn check_signing_package_serialization() {
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(signing_package == decoded_signing_package);
|
assert!(signing_package == decoded_signing_package);
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": {
|
"0000000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"foo": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"foo": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
|
"header": {
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
"2a00000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"hiding": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919",
|
"binding": "6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64",
|
||||||
"extra": 1,
|
"extra": 1
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}
|
}
|
||||||
"#;
|
"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
@ -169,8 +210,11 @@ fn check_signature_share_serialization() {
|
||||||
assert!(signature_share == decoded_signature_share);
|
assert!(signature_share == decoded_signature_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"header": {
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
|
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(signature_share == decoded_commitments);
|
assert!(signature_share == decoded_commitments);
|
||||||
|
@ -180,22 +224,31 @@ fn check_signature_share_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"header": {
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
|
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -211,12 +264,15 @@ fn check_secret_share_serialization() {
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
@ -226,45 +282,57 @@ fn check_secret_share_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
],
|
]
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -280,12 +348,15 @@ fn check_key_package_serialization() {
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"min_signers": 2,
|
"min_signers": 2
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
@ -295,41 +366,68 @@ fn check_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_share": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"extra_field": 1,
|
"extra_field": 1
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
}"#;
|
||||||
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
|
// Invalid version
|
||||||
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 1,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
|
"identifier": "2a00000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
"secret_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
|
"public": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
|
"group_public": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
}
|
}
|
||||||
|
@ -345,11 +443,14 @@ fn check_public_key_package_serialization() {
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"2a00000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
},
|
},
|
||||||
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
@ -359,41 +460,53 @@ fn check_public_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"0000000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
},
|
},
|
||||||
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"2a00000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
},
|
},
|
||||||
"foo": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"foo": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"2a00000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
},
|
}
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"2a00000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"2a00000000000000000000000000000000000000000000000000000000000000": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
},
|
},
|
||||||
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
"verifying_key": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -409,11 +522,14 @@ fn check_round1_package_serialization() {
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"proof_of_knowledge": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
@ -423,31 +539,40 @@ fn check_round1_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
],
|
],
|
||||||
"foo": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"foo": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
],
|
]
|
||||||
"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_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"proof_of_knowledge": "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -463,8 +588,11 @@ fn check_round2_package_serialization() {
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"header": {
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
@ -474,22 +602,31 @@ fn check_round2_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"header": {
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
|
"foo": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(ristretto255, SHA-512)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-RISTRETTO255-SHA512-v1"
|
||||||
|
},
|
||||||
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
"signing_share": "498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ristretto255/tests/serialization_tests.rs
|
source: frost-ristretto255/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
2a00000000000000000000000000000000000000000000000000000000000000498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0ae2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d7602e6811b69
|
00d76ecff52a00000000000000000000000000000000000000000000000000000000000000498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0ae2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d7602
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ristretto255/tests/serialization_tests.rs
|
source: frost-ristretto255/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
012a00000000000000000000000000000000000000000000000000000000000000e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76e6811b69
|
00d76ecff5012a00000000000000000000000000000000000000000000000000000000000000e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ristretto255/tests/serialization_tests.rs
|
source: frost-ristretto255/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
01e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d7640e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0ae6811b69
|
00d76ecff501e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d7640e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ristretto255/tests/serialization_tests.rs
|
source: frost-ristretto255/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0ae6811b69
|
00d76ecff5498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ristretto255/tests/serialization_tests.rs
|
source: frost-ristretto255/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
2a00000000000000000000000000000000000000000000000000000000000000498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a01e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76e6811b69
|
00d76ecff52a00000000000000000000000000000000000000000000000000000000000000498d4e9311420c903913a56c94a694b8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a01e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ristretto255/tests/serialization_tests.rs
|
source: frost-ristretto255/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d766a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919e6811b69
|
00d76ecff5e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d766a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-ristretto255/tests/serialization_tests.rs
|
source: frost-ristretto255/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
012a00000000000000000000000000000000000000000000000000000000000000e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d766a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919e6811b690b68656c6c6f20776f726c64e6811b69
|
00d76ecff5012a0000000000000000000000000000000000000000000000000000000000000000d76ecff5e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d766a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b9190b68656c6c6f20776f726c64
|
||||||
|
|
|
@ -180,7 +180,7 @@ const CONTEXT_STRING: &str = "FROST-secp256k1-SHA256-v1";
|
||||||
pub struct Secp256K1Sha256;
|
pub struct Secp256K1Sha256;
|
||||||
|
|
||||||
impl Ciphersuite for Secp256K1Sha256 {
|
impl Ciphersuite for Secp256K1Sha256 {
|
||||||
const ID: &'static str = "FROST(secp256k1, SHA-256)";
|
const ID: &'static str = CONTEXT_STRING;
|
||||||
|
|
||||||
type Group = Secp256K1Group;
|
type Group = Secp256K1Group;
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,12 @@ fn check_signing_commitments_serialization() {
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SigningCommitments = serde_json::from_str(json).unwrap();
|
||||||
assert!(commitments == decoded_commitments);
|
assert!(commitments == decoded_commitments);
|
||||||
|
@ -37,21 +40,21 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Wrong ciphersuite
|
// Wrong ciphersuite
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Wrong, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
||||||
"ciphersuite": "FROST(Wrong, SHA-512)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid identifier
|
|
||||||
let invalid_json = r#"{
|
|
||||||
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
|
||||||
}"#;
|
|
||||||
assert!(serde_json::from_str::<SigningCommitments>(invalid_json).is_err());
|
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"foo": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"foo": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -59,6 +62,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
"foo": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
||||||
}"#;
|
}"#;
|
||||||
|
@ -66,6 +73,10 @@ fn check_signing_commitments_serialization() {
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST(Ed25519, SHA-512)"
|
||||||
|
},
|
||||||
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
|
||||||
"extra": 1
|
"extra": 1
|
||||||
|
@ -87,72 +98,102 @@ fn check_signing_package_serialization() {
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": {
|
"000000000000000000000000000000000000000000000000000000000000002a": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
let decoded_signing_package: SigningPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(signing_package == decoded_signing_package);
|
assert!(signing_package == decoded_signing_package);
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": {
|
"0000000000000000000000000000000000000000000000000000000000000000": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": {
|
"000000000000000000000000000000000000000000000000000000000000002a": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"foo": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"foo": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": {
|
"000000000000000000000000000000000000000000000000000000000000002a": {
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
|
"header": {
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_commitments": {
|
"signing_commitments": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": {
|
"000000000000000000000000000000000000000000000000000000000000002a": {
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"hiding": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
|
"binding": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"message": "68656c6c6f20776f726c64",
|
"message": "68656c6c6f20776f726c64",
|
||||||
"extra": 1,
|
"extra": 1
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}
|
}
|
||||||
"#;
|
"#;
|
||||||
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SigningPackage>(invalid_json).is_err());
|
||||||
|
@ -169,8 +210,11 @@ fn check_signature_share_serialization() {
|
||||||
assert!(signature_share == decoded_signature_share);
|
assert!(signature_share == decoded_signature_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"header": {
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
|
"share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
let decoded_commitments: SignatureShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(signature_share == decoded_commitments);
|
assert!(signature_share == decoded_commitments);
|
||||||
|
@ -180,22 +224,31 @@ fn check_signature_share_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"header": {
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
|
"foo": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SignatureShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -211,12 +264,15 @@ fn check_secret_share_serialization() {
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
let decoded_secret_share: SecretShare = serde_json::from_str(json).unwrap();
|
||||||
assert!(secret_share == decoded_secret_share);
|
assert!(secret_share == decoded_secret_share);
|
||||||
|
@ -226,45 +282,57 @@ fn check_secret_share_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"foo": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"foo": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
],
|
]
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
assert!(serde_json::from_str::<SecretShare>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
],
|
]
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -280,12 +348,15 @@ fn check_key_package_serialization() {
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"min_signers": 2,
|
"min_signers": 2
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_key_package: KeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(key_package == decoded_key_package);
|
assert!(key_package == decoded_key_package);
|
||||||
|
@ -295,41 +366,68 @@ fn check_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
"identifier": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"foo": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"foo": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_share": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"extra_field": 1,
|
"extra_field": 1
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
}"#;
|
||||||
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
|
// Invalid version
|
||||||
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 1,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
|
"identifier": "000000000000000000000000000000000000000000000000000000000000002a",
|
||||||
|
"secret_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
|
"public": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
|
"group_public": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
|
"min_signers": 2
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<KeyPackage>(invalid_json).is_err());
|
||||||
}
|
}
|
||||||
|
@ -345,11 +443,14 @@ fn check_public_key_package_serialization() {
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"000000000000000000000000000000000000000000000000000000000000002a": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
},
|
},
|
||||||
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(json).unwrap();
|
||||||
assert!(public_key_package == decoded_public_key_package);
|
assert!(public_key_package == decoded_public_key_package);
|
||||||
|
@ -359,41 +460,53 @@ fn check_public_key_package_serialization() {
|
||||||
|
|
||||||
// Invalid identifier
|
// Invalid identifier
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"0000000000000000000000000000000000000000000000000000000000000000": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0000000000000000000000000000000000000000000000000000000000000000": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
},
|
},
|
||||||
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"000000000000000000000000000000000000000000000000000000000000002a": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
},
|
},
|
||||||
"foo": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"foo": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"000000000000000000000000000000000000000000000000000000000000002a": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
},
|
}
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
assert!(serde_json::from_str::<PublicKeyPackage>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"verifying_shares": {
|
"verifying_shares": {
|
||||||
"000000000000000000000000000000000000000000000000000000000000002a": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"000000000000000000000000000000000000000000000000000000000000002a": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
},
|
},
|
||||||
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
"verifying_key": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -409,11 +522,14 @@ fn check_round1_package_serialization() {
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"proof_of_knowledge": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81"
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
let decoded_round1_package: round1::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round1_package == decoded_round1_package);
|
assert!(round1_package == decoded_round1_package);
|
||||||
|
@ -423,31 +539,40 @@ fn check_round1_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
],
|
],
|
||||||
"foo": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"foo": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81"
|
||||||
"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_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
],
|
]
|
||||||
"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_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"commitment": [
|
"commitment": [
|
||||||
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
|
||||||
],
|
],
|
||||||
"proof_of_knowledge": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"proof_of_knowledge": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
@ -463,8 +588,11 @@ fn check_round2_package_serialization() {
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
|
||||||
let json = r#"{
|
let json = r#"{
|
||||||
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"header": {
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
|
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81"
|
||||||
}"#;
|
}"#;
|
||||||
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
let decoded_round2_package: round2::Package = serde_json::from_str(json).unwrap();
|
||||||
assert!(round2_package == decoded_round2_package);
|
assert!(round2_package == decoded_round2_package);
|
||||||
|
@ -474,22 +602,31 @@ fn check_round2_package_serialization() {
|
||||||
|
|
||||||
// Invalid field
|
// Invalid field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"foo": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"header": {
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
|
"foo": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81"
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Missing field
|
// Missing field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
"ciphersuite": "FROST(secp256k1, SHA-256)"
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
}
|
||||||
}"#;
|
}"#;
|
||||||
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
assert!(serde_json::from_str::<round2::Package>(invalid_json).is_err());
|
||||||
|
|
||||||
// Extra field
|
// Extra field
|
||||||
let invalid_json = r#"{
|
let invalid_json = r#"{
|
||||||
|
"header": {
|
||||||
|
"version": 0,
|
||||||
|
"ciphersuite": "FROST-secp256k1-SHA256-v1"
|
||||||
|
},
|
||||||
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
"signing_share": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81",
|
||||||
"extra": 1,
|
"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_err());
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-secp256k1/tests/serialization_tests.rs
|
source: frost-secp256k1/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
000000000000000000000000000000000000000000000000000000000000002aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b810279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802f49d8cce
|
00eed6b1b1000000000000000000000000000000000000000000000000000000000000002aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b810279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-secp256k1/tests/serialization_tests.rs
|
source: frost-secp256k1/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
01000000000000000000000000000000000000000000000000000000000000002a0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798f49d8cce
|
00eed6b1b101000000000000000000000000000000000000000000000000000000000000002a0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-secp256k1/tests/serialization_tests.rs
|
source: frost-secp256k1/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
010279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798410279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81f49d8cce
|
00eed6b1b1010279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798410279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-secp256k1/tests/serialization_tests.rs
|
source: frost-secp256k1/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81f49d8cce
|
00eed6b1b1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-secp256k1/tests/serialization_tests.rs
|
source: frost-secp256k1/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
000000000000000000000000000000000000000000000000000000000000002aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81010279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798f49d8cce
|
00eed6b1b1000000000000000000000000000000000000000000000000000000000000002aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b81010279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-secp256k1/tests/serialization_tests.rs
|
source: frost-secp256k1/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5f49d8cce
|
00eed6b1b10279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
source: frost-secp256k1/tests/serialization_tests.rs
|
source: frost-secp256k1/tests/serialization_tests.rs
|
||||||
expression: "hex::encode(&bytes)"
|
expression: "hex::encode(&bytes)"
|
||||||
---
|
---
|
||||||
01000000000000000000000000000000000000000000000000000000000000002a0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5f49d8cce0b68656c6c6f20776f726c64f49d8cce
|
00eed6b1b101000000000000000000000000000000000000000000000000000000000000002a00eed6b1b10279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee50b68656c6c6f20776f726c64
|
||||||
|
|
|
@ -211,6 +211,7 @@ fn main() -> ExitCode {
|
||||||
"Ristretto group",
|
"Ristretto group",
|
||||||
"Ristretto",
|
"Ristretto",
|
||||||
"FROST(ristretto255, SHA-512)",
|
"FROST(ristretto255, SHA-512)",
|
||||||
|
"FROST-RISTRETTO255-SHA512-v1",
|
||||||
"ristretto255_sha512",
|
"ristretto255_sha512",
|
||||||
"ristretto255",
|
"ristretto255",
|
||||||
"<R>",
|
"<R>",
|
||||||
|
@ -244,6 +245,7 @@ fn main() -> ExitCode {
|
||||||
"P-256 curve",
|
"P-256 curve",
|
||||||
"P256",
|
"P256",
|
||||||
"FROST(P-256, SHA-256)",
|
"FROST(P-256, SHA-256)",
|
||||||
|
"FROST-P256-SHA256-v1",
|
||||||
"p256_sha256",
|
"p256_sha256",
|
||||||
"p256",
|
"p256",
|
||||||
"<P>",
|
"<P>",
|
||||||
|
@ -256,6 +258,7 @@ fn main() -> ExitCode {
|
||||||
"Ed25519 curve",
|
"Ed25519 curve",
|
||||||
"Ed25519",
|
"Ed25519",
|
||||||
"FROST(Ed25519, SHA-512)",
|
"FROST(Ed25519, SHA-512)",
|
||||||
|
"FROST-ED25519-SHA512-v1",
|
||||||
"ed25519_sha512",
|
"ed25519_sha512",
|
||||||
"ed25519",
|
"ed25519",
|
||||||
"<E>",
|
"<E>",
|
||||||
|
@ -268,6 +271,7 @@ fn main() -> ExitCode {
|
||||||
"Ed448 curve",
|
"Ed448 curve",
|
||||||
"Ed448",
|
"Ed448",
|
||||||
"FROST(Ed448, SHAKE256)",
|
"FROST(Ed448, SHAKE256)",
|
||||||
|
"FROST-ED448-SHAKE256-v1",
|
||||||
"ed448_shake256",
|
"ed448_shake256",
|
||||||
"ed448",
|
"ed448",
|
||||||
"<E>",
|
"<E>",
|
||||||
|
@ -280,6 +284,7 @@ fn main() -> ExitCode {
|
||||||
"secp256k1 curve",
|
"secp256k1 curve",
|
||||||
"Secp256K1",
|
"Secp256K1",
|
||||||
"FROST(secp256k1, SHA-256)",
|
"FROST(secp256k1, SHA-256)",
|
||||||
|
"FROST-secp256k1-SHA256-v1",
|
||||||
"secp256k1_sha256",
|
"secp256k1_sha256",
|
||||||
"secp256k1",
|
"secp256k1",
|
||||||
"<S>",
|
"<S>",
|
||||||
|
|
Loading…
Reference in New Issue