From 30673888ea809932cc65738293ed415644d06df0 Mon Sep 17 00:00:00 2001 From: StackOverflowExcept1on <109800286+StackOverflowExcept1on@users.noreply.github.com> Date: Thu, 14 Nov 2024 17:33:10 +0300 Subject: [PATCH] docs: add secp256k1-tr to changelog and book --- .github/workflows/main.yml | 2 +- README.md | 21 ++++++++++---------- book/src/dev/frost-dependencies-for-audit.md | 1 + book/src/dev/release-checklist.md | 10 ++++++---- book/src/tutorial.md | 4 ++-- book/src/user.md | 1 + book/src/user/frost-secp256k1-tr.md | 1 + book/src/user/frost-secp256k1-tr/dkg.md | 1 + frost-core/CHANGELOG.md | 2 ++ frost-secp256k1-tr/Cargo.toml | 2 +- 10 files changed, 27 insertions(+), 18 deletions(-) create mode 100644 book/src/user/frost-secp256k1-tr.md create mode 100644 book/src/user/frost-secp256k1-tr/dkg.md diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1ac32783..35967f83 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -69,7 +69,7 @@ jobs: # Skip ed448 which does not support it. strategy: matrix: - crate: [ristretto255, ed25519, p256, secp256k1, rerandomized] + crate: [ristretto255, ed25519, p256, secp256k1, secp256k1-tr, rerandomized] steps: - uses: actions/checkout@v4.1.7 - uses: dtolnay/rust-toolchain@master diff --git a/README.md b/README.md index 8f22461a..019b60d3 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,16 @@ [![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) | +| 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) | +| secp256k1 ciphersuite (Taproot) | [`frost-secp256k1-tr`] | [![crates.io](https://img.shields.io/crates/v/frost-secp256k1-tr.svg)](https://crates.io/crates/frost-secp256k1-tr) | [![Documentation](https://docs.rs/frost-secp256k1-tr/badge.svg)](https://docs.rs/frost-secp256k1-tr) | +| 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/). @@ -59,7 +60,7 @@ of the v0.6.0 release (corresponding to commit 5fa17ed) of the following crates: - frost-ristretto255 This includes key generation (both trusted dealer and DKG) and FROST signing. -This does not include rerandomized FROST. +This does not include frost-secp256k1-tr and rerandomized FROST. The parts of the [`Ed448-Goldilocks`](https://github.com/crate-crypto/Ed448-Goldilocks) diff --git a/book/src/dev/frost-dependencies-for-audit.md b/book/src/dev/frost-dependencies-for-audit.md index 95227aaf..cc8c13c5 100644 --- a/book/src/dev/frost-dependencies-for-audit.md +++ b/book/src/dev/frost-dependencies-for-audit.md @@ -46,6 +46,7 @@ The following crates and dependencies are out of scope for the audit. | Name | Version | Notes |------| ------- | ----- | frost-rerandomized | v0.2.0 | To be audited after the security proof is complete. +| frost-secp256k1-tr | N/A | frost-secp256k1 with Taproot support, has not been audited yet. ### `frost-core` Dependencies diff --git a/book/src/dev/release-checklist.md b/book/src/dev/release-checklist.md index d4ba809f..84e59e08 100644 --- a/book/src/dev/release-checklist.md +++ b/book/src/dev/release-checklist.md @@ -23,6 +23,7 @@ 5. [Frost re randomized version number](https://github.com/ZcashFoundation/frost/blob/main/frost-rerandomized/Cargo.toml#L8) 6. [Frost ristretto255 version number](https://github.com/ZcashFoundation/frost/blob/main/frost-ristretto255/Cargo.toml#L8) 7. [Frost secp256k1 version number](https://github.com/ZcashFoundation/frost/blob/main/frost-secp256k1/Cargo.toml#L7) + 8. [Frost secp256k1 tr version number](https://github.com/ZcashFoundation/frost/blob/main/frost-secp256k1-tr/Cargo.toml#L7) 5. Decide which version to tag the release with (e.g. v0.3.0). Currently we always use the same release number for all crates, but it's possible for them to get out of sync in the future. @@ -74,7 +75,7 @@ 20. Publish it with `cargo publish -p frost-rerandomized` -21. Check if other crates are ready to be published: `for cs in ristretto255 ed25519 secp256k1 p256 ed448; do cargo publish -p frost-$cs --dry-run; done`. Fix any issues if needed. +21. Check if other crates are ready to be published: `for cs in ristretto255 ed25519 secp256k1 secp256k1-tr p256 ed448; do cargo publish -p frost-$cs --dry-run; done`. Fix any issues if needed. 1. If you get an error like this: @@ -86,12 +87,12 @@ 1. Use the same process as described for frost-core above (actions 1 - 3), but you can leave the changelog empty and **uncheck** “Set as the latest release” -23. Publish those crates: `for cs in ristretto255 ed25519 secp256k1 p256 ed448; do cargo publish -p frost-$cs; done` +23. Publish those crates: `for cs in ristretto255 ed25519 secp256k1 secp256k1-tr p256 ed448; do cargo publish -p frost-$cs; done` ## Confirm -24. Check versions in the crates to confirm everything worked:  +24. Check versions in the crates to confirm everything worked: 1. [Frost core](https://crates.io/crates/frost-core/versions) 2. [Frost ed25519](https://crates.io/crates/frost-ed25519/versions) @@ -99,7 +100,8 @@ 4. [Frost p256](https://crates.io/crates/frost-p256/versions) 5. [Frost ristretto255](https://crates.io/crates/frost-ristretto255/versions) 6. [Frost secp256k1](https://crates.io/crates/frost-secp256k1/versions) - 7. [Frost rerandomized](https://crates.io/crates/frost-rerandomized/versions) + 7. [Frost secp256k1 tr](https://crates.io/crates/frost-secp256k1-tr/versions) + 8. [Frost rerandomized](https://crates.io/crates/frost-rerandomized/versions) 25. Let the team know in the #frost slack channel that the release is complete and successful diff --git a/book/src/tutorial.md b/book/src/tutorial.md index 0f80f491..15df64c9 100644 --- a/book/src/tutorial.md +++ b/book/src/tutorial.md @@ -5,8 +5,8 @@ a generic implementation of the protocol, which can't be used directly without a concrete instantiation. The ciphersuite crates (`frost-ristretto255`, `frost-ed25519`, `frost-ed448`, -`frost-p256`, and `frost-secp256k1`) provide ciphersuites to use with -`frost-core`, but also re-expose the `frost-core` functions without +`frost-p256`, `frost-secp256k1` and `frost-secp256k1-tr`) provide ciphersuites +to use with `frost-core`, but also re-expose the `frost-core` functions without generics. If you will only use a single ciphersuite, then we recommend using those functions, and this tutorial will follow this approach. If you need to support multiple ciphersuites then feel free to use diff --git a/book/src/user.md b/book/src/user.md index 30c1cc8b..f0c4635e 100644 --- a/book/src/user.md +++ b/book/src/user.md @@ -7,3 +7,4 @@ - [frost-p256](https://docs.rs/frost-p256/) - [frost-ristretto255](https://docs.rs/frost-ristretto255/) - [frost-secp256k1](https://docs.rs/frost-secp256k1/) +- [frost-secp256k1-tr](https://docs.rs/frost-secp256k1-tr/) diff --git a/book/src/user/frost-secp256k1-tr.md b/book/src/user/frost-secp256k1-tr.md new file mode 100644 index 00000000..73340644 --- /dev/null +++ b/book/src/user/frost-secp256k1-tr.md @@ -0,0 +1 @@ +{{#include ../../../frost-secp256k1-tr/README.md}} \ No newline at end of file diff --git a/book/src/user/frost-secp256k1-tr/dkg.md b/book/src/user/frost-secp256k1-tr/dkg.md new file mode 100644 index 00000000..b93feef5 --- /dev/null +++ b/book/src/user/frost-secp256k1-tr/dkg.md @@ -0,0 +1 @@ +{{#include ../../../../frost-secp256k1-tr/dkg.md}} \ No newline at end of file diff --git a/frost-core/CHANGELOG.md b/frost-core/CHANGELOG.md index 4057939c..be9108bc 100644 --- a/frost-core/CHANGELOG.md +++ b/frost-core/CHANGELOG.md @@ -7,6 +7,8 @@ Entries are listed in reverse chronological order. * It is now possible to identify the culprit in `frost_core::keys::dkg::part3()` if an invalid secret share was sent by one of the participants (by calling frost_core::Error::culprit()`). +* Added frost-secp256k1-tr crate, allowing to generate Bitcoin Taproot (BIP340/BIP341) + compatible signatures. ## 2.0.0 diff --git a/frost-secp256k1-tr/Cargo.toml b/frost-secp256k1-tr/Cargo.toml index 99d93687..fd6ef947 100644 --- a/frost-secp256k1-tr/Cargo.toml +++ b/frost-secp256k1-tr/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" # When releasing to crates.io: # - Update CHANGELOG.md # - Create git tag. -version = "2.0.0-rc.0" +version = "2.0.0" authors = [ "Deirdre Connolly ", "Chelsea Komlo ",