Implements the SpeedyMuSig protocol; a secure 2-round interactive multisignature scheme whose signature outputs can be verified by a regular Schnorr verification algorithm.
More...
|
| static std::optional< affine_element > | validate_and_combine_signer_pubkeys (const std::vector< MultiSigPublicKey > &signer_pubkeys) |
| | Computes the sum of all signer pubkeys. Output is the public key of the public-facing schnorr multisig "signer".
|
| |
| static std::pair< RoundOnePublicOutput, RoundOnePrivateOutput > | construct_signature_round_1 () |
| | First round of SpeedyMuSig. Signers generate random nonce keypairs R = {r, [R]}, S = {s, [S]}.
|
| |
| static std::optional< RoundTwoPublicOutput > | construct_signature_round_2 (const std::string &message, const key_pair &signer, const RoundOnePrivateOutput &signer_round_1_private_output, const std::vector< MultiSigPublicKey > &signer_pubkeys, const std::vector< RoundOnePublicOutput > &round_1_nonces) |
| | Second round of SpeedyMuSig. Given the signer pubkeys and the output of round 1, round 2 has each signer compute a share of the Schnorr signature scheme's s parameter.
|
| |
| static std::optional< signature > | combine_signatures (const std::string &message, const std::vector< MultiSigPublicKey > &signer_pubkeys, const std::vector< RoundOnePublicOutput > &round_1_nonces, const std::vector< RoundTwoPublicOutput > &round_2_signature_shares) |
| | the final step in the SpeedyMuSig multisig scheme. Can be computed by an untrusted 3rd party. Combines the message, signer pubkeys and round1 outputs to compute the Schnorr signature parameter e. Combines the outputs of round 2 to compose the total Schnorr signature parameter s
|
| |
template<typename G1, typename HashRegNon, typename HashSig = Blake2sHasher>
class crypto::schnorr::multisig< G1, HashRegNon, HashSig >
Implements the SpeedyMuSig protocol; a secure 2-round interactive multisignature scheme whose signature outputs can be verified by a regular Schnorr verification algorithm.
- Template Parameters
-
| G1 | The elliptic curve group being used to generate the multisignature |
| HashRegNon | Hash function used to model H_reg and H_non. It must be different from H_sig for proper domain separation. |
| HashSig | Hash function used generate the Fiat-Shamir challenge for the signature (H_sig). |
SpeedyMuSig paper at https://eprint.iacr.org/2021/1375.pdf