From 5cd7964a54f6bef8a3ebcff6dde7708c287868e6 Mon Sep 17 00:00:00 2001 From: Conrado Gouvea Date: Tue, 10 Oct 2023 11:24:23 -0300 Subject: [PATCH] update README, move dev info to book (#554) --- README.md | 44 ++++++++++++++++++--------------- book/src/SUMMARY.md | 1 + book/src/dev/developer-guide.md | 14 +++++++++++ 3 files changed, 39 insertions(+), 20 deletions(-) create mode 100644 book/src/dev/developer-guide.md diff --git a/README.md b/README.md index 7496622..a1c35cb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,17 @@ # ZF FROST (Flexible Round-Optimised Schnorr Threshold signatures) +[![CI](https://github.com/ZcashFoundation/frost/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/ZcashFoundation/frost/actions/workflows/main.yml) + +| Crate | | Crates.io | Documentation | +| ---------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| Generic FROST implementation | [`frost-core`] | [![crates.io](https://img.shields.io/crates/v/frost-core.svg)](https://crates.io/crates/frost-core) | [![Documentation](https://docs.rs/frost-core/badge.svg)](https://docs.rs/frost-core) | +| Ristretto255 ciphersuite | [`frost-ristretto255`] | [![crates.io](https://img.shields.io/crates/v/frost-ristretto255.svg)](https://crates.io/crates/frost-ristretto255) | [![Documentation](https://docs.rs/frost-ristretto255/badge.svg)](https://docs.rs/frost-ristretto255) | +| Ed25519 ciphersuite | [`frost-ed25519`] | [![crates.io](https://img.shields.io/crates/v/frost-ed25519.svg)](https://crates.io/crates/frost-ed25519) | [![Documentation](https://docs.rs/frost-ed25519/badge.svg)](https://docs.rs/frost-ed25519) | +| Ed448 ciphersuite | [`frost-ed448`] | [![crates.io](https://img.shields.io/crates/v/frost-ed448.svg)](https://crates.io/crates/frost-ed448) | [![Documentation](https://docs.rs/frost-ed448/badge.svg)](https://docs.rs/frost-ed448) | +| P-256 ciphersuite | [`frost-p256`] | [![crates.io](https://img.shields.io/crates/v/frost-p256.svg)](https://crates.io/crates/frost-p256) | [![Documentation](https://docs.rs/frost-p256/badge.svg)](https://docs.rs/frost-p256) | +| secp256k1 ciphersuite | [`frost-secp256k1`] | [![crates.io](https://img.shields.io/crates/v/frost-secp256k1.svg)](https://crates.io/crates/frost-secp256k1) | [![Documentation](https://docs.rs/frost-secp256k1/badge.svg)](https://docs.rs/frost-secp256k1) | +| Generic Re-randomized FROST | [`frost-rerandomized`] | [![crates.io](https://img.shields.io/crates/v/frost-rerandomized.svg)](https://crates.io/crates/frost-rerandomized) | [![Documentation](https://docs.rs/frost-rerandomized/badge.svg)](https://docs.rs/frost-rerandomized) | + Rust implementations of ['Two-Round Threshold Schnorr Signatures with FROST'](https://datatracker.ietf.org/doc/draft-irtf-cfrg-frost/). Unlike signatures in a single-party setting, threshold signatures require cooperation among a @@ -12,10 +24,14 @@ FROST'](https://datatracker.ietf.org/doc/draft-irtf-cfrg-frost/) presents a vari Round-Optimized Schnorr Threshold (FROST) signature scheme originally defined in [FROST20](https://eprint.iacr.org/2020/852.pdf). 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](https://eprint.iacr.org/2021/1375.pdf). Single-round signing with FROST is not -implemented here. +to prior Schnorr-based threshold signature constructions. + +Besides FROST itself, this repository also provides: + +- Trusted dealer key generation as specified in the appendix of ['Two-Round Threshold Schnorr Signatures with FROST'](https://datatracker.ietf.org/doc/draft-irtf-cfrg-frost/); +- Distributed key generation as specified in the original paper [FROST20](https://eprint.iacr.org/2020/852.pdf); +- Repairable Theshold Scheme (RTS) from ['A Survey and Refinement of Repairable Threshold Schemes'](https://eprint.iacr.org/2017/1155) which allows a participant to recover a lost share with the help of a threshold of other participants; +- Rerandomized FROST (paper under review). ## Getting Started @@ -23,8 +39,10 @@ Refer to the [ZF FROST book](https://frost.zfnd.org/). ## Status ⚠ -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. +The FROST specification is not yet finalized, though no significant changes are +expected at this point. This code base has been audited by NCC. The APIs and +types in `frost-core` are subject to change during the release candidate phase, +and will follow SemVer guarantees after 1.0.0. ## Usage @@ -34,17 +52,3 @@ scratch. End-users should not use `frost-core` if they want to sign and verify s should use the crate specific to their ciphersuite/curve parameters that uses `frost-core` as a dependency. -## Developer Information - -### Pre-commit checks - -1. Run tests `cargo test` -2. Run formatter `cargo fmt` -3. Check linter `cargo clippy --all-features --all-targets -- -D warnings` and if you want to automatically fix then run `cargo clippy --fix` - -### Coverage - -Test coverage checks are performed in the pipeline. This is cofigured here: `.github/workflows/coverage.yaml` -To run these locally: -1. Install coverage tool by running `cargo install cargo-llvm-cov` -2. Run `cargo llvm-cov --ignore-filename-regex '.*(tests).*|benches.rs|gencode|helpers.rs` (you may be asked if you want to install `llvm-tools-preview`, if so type `Y`) diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md index da0b5bd..4cf983c 100644 --- a/book/src/SUMMARY.md +++ b/book/src/SUMMARY.md @@ -16,3 +16,4 @@ - [Developer Documentation](dev.md) - [List of Dependencies for Audit](dev/frost-dependencies-for-audit.md) - [Release Checklist](dev/release-checklist.md) + - [Developer Guide](dev/developer-guide.md) diff --git a/book/src/dev/developer-guide.md b/book/src/dev/developer-guide.md new file mode 100644 index 0000000..37814aa --- /dev/null +++ b/book/src/dev/developer-guide.md @@ -0,0 +1,14 @@ +# Developer Guide + +# Pre-commit checks + +1. Run tests `cargo test` +2. Run formatter `cargo fmt` +3. Check linter `cargo clippy --all-features --all-targets -- -D warnings` and if you want to automatically fix then run `cargo clippy --fix` + +# Coverage + +Test coverage checks are performed in the pipeline. This is cofigured here: `.github/workflows/coverage.yaml` +To run these locally: +1. Install coverage tool by running `cargo install cargo-llvm-cov` +2. Run `cargo llvm-cov --ignore-filename-regex '.*(tests).*|benches.rs|gencode|helpers.rs` (you may be asked if you want to install `llvm-tools-preview`, if so type `Y`)