Rust implementations of 'Two-Round Threshold Schnorr Signatures with FROST'.
Unlike signatures in a single-party setting, threshold signatures require cooperation among a threshold number of signers, each holding a share of a common private key. The security of threshold schemes in general assume that an adversary can corrupt strictly fewer than a threshold number of participants.
'Two-Round Threshold Schnorr Signatures with FROST' presents a variant of a Flexible Round-Optimized Schnorr Threshold (FROST) signature scheme originally defined in FROST20. FROST reduces network overhead during threshold signing operations while employing a novel technique to protect against forgery attacks applicable to prior Schnorr-based threshold signature constructions. This variant of FROST requires two rounds to compute a signature, and implements signing efficiency improvements described by Schnorr21. Single-round signing with FROST is not implemented here.
Refer to the ZF FROST book.
The FROST specification is not yet finalized, and this codebase has not yet been audited or
released. The APIs and types in frost-core
are subject to change.
frost-core
implements the base traits and types in a generic manner, to enable top-level
implementations for different ciphersuites / curves without having to implement all of FROST from
scratch. End-users should not use frost-core
if they want to sign and verify signatures, they
should use the crate specific to their ciphersuite/curve parameters that uses frost-core
as a
dependency.
- Run tests
cargo test
- Run formatter
cargo fmt
- Check linter
cargo clippy --all-features --all-targets -- -D warnings
and if you want to automatically fix then runcargo clippy --fix
Test coverage checks are performed in the pipeline. This is cofigured here: .github/workflows/coverage.yaml
To run these locally:
- Install coverage tool by running
cargo install cargo-llvm-cov
- Run
cargo llvm-cov --ignore-filename-regex '.*(tests).*|benches.rs|gencode|helpers.rs
(you may be asked if you want to installllvm-tools-preview
, if so typeY
)