Expand description
§Synedrion
§A threshold signing library based on the CGGMP’24 scheme.
WARNING: the library is a work in progress (see Issues), and has not been audited. Use at your own risk.
This library is an implementation of a scheme described in “UC Non-Interactive, Proactive, Threshold ECDSA with Identifiable Aborts” by R. Canetti, R. Gennaro, S. Goldfeder, N. Makriyannis, and U. Peled. Specifically, we are using the scheme as specified in the preprint at https://eprint.iacr.org/2021/060, revision 2024-10-21.
§Protocols
The library implements the following protocols from the paper:
- ECDSA Key-Generation - generates the initial secret key shares and distributes the public counterparts between the nodes;
- Auxiliary Info. & Key Refresh - generates updates to the secret key shares and auxiliary information required for ZK proofs;
- Auxiliary Info - the protocol above without the key refresh, only generating the auxiliary info;
- ECDSA Presigning - performs all the signing calculations that do not depend on the message that is being signed;
- ECDSA Signing - finalizes signing given a pre-hashed message.
- ECDSA Interactive Signing - the two protocols above chained one after the other acting as a single protocol. Note that currently Presigning and Signing are not available separately to ensure we can generate provable evidence on Signing faults (which requires transcript from Presigning).
- Threshold Key Resharing - technically not a part of the CGGMP’24 proper, but needed to enable threshold functionality.
All the protocols support identifiable aborts where specified by the paper, and where possible, a self-contained malicious behavior evidence will be returned, so that it can be published.
The following components are work in progress:
- Multiple shares per party - see https://github.com/entropyxyz/synedrion/issues/31;
- Generic support for arbitrary curves - currently SECP256k1 is hardcoded, see https://github.com/entropyxyz/synedrion/issues/27 for more details.
§High-level API
The library uses manul as a framework for running the protocols.
All the protocols expose a type implementing EntryPoint and can be executed via Session.
See manul docs for general information on how to execute protocols in production or development environment, and how to handle errors.
§Features
k256: Secp256k1 parameters using k256 crate. See the [k256] module.
dev: Non-secure development parameters using tiny-curve crate. See the [dev] module.
bip32: enables BIP32 support for ThresholdKeyShare.
Re-exports§
pub use signature;
Structs§
- AuxGen
- An entry point for the
AuxGenProtocol. - AuxGen
Associated Data - Associated data for AuxGen protocol.
- AuxGen
Protocol - A protocol for generating auxiliary information for signing.
- AuxInfo
- The result of the AuxGen protocol.
- Interactive
Signing - An entry point for the
InteractiveSigningProtocol. - Interactive
Signing Associated Data - Associated data for InteractiveSigning protocol.
- Interactive
Signing Protocol - A protocol for creating all the data necessary for signing that doesn’t require knowing the actual message being signed.
- KeyInit
- An entry point for the
KeyInitProtocol. - KeyInit
Associated Data - Associated data for KeyInit protocol.
- KeyInit
Protocol - A protocol that generates shares of a new secret key on each node.
- KeyRefresh
- An entry point for the
KeyRefreshProtocol. - KeyRefresh
Associated Data - Associated data for KeyRefresh protocol.
- KeyRefresh
Protocol - A protocol for generating auxiliary information for signing, and a simultaneous generation of updates for the secret key shares.
- KeyResharing
- An entry point for the
KeyResharingProtocol. - KeyResharing
Protocol - A protocol for modifying the set of owners of a shared secret key.
- KeyShare
- The result of the KeyInit protocol.
- KeyShare
Change - The result of the Auxiliary Info & Key Refresh protocol - the update to the key share.
- NewHolder
- New share data.
- OldHolder
- Old share data.
- Recoverable
Signature - A wrapper for a signature and public key recovery info.
- Threshold
KeyShare - A threshold variant of the key share, where any
thresholdshares our of the total number is enough to perform signing.
Traits§
- Scheme
Params - Signing scheme parameters.
Type Aliases§
- Prehashed
Message - Prehashed message to sign.