Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add test vectors of the IETF standardization proposal #25

Draft
wants to merge 10 commits into
base: frost
Choose a base branch
from
7 changes: 7 additions & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -288,3 +288,10 @@ if ENABLE_MODULE_FROST
include src/modules/frost/Makefile.am.include
endif
# FROST_SPECIFIC - END

# FROST_SPECIFIC - START
# TODO: use the same approach used for wycheproof
TESTVECTORS = src/modules/frost/frost_ietf_test_vectors.h
src/modules/frost/frost_ietf_test_vectors.h:
python3 tools/tests_frost_ietf_generate.py src/modules/frost/frost_ietf_test_vectors.json > $@
# FROST_SPECIFIC - END
42 changes: 21 additions & 21 deletions include/secp256k1_frost.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,29 +179,29 @@ SECP256K1_API void secp256k1_frost_keypair_destroy(secp256k1_frost_keypair *keyp
* secp256k1_frost_keygen_dkg_begin() is performed by each participant to initialize a Pedersen
*
* This function assumes there is an additional layer which performs the
* distribution of shares to their intended participants.
* distribution of secret_key_shares to their intended participants.
*
* Note that while secp256k1_frost_keygen_dkg_begin() returns Shares, these shares
* Note that while secp256k1_frost_keygen_dkg_begin() returns Shares, these secret_key_shares
* should be sent *after* participants have exchanged commitments via
* secp256k1_frost_keygen_dkg_commitment_validate(). So, the caller of
* secp256k1_frost_keygen_dkg_begin() should store shares until after
* secp256k1_frost_keygen_dkg_begin() should store secret_key_shares until after
* secp256k1_frost_keygen_dkg_commitment_validate() is complete, and then
* exchange shares via secp256k1_frost_keygen_dkg_finalize().
* exchange secret_key_shares via secp256k1_frost_keygen_dkg_finalize().
*
* Returns 1 on success, 0 on failure.
* Args: ctx: pointer to a context object, initialized for signing.
* Out: dkg_commitment: pointer to a secp256k1_frost_vss_commitments to store the DKG first phase result.
* shares: pointer to an array of num_shares shares
* In: num_participants: number of participants and shares that will be produced.
* threshold: validity threshold for signatures.
* generator_index: index of the participant running the DKG.
* context: pointer to a char array containing DKG context tag.
* context_length: length of the char array with the DKG context.
* Out: vss_commitments: pointer to a secp256k1_frost_vss_commitments to store the DKG first phase result.
* secret_key_shares: pointer to an array of num_shares secret_key_shares
* In: num_participants: number of participants and secret_key_shares that will be produced.
* threshold: validity threshold for signatures.
* generator_index: index of the participant running the DKG.
* context: pointer to a char array containing DKG context tag.
* context_length: length of the char array with the DKG context.
*/
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_frost_keygen_dkg_begin(
const secp256k1_context *ctx,
secp256k1_frost_vss_commitments *dkg_commitment,
secp256k1_frost_keygen_secret_share *shares,
secp256k1_frost_vss_commitments *vss_commitments,
secp256k1_frost_keygen_secret_share *secret_key_shares,
uint32_t num_participants,
uint32_t threshold,
uint32_t generator_index,
Expand Down Expand Up @@ -257,20 +257,20 @@ SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_frost_keygen_dkg_finali
/*
* secp256k1_frost_keygen_with_dealer() allows to create keygen for each participant.
* This function is intended to be executed by a trusted dealer that generates and
* distributes the secret shares.
* distributes the secret secret_key_shares.
*
* Returns 1 on success, 0 on failure.
* Args: ctx: pointer to a context object, initialized for signing.
* Out: share_commitment: pointer to a secp256k1_frost_vss_commitments to store the dealer commitments.
* shares: pointer to an array of num_shares shares
* keypair: pointer to a frost_keypair to store the generated keypairs.
* In: num_participants: number of participants and shares that will be produced.
* threshold: validity threshold for signatures.
* Out: vss_commitments: pointer to a secp256k1_frost_vss_commitments to store the dealer commitments.
* secret_key_shares: pointer to an array of num_shares secret_key_shares
* keypair: pointer to a frost_keypair to store the generated keypairs.
* In: num_participants: number of participants and secret_key_shares that will be produced.
* threshold: validity threshold for signatures.
*/
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_frost_keygen_with_dealer(
const secp256k1_context *ctx,
secp256k1_frost_vss_commitments *share_commitment,
secp256k1_frost_keygen_secret_share *shares,
secp256k1_frost_vss_commitments *vss_commitments,
secp256k1_frost_keygen_secret_share *secret_key_shares,
secp256k1_frost_keypair *keypairs,
uint32_t num_participants,
uint32_t threshold
Expand Down
72 changes: 72 additions & 0 deletions src/modules/frost/frost_ietf_test_vectors.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/* Note: this file was autogenerated using tests_frost_ietf_generate.py. Do not edit. */

#define IETF_FROST_MAX_PARTICIPANTS 3
#define IETF_FROST_MIN_PARTICIPANTS 2
#define IETF_FROST_NUM_PARTICIPANTS 2

/* Section: group_input_parameters */
static const uint32_t ietf_frost_participants[] = {1, 3};
static const unsigned char ietf_frost_group_secret_key[] = { 0x0d,0x00,0x41,0x50,0xd2,0x7c,0x3b,0xf2,0xa4,0x2f,0x31,0x26,0x83,0xd3,0x5f,0xac,0x73,0x94,0xb1,0xe9,0xe3,0x18,0x24,0x9c,0x1b,0xfe,0x7f,0x07,0x95,0xa8,0x31,0x14};
static const unsigned char ietf_frost_group_public_key[] = { 0x02,0xf3,0x7c,0x34,0xb6,0x6c,0xed,0x1f,0xb5,0x1c,0x34,0xa9,0x0b,0xda,0xe0,0x06,0x90,0x1f,0x10,0x62,0x5c,0xc0,0x6c,0x4f,0x64,0x66,0x3b,0x0e,0xae,0x87,0xd8,0x7b,0x4f};
static const unsigned char ietf_frost_message[] = { 0x74,0x65,0x73,0x74};
static const size_t ietf_frost_message_length = 8;
static const unsigned char ietf_frost_share_polynomial_coefficients_0[] = { 0xfb,0xf8,0x5e,0xad,0xae,0x30,0x58,0xea,0x14,0xf1,0x91,0x48,0xbb,0x72,0xb4,0x5e,0x43,0x99,0xc0,0xb1,0x60,0x28,0xac,0xaf,0x03,0x95,0xc9,0xb0,0x3c,0x82,0x35,0x79};

/* Section: signer_input_parameters */
#define IETF_FROST_PARTICIPANT_SHARE_SIZE 32
static const unsigned char ietf_frost_participant_shares[] = {
0x08,0xf8,0x9f,0xfe,0x80,0xac,0x94,0xdc,0xb9,0x20,0xc2,0x6f,0x3f,0x46,0x14,0x0b,0xfc,0x7f,0x95,0xb4,0x93,0xf8,0x31,0x0f,0x5f,0xc1,0xea,0x2b,0x01,0xf4,0x25,0x4c,
0x04,0xf0,0xfe,0xac,0x2e,0xdc,0xed,0xc6,0xce,0x12,0x53,0xb7,0xfa,0xb8,0xc8,0x6b,0x85,0x6a,0x79,0x7f,0x44,0xd8,0x3d,0x82,0xa3,0x85,0x55,0x4e,0x6e,0x40,0x19,0x84,
0x00,0xe9,0x5d,0x59,0xdd,0x0d,0x46,0xb0,0xe3,0x03,0xe5,0x00,0xb6,0x2b,0x7c,0xcb,0x0e,0x55,0x5d,0x49,0xf5,0xb8,0x49,0xf5,0xe7,0x48,0xc0,0x71,0xda,0x8c,0x0d,0xbc,
};

/* Section: round_one.signer_outputs */
#define IETF_FROST_HIDING_NONCE_RANDOMNESS_SIZE 32
#define IETF_FROST_HIDING_NONCE_SIZE 32
#define IETF_FROST_BINDING_NONCE_RANDOMNESS_SIZE 32
#define IETF_FROST_BINDING_NONCE_SIZE 32
#define IETF_FROST_HIDING_NONCE_COMMITMENT_SIZE 33
#define IETF_FROST_BINDING_NONCE_COMMITMENT_SIZE 33
#define IETF_FROST_BINDING_FACTOR_INPUT_SIZE 129
#define IETF_FROST_BINDING_FACTOR_SIZE 32
static const unsigned char ietf_frost_hiding_nonce_randomnesses[] = {0x7e,0xa5,0xed,0x09,0xaf,0x19,0xf6,0xff,0x21,0x04,0x0c,0x07,0xec,0x2d,0x2a,0xdb,0xd3,0x5b,0x75,0x9d,0xa5,0xa4,0x01,0xd4,0xc9,0x9d,0xd2,0x6b,0x82,0x39,0x1c,0xb2,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0xe6,0xcc,0x56,0xcc,0xbd,0x05,0x02,0xb3,0xf6,0xf8,0x31,0xd9,0x1e,0x2e,0xbd,0x01,0xc4,0xde,0x04,0x79,0xe0,0x19,0x1b,0x66,0x89,0x5a,0x4f,0xfd,0x9b,0x68,0xd5,0x44,
};
static const unsigned char ietf_frost_binding_nonce_randomnesses[] = {0x47,0xac,0xab,0x01,0x8f,0x11,0x60,0x20,0xc1,0x0c,0xb9,0xb9,0xab,0xdc,0x7a,0xc1,0x0a,0xae,0x1b,0x48,0xca,0x6e,0x36,0xdc,0x15,0xac,0xb6,0xec,0x9b,0xe5,0xcd,0xc5,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x72,0x03,0xd5,0x5e,0xb8,0x2a,0x5c,0xa0,0xd7,0xd8,0x36,0x74,0x54,0x1a,0xb5,0x5f,0x6e,0x76,0xf1,0xb8,0x53,0x91,0xd2,0xc1,0x37,0x06,0xa8,0x9a,0x06,0x4f,0xd5,0xb9,
};
static const unsigned char ietf_frost_hiding_nonces[] = {0x84,0x1d,0x3a,0x64,0x50,0xd7,0x58,0x0b,0x4d,0xa8,0x3c,0x8e,0x61,0x84,0x14,0xd0,0xf0,0x24,0x39,0x1f,0x2a,0xeb,0x51,0x1d,0x75,0x79,0x22,0x44,0x20,0xaa,0x81,0xf0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x2b,0x19,0xb1,0x3f,0x19,0x3f,0x4c,0xe8,0x3a,0x39,0x93,0x62,0xa9,0x0c,0xdc,0x1e,0x0d,0xdc,0xd8,0x3e,0x57,0x08,0x9a,0x7a,0xf0,0xbd,0xca,0x71,0xd4,0x78,0x69,0xb2,
};
static const unsigned char ietf_frost_binding_nonces[] = {0x8d,0x26,0x24,0xf5,0x32,0xaf,0x63,0x13,0x77,0xf3,0x3c,0xf4,0x4b,0x5a,0xc5,0xf8,0x49,0x06,0x7c,0xae,0x2e,0xac,0xb8,0x86,0x80,0xa3,0x1e,0x77,0xc7,0x9b,0x5a,0x80,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x7a,0x44,0x3b,0xde,0x83,0xdc,0x63,0xef,0x52,0xdd,0xa3,0x54,0x00,0x52,0x25,0xba,0x0e,0x55,0x32,0x43,0x40,0x2a,0x47,0x05,0xce,0x28,0xff,0xaa,0xfe,0x0f,0x5b,0x98,
};
static const unsigned char ietf_frost_hiding_nonce_commitments[] = {0x03,0xc6,0x99,0xaf,0x97,0xd2,0x6b,0xb4,0xd3,0xf0,0x52,0x32,0xec,0x5e,0x19,0x38,0xc1,0x2f,0x1e,0x6a,0xe9,0x76,0x43,0xc8,0xf8,0xf1,0x1c,0x98,0x20,0x30,0x3f,0x19,0x04,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x03,0x07,0x75,0x07,0xba,0x32,0x7f,0xc0,0x74,0xd2,0x79,0x39,0x55,0xef,0x34,0x10,0xee,0x3f,0x03,0xb8,0x2b,0x4c,0xdc,0x23,0x70,0xf7,0x1d,0x86,0x5b,0xeb,0x92,0x6e,0xf6,
};
static const unsigned char ietf_frost_binding_nonce_commitments[] = {0x02,0xfa,0x2a,0xac,0xcd,0x51,0xb9,0x48,0xc9,0xdc,0x1a,0x32,0x5d,0x77,0x22,0x6e,0x98,0xa5,0xa3,0xfe,0x65,0xfe,0x9b,0xa2,0x13,0x76,0x1a,0x60,0x12,0x30,0x40,0xa4,0x5e,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x02,0xad,0x53,0x03,0x1d,0xdf,0xbb,0xac,0xfc,0x5f,0xbd,0xa3,0xd3,0xb0,0xc2,0x44,0x5c,0x8e,0x3e,0x99,0xcb,0xc4,0xca,0x2d,0xb2,0xaa,0x28,0x3f,0xa6,0x85,0x25,0xb1,0x35,
};
static const unsigned char ietf_frost_binding_factor_inputs[] = {0x02,0xf3,0x7c,0x34,0xb6,0x6c,0xed,0x1f,0xb5,0x1c,0x34,0xa9,0x0b,0xda,0xe0,0x06,0x90,0x1f,0x10,0x62,0x5c,0xc0,0x6c,0x4f,0x64,0x66,0x3b,0x0e,0xae,0x87,0xd8,0x7b,0x4f,0xff,0x9b,0x52,0x10,0xff,0xbb,0x3c,0x07,0xa7,0x3a,0x7c,0x89,0x35,0xbe,0x4a,0x8c,0x62,0xcf,0x01,0x5f,0x6c,0xf7,0xad,0xe6,0xef,0xac,0x09,0xa6,0x51,0x35,0x40,0xfc,0x3f,0x5a,0x81,0x6a,0xae,0xbc,0x21,0x14,0xa8,0x11,0xa4,0x15,0xd7,0xa5,0x5d,0xb7,0xc5,0xcb,0xc1,0xcf,0x27,0x18,0x3e,0x79,0xdd,0x9d,0xef,0x94,0x1b,0x5d,0x48,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x02,0xf3,0x7c,0x34,0xb6,0x6c,0xed,0x1f,0xb5,0x1c,0x34,0xa9,0x0b,0xda,0xe0,0x06,0x90,0x1f,0x10,0x62,0x5c,0xc0,0x6c,0x4f,0x64,0x66,0x3b,0x0e,0xae,0x87,0xd8,0x7b,0x4f,0xff,0x9b,0x52,0x10,0xff,0xbb,0x3c,0x07,0xa7,0x3a,0x7c,0x89,0x35,0xbe,0x4a,0x8c,0x62,0xcf,0x01,0x5f,0x6c,0xf7,0xad,0xe6,0xef,0xac,0x09,0xa6,0x51,0x35,0x40,0xfc,0x3f,0x5a,0x81,0x6a,0xae,0xbc,0x21,0x14,0xa8,0x11,0xa4,0x15,0xd7,0xa5,0x5d,0xb7,0xc5,0xcb,0xc1,0xcf,0x27,0x18,0x3e,0x79,0xdd,0x9d,0xef,0x94,0x1b,0x5d,0x48,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
};
static const unsigned char ietf_frost_binding_factors[] = {0x3e,0x08,0xfe,0x56,0x1e,0x07,0x5c,0x65,0x3c,0xbf,0xd4,0x69,0x08,0xa1,0x0e,0x76,0x37,0xc7,0x0c,0x74,0xf0,0xa7,0x7d,0x5f,0xd4,0x5d,0x1a,0x75,0x0c,0x73,0x9e,0xc6,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x93,0xf7,0x90,0x41,0xbb,0x3f,0xd2,0x66,0x10,0x5b,0xe2,0x51,0xad,0xae,0xb5,0xfd,0x7f,0x8b,0x10,0x4f,0xb5,0x54,0xa4,0xba,0x9a,0x0b,0xec,0xea,0x48,0xdd,0xbf,0xd7,
};

/* Section: round_two.signer_outputs */
#define IETF_FROST_SIG_SHARE_SIZE 32
#define IETF_FROST_SIG_SIZE 65
static const unsigned char ietf_frost_sig_shares[] = {0xc4,0xfc,0xe1,0x77,0x5a,0x1e,0x14,0x1f,0xb5,0x79,0x94,0x41,0x66,0xea,0xb0,0xd6,0x5e,0xef,0xe7,0xb9,0x8d,0x48,0x0a,0x56,0x9b,0xbb,0xfc,0xb1,0x4f,0x91,0xc1,0x97,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x01,0x60,0xfd,0x0d,0x38,0x89,0x32,0xf4,0x82,0x6d,0x2e,0xbc,0xd6,0xb9,0xea,0xba,0x73,0x4f,0x7c,0x71,0xcf,0x25,0xb4,0x27,0x9a,0x4c,0xa2,0x58,0x1e,0x47,0xb1,0x8d,
};
static const unsigned char ietf_frost_sig[] = {0x02,0x05,0xb6,0xd0,0x4d,0x37,0x74,0xc8,0x92,0x94,0x13,0xe3,0xc7,0x60,0x24,0xd5,0x41,0x49,0xc3,0x72,0xd5,0x7a,0xae,0x62,0x57,0x4e,0xd7,0x43,0x19,0xb5,0xea,0x14,0xd0,0xc6,0x5d,0xde,0x84,0x92,0xa7,0x47,0x14,0x37,0xe6,0xc2,0xfe,0x3d,0xa4,0x9b,0x90,0xd2,0x3f,0x64,0x2b,0x5c,0x6d,0xbe,0x7e,0x36,0x08,0x9f,0x09,0x6d,0xd9,0x73,0x24};
61 changes: 61 additions & 0 deletions src/modules/frost/frost_ietf_test_vectors.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"info" : "FROST(secp256k1, SHA-256)",
"version" : "draft-irtf-cfrg-frost-15",
"url": "https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-frost-15#name-frostsecp256k1-sha-256-2",
"configuration_information": {
"MAX_PARTICIPANTS": 3,
"MIN_PARTICIPANTS": 2,
"NUM_PARTICIPANTS": 2
},
"group_input_parameters": {
"participant_list": [1, 3],
"group_secret_key": "0d004150d27c3bf2a42f312683d35fac7394b1e9e318249c1bfe7f0795a83114",
"group_public_key": "02f37c34b66ced1fb51c34a90bdae006901f10625cc06c4f64663b0eae87d87b4f",
"message": "74657374",
"share_polynomial_coefficients": [
"fbf85eadae3058ea14f19148bb72b45e4399c0b16028acaf0395c9b03c823579"
]
},
"signer_input_parameters": {
"participant_share": [
"08f89ffe80ac94dcb920c26f3f46140bfc7f95b493f8310f5fc1ea2b01f4254c",
"04f0feac2edcedc6ce1253b7fab8c86b856a797f44d83d82a385554e6e401984",
"00e95d59dd0d46b0e303e500b62b7ccb0e555d49f5b849f5e748c071da8c0dbc"
]
},
"round_one": {
"signer_outputs": {
"participant_1": {
"hiding_nonce_randomness": "7ea5ed09af19f6ff21040c07ec2d2adbd35b759da5a401d4c99dd26b82391cb2",
"binding_nonce_randomness": "47acab018f116020c10cb9b9abdc7ac10aae1b48ca6e36dc15acb6ec9be5cdc5",
"hiding_nonce": "841d3a6450d7580b4da83c8e618414d0f024391f2aeb511d7579224420aa81f0",
"binding_nonce": "8d2624f532af631377f33cf44b5ac5f849067cae2eacb88680a31e77c79b5a80",
"hiding_nonce_commitment": "03c699af97d26bb4d3f05232ec5e1938c12f1e6ae97643c8f8f11c9820303f1904",
"binding_nonce_commitment": "02fa2aaccd51b948c9dc1a325d77226e98a5a3fe65fe9ba213761a60123040a45e",
"binding_factor_input": "02f37c34b66ced1fb51c34a90bdae006901f10625cc06c4f64663b0eae87d87b4fff9b5210ffbb3c07a73a7c8935be4a8c62cf015f6cf7ade6efac09a6513540fc3f5a816aaebc2114a811a415d7a55db7c5cbc1cf27183e79dd9def941b5d48010000000000000000000000000000000000000000000000000000000000000001",
"binding_factor": "3e08fe561e075c653cbfd46908a10e7637c70c74f0a77d5fd45d1a750c739ec6"
},
"participant_3": {
"hiding_nonce_randomness": "e6cc56ccbd0502b3f6f831d91e2ebd01c4de0479e0191b66895a4ffd9b68d544",
"binding_nonce_randomness": "7203d55eb82a5ca0d7d83674541ab55f6e76f1b85391d2c13706a89a064fd5b9",
"hiding_nonce": "2b19b13f193f4ce83a399362a90cdc1e0ddcd83e57089a7af0bdca71d47869b2",
"binding_nonce": "7a443bde83dc63ef52dda354005225ba0e553243402a4705ce28ffaafe0f5b98",
"hiding_nonce_commitment": "03077507ba327fc074d2793955ef3410ee3f03b82b4cdc2370f71d865beb926ef6",
"binding_nonce_commitment": "02ad53031ddfbbacfc5fbda3d3b0c2445c8e3e99cbc4ca2db2aa283fa68525b135",
"binding_factor_input": "02f37c34b66ced1fb51c34a90bdae006901f10625cc06c4f64663b0eae87d87b4fff9b5210ffbb3c07a73a7c8935be4a8c62cf015f6cf7ade6efac09a6513540fc3f5a816aaebc2114a811a415d7a55db7c5cbc1cf27183e79dd9def941b5d48010000000000000000000000000000000000000000000000000000000000000003",
"binding_factor": "93f79041bb3fd266105be251adaeb5fd7f8b104fb554a4ba9a0becea48ddbfd7"
}
}
},
"round_two": {
"signer_outputs": {
"participant_1" : {
"sig_share": "c4fce1775a1e141fb579944166eab0d65eefe7b98d480a569bbbfcb14f91c197"
},
"participant_3": {
"sig_share": "0160fd0d388932f4826d2ebcd6b9eaba734f7c71cf25b4279a4ca2581e47b18d"
}
},
"sig": "0205b6d04d3774c8929413e3c76024d54149c372d57aae62574ed74319b5ea14d0c65dde8492a7471437e6c2fe3da49b90d23f642b5c6dbe7e36089f096dd97324"
}
}
Loading