diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 219d4c7ff..dee81dd5e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,22 +19,17 @@ jobs: - run: cargo build build_msrv: - name: build with MSRV (1.81) + name: build with MSRV (1.85) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 # Re-resolve Cargo.lock with minimal versions. - # This only works with nightly. We pin to a specific version because - # newer versions use lock file version 4, but the MSRV cargo does not - # support that. - - uses: dtolnay/rust-toolchain@master - with: - toolchain: nightly-2024-09-20 + - uses: dtolnay/rust-toolchain@nightly - run: cargo update -Z minimal-versions # Now check that `cargo build` works with respect to the oldest possible # deps and the stated MSRV - - uses: dtolnay/rust-toolchain@1.81 + - uses: dtolnay/rust-toolchain@1.85 - run: cargo build --all-features # TODO: this is filling up the disk space in CI. See if there is a way to @@ -60,10 +55,9 @@ jobs: build_no_std: name: build with no_std runs-on: ubuntu-latest - # Skip ed448 which does not support it. strategy: matrix: - crate: [ristretto255, ed25519, p256, secp256k1, secp256k1-tr, rerandomized] + crate: [ed448, ristretto255, ed25519, p256, secp256k1, secp256k1-tr, rerandomized] steps: - uses: actions/checkout@v4.2.2 - uses: dtolnay/rust-toolchain@master diff --git a/Cargo.toml b/Cargo.toml index ae89d5768..b0f8e1f3d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -resolver = "2" +resolver = "3" members = [ "frost-core", "frost-ed25519", @@ -13,8 +13,8 @@ members = [ ] [workspace.package] -edition = "2021" -rust-version = "1.81" +edition = "2024" +rust-version = "1.85" version = "2.2.0" authors = [ "Deirdre Connolly ", @@ -33,9 +33,9 @@ hex = { version = "0.4.3", default-features = false, features = ["alloc"] } insta = { version = "1.31.0", features = ["yaml"] } lazy_static = "1.4" proptest = "1.0" -rand = "0.8" -rand_chacha = "0.3" -rand_core = "0.6" +rand = "0.9" +rand_chacha = "0.9" +rand_core = "0.9" serde_json = "1.0" frost-core = { path = "frost-core", version = "2.2.0", default-features = false } diff --git a/frost-core/CHANGELOG.md b/frost-core/CHANGELOG.md index a5f2e4218..40f350965 100644 --- a/frost-core/CHANGELOG.md +++ b/frost-core/CHANGELOG.md @@ -2,6 +2,13 @@ Entries are listed in reverse chronological order. +## Unreleased + +* All crates from RustCrypto have been bumped to the latest versions, + version `rand` has been updated to `0.9` +* MSRV has been bumped to Rust 1.85, making all crates no-std. + The `std` and `nightly` features were removed from all crates + ## 2.2.0 ### Security Fixes diff --git a/frost-core/Cargo.toml b/frost-core/Cargo.toml index 64d6088f4..64f3e6b3d 100644 --- a/frost-core/Cargo.toml +++ b/frost-core/Cargo.toml @@ -23,13 +23,12 @@ debugless-unwrap = "0.0.4" derive-getters = "0.5.0" hex.workspace = true postcard = { version = "1.0.0", features = ["alloc"], optional = true } -rand_core = { version = "0.6", default-features = false } +rand_core = { version = "0.9", default-features = false } serde = { version = "1.0.160", default-features = false, features = ["derive"], optional = true } serdect = { version = "0.2.0", optional = true } thiserror = { version = "2.0.3", default-features = false } visibility = "0.1.0" zeroize = { version = "1.5.4", default-features = false, features = ["derive"] } -itertools = { version = "0.14.0", default-features = false } # Test dependencies used with the test-impl feature proptest = { version = "1.0", optional = true } diff --git a/frost-core/src/lib.rs b/frost-core/src/lib.rs index 66b9a2e55..d734b69b1 100644 --- a/frost-core/src/lib.rs +++ b/frost-core/src/lib.rs @@ -272,13 +272,12 @@ where fn from_hex>(hex: T) -> Result { let v: Vec = FromHex::from_hex(hex).map_err(|_| "invalid hex")?; - let ret = match v.as_slice().try_into() { + match v.as_slice().try_into() { Ok(bytes) => <::Field>::deserialize(&bytes) .map(|scalar| Self(scalar)) .map_err(|_| "malformed scalar encoding"), Err(_) => Err("malformed scalar encoding"), - }; - ret + } } } diff --git a/frost-core/src/signing_key.rs b/frost-core/src/signing_key.rs index 574bf969a..094fbf9fa 100644 --- a/frost-core/src/signing_key.rs +++ b/frost-core/src/signing_key.rs @@ -1,7 +1,8 @@ //! Schnorr signature signing keys -use alloc::vec::Vec; +use core::ops::DerefMut; +use alloc::vec::Vec; use rand_core::{CryptoRng, RngCore}; use crate::{ @@ -40,14 +41,14 @@ where } /// Create a signature `msg` using this `SigningKey`. - pub fn sign(&self, rng: R, message: &[u8]) -> Signature { + pub fn sign(&self, rng: R, message: &[u8]) -> Signature { ::single_sign(self, rng, message) } /// Create a signature `msg` using this `SigningKey` using the default /// signing. #[cfg_attr(feature = "internals", visibility::make(pub))] - pub(crate) fn default_sign( + pub(crate) fn default_sign( &self, mut rng: R, message: &[u8], diff --git a/frost-core/src/traits.rs b/frost-core/src/traits.rs index c65d7d043..cea73be23 100644 --- a/frost-core/src/traits.rs +++ b/frost-core/src/traits.rs @@ -2,7 +2,7 @@ use core::{ fmt::Debug, - ops::{Add, Mul, Sub}, + ops::{Add, DerefMut, Mul, Sub}, }; use alloc::{borrow::Cow, collections::BTreeMap, vec::Vec}; @@ -233,7 +233,7 @@ pub trait Ciphersuite: Copy + PartialEq + Debug + 'static { /// if required which is useful if FROST signing has been changed by the /// other Ciphersuite trait methods and regular signing should be changed /// accordingly to match. - fn single_sign( + fn single_sign( signing_key: &SigningKey, rng: R, message: &[u8], diff --git a/frost-ed25519/Cargo.toml b/frost-ed25519/Cargo.toml index 0f86b6161..d83b2cd13 100644 --- a/frost-ed25519/Cargo.toml +++ b/frost-ed25519/Cargo.toml @@ -16,18 +16,18 @@ features = ["serde"] rustdoc-args = ["--cfg", "docsrs"] [dependencies] -curve25519-dalek = { version = "=4.1.3", features = ["rand_core"] } +curve25519-dalek = { version = "5.0.0-pre.1", features = ["rand_core"] } document-features.workspace = true frost-core.workspace = true frost-rerandomized.workspace = true rand_core.workspace = true -sha2 = { version = "0.10.2", default-features = false } +sha2 = { version = "0.11.0-rc.2", default-features = false } [dev-dependencies] criterion.workspace = true frost-core = { workspace = true, features = ["test-impl"] } frost-rerandomized = { workspace = true, features = ["test-impl"] } -ed25519-dalek = "2.1.0" +ed25519-dalek = "3.0.0-pre.1" insta.workspace = true hex.workspace = true lazy_static.workspace = true diff --git a/frost-ed25519/README.md b/frost-ed25519/README.md index 0b9a2c9a6..e33c94687 100644 --- a/frost-ed25519/README.md +++ b/frost-ed25519/README.md @@ -11,9 +11,10 @@ scenario in a single thread and it abstracts away any communication between peer ```rust # // ANCHOR: tkg_gen use frost_ed25519 as frost; +use rand_core::TryRngCore; use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; let (shares, pubkey_package) = frost::keys::generate_with_dealer( diff --git a/frost-ed25519/benches/bench.rs b/frost-ed25519/benches/bench.rs index 4317e05b1..cf13299ad 100644 --- a/frost-ed25519/benches/bench.rs +++ b/frost-ed25519/benches/bench.rs @@ -1,15 +1,16 @@ use criterion::{criterion_group, criterion_main, Criterion}; use frost_ed25519::*; +use rand_core::TryRngCore; fn bench_ed25519_batch_verify(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_batch_verify::(c, "ed25519", &mut rng); } fn bench_ed25519_sign(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_sign::(c, "ed25519", &mut rng); } diff --git a/frost-ed25519/dkg.md b/frost-ed25519/dkg.md index de3f6aef0..ffe38e635 100644 --- a/frost-ed25519/dkg.md +++ b/frost-ed25519/dkg.md @@ -26,12 +26,11 @@ they can proceed to sign messages with FROST. ```rust # // ANCHOR: dkg_import -use std::collections::BTreeMap; - use frost_ed25519 as frost; +use rand_core::TryRngCore; +use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; - +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; # // ANCHOR_END: dkg_import diff --git a/frost-ed25519/src/keys/repairable.rs b/frost-ed25519/src/keys/repairable.rs index f0df91b75..1f0d21e59 100644 --- a/frost-ed25519/src/keys/repairable.rs +++ b/frost-ed25519/src/keys/repairable.rs @@ -56,13 +56,11 @@ pub fn repair_share_step_3( #[cfg(test)] mod tests { - + use crate::Ed25519Sha512; use lazy_static::lazy_static; - + use rand_core::TryRngCore; use serde_json::Value; - use crate::Ed25519Sha512; - lazy_static! { pub static ref REPAIR_SHARE: Value = serde_json::from_str(include_str!("../../tests/helpers/repair-share.json").trim()) @@ -71,7 +69,7 @@ mod tests { #[test] fn check_repair_share_step_1() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1::(rng); } @@ -83,7 +81,7 @@ mod tests { #[test] fn check_repair_share_step_3() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_3::( rng, &REPAIR_SHARE, @@ -92,7 +90,7 @@ mod tests { #[test] fn check_repair_share_step_1_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1_fails_with_invalid_min_signers::< Ed25519Sha512, _, diff --git a/frost-ed25519/src/tests/batch.rs b/frost-ed25519/src/tests/batch.rs index a57301f01..63edc6923 100644 --- a/frost-ed25519/src/tests/batch.rs +++ b/frost-ed25519/src/tests/batch.rs @@ -1,22 +1,23 @@ use crate::*; +use rand_core::TryRngCore; #[test] fn check_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::batch_verify::(rng); } #[test] fn check_bad_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::bad_batch_verify::(rng); } #[test] fn empty_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::empty_batch_verify::(rng); } diff --git a/frost-ed25519/src/tests/coefficient_commitment.rs b/frost-ed25519/src/tests/coefficient_commitment.rs index d45994e83..3578a3a00 100644 --- a/frost-ed25519/src/tests/coefficient_commitment.rs +++ b/frost-ed25519/src/tests/coefficient_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,7 +13,7 @@ lazy_static! { #[test] fn check_serialization_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_serialization_of_coefficient_commitment::< Ed25519Sha512, _, @@ -21,7 +22,7 @@ fn check_serialization_of_coefficient_commitment() { #[test] fn check_create_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_create_coefficient_commitment::< Ed25519Sha512, _, @@ -36,7 +37,7 @@ fn check_create_coefficient_commitment_error() { #[test] fn check_get_value_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_get_value_of_coefficient_commitment::< Ed25519Sha512, diff --git a/frost-ed25519/src/tests/vss_commitment.rs b/frost-ed25519/src/tests/vss_commitment.rs index 3e0fcd26e..72cf14aa0 100644 --- a/frost-ed25519/src/tests/vss_commitment.rs +++ b/frost-ed25519/src/tests/vss_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,13 +13,13 @@ lazy_static! { #[test] fn check_serialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_vss_commitment::(rng); } #[test] fn check_serialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_whole_vss_commitment::( rng, ); @@ -26,13 +27,13 @@ fn check_serialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment::(rng); } #[test] fn check_deserialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment::( rng, ); @@ -40,7 +41,7 @@ fn check_deserialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment_error::( rng, &ELEMENTS, ); @@ -48,7 +49,7 @@ fn check_deserialize_vss_commitment_error() { #[test] fn check_deserialize_whole_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment_error::< Ed25519Sha512, _, @@ -57,6 +58,6 @@ fn check_deserialize_whole_vss_commitment_error() { #[test] fn check_compute_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_compute_public_key_package::(rng); } diff --git a/frost-ed25519/tests/common_traits_tests.rs b/frost-ed25519/tests/common_traits_tests.rs index db173929b..fa5597f80 100644 --- a/frost-ed25519/tests/common_traits_tests.rs +++ b/frost-ed25519/tests/common_traits_tests.rs @@ -4,12 +4,13 @@ mod helpers; use frost_ed25519::SigningKey; use helpers::samples; +use rand_core::TryRngCore; #[allow(clippy::unnecessary_literal_unwrap)] fn check_common_traits_for_type(v: T) { // Make sure can be debug-printed. This also catches if the Debug does not // have an endless recursion (a popular mistake). - println!("{:?}", v); + println!("{v:?}"); // Test Clone and Eq assert_eq!(v, v.clone()); // Make sure it can be unwrapped in a Result (which requires Debug). @@ -19,7 +20,7 @@ fn check_common_traits_for_type(v: #[test] fn check_signing_key_common_traits() { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); let signing_key = SigningKey::new(&mut rng); check_common_traits_for_type(signing_key); } diff --git a/frost-ed25519/tests/integration_tests.rs b/frost-ed25519/tests/integration_tests.rs index 830f6457d..5e8ba0696 100644 --- a/frost-ed25519/tests/integration_tests.rs +++ b/frost-ed25519/tests/integration_tests.rs @@ -1,5 +1,6 @@ use frost_ed25519::*; use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; #[test] @@ -9,14 +10,14 @@ fn check_zero_key_fails() { #[test] fn check_sign_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dkg::(rng); } #[test] fn check_dkg_part1_fails_with_invalid_signers_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -30,7 +31,7 @@ fn check_dkg_part1_fails_with_invalid_signers_min_signers() { #[test] fn check_dkg_part1_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -44,7 +45,7 @@ fn check_dkg_part1_fails_with_min_signers_greater_than_max() { #[test] fn check_dkg_part1_fails_with_invalid_signers_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -58,21 +59,21 @@ fn check_dkg_part1_fails_with_invalid_signers_max_signers() { #[test] fn check_rts() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_rts::(rng); } #[test] fn check_refresh_shares_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer::(rng); } #[test] fn check_refresh_shares_with_dealer_serialisation() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_serialisation::( rng, @@ -81,7 +82,7 @@ fn check_refresh_shares_with_dealer_serialisation() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_invalid_public_key_package::< Ed25519Sha512, @@ -91,7 +92,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -110,7 +111,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -129,7 +130,7 @@ fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_s #[test] fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -148,7 +149,7 @@ fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![Identifier::try_from(1).unwrap()]; let min_signers = 3; let max_signers = 1; @@ -162,7 +163,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(8).unwrap(), Identifier::try_from(3).unwrap(), @@ -181,7 +182,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { #[test] fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_different_min_signers::< Ed25519Sha512, @@ -191,14 +192,14 @@ fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { #[test] fn check_refresh_shares_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg::(rng); } #[test] fn check_refresh_shares_with_dkg_smaller_threshold() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg_smaller_threshold::( rng, @@ -207,14 +208,14 @@ fn check_refresh_shares_with_dkg_smaller_threshold() { #[test] fn check_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer::(rng); } #[test] fn check_sign_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -228,7 +229,7 @@ fn check_sign_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -242,7 +243,7 @@ fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_sign_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -258,13 +259,13 @@ fn check_sign_with_dealer_fails_with_invalid_max_signers() { /// value is working. #[test] fn check_share_generation_ed25519_sha512() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_share_generation::(rng); } #[test] fn check_share_generation_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 0; let max_signers = 3; @@ -278,7 +279,7 @@ fn check_share_generation_fails_with_invalid_min_signers() { #[test] fn check_share_generation_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -292,7 +293,7 @@ fn check_share_generation_fails_with_min_signers_greater_than_max() { #[test] fn check_share_generation_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 0; @@ -356,7 +357,7 @@ fn check_identifier_generation() -> Result<(), Error> { #[test] fn check_sign_with_dealer_and_identifiers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer_and_identifiers::< Ed25519Sha512, @@ -366,7 +367,7 @@ fn check_sign_with_dealer_and_identifiers() { #[test] fn check_sign_with_missing_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_missing_identifier::( rng, ); @@ -374,7 +375,7 @@ fn check_sign_with_missing_identifier() { #[test] fn check_sign_with_incorrect_commitments() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_incorrect_commitments::( rng, ); diff --git a/frost-ed25519/tests/interoperability_tests.rs b/frost-ed25519/tests/interoperability_tests.rs index e758ee248..c690631a9 100644 --- a/frost-ed25519/tests/interoperability_tests.rs +++ b/frost-ed25519/tests/interoperability_tests.rs @@ -1,18 +1,21 @@ use crate::Ed25519Sha512; use frost_ed25519::*; +use rand_core::TryRngCore; mod helpers; #[test] fn check_interoperability_in_sign_with_dkg() { - let rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); // Test with multiple keys/signatures to better exercise the key generation // and the interoperability check. A smaller number of iterations is used // because DKG takes longer and otherwise the test would be too slow. for _ in 0..32 { let (msg, group_signature, group_pubkey) = - frost_core::tests::ciphersuite_generic::check_sign_with_dkg::(rng); + frost_core::tests::ciphersuite_generic::check_sign_with_dkg::( + &mut rng, + ); helpers::verify_signature(&msg, group_signature, group_pubkey); } @@ -20,13 +23,15 @@ fn check_interoperability_in_sign_with_dkg() { #[test] fn check_interoperability_in_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); // Test with multiple keys/signatures to better exercise the key generation // and the interoperability check. for _ in 0..256 { let (msg, group_signature, group_pubkey) = - frost_core::tests::ciphersuite_generic::check_sign_with_dealer::(rng); + frost_core::tests::ciphersuite_generic::check_sign_with_dealer::( + &mut rng, + ); // Check that the threshold signature can be verified by the `ed25519_dalek` crate // public key (interoperability test) diff --git a/frost-ed25519/tests/rerandomized_tests.rs b/frost-ed25519/tests/rerandomized_tests.rs index 121738744..9046c9f85 100644 --- a/frost-ed25519/tests/rerandomized_tests.rs +++ b/frost-ed25519/tests/rerandomized_tests.rs @@ -1,8 +1,9 @@ use frost_ed25519::Ed25519Sha512; +use rand_core::TryRngCore; #[test] fn check_randomized_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let (_msg, _group_signature, _group_pubkey) = frost_rerandomized::tests::check_randomized_sign_with_dealer::(rng); diff --git a/frost-ed25519/tests/serde_tests.rs b/frost-ed25519/tests/serde_tests.rs index 9f722797b..c7f05bad5 100644 --- a/frost-ed25519/tests/serde_tests.rs +++ b/frost-ed25519/tests/serde_tests.rs @@ -19,7 +19,7 @@ fn check_signing_commitments_serialization() { let commitments = samples::signing_commitments(); let json = serde_json::to_string_pretty(&commitments).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_commitments: SigningCommitments = serde_json::from_str(&json).unwrap(); assert!(commitments == decoded_commitments); @@ -89,7 +89,7 @@ fn check_signing_package_serialization() { let signing_package = samples::signing_package(); let json = serde_json::to_string_pretty(&signing_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signing_package: SigningPackage = serde_json::from_str(&json).unwrap(); assert!(signing_package == decoded_signing_package); @@ -204,7 +204,7 @@ fn check_signature_share_serialization() { let signature_share = samples::signature_share(); let json = serde_json::to_string_pretty(&signature_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signature_share: SignatureShare = serde_json::from_str(&json).unwrap(); assert!(signature_share == decoded_signature_share); @@ -258,7 +258,7 @@ fn check_secret_share_serialization() { let secret_share = samples::secret_share(); let json = serde_json::to_string_pretty(&secret_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_secret_share: SecretShare = serde_json::from_str(&json).unwrap(); assert!(secret_share == decoded_secret_share); @@ -342,7 +342,7 @@ fn check_key_package_serialization() { let key_package = samples::key_package(); let json = serde_json::to_string_pretty(&key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_key_package: KeyPackage = serde_json::from_str(&json).unwrap(); assert!(key_package == decoded_key_package); @@ -437,7 +437,7 @@ fn check_public_key_package_serialization() { let public_key_package = samples::public_key_package(); let json = serde_json::to_string_pretty(&public_key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(&json).unwrap(); assert!(public_key_package == decoded_public_key_package); @@ -516,7 +516,7 @@ fn check_round1_package_serialization() { let round1_package = samples::round1_package(); let json = serde_json::to_string_pretty(&round1_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round1_package: round1::Package = serde_json::from_str(&json).unwrap(); assert!(round1_package == decoded_round1_package); @@ -582,7 +582,7 @@ fn check_round2_package_serialization() { let round2_package = samples::round2_package(); let json = serde_json::to_string_pretty(&round2_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round2_package: round2::Package = serde_json::from_str(&json).unwrap(); assert!(round2_package == decoded_round2_package); diff --git a/frost-ed448/Cargo.toml b/frost-ed448/Cargo.toml index 4d834fe86..54eeb8578 100644 --- a/frost-ed448/Cargo.toml +++ b/frost-ed448/Cargo.toml @@ -17,11 +17,11 @@ rustdoc-args = ["--cfg", "docsrs"] [dependencies] document-features.workspace = true -ed448-goldilocks = { version = "0.9.0" } +ed448-goldilocks = { version = "0.14.0-pre.4", default-features = false } frost-core.workspace = true frost-rerandomized.workspace = true rand_core.workspace = true -sha3 = { version = "0.10.6", default-features = false } +sha3 = { version = "0.11.0-rc.3", default-features = false } [dev-dependencies] criterion.workspace = true diff --git a/frost-ed448/README.md b/frost-ed448/README.md index 34d4e537b..7b9848a4e 100644 --- a/frost-ed448/README.md +++ b/frost-ed448/README.md @@ -11,9 +11,10 @@ scenario in a single thread and it abstracts away any communication between peer ```rust # // ANCHOR: tkg_gen use frost_ed448 as frost; +use rand_core::TryRngCore; use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; let (shares, pubkey_package) = frost::keys::generate_with_dealer( diff --git a/frost-ed448/benches/bench.rs b/frost-ed448/benches/bench.rs index ba40feb33..2574beab0 100644 --- a/frost-ed448/benches/bench.rs +++ b/frost-ed448/benches/bench.rs @@ -1,17 +1,18 @@ use criterion::{criterion_group, criterion_main, Criterion}; use frost_ed448::*; +use rand_core::TryRngCore; // bench_ed448_batch_verify not included until batch verification is fixed for Ed448 #[allow(unused)] fn bench_ed448_batch_verify(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_batch_verify::(c, "ed448", &mut rng); } fn bench_ed448_sign(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_sign::(c, "ed448", &mut rng); } diff --git a/frost-ed448/dkg.md b/frost-ed448/dkg.md index 039937846..8d5a50e3c 100644 --- a/frost-ed448/dkg.md +++ b/frost-ed448/dkg.md @@ -26,12 +26,11 @@ they can proceed to sign messages with FROST. ```rust # // ANCHOR: dkg_import -use std::collections::BTreeMap; - use frost_ed448 as frost; +use rand_core::TryRngCore; +use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; - +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; # // ANCHOR_END: dkg_import diff --git a/frost-ed448/src/keys/repairable.rs b/frost-ed448/src/keys/repairable.rs index 7bbdecaff..56b3ddda3 100644 --- a/frost-ed448/src/keys/repairable.rs +++ b/frost-ed448/src/keys/repairable.rs @@ -9,7 +9,7 @@ use alloc::collections::BTreeMap; // This is imported separately to make `gencode` work. // (if it were below, the position of the import would vary between ciphersuites // after `cargo fmt`) -use crate::{frost, Ciphersuite, CryptoRng, Identifier, RngCore, Scalar}; +use crate::{frost, Ciphersuite, CryptoRng, EdwardsScalar, Identifier, RngCore}; use crate::{Ed448Shake256, Error}; use super::{SecretShare, VerifiableSecretSharingCommitment}; @@ -26,7 +26,7 @@ pub fn repair_share_step_1( share_i: &SecretShare, rng: &mut R, participant: Identifier, -) -> Result, Error> { +) -> Result, Error> { frost::keys::repairable::repair_share_step_1(helpers, share_i, rng, participant) } @@ -37,7 +37,7 @@ pub fn repair_share_step_1( /// `sigma` is the sum of all received `delta` and the `delta_i` generated for `helper_i`. /// /// Returns a scalar -pub fn repair_share_step_2(deltas_j: &[Scalar]) -> Scalar { +pub fn repair_share_step_2(deltas_j: &[EdwardsScalar]) -> EdwardsScalar { frost::keys::repairable::repair_share_step_2::(deltas_j) } @@ -47,7 +47,7 @@ pub fn repair_share_step_2(deltas_j: &[Scalar]) -> Scalar { /// is made up of the `identifier`and `commitment` of the `participant` as well as the /// `value` which is the `SigningShare`. pub fn repair_share_step_3( - sigmas: &[Scalar], + sigmas: &[EdwardsScalar], identifier: Identifier, commitment: &VerifiableSecretSharingCommitment, ) -> SecretShare { @@ -56,13 +56,11 @@ pub fn repair_share_step_3( #[cfg(test)] mod tests { - + use crate::Ed448Shake256; use lazy_static::lazy_static; - + use rand_core::TryRngCore; use serde_json::Value; - use crate::Ed448Shake256; - lazy_static! { pub static ref REPAIR_SHARE: Value = serde_json::from_str(include_str!("../../tests/helpers/repair-share.json").trim()) @@ -71,7 +69,7 @@ mod tests { #[test] fn check_repair_share_step_1() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1::(rng); } @@ -83,7 +81,7 @@ mod tests { #[test] fn check_repair_share_step_3() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_3::( rng, &REPAIR_SHARE, @@ -92,7 +90,7 @@ mod tests { #[test] fn check_repair_share_step_1_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1_fails_with_invalid_min_signers::< Ed448Shake256, _, diff --git a/frost-ed448/src/lib.rs b/frost-ed448/src/lib.rs index 3c45775aa..93206807b 100644 --- a/frost-ed448/src/lib.rs +++ b/frost-ed448/src/lib.rs @@ -1,3 +1,4 @@ +#![no_std] #![allow(non_snake_case)] #![deny(missing_docs)] #![cfg_attr(docsrs, feature(doc_auto_cfg))] @@ -10,8 +11,7 @@ extern crate alloc; use alloc::collections::BTreeMap; use ed448_goldilocks::{ - curve::{edwards::CompressedEdwardsY, ExtendedPoint}, - Scalar, + CompressedEdwardsY, EdwardsPoint, EdwardsScalar, EdwardsScalarBytes, WideEdwardsScalarBytes, }; use frost_rerandomized::RandomizedCiphersuite; use rand_core::{CryptoRng, RngCore}; @@ -39,16 +39,16 @@ pub type Error = frost_core::Error; pub struct Ed448ScalarField; impl Field for Ed448ScalarField { - type Scalar = Scalar; + type Scalar = EdwardsScalar; type Serialization = [u8; 57]; fn zero() -> Self::Scalar { - Scalar::zero() + EdwardsScalar::ZERO } fn one() -> Self::Scalar { - Scalar::one() + EdwardsScalar::ONE } fn invert(scalar: &Self::Scalar) -> Result { @@ -60,15 +60,16 @@ impl Field for Ed448ScalarField { } fn random(rng: &mut R) -> Self::Scalar { - Scalar::random(rng) + EdwardsScalar::random(rng) } fn serialize(scalar: &Self::Scalar) -> Self::Serialization { - scalar.to_bytes_rfc_8032() + scalar.to_bytes_rfc_8032().into() } fn deserialize(buf: &Self::Serialization) -> Result { - match Scalar::from_canonical_bytes(*buf) { + #[allow(deprecated)] + match EdwardsScalar::from_canonical_bytes(EdwardsScalarBytes::from_slice(buf)).into() { Some(s) => Ok(s), None => Err(FieldError::MalformedScalar), } @@ -86,42 +87,42 @@ pub struct Ed448Group; impl Group for Ed448Group { type Field = Ed448ScalarField; - type Element = ExtendedPoint; + type Element = EdwardsPoint; type Serialization = [u8; 57]; fn cofactor() -> ::Scalar { - Scalar::one() + EdwardsScalar::ONE } fn identity() -> Self::Element { - Self::Element::identity() + Self::Element::IDENTITY } fn generator() -> Self::Element { - Self::Element::generator() + Self::Element::GENERATOR } fn serialize(element: &Self::Element) -> Result { if *element == Self::identity() { return Err(GroupError::InvalidIdentityElement); } - Ok(element.compress().0) + Ok(element.to_affine().compress().0) } fn deserialize(buf: &Self::Serialization) -> Result { let compressed = CompressedEdwardsY(*buf); - match compressed.decompress() { + match compressed.decompress_unchecked().into_option() { Some(point) => { - if point == Self::identity() { + if point == Self::identity().to_affine() { Err(GroupError::InvalidIdentityElement) - } else if point.is_torsion_free() { + } else if point.to_edwards().is_torsion_free().into() { // decompress() does not check for canonicality, so we // check by recompressing and comparing if point.compress().0 != compressed.0 { Err(GroupError::MalformedElement) } else { - Ok(point) + Ok(point.to_edwards()) } } else { Err(GroupError::InvalidNonPrimeOrderElement) @@ -143,9 +144,11 @@ fn hash_to_array(inputs: &[&[u8]]) -> [u8; 114] { output } -fn hash_to_scalar(inputs: &[&[u8]]) -> Scalar { - let output = hash_to_array(inputs); - Scalar::from_bytes_mod_order_wide(&output) +fn hash_to_scalar(inputs: &[&[u8]]) -> EdwardsScalar { + let temp = hash_to_array(inputs); + #[allow(deprecated)] + let output = WideEdwardsScalarBytes::from_slice(&temp); + EdwardsScalar::from_bytes_mod_order_wide(output) } /// Context string from the ciphersuite in the [spec] diff --git a/frost-ed448/src/tests/batch.rs b/frost-ed448/src/tests/batch.rs index 5c84b5e50..2ee863c1b 100644 --- a/frost-ed448/src/tests/batch.rs +++ b/frost-ed448/src/tests/batch.rs @@ -1,22 +1,23 @@ use crate::*; +use rand_core::TryRngCore; #[test] fn check_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::batch_verify::(rng); } #[test] fn check_bad_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::bad_batch_verify::(rng); } #[test] fn empty_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::empty_batch_verify::(rng); } diff --git a/frost-ed448/src/tests/coefficient_commitment.rs b/frost-ed448/src/tests/coefficient_commitment.rs index 0d2091aa6..fec66da31 100644 --- a/frost-ed448/src/tests/coefficient_commitment.rs +++ b/frost-ed448/src/tests/coefficient_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,7 +13,7 @@ lazy_static! { #[test] fn check_serialization_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_serialization_of_coefficient_commitment::< Ed448Shake256, _, @@ -21,7 +22,7 @@ fn check_serialization_of_coefficient_commitment() { #[test] fn check_create_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_create_coefficient_commitment::< Ed448Shake256, _, @@ -36,7 +37,7 @@ fn check_create_coefficient_commitment_error() { #[test] fn check_get_value_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_get_value_of_coefficient_commitment::< Ed448Shake256, diff --git a/frost-ed448/src/tests/deserialize.rs b/frost-ed448/src/tests/deserialize.rs index 6c86b77f6..d5294e291 100644 --- a/frost-ed448/src/tests/deserialize.rs +++ b/frost-ed448/src/tests/deserialize.rs @@ -1,10 +1,10 @@ use crate::*; -use ed448_goldilocks::curve::ExtendedPoint; +use ed448_goldilocks::EdwardsPoint; use frost_core::Ciphersuite; #[test] fn check_deserialize_non_canonical() { - let mut encoded_generator = ExtendedPoint::generator().compress().0; + let mut encoded_generator = EdwardsPoint::GENERATOR.to_affine().compress().0; let r = ::Group::deserialize(&encoded_generator); assert!(r.is_ok()); @@ -35,7 +35,7 @@ fn check_deserialize_non_prime_order() { #[test] fn check_deserialize_identity() { - let encoded_identity = ExtendedPoint::identity().compress().0; + let encoded_identity = EdwardsPoint::IDENTITY.to_affine().compress().0; let r = ::Group::deserialize(&encoded_identity); assert_eq!(r, Err(GroupError::InvalidIdentityElement)); diff --git a/frost-ed448/src/tests/vss_commitment.rs b/frost-ed448/src/tests/vss_commitment.rs index 7e1f83441..a9cff70bb 100644 --- a/frost-ed448/src/tests/vss_commitment.rs +++ b/frost-ed448/src/tests/vss_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,13 +13,13 @@ lazy_static! { #[test] fn check_serialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_vss_commitment::(rng); } #[test] fn check_serialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_whole_vss_commitment::( rng, ); @@ -26,13 +27,13 @@ fn check_serialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment::(rng); } #[test] fn check_deserialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment::( rng, ); @@ -40,7 +41,7 @@ fn check_deserialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment_error::( rng, &ELEMENTS, ); @@ -48,7 +49,7 @@ fn check_deserialize_vss_commitment_error() { #[test] fn check_deserialize_whole_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment_error::< Ed448Shake256, _, @@ -57,6 +58,6 @@ fn check_deserialize_whole_vss_commitment_error() { #[test] fn check_compute_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_compute_public_key_package::(rng); } diff --git a/frost-ed448/tests/common_traits_tests.rs b/frost-ed448/tests/common_traits_tests.rs index 749cc7033..90466b3a2 100644 --- a/frost-ed448/tests/common_traits_tests.rs +++ b/frost-ed448/tests/common_traits_tests.rs @@ -4,12 +4,13 @@ mod helpers; use frost_ed448::SigningKey; use helpers::samples; +use rand_core::TryRngCore; #[allow(clippy::unnecessary_literal_unwrap)] fn check_common_traits_for_type(v: T) { // Make sure can be debug-printed. This also catches if the Debug does not // have an endless recursion (a popular mistake). - println!("{:?}", v); + println!("{v:?}"); // Test Clone and Eq assert_eq!(v, v.clone()); // Make sure it can be unwrapped in a Result (which requires Debug). @@ -19,7 +20,7 @@ fn check_common_traits_for_type(v: #[test] fn check_signing_key_common_traits() { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); let signing_key = SigningKey::new(&mut rng); check_common_traits_for_type(signing_key); } diff --git a/frost-ed448/tests/integration_tests.rs b/frost-ed448/tests/integration_tests.rs index 0dfb79144..9b160d6bd 100644 --- a/frost-ed448/tests/integration_tests.rs +++ b/frost-ed448/tests/integration_tests.rs @@ -1,5 +1,6 @@ use frost_ed448::*; use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; #[test] @@ -9,14 +10,14 @@ fn check_zero_key_fails() { #[test] fn check_sign_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dkg::(rng); } #[test] fn check_dkg_part1_fails_with_invalid_signers_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -30,7 +31,7 @@ fn check_dkg_part1_fails_with_invalid_signers_min_signers() { #[test] fn check_dkg_part1_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -44,7 +45,7 @@ fn check_dkg_part1_fails_with_min_signers_greater_than_max() { #[test] fn check_dkg_part1_fails_with_invalid_signers_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -58,21 +59,21 @@ fn check_dkg_part1_fails_with_invalid_signers_max_signers() { #[test] fn check_rts() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_rts::(rng); } #[test] fn check_refresh_shares_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer::(rng); } #[test] fn check_refresh_shares_with_dealer_serialisation() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_serialisation::( rng, @@ -81,7 +82,7 @@ fn check_refresh_shares_with_dealer_serialisation() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_invalid_public_key_package::< Ed448Shake256, @@ -91,7 +92,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -110,7 +111,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -129,7 +130,7 @@ fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_s #[test] fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -148,7 +149,7 @@ fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![Identifier::try_from(1).unwrap()]; let min_signers = 3; let max_signers = 1; @@ -162,7 +163,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(8).unwrap(), Identifier::try_from(3).unwrap(), @@ -181,7 +182,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { #[test] fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_different_min_signers::< Ed448Shake256, @@ -191,14 +192,14 @@ fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { #[test] fn check_refresh_shares_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg::(rng); } #[test] fn check_refresh_shares_with_dkg_smaller_threshold() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg_smaller_threshold::( rng, @@ -207,14 +208,14 @@ fn check_refresh_shares_with_dkg_smaller_threshold() { #[test] fn check_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer::(rng); } #[test] fn check_sign_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -228,7 +229,7 @@ fn check_sign_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -242,7 +243,7 @@ fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_sign_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -258,13 +259,13 @@ fn check_sign_with_dealer_fails_with_invalid_max_signers() { /// value is working. #[test] fn check_share_generation_ed448_shake256() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_share_generation::(rng); } #[test] fn check_share_generation_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 0; let max_signers = 3; @@ -278,7 +279,7 @@ fn check_share_generation_fails_with_invalid_min_signers() { #[test] fn check_share_generation_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -292,7 +293,7 @@ fn check_share_generation_fails_with_min_signers_greater_than_max() { #[test] fn check_share_generation_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 0; @@ -356,7 +357,7 @@ fn check_identifier_generation() -> Result<(), Error> { #[test] fn check_sign_with_dealer_and_identifiers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer_and_identifiers::< Ed448Shake256, @@ -366,7 +367,7 @@ fn check_sign_with_dealer_and_identifiers() { #[test] fn check_sign_with_missing_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_missing_identifier::( rng, ); @@ -374,7 +375,7 @@ fn check_sign_with_missing_identifier() { #[test] fn check_sign_with_incorrect_commitments() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_incorrect_commitments::( rng, ); diff --git a/frost-ed448/tests/rerandomized_tests.rs b/frost-ed448/tests/rerandomized_tests.rs index e16d906ce..6366203ed 100644 --- a/frost-ed448/tests/rerandomized_tests.rs +++ b/frost-ed448/tests/rerandomized_tests.rs @@ -1,8 +1,9 @@ use frost_ed448::Ed448Shake256; +use rand_core::TryRngCore; #[test] fn check_randomized_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let (_msg, _group_signature, _group_pubkey) = frost_rerandomized::tests::check_randomized_sign_with_dealer::(rng); diff --git a/frost-ed448/tests/serde_tests.rs b/frost-ed448/tests/serde_tests.rs index 3b5c667a4..da784860d 100644 --- a/frost-ed448/tests/serde_tests.rs +++ b/frost-ed448/tests/serde_tests.rs @@ -19,7 +19,7 @@ fn check_signing_commitments_serialization() { let commitments = samples::signing_commitments(); let json = serde_json::to_string_pretty(&commitments).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_commitments: SigningCommitments = serde_json::from_str(&json).unwrap(); assert!(commitments == decoded_commitments); @@ -89,7 +89,7 @@ fn check_signing_package_serialization() { let signing_package = samples::signing_package(); let json = serde_json::to_string_pretty(&signing_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signing_package: SigningPackage = serde_json::from_str(&json).unwrap(); assert!(signing_package == decoded_signing_package); @@ -204,7 +204,7 @@ fn check_signature_share_serialization() { let signature_share = samples::signature_share(); let json = serde_json::to_string_pretty(&signature_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signature_share: SignatureShare = serde_json::from_str(&json).unwrap(); assert!(signature_share == decoded_signature_share); @@ -258,7 +258,7 @@ fn check_secret_share_serialization() { let secret_share = samples::secret_share(); let json = serde_json::to_string_pretty(&secret_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_secret_share: SecretShare = serde_json::from_str(&json).unwrap(); assert!(secret_share == decoded_secret_share); @@ -342,7 +342,7 @@ fn check_key_package_serialization() { let key_package = samples::key_package(); let json = serde_json::to_string_pretty(&key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_key_package: KeyPackage = serde_json::from_str(&json).unwrap(); assert!(key_package == decoded_key_package); @@ -437,7 +437,7 @@ fn check_public_key_package_serialization() { let public_key_package = samples::public_key_package(); let json = serde_json::to_string_pretty(&public_key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(&json).unwrap(); assert!(public_key_package == decoded_public_key_package); @@ -516,7 +516,7 @@ fn check_round1_package_serialization() { let round1_package = samples::round1_package(); let json = serde_json::to_string_pretty(&round1_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round1_package: round1::Package = serde_json::from_str(&json).unwrap(); assert!(round1_package == decoded_round1_package); @@ -582,7 +582,7 @@ fn check_round2_package_serialization() { let round2_package = samples::round2_package(); let json = serde_json::to_string_pretty(&round2_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round2_package: round2::Package = serde_json::from_str(&json).unwrap(); assert!(round2_package == decoded_round2_package); diff --git a/frost-p256/Cargo.toml b/frost-p256/Cargo.toml index d047e7b43..1709cb8b5 100644 --- a/frost-p256/Cargo.toml +++ b/frost-p256/Cargo.toml @@ -17,11 +17,12 @@ rustdoc-args = ["--cfg", "docsrs"] [dependencies] document-features.workspace = true -p256 = { version = "0.13.0", features = ["hash2curve"], default-features = false } +p256 = { version = "0.14.0-rc.0", features = ["hash2curve"], default-features = false } +hash2curve = "0.14.0-rc.3" frost-core.workspace = true frost-rerandomized.workspace = true rand_core.workspace = true -sha2 = { version = "0.10.2", default-features = false } +sha2 = { version = "0.11.0-rc.2", default-features = false } [dev-dependencies] criterion.workspace = true diff --git a/frost-p256/README.md b/frost-p256/README.md index ce0aa3d5c..1fa60c36b 100644 --- a/frost-p256/README.md +++ b/frost-p256/README.md @@ -11,9 +11,10 @@ scenario in a single thread and it abstracts away any communication between peer ```rust # // ANCHOR: tkg_gen use frost_p256 as frost; +use rand_core::TryRngCore; use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; let (shares, pubkey_package) = frost::keys::generate_with_dealer( diff --git a/frost-p256/benches/bench.rs b/frost-p256/benches/bench.rs index 8ae524f5c..5865563ec 100644 --- a/frost-p256/benches/bench.rs +++ b/frost-p256/benches/bench.rs @@ -1,15 +1,16 @@ use criterion::{criterion_group, criterion_main, Criterion}; use frost_p256::*; +use rand_core::TryRngCore; fn bench_p256_batch_verify(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_batch_verify::(c, "p256", &mut rng); } fn bench_p256_sign(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_sign::(c, "p256", &mut rng); } diff --git a/frost-p256/dkg.md b/frost-p256/dkg.md index afb4bd44a..b9ebcf07c 100644 --- a/frost-p256/dkg.md +++ b/frost-p256/dkg.md @@ -26,12 +26,11 @@ they can proceed to sign messages with FROST. ```rust # // ANCHOR: dkg_import -use std::collections::BTreeMap; - use frost_p256 as frost; +use rand_core::TryRngCore; +use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; - +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; # // ANCHOR_END: dkg_import diff --git a/frost-p256/src/keys/repairable.rs b/frost-p256/src/keys/repairable.rs index 484a9fcd6..8fc36cfb1 100644 --- a/frost-p256/src/keys/repairable.rs +++ b/frost-p256/src/keys/repairable.rs @@ -56,13 +56,11 @@ pub fn repair_share_step_3( #[cfg(test)] mod tests { - + use crate::P256Sha256; use lazy_static::lazy_static; - + use rand_core::TryRngCore; use serde_json::Value; - use crate::P256Sha256; - lazy_static! { pub static ref REPAIR_SHARE: Value = serde_json::from_str(include_str!("../../tests/helpers/repair-share.json").trim()) @@ -71,7 +69,7 @@ mod tests { #[test] fn check_repair_share_step_1() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1::(rng); } @@ -83,7 +81,7 @@ mod tests { #[test] fn check_repair_share_step_3() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_3::( rng, &REPAIR_SHARE, @@ -92,7 +90,7 @@ mod tests { #[test] fn check_repair_share_step_1_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1_fails_with_invalid_min_signers::< P256Sha256, _, diff --git a/frost-p256/src/lib.rs b/frost-p256/src/lib.rs index c99a26fb5..6bae76d02 100644 --- a/frost-p256/src/lib.rs +++ b/frost-p256/src/lib.rs @@ -11,13 +11,13 @@ extern crate alloc; use alloc::collections::BTreeMap; use frost_rerandomized::RandomizedCiphersuite; +use hash2curve::{hash_to_field, ExpandMsgXmd, MapToCurve}; use p256::{ elliptic_curve::{ - hash2curve::{hash_to_field, ExpandMsgXmd}, sec1::{FromEncodedPoint, ToEncodedPoint}, Field as FFField, PrimeField, }, - AffinePoint, ProjectivePoint, Scalar, + AffinePoint, NistP256, ProjectivePoint, Scalar, }; use rand_core::{CryptoRng, RngCore}; use sha2::{Digest, Sha256}; @@ -159,9 +159,14 @@ fn hash_to_array(inputs: &[&[u8]]) -> [u8; 32] { } fn hash_to_scalar(domain: &[&[u8]], msg: &[u8]) -> Scalar { - let mut u = [P256ScalarField::zero()]; - hash_to_field::, Scalar>(&[msg], domain, &mut u) - .expect("should never return error according to error cases described in ExpandMsgXmd"); + let u = hash_to_field::< + 1, + ExpandMsgXmd, + ::SecurityLevel, + Scalar, + ::Length, + >(&[msg], domain) + .expect("should never return error according to error cases described in ExpandMsgXmd"); u[0] } diff --git a/frost-p256/src/tests/batch.rs b/frost-p256/src/tests/batch.rs index 3a46bfdd3..798849c7a 100644 --- a/frost-p256/src/tests/batch.rs +++ b/frost-p256/src/tests/batch.rs @@ -1,22 +1,23 @@ use crate::*; +use rand_core::TryRngCore; #[test] fn check_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::batch_verify::(rng); } #[test] fn check_bad_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::bad_batch_verify::(rng); } #[test] fn empty_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::empty_batch_verify::(rng); } diff --git a/frost-p256/src/tests/coefficient_commitment.rs b/frost-p256/src/tests/coefficient_commitment.rs index e52f8398f..f582b1e5a 100644 --- a/frost-p256/src/tests/coefficient_commitment.rs +++ b/frost-p256/src/tests/coefficient_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,7 +13,7 @@ lazy_static! { #[test] fn check_serialization_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_serialization_of_coefficient_commitment::< P256Sha256, _, @@ -21,7 +22,7 @@ fn check_serialization_of_coefficient_commitment() { #[test] fn check_create_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_create_coefficient_commitment::( rng, ); @@ -35,7 +36,7 @@ fn check_create_coefficient_commitment_error() { #[test] fn check_get_value_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_get_value_of_coefficient_commitment::< P256Sha256, diff --git a/frost-p256/src/tests/vss_commitment.rs b/frost-p256/src/tests/vss_commitment.rs index 44c08c5be..8fd1bc3a2 100644 --- a/frost-p256/src/tests/vss_commitment.rs +++ b/frost-p256/src/tests/vss_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,31 +13,31 @@ lazy_static! { #[test] fn check_serialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_vss_commitment::(rng); } #[test] fn check_serialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_whole_vss_commitment::(rng); } #[test] fn check_deserialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment::(rng); } #[test] fn check_deserialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment::(rng); } #[test] fn check_deserialize_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment_error::( rng, &ELEMENTS, ); @@ -44,7 +45,7 @@ fn check_deserialize_vss_commitment_error() { #[test] fn check_deserialize_whole_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment_error::( rng, &ELEMENTS, ); @@ -52,6 +53,6 @@ fn check_deserialize_whole_vss_commitment_error() { #[test] fn check_compute_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_compute_public_key_package::(rng); } diff --git a/frost-p256/tests/common_traits_tests.rs b/frost-p256/tests/common_traits_tests.rs index 8dc2d739d..226982f26 100644 --- a/frost-p256/tests/common_traits_tests.rs +++ b/frost-p256/tests/common_traits_tests.rs @@ -4,12 +4,13 @@ mod helpers; use frost_p256::SigningKey; use helpers::samples; +use rand_core::TryRngCore; #[allow(clippy::unnecessary_literal_unwrap)] fn check_common_traits_for_type(v: T) { // Make sure can be debug-printed. This also catches if the Debug does not // have an endless recursion (a popular mistake). - println!("{:?}", v); + println!("{v:?}"); // Test Clone and Eq assert_eq!(v, v.clone()); // Make sure it can be unwrapped in a Result (which requires Debug). @@ -19,7 +20,7 @@ fn check_common_traits_for_type(v: #[test] fn check_signing_key_common_traits() { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); let signing_key = SigningKey::new(&mut rng); check_common_traits_for_type(signing_key); } diff --git a/frost-p256/tests/integration_tests.rs b/frost-p256/tests/integration_tests.rs index 868cc4d68..70869235a 100644 --- a/frost-p256/tests/integration_tests.rs +++ b/frost-p256/tests/integration_tests.rs @@ -1,5 +1,6 @@ use frost_p256::*; use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; #[test] @@ -9,14 +10,14 @@ fn check_zero_key_fails() { #[test] fn check_sign_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dkg::(rng); } #[test] fn check_dkg_part1_fails_with_invalid_signers_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -30,7 +31,7 @@ fn check_dkg_part1_fails_with_invalid_signers_min_signers() { #[test] fn check_dkg_part1_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -44,7 +45,7 @@ fn check_dkg_part1_fails_with_min_signers_greater_than_max() { #[test] fn check_dkg_part1_fails_with_invalid_signers_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -58,21 +59,21 @@ fn check_dkg_part1_fails_with_invalid_signers_max_signers() { #[test] fn check_rts() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_rts::(rng); } #[test] fn check_refresh_shares_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer::(rng); } #[test] fn check_refresh_shares_with_dealer_serialisation() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_serialisation::( rng, @@ -81,7 +82,7 @@ fn check_refresh_shares_with_dealer_serialisation() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_invalid_public_key_package::< P256Sha256, @@ -91,7 +92,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -110,7 +111,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -129,7 +130,7 @@ fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_s #[test] fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -148,7 +149,7 @@ fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![Identifier::try_from(1).unwrap()]; let min_signers = 3; let max_signers = 1; @@ -162,7 +163,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(8).unwrap(), Identifier::try_from(3).unwrap(), @@ -181,7 +182,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { #[test] fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_different_min_signers::< P256Sha256, @@ -191,14 +192,14 @@ fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { #[test] fn check_refresh_shares_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg::(rng); } #[test] fn check_refresh_shares_with_dkg_smaller_threshold() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg_smaller_threshold::( rng, @@ -207,14 +208,14 @@ fn check_refresh_shares_with_dkg_smaller_threshold() { #[test] fn check_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer::(rng); } #[test] fn check_sign_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -228,7 +229,7 @@ fn check_sign_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -242,7 +243,7 @@ fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_sign_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -258,13 +259,13 @@ fn check_sign_with_dealer_fails_with_invalid_max_signers() { /// value is working. #[test] fn check_share_generation_p256_sha256() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_share_generation::(rng); } #[test] fn check_share_generation_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 0; let max_signers = 3; @@ -278,7 +279,7 @@ fn check_share_generation_fails_with_invalid_min_signers() { #[test] fn check_share_generation_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -292,7 +293,7 @@ fn check_share_generation_fails_with_min_signers_greater_than_max() { #[test] fn check_share_generation_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 0; @@ -354,7 +355,7 @@ fn check_identifier_generation() -> Result<(), Error> { #[test] fn check_sign_with_dealer_and_identifiers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer_and_identifiers::( rng, @@ -363,7 +364,7 @@ fn check_sign_with_dealer_and_identifiers() { #[test] fn check_sign_with_missing_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_missing_identifier::( rng, ); @@ -371,7 +372,7 @@ fn check_sign_with_missing_identifier() { #[test] fn check_sign_with_incorrect_commitments() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_incorrect_commitments::( rng, ); diff --git a/frost-p256/tests/rerandomized_tests.rs b/frost-p256/tests/rerandomized_tests.rs index 6dc482ce6..876afad51 100644 --- a/frost-p256/tests/rerandomized_tests.rs +++ b/frost-p256/tests/rerandomized_tests.rs @@ -1,8 +1,9 @@ use frost_p256::P256Sha256; +use rand_core::TryRngCore; #[test] fn check_randomized_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let (_msg, _group_signature, _group_pubkey) = frost_rerandomized::tests::check_randomized_sign_with_dealer::(rng); diff --git a/frost-p256/tests/serde_tests.rs b/frost-p256/tests/serde_tests.rs index c14758146..3fd541220 100644 --- a/frost-p256/tests/serde_tests.rs +++ b/frost-p256/tests/serde_tests.rs @@ -19,7 +19,7 @@ fn check_signing_commitments_serialization() { let commitments = samples::signing_commitments(); let json = serde_json::to_string_pretty(&commitments).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_commitments: SigningCommitments = serde_json::from_str(&json).unwrap(); assert!(commitments == decoded_commitments); @@ -89,7 +89,7 @@ fn check_signing_package_serialization() { let signing_package = samples::signing_package(); let json = serde_json::to_string_pretty(&signing_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signing_package: SigningPackage = serde_json::from_str(&json).unwrap(); assert!(signing_package == decoded_signing_package); @@ -204,7 +204,7 @@ fn check_signature_share_serialization() { let signature_share = samples::signature_share(); let json = serde_json::to_string_pretty(&signature_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signature_share: SignatureShare = serde_json::from_str(&json).unwrap(); assert!(signature_share == decoded_signature_share); @@ -258,7 +258,7 @@ fn check_secret_share_serialization() { let secret_share = samples::secret_share(); let json = serde_json::to_string_pretty(&secret_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_secret_share: SecretShare = serde_json::from_str(&json).unwrap(); assert!(secret_share == decoded_secret_share); @@ -342,7 +342,7 @@ fn check_key_package_serialization() { let key_package = samples::key_package(); let json = serde_json::to_string_pretty(&key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_key_package: KeyPackage = serde_json::from_str(&json).unwrap(); assert!(key_package == decoded_key_package); @@ -437,7 +437,7 @@ fn check_public_key_package_serialization() { let public_key_package = samples::public_key_package(); let json = serde_json::to_string_pretty(&public_key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(&json).unwrap(); assert!(public_key_package == decoded_public_key_package); @@ -516,7 +516,7 @@ fn check_round1_package_serialization() { let round1_package = samples::round1_package(); let json = serde_json::to_string_pretty(&round1_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round1_package: round1::Package = serde_json::from_str(&json).unwrap(); assert!(round1_package == decoded_round1_package); @@ -582,7 +582,7 @@ fn check_round2_package_serialization() { let round2_package = samples::round2_package(); let json = serde_json::to_string_pretty(&round2_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round2_package: round2::Package = serde_json::from_str(&json).unwrap(); assert!(round2_package == decoded_round2_package); diff --git a/frost-ristretto255/Cargo.toml b/frost-ristretto255/Cargo.toml index c9e6254ec..d6f3b4bda 100644 --- a/frost-ristretto255/Cargo.toml +++ b/frost-ristretto255/Cargo.toml @@ -16,12 +16,12 @@ features = ["serde"] rustdoc-args = ["--cfg", "docsrs"] [dependencies] -curve25519-dalek = { version = "=4.1.3", features = ["rand_core"] } +curve25519-dalek = { version = "5.0.0-pre.1", features = ["rand_core"] } document-features.workspace = true frost-core.workspace = true frost-rerandomized.workspace = true rand_core.workspace = true -sha2 = { version = "0.10.2", default-features = false } +sha2 = { version = "0.11.0-rc.2", default-features = false } [dev-dependencies] criterion = { workspace = true, features = ["html_reports"] } diff --git a/frost-ristretto255/README.md b/frost-ristretto255/README.md index 4ba16fe16..86ee326ce 100644 --- a/frost-ristretto255/README.md +++ b/frost-ristretto255/README.md @@ -11,9 +11,10 @@ scenario in a single thread and it abstracts away any communication between peer ```rust # // ANCHOR: tkg_gen use frost_ristretto255 as frost; +use rand_core::TryRngCore; use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; let (shares, pubkey_package) = frost::keys::generate_with_dealer( diff --git a/frost-ristretto255/benches/bench.rs b/frost-ristretto255/benches/bench.rs index b7e9af3bd..a01c5b701 100644 --- a/frost-ristretto255/benches/bench.rs +++ b/frost-ristretto255/benches/bench.rs @@ -1,15 +1,16 @@ use criterion::{criterion_group, criterion_main, Criterion}; use frost_ristretto255::*; +use rand_core::TryRngCore; fn bench_ristretto255_batch_verify(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_batch_verify::(c, "ristretto255", &mut rng); } fn bench_ristretto255_sign(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_sign::(c, "ristretto255", &mut rng); } diff --git a/frost-ristretto255/dkg.md b/frost-ristretto255/dkg.md index 86995d721..ff1ac23c4 100644 --- a/frost-ristretto255/dkg.md +++ b/frost-ristretto255/dkg.md @@ -26,12 +26,11 @@ they can proceed to sign messages with FROST. ```rust # // ANCHOR: dkg_import -use std::collections::BTreeMap; - use frost_ristretto255 as frost; +use rand_core::TryRngCore; +use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; - +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; # // ANCHOR_END: dkg_import diff --git a/frost-ristretto255/src/keys/repairable.rs b/frost-ristretto255/src/keys/repairable.rs index e3d20a79e..fcd6329c6 100644 --- a/frost-ristretto255/src/keys/repairable.rs +++ b/frost-ristretto255/src/keys/repairable.rs @@ -56,13 +56,11 @@ pub fn repair_share_step_3( #[cfg(test)] mod tests { - + use crate::Ristretto255Sha512; use lazy_static::lazy_static; - + use rand_core::TryRngCore; use serde_json::Value; - use crate::Ristretto255Sha512; - lazy_static! { pub static ref REPAIR_SHARE: Value = serde_json::from_str(include_str!("../../tests/helpers/repair-share.json").trim()) @@ -71,7 +69,7 @@ mod tests { #[test] fn check_repair_share_step_1() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1::(rng); } @@ -85,7 +83,7 @@ mod tests { #[test] fn check_repair_share_step_3() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_3::( rng, &REPAIR_SHARE, @@ -94,7 +92,7 @@ mod tests { #[test] fn check_repair_share_step_1_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1_fails_with_invalid_min_signers::< Ristretto255Sha512, _, diff --git a/frost-ristretto255/src/tests/batch.rs b/frost-ristretto255/src/tests/batch.rs index b26d033cf..b4b470fc8 100644 --- a/frost-ristretto255/src/tests/batch.rs +++ b/frost-ristretto255/src/tests/batch.rs @@ -1,22 +1,23 @@ use crate::*; +use rand_core::TryRngCore; #[test] fn check_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::batch_verify::(rng); } #[test] fn check_bad_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::bad_batch_verify::(rng); } #[test] fn empty_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::empty_batch_verify::(rng); } diff --git a/frost-ristretto255/src/tests/coefficient_commitment.rs b/frost-ristretto255/src/tests/coefficient_commitment.rs index a031d4c46..ed0d6c366 100644 --- a/frost-ristretto255/src/tests/coefficient_commitment.rs +++ b/frost-ristretto255/src/tests/coefficient_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,7 +13,7 @@ lazy_static! { #[test] fn check_serialization_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_serialization_of_coefficient_commitment::< Ristretto255Sha512, _, @@ -21,7 +22,7 @@ fn check_serialization_of_coefficient_commitment() { #[test] fn check_create_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_create_coefficient_commitment::< Ristretto255Sha512, _, @@ -36,7 +37,7 @@ fn check_create_coefficient_commitment_error() { #[test] fn check_get_value_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_get_value_of_coefficient_commitment::< Ristretto255Sha512, diff --git a/frost-ristretto255/src/tests/vss_commitment.rs b/frost-ristretto255/src/tests/vss_commitment.rs index 06b16e422..353880f0c 100644 --- a/frost-ristretto255/src/tests/vss_commitment.rs +++ b/frost-ristretto255/src/tests/vss_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,13 +13,13 @@ lazy_static! { #[test] fn check_serialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_vss_commitment::(rng); } #[test] fn check_serialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_whole_vss_commitment::( rng, ); @@ -26,7 +27,7 @@ fn check_serialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment::( rng, ); @@ -34,7 +35,7 @@ fn check_deserialize_vss_commitment() { #[test] fn check_deserialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment::< Ristretto255Sha512, _, @@ -43,7 +44,7 @@ fn check_deserialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment_error::< Ristretto255Sha512, _, @@ -52,7 +53,7 @@ fn check_deserialize_vss_commitment_error() { #[test] fn check_deserialize_whole_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment_error::< Ristretto255Sha512, _, @@ -61,7 +62,7 @@ fn check_deserialize_whole_vss_commitment_error() { #[test] fn check_compute_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_compute_public_key_package::( rng, ); diff --git a/frost-ristretto255/tests/common_traits_tests.rs b/frost-ristretto255/tests/common_traits_tests.rs index 8d1fcf2b1..3c6e0a27b 100644 --- a/frost-ristretto255/tests/common_traits_tests.rs +++ b/frost-ristretto255/tests/common_traits_tests.rs @@ -4,12 +4,13 @@ mod helpers; use frost_ristretto255::SigningKey; use helpers::samples; +use rand_core::TryRngCore; #[allow(clippy::unnecessary_literal_unwrap)] fn check_common_traits_for_type(v: T) { // Make sure can be debug-printed. This also catches if the Debug does not // have an endless recursion (a popular mistake). - println!("{:?}", v); + println!("{v:?}"); // Test Clone and Eq assert_eq!(v, v.clone()); // Make sure it can be unwrapped in a Result (which requires Debug). @@ -19,7 +20,7 @@ fn check_common_traits_for_type(v: #[test] fn check_signing_key_common_traits() { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); let signing_key = SigningKey::new(&mut rng); check_common_traits_for_type(signing_key); } diff --git a/frost-ristretto255/tests/integration_tests.rs b/frost-ristretto255/tests/integration_tests.rs index 7179fabef..edfad422f 100644 --- a/frost-ristretto255/tests/integration_tests.rs +++ b/frost-ristretto255/tests/integration_tests.rs @@ -1,5 +1,6 @@ use frost_ristretto255::*; use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; #[test] @@ -9,14 +10,14 @@ fn check_zero_key_fails() { #[test] fn check_sign_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dkg::(rng); } #[test] fn check_dkg_part1_fails_with_invalid_signers_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -30,7 +31,7 @@ fn check_dkg_part1_fails_with_invalid_signers_min_signers() { #[test] fn check_dkg_part1_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -44,7 +45,7 @@ fn check_dkg_part1_fails_with_min_signers_greater_than_max() { #[test] fn check_dkg_part1_fails_with_invalid_signers_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -58,21 +59,21 @@ fn check_dkg_part1_fails_with_invalid_signers_max_signers() { #[test] fn check_rts() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_rts::(rng); } #[test] fn check_refresh_shares_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer::(rng); } #[test] fn check_refresh_shares_with_dealer_serialisation() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_serialisation::< Ristretto255Sha512, @@ -82,7 +83,7 @@ fn check_refresh_shares_with_dealer_serialisation() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_invalid_public_key_package::< Ristretto255Sha512, @@ -92,7 +93,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -111,7 +112,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -130,7 +131,7 @@ fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_s #[test] fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -149,7 +150,7 @@ fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![Identifier::try_from(1).unwrap()]; let min_signers = 3; let max_signers = 1; @@ -163,7 +164,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(8).unwrap(), Identifier::try_from(3).unwrap(), @@ -182,7 +183,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { #[test] fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_different_min_signers::< Ristretto255Sha512, @@ -192,14 +193,14 @@ fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { #[test] fn check_refresh_shares_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg::(rng); } #[test] fn check_refresh_shares_with_dkg_smaller_threshold() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg_smaller_threshold::< Ristretto255Sha512, @@ -209,14 +210,14 @@ fn check_refresh_shares_with_dkg_smaller_threshold() { #[test] fn check_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer::(rng); } #[test] fn check_sign_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -230,7 +231,7 @@ fn check_sign_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -244,7 +245,7 @@ fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_sign_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -260,13 +261,13 @@ fn check_sign_with_dealer_fails_with_invalid_max_signers() { /// value is working. #[test] fn check_share_generation_ristretto255_sha512() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_share_generation::(rng); } #[test] fn check_share_generation_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 0; let max_signers = 3; @@ -280,7 +281,7 @@ fn check_share_generation_fails_with_invalid_min_signers() { #[test] fn check_share_generation_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -294,7 +295,7 @@ fn check_share_generation_fails_with_min_signers_greater_than_max() { #[test] fn check_share_generation_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 0; @@ -358,7 +359,7 @@ fn check_identifier_generation() -> Result<(), Error> { #[test] fn check_sign_with_dealer_and_identifiers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer_and_identifiers::< Ristretto255Sha512, @@ -368,7 +369,7 @@ fn check_sign_with_dealer_and_identifiers() { #[test] fn check_sign_with_missing_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_missing_identifier::< Ristretto255Sha512, _, @@ -377,7 +378,7 @@ fn check_sign_with_missing_identifier() { #[test] fn check_sign_with_incorrect_commitments() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_incorrect_commitments::< Ristretto255Sha512, _, diff --git a/frost-ristretto255/tests/rerandomized_tests.rs b/frost-ristretto255/tests/rerandomized_tests.rs index 23277d0a9..d72563891 100644 --- a/frost-ristretto255/tests/rerandomized_tests.rs +++ b/frost-ristretto255/tests/rerandomized_tests.rs @@ -1,8 +1,9 @@ use frost_ristretto255::Ristretto255Sha512; +use rand_core::TryRngCore; #[test] fn check_randomized_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let (_msg, _group_signature, _group_pubkey) = frost_rerandomized::tests::check_randomized_sign_with_dealer::(rng); diff --git a/frost-ristretto255/tests/serde_tests.rs b/frost-ristretto255/tests/serde_tests.rs index faf1769ae..874527511 100644 --- a/frost-ristretto255/tests/serde_tests.rs +++ b/frost-ristretto255/tests/serde_tests.rs @@ -19,7 +19,7 @@ fn check_signing_commitments_serialization() { let commitments = samples::signing_commitments(); let json = serde_json::to_string_pretty(&commitments).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_commitments: SigningCommitments = serde_json::from_str(&json).unwrap(); assert!(commitments == decoded_commitments); @@ -89,7 +89,7 @@ fn check_signing_package_serialization() { let signing_package = samples::signing_package(); let json = serde_json::to_string_pretty(&signing_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signing_package: SigningPackage = serde_json::from_str(&json).unwrap(); assert!(signing_package == decoded_signing_package); @@ -204,7 +204,7 @@ fn check_signature_share_serialization() { let signature_share = samples::signature_share(); let json = serde_json::to_string_pretty(&signature_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signature_share: SignatureShare = serde_json::from_str(&json).unwrap(); assert!(signature_share == decoded_signature_share); @@ -258,7 +258,7 @@ fn check_secret_share_serialization() { let secret_share = samples::secret_share(); let json = serde_json::to_string_pretty(&secret_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_secret_share: SecretShare = serde_json::from_str(&json).unwrap(); assert!(secret_share == decoded_secret_share); @@ -342,7 +342,7 @@ fn check_key_package_serialization() { let key_package = samples::key_package(); let json = serde_json::to_string_pretty(&key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_key_package: KeyPackage = serde_json::from_str(&json).unwrap(); assert!(key_package == decoded_key_package); @@ -437,7 +437,7 @@ fn check_public_key_package_serialization() { let public_key_package = samples::public_key_package(); let json = serde_json::to_string_pretty(&public_key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(&json).unwrap(); assert!(public_key_package == decoded_public_key_package); @@ -516,7 +516,7 @@ fn check_round1_package_serialization() { let round1_package = samples::round1_package(); let json = serde_json::to_string_pretty(&round1_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round1_package: round1::Package = serde_json::from_str(&json).unwrap(); assert!(round1_package == decoded_round1_package); @@ -582,7 +582,7 @@ fn check_round2_package_serialization() { let round2_package = samples::round2_package(); let json = serde_json::to_string_pretty(&round2_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round2_package: round2::Package = serde_json::from_str(&json).unwrap(); assert!(round2_package == decoded_round2_package); diff --git a/frost-secp256k1-tr/Cargo.toml b/frost-secp256k1-tr/Cargo.toml index c9227fb3b..5337264b9 100644 --- a/frost-secp256k1-tr/Cargo.toml +++ b/frost-secp256k1-tr/Cargo.toml @@ -19,9 +19,10 @@ rustdoc-args = ["--cfg", "docsrs"] document-features.workspace = true frost-core.workspace = true frost-rerandomized.workspace = true -k256 = { version = "0.13.0", features = ["arithmetic", "expose-field", "hash2curve"], default-features = false } +k256 = { version = "0.14.0-rc.0", features = ["arithmetic", "expose-field", "hash2curve"], default-features = false } +hash2curve = "0.14.0-rc.3" rand_core.workspace = true -sha2 = { version = "0.10.2", default-features = false } +sha2 = { version = "0.11.0-rc.2", default-features = false } [dev-dependencies] criterion.workspace = true diff --git a/frost-secp256k1-tr/README.md b/frost-secp256k1-tr/README.md index 26e287012..6fd561b07 100644 --- a/frost-secp256k1-tr/README.md +++ b/frost-secp256k1-tr/README.md @@ -11,9 +11,10 @@ scenario in a single thread and it abstracts away any communication between peer ```rust # // ANCHOR: tkg_gen use frost_secp256k1_tr as frost; +use rand_core::TryRngCore; use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; let (shares, pubkey_package) = frost::keys::generate_with_dealer( diff --git a/frost-secp256k1-tr/benches/bench.rs b/frost-secp256k1-tr/benches/bench.rs index d2ce56f2a..be4da3a81 100644 --- a/frost-secp256k1-tr/benches/bench.rs +++ b/frost-secp256k1-tr/benches/bench.rs @@ -1,15 +1,16 @@ use criterion::{criterion_group, criterion_main, Criterion}; use frost_secp256k1_tr::*; +use rand_core::TryRngCore; fn bench_secp256k1_batch_verify(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_batch_verify::(c, "secp256k1", &mut rng); } fn bench_secp256k1_sign(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_sign::(c, "secp256k1", &mut rng); } diff --git a/frost-secp256k1-tr/dkg.md b/frost-secp256k1-tr/dkg.md index 31a96acf8..e4db08439 100644 --- a/frost-secp256k1-tr/dkg.md +++ b/frost-secp256k1-tr/dkg.md @@ -26,12 +26,11 @@ they can proceed to sign messages with FROST. ```rust # // ANCHOR: dkg_import -use std::collections::BTreeMap; - use frost_secp256k1_tr as frost; +use rand_core::TryRngCore; +use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; - +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; # // ANCHOR_END: dkg_import diff --git a/frost-secp256k1-tr/src/keys/repairable.rs b/frost-secp256k1-tr/src/keys/repairable.rs index 44543354c..63c1c1b1a 100644 --- a/frost-secp256k1-tr/src/keys/repairable.rs +++ b/frost-secp256k1-tr/src/keys/repairable.rs @@ -56,13 +56,11 @@ pub fn repair_share_step_3( #[cfg(test)] mod tests { - + use crate::Secp256K1Sha256TR; use lazy_static::lazy_static; - + use rand_core::TryRngCore; use serde_json::Value; - use crate::Secp256K1Sha256TR; - lazy_static! { pub static ref REPAIR_SHARE: Value = serde_json::from_str(include_str!("../../tests/helpers/repair-share.json").trim()) @@ -71,7 +69,7 @@ mod tests { #[test] fn check_repair_share_step_1() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1::(rng); } @@ -85,7 +83,7 @@ mod tests { #[test] fn check_repair_share_step_3() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_3::( rng, &REPAIR_SHARE, @@ -94,7 +92,7 @@ mod tests { #[test] fn check_repair_share_step_1_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1_fails_with_invalid_min_signers::< Secp256K1Sha256TR, _, diff --git a/frost-secp256k1-tr/src/lib.rs b/frost-secp256k1-tr/src/lib.rs index cc012d019..4df6cec90 100644 --- a/frost-secp256k1-tr/src/lib.rs +++ b/frost-secp256k1-tr/src/lib.rs @@ -8,21 +8,23 @@ extern crate alloc; +use core::ops::DerefMut; + use alloc::vec; use alloc::{borrow::Cow, collections::BTreeMap, vec::Vec}; use frost_rerandomized::RandomizedCiphersuite; +use hash2curve::{hash_to_field, ExpandMsgXmd, MapToCurve}; use k256::elliptic_curve::ops::Reduce; use k256::{ elliptic_curve::{ bigint::U256, group::prime::PrimeCurveAffine, - hash2curve::{hash_to_field, ExpandMsgXmd}, point::AffineCoordinates, sec1::{FromEncodedPoint, ToEncodedPoint}, Field as FFField, PrimeField, }, - AffinePoint, ProjectivePoint, Scalar, + AffinePoint, ProjectivePoint, Scalar, Secp256k1, }; use rand_core::{CryptoRng, RngCore}; use sha2::{Digest, Sha256}; @@ -168,9 +170,14 @@ fn hash_to_array(inputs: &[&[u8]]) -> [u8; 32] { } fn hash_to_scalar(domain: &[&[u8]], msg: &[u8]) -> Scalar { - let mut u = [Secp256K1ScalarField::zero()]; - hash_to_field::, Scalar>(&[msg], domain, &mut u) - .expect("should never return error according to error cases described in ExpandMsgXmd"); + let u = hash_to_field::< + 1, + ExpandMsgXmd, + ::SecurityLevel, + Scalar, + ::Length, + >(&[msg], domain) + .expect("should never return error according to error cases described in ExpandMsgXmd"); u[0] } @@ -188,7 +195,7 @@ fn hasher_to_scalar(hasher: Sha256) -> Scalar { // This is acceptable because secp256k1 curve order is close to 2^256, // and the input is uniformly random since it is a hash output, therefore // the bias is negligibly small. - Scalar::reduce(U256::from_be_slice(&hasher.finalize())) + Scalar::reduce(&U256::from_be_slice(&hasher.finalize())) } /// Create a BIP340 compliant tagged hash @@ -295,7 +302,7 @@ impl Ciphersuite for Secp256K1Sha256TR { } // Sign, negating the key if required by BIP-340. - fn single_sign( + fn single_sign( signing_key: &SigningKey, rng: R, message: &[u8], diff --git a/frost-secp256k1-tr/src/tests/batch.rs b/frost-secp256k1-tr/src/tests/batch.rs index d22efdf5d..8d8e0b06b 100644 --- a/frost-secp256k1-tr/src/tests/batch.rs +++ b/frost-secp256k1-tr/src/tests/batch.rs @@ -1,22 +1,23 @@ use crate::*; +use rand_core::TryRngCore; #[test] fn check_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::batch_verify::(rng); } #[test] fn check_bad_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::bad_batch_verify::(rng); } #[test] fn empty_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::empty_batch_verify::(rng); } diff --git a/frost-secp256k1-tr/src/tests/coefficient_commitment.rs b/frost-secp256k1-tr/src/tests/coefficient_commitment.rs index 71706ea62..7e760fc44 100644 --- a/frost-secp256k1-tr/src/tests/coefficient_commitment.rs +++ b/frost-secp256k1-tr/src/tests/coefficient_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,7 +13,7 @@ lazy_static! { #[test] fn check_serialization_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_serialization_of_coefficient_commitment::< Secp256K1Sha256TR, _, @@ -21,7 +22,7 @@ fn check_serialization_of_coefficient_commitment() { #[test] fn check_create_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_create_coefficient_commitment::< Secp256K1Sha256TR, _, @@ -36,7 +37,7 @@ fn check_create_coefficient_commitment_error() { #[test] fn check_get_value_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_get_value_of_coefficient_commitment::< Secp256K1Sha256TR, diff --git a/frost-secp256k1-tr/src/tests/vss_commitment.rs b/frost-secp256k1-tr/src/tests/vss_commitment.rs index f264c3328..af572ca6e 100644 --- a/frost-secp256k1-tr/src/tests/vss_commitment.rs +++ b/frost-secp256k1-tr/src/tests/vss_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,13 +13,13 @@ lazy_static! { #[test] fn check_serialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_vss_commitment::(rng); } #[test] fn check_serialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_whole_vss_commitment::( rng, ); @@ -26,7 +27,7 @@ fn check_serialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment::( rng, ); @@ -34,7 +35,7 @@ fn check_deserialize_vss_commitment() { #[test] fn check_deserialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment::( rng, ); @@ -42,7 +43,7 @@ fn check_deserialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment_error::( rng, &ELEMENTS, ); @@ -50,7 +51,7 @@ fn check_deserialize_vss_commitment_error() { #[test] fn check_deserialize_whole_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment_error::< Secp256K1Sha256TR, _, @@ -59,7 +60,7 @@ fn check_deserialize_whole_vss_commitment_error() { #[test] fn check_compute_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_compute_public_key_package::( rng, ); diff --git a/frost-secp256k1-tr/tests/common_traits_tests.rs b/frost-secp256k1-tr/tests/common_traits_tests.rs index 93265b7a8..cc38a7b39 100644 --- a/frost-secp256k1-tr/tests/common_traits_tests.rs +++ b/frost-secp256k1-tr/tests/common_traits_tests.rs @@ -4,12 +4,13 @@ mod helpers; use frost_secp256k1_tr::SigningKey; use helpers::samples; +use rand_core::TryRngCore; #[allow(clippy::unnecessary_literal_unwrap)] fn check_common_traits_for_type(v: T) { // Make sure can be debug-printed. This also catches if the Debug does not // have an endless recursion (a popular mistake). - println!("{:?}", v); + println!("{v:?}"); // Test Clone and Eq assert_eq!(v, v.clone()); // Make sure it can be unwrapped in a Result (which requires Debug). @@ -19,7 +20,7 @@ fn check_common_traits_for_type(v: #[test] fn check_signing_key_common_traits() { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); let signing_key = SigningKey::new(&mut rng); check_common_traits_for_type(signing_key); } diff --git a/frost-secp256k1-tr/tests/integration_tests.rs b/frost-secp256k1-tr/tests/integration_tests.rs index 4933040a3..16eac6220 100644 --- a/frost-secp256k1-tr/tests/integration_tests.rs +++ b/frost-secp256k1-tr/tests/integration_tests.rs @@ -1,5 +1,6 @@ use frost_secp256k1_tr::*; use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; #[test] @@ -9,14 +10,14 @@ fn check_zero_key_fails() { #[test] fn check_sign_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dkg::(rng); } #[test] fn check_dkg_part1_fails_with_invalid_signers_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -30,7 +31,7 @@ fn check_dkg_part1_fails_with_invalid_signers_min_signers() { #[test] fn check_dkg_part1_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -44,7 +45,7 @@ fn check_dkg_part1_fails_with_min_signers_greater_than_max() { #[test] fn check_dkg_part1_fails_with_invalid_signers_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -58,21 +59,21 @@ fn check_dkg_part1_fails_with_invalid_signers_max_signers() { #[test] fn check_rts() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_rts::(rng); } #[test] fn check_refresh_shares_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer::(rng); } #[test] fn check_refresh_shares_with_dealer_serialisation() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_serialisation::< Secp256K1Sha256TR, @@ -82,7 +83,7 @@ fn check_refresh_shares_with_dealer_serialisation() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_invalid_public_key_package::< Secp256K1Sha256TR, @@ -92,7 +93,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -111,7 +112,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -130,7 +131,7 @@ fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_s #[test] fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -149,7 +150,7 @@ fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![Identifier::try_from(1).unwrap()]; let min_signers = 3; let max_signers = 1; @@ -163,7 +164,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(8).unwrap(), Identifier::try_from(3).unwrap(), @@ -182,7 +183,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { #[test] fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_different_min_signers::< Secp256K1Sha256TR, @@ -192,14 +193,14 @@ fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { #[test] fn check_refresh_shares_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg::(rng); } #[test] fn check_refresh_shares_with_dkg_smaller_threshold() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg_smaller_threshold::< Secp256K1Sha256TR, @@ -209,14 +210,14 @@ fn check_refresh_shares_with_dkg_smaller_threshold() { #[test] fn check_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer::(rng); } #[test] fn check_sign_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -230,7 +231,7 @@ fn check_sign_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -244,7 +245,7 @@ fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_sign_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -260,13 +261,13 @@ fn check_sign_with_dealer_fails_with_invalid_max_signers() { /// value is working. #[test] fn check_share_generation_secp256k1_tr_sha256() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_share_generation::(rng); } #[test] fn check_share_generation_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 0; let max_signers = 3; @@ -280,7 +281,7 @@ fn check_share_generation_fails_with_invalid_min_signers() { #[test] fn check_share_generation_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -294,7 +295,7 @@ fn check_share_generation_fails_with_min_signers_greater_than_max() { #[test] fn check_share_generation_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 0; @@ -358,7 +359,7 @@ fn check_identifier_generation() -> Result<(), Error> { #[test] fn check_sign_with_dealer_and_identifiers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer_and_identifiers::< Secp256K1Sha256TR, @@ -368,7 +369,7 @@ fn check_sign_with_dealer_and_identifiers() { #[test] fn check_sign_with_missing_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_missing_identifier::< Secp256K1Sha256TR, _, @@ -377,7 +378,7 @@ fn check_sign_with_missing_identifier() { #[test] fn check_sign_with_incorrect_commitments() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_incorrect_commitments::< Secp256K1Sha256TR, _, diff --git a/frost-secp256k1-tr/tests/interoperability_tests.rs b/frost-secp256k1-tr/tests/interoperability_tests.rs index 5be7f623d..eddd2781b 100644 --- a/frost-secp256k1-tr/tests/interoperability_tests.rs +++ b/frost-secp256k1-tr/tests/interoperability_tests.rs @@ -1,24 +1,24 @@ -use frost_secp256k1_tr::*; - use crate::Secp256K1Sha256TR; +use frost_secp256k1_tr::*; +use rand_core::TryRngCore; mod helpers; #[test] fn check_interoperability_in_regular_sign() { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); for _ in 0..256 { let signing_key = SigningKey::new(&mut rng); let verifying_key = signing_key.into(); - let signature = signing_key.sign(rng, b"message"); + let signature = signing_key.sign(&mut rng, b"message"); helpers::verify_signature(b"message", &signature, &verifying_key); } } #[test] fn check_interoperability_in_sign_with_dkg() { - let rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); // Test with multiple keys/signatures to better exercise the key generation // and the interoperability check. A smaller number of iterations is used @@ -26,7 +26,7 @@ fn check_interoperability_in_sign_with_dkg() { for _ in 0..32 { let (message, group_signature, group_pubkey) = frost_core::tests::ciphersuite_generic::check_sign_with_dkg::( - rng, + &mut rng, ); helpers::verify_signature(&message, &group_signature, &group_pubkey); @@ -35,14 +35,14 @@ fn check_interoperability_in_sign_with_dkg() { #[test] fn check_interoperability_in_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); // Test with multiple keys/signatures to better exercise the key generation // and the interoperability check. for _ in 0..256 { let (message, group_signature, group_pubkey) = frost_core::tests::ciphersuite_generic::check_sign_with_dealer::( - rng, + &mut rng, ); // Check that the threshold signature can be verified by the `ed25519_dalek` crate diff --git a/frost-secp256k1-tr/tests/rerandomized_tests.rs b/frost-secp256k1-tr/tests/rerandomized_tests.rs index 7b4144c9b..095e8e99b 100644 --- a/frost-secp256k1-tr/tests/rerandomized_tests.rs +++ b/frost-secp256k1-tr/tests/rerandomized_tests.rs @@ -1,8 +1,9 @@ use frost_secp256k1_tr::Secp256K1Sha256TR; +use rand_core::TryRngCore; #[test] fn check_randomized_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let (_msg, _group_signature, _group_pubkey) = frost_rerandomized::tests::check_randomized_sign_with_dealer::(rng); diff --git a/frost-secp256k1-tr/tests/serde_tests.rs b/frost-secp256k1-tr/tests/serde_tests.rs index 62a70e70c..671e5946f 100644 --- a/frost-secp256k1-tr/tests/serde_tests.rs +++ b/frost-secp256k1-tr/tests/serde_tests.rs @@ -19,7 +19,7 @@ fn check_signing_commitments_serialization() { let commitments = samples::signing_commitments(); let json = serde_json::to_string_pretty(&commitments).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_commitments: SigningCommitments = serde_json::from_str(&json).unwrap(); assert!(commitments == decoded_commitments); @@ -89,7 +89,7 @@ fn check_signing_package_serialization() { let signing_package = samples::signing_package(); let json = serde_json::to_string_pretty(&signing_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signing_package: SigningPackage = serde_json::from_str(&json).unwrap(); assert!(signing_package == decoded_signing_package); @@ -204,7 +204,7 @@ fn check_signature_share_serialization() { let signature_share = samples::signature_share(); let json = serde_json::to_string_pretty(&signature_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signature_share: SignatureShare = serde_json::from_str(&json).unwrap(); assert!(signature_share == decoded_signature_share); @@ -258,7 +258,7 @@ fn check_secret_share_serialization() { let secret_share = samples::secret_share(); let json = serde_json::to_string_pretty(&secret_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_secret_share: SecretShare = serde_json::from_str(&json).unwrap(); assert!(secret_share == decoded_secret_share); @@ -342,7 +342,7 @@ fn check_key_package_serialization() { let key_package = samples::key_package(); let json = serde_json::to_string_pretty(&key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_key_package: KeyPackage = serde_json::from_str(&json).unwrap(); assert!(key_package == decoded_key_package); @@ -437,7 +437,7 @@ fn check_public_key_package_serialization() { let public_key_package = samples::public_key_package(); let json = serde_json::to_string_pretty(&public_key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(&json).unwrap(); assert!(public_key_package == decoded_public_key_package); @@ -516,7 +516,7 @@ fn check_round1_package_serialization() { let round1_package = samples::round1_package(); let json = serde_json::to_string_pretty(&round1_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round1_package: round1::Package = serde_json::from_str(&json).unwrap(); assert!(round1_package == decoded_round1_package); @@ -582,7 +582,7 @@ fn check_round2_package_serialization() { let round2_package = samples::round2_package(); let json = serde_json::to_string_pretty(&round2_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round2_package: round2::Package = serde_json::from_str(&json).unwrap(); assert!(round2_package == decoded_round2_package); diff --git a/frost-secp256k1-tr/tests/tweaking_tests.rs b/frost-secp256k1-tr/tests/tweaking_tests.rs index dddbed12b..35afa15a2 100644 --- a/frost-secp256k1-tr/tests/tweaking_tests.rs +++ b/frost-secp256k1-tr/tests/tweaking_tests.rs @@ -3,6 +3,7 @@ use std::{error::Error, vec}; use k256::elliptic_curve::point::AffineCoordinates; use k256::ProjectivePoint; use keys::Tweak; +use rand_core::TryRngCore; use sha2::{Digest, Sha256}; use frost_secp256k1_tr::*; @@ -17,7 +18,7 @@ fn check_tweaked_sign_with_dealer() -> Result<(), Box> { let merkle_root: Vec = vec![12; 32]; - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; let (shares, pubkey_package) = frost::keys::generate_with_dealer( @@ -137,7 +138,7 @@ fn taproot_tweak_pubkey(pubkey: [u8; 32], merkle_root: &[u8]) -> (bool, [u8; 32] .chain_update(merkle_root) .finalize(); let t = k256::Scalar::from( - k256::elliptic_curve::ScalarPrimitive::new(k256::U256::from_be_slice(&tweak_hash)).unwrap(), + k256::elliptic_curve::ScalarValue::new(k256::U256::from_be_slice(&tweak_hash)).unwrap(), ); let mut pubkey_even_bytes = [0x02; 33]; diff --git a/frost-secp256k1/Cargo.toml b/frost-secp256k1/Cargo.toml index 30e20d578..63ab89928 100644 --- a/frost-secp256k1/Cargo.toml +++ b/frost-secp256k1/Cargo.toml @@ -19,9 +19,10 @@ rustdoc-args = ["--cfg", "docsrs"] document-features.workspace = true frost-core.workspace = true frost-rerandomized.workspace = true -k256 = { version = "0.13.0", features = ["arithmetic", "expose-field", "hash2curve"], default-features = false } +k256 = { version = "0.14.0-rc.0", features = ["arithmetic", "expose-field", "hash2curve"], default-features = false } +hash2curve = "0.14.0-rc.3" rand_core.workspace = true -sha2 = { version = "0.10.2", default-features = false } +sha2 = { version = "0.11.0-rc.2", default-features = false } [dev-dependencies] criterion.workspace = true diff --git a/frost-secp256k1/README.md b/frost-secp256k1/README.md index bdec1acb7..e329b5558 100644 --- a/frost-secp256k1/README.md +++ b/frost-secp256k1/README.md @@ -11,9 +11,10 @@ scenario in a single thread and it abstracts away any communication between peer ```rust # // ANCHOR: tkg_gen use frost_secp256k1 as frost; +use rand_core::TryRngCore; use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; let (shares, pubkey_package) = frost::keys::generate_with_dealer( diff --git a/frost-secp256k1/benches/bench.rs b/frost-secp256k1/benches/bench.rs index cd89e8e2d..ab92988f9 100644 --- a/frost-secp256k1/benches/bench.rs +++ b/frost-secp256k1/benches/bench.rs @@ -1,15 +1,16 @@ use criterion::{criterion_group, criterion_main, Criterion}; use frost_secp256k1::*; +use rand_core::TryRngCore; fn bench_secp256k1_batch_verify(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_batch_verify::(c, "secp256k1", &mut rng); } fn bench_secp256k1_sign(c: &mut Criterion) { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); frost_core::benches::bench_sign::(c, "secp256k1", &mut rng); } diff --git a/frost-secp256k1/dkg.md b/frost-secp256k1/dkg.md index 24c6a5352..3915b3e96 100644 --- a/frost-secp256k1/dkg.md +++ b/frost-secp256k1/dkg.md @@ -26,12 +26,11 @@ they can proceed to sign messages with FROST. ```rust # // ANCHOR: dkg_import -use std::collections::BTreeMap; - use frost_secp256k1 as frost; +use rand_core::TryRngCore; +use std::collections::BTreeMap; -let mut rng = rand::rngs::OsRng; - +let mut rng = rand::rngs::OsRng.unwrap_err(); let max_signers = 5; let min_signers = 3; # // ANCHOR_END: dkg_import diff --git a/frost-secp256k1/src/keys/repairable.rs b/frost-secp256k1/src/keys/repairable.rs index 98a2e7c51..ef21a3bd8 100644 --- a/frost-secp256k1/src/keys/repairable.rs +++ b/frost-secp256k1/src/keys/repairable.rs @@ -56,13 +56,11 @@ pub fn repair_share_step_3( #[cfg(test)] mod tests { - + use crate::Secp256K1Sha256; use lazy_static::lazy_static; - + use rand_core::TryRngCore; use serde_json::Value; - use crate::Secp256K1Sha256; - lazy_static! { pub static ref REPAIR_SHARE: Value = serde_json::from_str(include_str!("../../tests/helpers/repair-share.json").trim()) @@ -71,7 +69,7 @@ mod tests { #[test] fn check_repair_share_step_1() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1::(rng); } @@ -83,7 +81,7 @@ mod tests { #[test] fn check_repair_share_step_3() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_3::( rng, &REPAIR_SHARE, @@ -92,7 +90,7 @@ mod tests { #[test] fn check_repair_share_step_1_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_repair_share_step_1_fails_with_invalid_min_signers::< Secp256K1Sha256, _, diff --git a/frost-secp256k1/src/lib.rs b/frost-secp256k1/src/lib.rs index ee9b87a77..7d32ce58e 100644 --- a/frost-secp256k1/src/lib.rs +++ b/frost-secp256k1/src/lib.rs @@ -11,14 +11,14 @@ extern crate alloc; use alloc::collections::BTreeMap; use frost_rerandomized::RandomizedCiphersuite; +use hash2curve::{hash_to_field, ExpandMsgXmd, MapToCurve}; use k256::{ elliptic_curve::{ group::prime::PrimeCurveAffine, - hash2curve::{hash_to_field, ExpandMsgXmd}, sec1::{FromEncodedPoint, ToEncodedPoint}, Field as FFField, PrimeField, }, - AffinePoint, ProjectivePoint, Scalar, + AffinePoint, ProjectivePoint, Scalar, Secp256k1, }; use rand_core::{CryptoRng, RngCore}; use sha2::{Digest, Sha256}; @@ -159,9 +159,14 @@ fn hash_to_array(inputs: &[&[u8]]) -> [u8; 32] { } fn hash_to_scalar(domain: &[&[u8]], msg: &[u8]) -> Scalar { - let mut u = [Secp256K1ScalarField::zero()]; - hash_to_field::, Scalar>(&[msg], domain, &mut u) - .expect("should never return error according to error cases described in ExpandMsgXmd"); + let u = hash_to_field::< + 1, + ExpandMsgXmd, + ::SecurityLevel, + Scalar, + ::Length, + >(&[msg], domain) + .expect("should never return error according to error cases described in ExpandMsgXmd"); u[0] } diff --git a/frost-secp256k1/src/tests/batch.rs b/frost-secp256k1/src/tests/batch.rs index d3b1c6800..0762b1144 100644 --- a/frost-secp256k1/src/tests/batch.rs +++ b/frost-secp256k1/src/tests/batch.rs @@ -1,22 +1,23 @@ use crate::*; +use rand_core::TryRngCore; #[test] fn check_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::batch_verify::(rng); } #[test] fn check_bad_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::bad_batch_verify::(rng); } #[test] fn empty_batch_verify() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::batch::empty_batch_verify::(rng); } diff --git a/frost-secp256k1/src/tests/coefficient_commitment.rs b/frost-secp256k1/src/tests/coefficient_commitment.rs index 7be35ead6..86e686548 100644 --- a/frost-secp256k1/src/tests/coefficient_commitment.rs +++ b/frost-secp256k1/src/tests/coefficient_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,7 +13,7 @@ lazy_static! { #[test] fn check_serialization_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_serialization_of_coefficient_commitment::< Secp256K1Sha256, _, @@ -21,7 +22,7 @@ fn check_serialization_of_coefficient_commitment() { #[test] fn check_create_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_create_coefficient_commitment::< Secp256K1Sha256, _, @@ -36,7 +37,7 @@ fn check_create_coefficient_commitment_error() { #[test] fn check_get_value_of_coefficient_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::coefficient_commitment::check_get_value_of_coefficient_commitment::< Secp256K1Sha256, diff --git a/frost-secp256k1/src/tests/vss_commitment.rs b/frost-secp256k1/src/tests/vss_commitment.rs index 79aa89a65..fa26df80e 100644 --- a/frost-secp256k1/src/tests/vss_commitment.rs +++ b/frost-secp256k1/src/tests/vss_commitment.rs @@ -1,4 +1,5 @@ use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; use crate::*; @@ -12,13 +13,13 @@ lazy_static! { #[test] fn check_serialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_vss_commitment::(rng); } #[test] fn check_serialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_serialize_whole_vss_commitment::( rng, ); @@ -26,13 +27,13 @@ fn check_serialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment::(rng); } #[test] fn check_deserialize_whole_vss_commitment() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment::( rng, ); @@ -40,7 +41,7 @@ fn check_deserialize_whole_vss_commitment() { #[test] fn check_deserialize_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_vss_commitment_error::( rng, &ELEMENTS, ); @@ -48,7 +49,7 @@ fn check_deserialize_vss_commitment_error() { #[test] fn check_deserialize_whole_vss_commitment_error() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_deserialize_whole_vss_commitment_error::< Secp256K1Sha256, _, @@ -57,6 +58,6 @@ fn check_deserialize_whole_vss_commitment_error() { #[test] fn check_compute_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::vss_commitment::check_compute_public_key_package::(rng); } diff --git a/frost-secp256k1/tests/common_traits_tests.rs b/frost-secp256k1/tests/common_traits_tests.rs index e9f788eb1..e2b99ea68 100644 --- a/frost-secp256k1/tests/common_traits_tests.rs +++ b/frost-secp256k1/tests/common_traits_tests.rs @@ -4,12 +4,13 @@ mod helpers; use frost_secp256k1::SigningKey; use helpers::samples; +use rand_core::TryRngCore; #[allow(clippy::unnecessary_literal_unwrap)] fn check_common_traits_for_type(v: T) { // Make sure can be debug-printed. This also catches if the Debug does not // have an endless recursion (a popular mistake). - println!("{:?}", v); + println!("{v:?}"); // Test Clone and Eq assert_eq!(v, v.clone()); // Make sure it can be unwrapped in a Result (which requires Debug). @@ -19,7 +20,7 @@ fn check_common_traits_for_type(v: #[test] fn check_signing_key_common_traits() { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rngs::OsRng.unwrap_err(); let signing_key = SigningKey::new(&mut rng); check_common_traits_for_type(signing_key); } diff --git a/frost-secp256k1/tests/integration_tests.rs b/frost-secp256k1/tests/integration_tests.rs index 0356b0a7c..c3f7b6a0f 100644 --- a/frost-secp256k1/tests/integration_tests.rs +++ b/frost-secp256k1/tests/integration_tests.rs @@ -1,5 +1,6 @@ use frost_secp256k1::*; use lazy_static::lazy_static; +use rand_core::TryRngCore; use serde_json::Value; #[test] @@ -9,14 +10,14 @@ fn check_zero_key_fails() { #[test] fn check_sign_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dkg::(rng); } #[test] fn check_dkg_part1_fails_with_invalid_signers_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -30,7 +31,7 @@ fn check_dkg_part1_fails_with_invalid_signers_min_signers() { #[test] fn check_dkg_part1_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -44,7 +45,7 @@ fn check_dkg_part1_fails_with_min_signers_greater_than_max() { #[test] fn check_dkg_part1_fails_with_invalid_signers_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -58,21 +59,21 @@ fn check_dkg_part1_fails_with_invalid_signers_max_signers() { #[test] fn check_rts() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::repairable::check_rts::(rng); } #[test] fn check_refresh_shares_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer::(rng); } #[test] fn check_refresh_shares_with_dealer_serialisation() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_serialisation::( rng, @@ -81,7 +82,7 @@ fn check_refresh_shares_with_dealer_serialisation() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_invalid_public_key_package::< Secp256K1Sha256, @@ -91,7 +92,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_public_key_package() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -110,7 +111,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -129,7 +130,7 @@ fn check_refresh_shares_with_dealer_fails_with_unequal_num_identifiers_and_max_s #[test] fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(1).unwrap(), Identifier::try_from(3).unwrap(), @@ -148,7 +149,7 @@ fn check_refresh_shares_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![Identifier::try_from(1).unwrap()]; let min_signers = 3; let max_signers = 1; @@ -162,7 +163,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_max_signers() { #[test] fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let identifiers = vec![ Identifier::try_from(8).unwrap(), Identifier::try_from(3).unwrap(), @@ -181,7 +182,7 @@ fn check_refresh_shares_with_dealer_fails_with_invalid_identifier() { #[test] fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dealer_fails_with_different_min_signers::< Secp256K1Sha256, @@ -191,14 +192,14 @@ fn check_refresh_shares_with_dealer_fails_with_different_min_signers() { #[test] fn check_refresh_shares_with_dkg() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg::(rng); } #[test] fn check_refresh_shares_with_dkg_smaller_threshold() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::refresh::check_refresh_shares_with_dkg_smaller_threshold::( rng, @@ -207,14 +208,14 @@ fn check_refresh_shares_with_dkg_smaller_threshold() { #[test] fn check_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer::(rng); } #[test] fn check_sign_with_dealer_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 1; let max_signers = 3; @@ -228,7 +229,7 @@ fn check_sign_with_dealer_fails_with_invalid_min_signers() { #[test] fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -242,7 +243,7 @@ fn check_sign_with_dealer_fails_with_min_signers_greater_than_max() { #[test] fn check_sign_with_dealer_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 1; @@ -258,13 +259,13 @@ fn check_sign_with_dealer_fails_with_invalid_max_signers() { /// value is working. #[test] fn check_share_generation_secp256k1_sha256() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_share_generation::(rng); } #[test] fn check_share_generation_fails_with_invalid_min_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 0; let max_signers = 3; @@ -278,7 +279,7 @@ fn check_share_generation_fails_with_invalid_min_signers() { #[test] fn check_share_generation_fails_with_min_signers_greater_than_max() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 2; @@ -292,7 +293,7 @@ fn check_share_generation_fails_with_min_signers_greater_than_max() { #[test] fn check_share_generation_fails_with_invalid_max_signers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let min_signers = 3; let max_signers = 0; @@ -356,7 +357,7 @@ fn check_identifier_generation() -> Result<(), Error> { #[test] fn check_sign_with_dealer_and_identifiers() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_dealer_and_identifiers::< Secp256K1Sha256, @@ -366,7 +367,7 @@ fn check_sign_with_dealer_and_identifiers() { #[test] fn check_sign_with_missing_identifier() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_missing_identifier::( rng, ); @@ -374,7 +375,7 @@ fn check_sign_with_missing_identifier() { #[test] fn check_sign_with_incorrect_commitments() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); frost_core::tests::ciphersuite_generic::check_sign_with_incorrect_commitments::< Secp256K1Sha256, _, diff --git a/frost-secp256k1/tests/rerandomized_tests.rs b/frost-secp256k1/tests/rerandomized_tests.rs index c7845f170..e8fec0cce 100644 --- a/frost-secp256k1/tests/rerandomized_tests.rs +++ b/frost-secp256k1/tests/rerandomized_tests.rs @@ -1,8 +1,9 @@ use frost_secp256k1::Secp256K1Sha256; +use rand_core::TryRngCore; #[test] fn check_randomized_sign_with_dealer() { - let rng = rand::rngs::OsRng; + let rng = rand::rngs::OsRng.unwrap_err(); let (_msg, _group_signature, _group_pubkey) = frost_rerandomized::tests::check_randomized_sign_with_dealer::(rng); diff --git a/frost-secp256k1/tests/serde_tests.rs b/frost-secp256k1/tests/serde_tests.rs index 82a0735d4..8e87fcd5c 100644 --- a/frost-secp256k1/tests/serde_tests.rs +++ b/frost-secp256k1/tests/serde_tests.rs @@ -19,7 +19,7 @@ fn check_signing_commitments_serialization() { let commitments = samples::signing_commitments(); let json = serde_json::to_string_pretty(&commitments).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_commitments: SigningCommitments = serde_json::from_str(&json).unwrap(); assert!(commitments == decoded_commitments); @@ -89,7 +89,7 @@ fn check_signing_package_serialization() { let signing_package = samples::signing_package(); let json = serde_json::to_string_pretty(&signing_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signing_package: SigningPackage = serde_json::from_str(&json).unwrap(); assert!(signing_package == decoded_signing_package); @@ -204,7 +204,7 @@ fn check_signature_share_serialization() { let signature_share = samples::signature_share(); let json = serde_json::to_string_pretty(&signature_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_signature_share: SignatureShare = serde_json::from_str(&json).unwrap(); assert!(signature_share == decoded_signature_share); @@ -258,7 +258,7 @@ fn check_secret_share_serialization() { let secret_share = samples::secret_share(); let json = serde_json::to_string_pretty(&secret_share).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_secret_share: SecretShare = serde_json::from_str(&json).unwrap(); assert!(secret_share == decoded_secret_share); @@ -342,7 +342,7 @@ fn check_key_package_serialization() { let key_package = samples::key_package(); let json = serde_json::to_string_pretty(&key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_key_package: KeyPackage = serde_json::from_str(&json).unwrap(); assert!(key_package == decoded_key_package); @@ -437,7 +437,7 @@ fn check_public_key_package_serialization() { let public_key_package = samples::public_key_package(); let json = serde_json::to_string_pretty(&public_key_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_public_key_package: PublicKeyPackage = serde_json::from_str(&json).unwrap(); assert!(public_key_package == decoded_public_key_package); @@ -516,7 +516,7 @@ fn check_round1_package_serialization() { let round1_package = samples::round1_package(); let json = serde_json::to_string_pretty(&round1_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round1_package: round1::Package = serde_json::from_str(&json).unwrap(); assert!(round1_package == decoded_round1_package); @@ -582,7 +582,7 @@ fn check_round2_package_serialization() { let round2_package = samples::round2_package(); let json = serde_json::to_string_pretty(&round2_package).unwrap(); - println!("{}", json); + println!("{json}"); let decoded_round2_package: round2::Package = serde_json::from_str(&json).unwrap(); assert!(round2_package == decoded_round2_package); diff --git a/gencode/src/main.rs b/gencode/src/main.rs index 8a420fca9..66f276dec 100644 --- a/gencode/src/main.rs +++ b/gencode/src/main.rs @@ -124,8 +124,7 @@ fn write_docs( let new_doc = docs.get(old_name).map(|v| v.1.clone()); let Some(new_doc) = new_doc else { eprintln!( - "WARNING: documentation for {} is not available in base file. This can mean it's a specific type for the ciphersuite, or that there is a bug in gencode", - old_name + "WARNING: documentation for {old_name} is not available in base file. This can mean it's a specific type for the ciphersuite, or that there is a bug in gencode", ); continue; }; diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 000000000..8153a3d0b --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1 @@ +style_edition = "2021"