From a1a76b1cf38c410e4aec3d80c5780d554a827c1a Mon Sep 17 00:00:00 2001 From: StackOverflowExcept1on <109800286+StackOverflowExcept1on@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:06:48 +0300 Subject: [PATCH] update README and FROST book --- README.md | 22 +++++++++++--------- book/src/dev/frost-dependencies-for-audit.md | 1 + book/src/dev/release-checklist.md | 8 +++---- book/src/tutorial.md | 2 +- book/src/user.md | 2 +- book/src/user/frost-secp256k1-evm.md | 1 + book/src/user/frost-secp256k1-evm/dkg.md | 1 + book/src/user/frost-secp256k1.md | 1 - book/src/user/frost-secp256k1/dkg.md | 1 - frost-core/CHANGELOG.md | 2 ++ 10 files changed, 23 insertions(+), 18 deletions(-) create mode 100644 book/src/user/frost-secp256k1-evm.md create mode 100644 book/src/user/frost-secp256k1-evm/dkg.md delete mode 100644 book/src/user/frost-secp256k1.md delete mode 100644 book/src/user/frost-secp256k1/dkg.md diff --git a/README.md b/README.md index 8f22461a..5fb77594 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,15 @@ [![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 (EVM) | [`frost-secp256k1-evm`] | [![crates.io](https://img.shields.io/crates/v/frost-secp256k1-evm.svg)](https://crates.io/crates/frost-secp256k1-evm) | [![Documentation](https://docs.rs/frost-secp256k1-evm/badge.svg)](https://docs.rs/frost-secp256k1-evm) | +| 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 +59,9 @@ 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-evm and rerandomized FROST. +However, frost-secp256k1-evm should be safe as it is a copy of frost-secp256k1 +with one difference: it uses the keccak256 hash instead of sha256. 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..684da7db 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-evm | N/A | Copy of frost-secp256k1 with keccak256 hash, 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..cc67c714 100644 --- a/book/src/dev/release-checklist.md +++ b/book/src/dev/release-checklist.md @@ -22,7 +22,7 @@ 4. [Frost p256 version number](https://github.com/ZcashFoundation/frost/blob/main/frost-p256/Cargo.toml#L8) 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) + 7. [Frost secp256k1 evm version number](https://github.com/ZcashFoundation/frost/blob/main/frost-secp256k1-evm/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 +74,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-evm 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,7 +86,7 @@ 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-evm p256 ed448; do cargo publish -p frost-$cs; done` ## Confirm @@ -98,7 +98,7 @@ 3. [Frost ed448](https://crates.io/crates/frost-ed448/versions) 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) + 6. [Frost secp256k1 evm](https://crates.io/crates/frost-secp256k1-evm/versions) 7. [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..04ebd944 100644 --- a/book/src/tutorial.md +++ b/book/src/tutorial.md @@ -5,7 +5,7 @@ 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-p256`, and `frost-secp256k1-evm`) 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. diff --git a/book/src/user.md b/book/src/user.md index 30c1cc8b..bb3b2914 100644 --- a/book/src/user.md +++ b/book/src/user.md @@ -6,4 +6,4 @@ - [frost-ed448](https://docs.rs/frost-ed448/) - [frost-p256](https://docs.rs/frost-p256/) - [frost-ristretto255](https://docs.rs/frost-ristretto255/) -- [frost-secp256k1](https://docs.rs/frost-secp256k1/) +- [frost-secp256k1-evm](https://docs.rs/frost-secp256k1-evm/) diff --git a/book/src/user/frost-secp256k1-evm.md b/book/src/user/frost-secp256k1-evm.md new file mode 100644 index 00000000..4b95d7c2 --- /dev/null +++ b/book/src/user/frost-secp256k1-evm.md @@ -0,0 +1 @@ +{{#include ../../../frost-secp256k1-evm/README.md}} \ No newline at end of file diff --git a/book/src/user/frost-secp256k1-evm/dkg.md b/book/src/user/frost-secp256k1-evm/dkg.md new file mode 100644 index 00000000..63b8c45d --- /dev/null +++ b/book/src/user/frost-secp256k1-evm/dkg.md @@ -0,0 +1 @@ +{{#include ../../../../frost-secp256k1-evm/dkg.md}} \ No newline at end of file diff --git a/book/src/user/frost-secp256k1.md b/book/src/user/frost-secp256k1.md deleted file mode 100644 index b704bdbb..00000000 --- a/book/src/user/frost-secp256k1.md +++ /dev/null @@ -1 +0,0 @@ -{{#include ../../../frost-secp256k1/README.md}} \ No newline at end of file diff --git a/book/src/user/frost-secp256k1/dkg.md b/book/src/user/frost-secp256k1/dkg.md deleted file mode 100644 index d91ff24c..00000000 --- a/book/src/user/frost-secp256k1/dkg.md +++ /dev/null @@ -1 +0,0 @@ -{{#include ../../../../frost-secp256k1/dkg.md}} \ No newline at end of file diff --git a/frost-core/CHANGELOG.md b/frost-core/CHANGELOG.md index 43f03eb0..1162cea4 100644 --- a/frost-core/CHANGELOG.md +++ b/frost-core/CHANGELOG.md @@ -11,6 +11,8 @@ Entries are listed in reverse chronological order. implementations are probably just empty structs. The bound makes it possible to use `frost_core::Error` in `Box`. * Added getters to `round1::SecretPackage` and `round2::SecretPackage`. +* Added a new ciphersuite `frost-secp256k1-evm` that uses the secp256k1 + elliptic curve with hash keccak256. ## 2.0.0-rc.0