From 853ccf7765d9eef7659275e08cff929ee29503af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 23:48:31 +0000 Subject: [PATCH 1/2] chore(deps): bump hex-literal from 0.4.1 to 1.0.0 Bumps [hex-literal](https://github.com/RustCrypto/utils) from 0.4.1 to 1.0.0. - [Commits](https://github.com/RustCrypto/utils/compare/hex-literal-v0.4.1...hex-literal-v1.0.0) --- updated-dependencies: - dependency-name: hex-literal dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 435405d..c009b50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -466,9 +466,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-literal" -version = "0.4.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +checksum = "bcaaec4551594c969335c98c903c1397853d4198408ea609190f420500f6be71" [[package]] name = "indexmap" diff --git a/Cargo.toml b/Cargo.toml index fda332c..7fcee36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ ark-ff ={ version="0.5", features=["std"] } ark-crypto-primitives={ version="0.5", features=["sponge"] } des ="0.8" chacha20 ="0.9" -hex-literal ="0.4" +hex-literal ="1.0" [[bin]] name="hmac_sha256_bin" From 94138b23842549aae19ed49f1ef00f2434e15942 Mon Sep 17 00:00:00 2001 From: Colin Roberts Date: Sat, 1 Mar 2025 06:18:56 -0700 Subject: [PATCH 2/2] update rand --- .gitignore | 2 +- Cargo.lock | 176 +++++++++++++++++-- Cargo.toml | 2 +- rust-toolchain.toml | 4 +- src/algebra/field/binary_towers/extension.rs | 4 +- src/algebra/field/binary_towers/tests.rs | 16 +- src/algebra/field/extension/gf_101_2.rs | 47 +++-- src/algebra/field/prime/arithmetic.rs | 8 +- src/algebra/field/prime/mod.rs | 10 +- src/algebra/group/prime.rs | 14 +- src/compiler/program.rs | 10 +- src/curve/pairing.rs | 24 +-- src/diffie_hellman/ecdh.rs | 8 +- src/diffie_hellman/tp_ecdh.rs | 16 +- src/dsa/ecdsa.rs | 10 +- src/dsa/eddsa/mod.rs | 4 +- src/dsa/eddsa/tests.rs | 10 +- src/encryption/symmetric/chacha/tests.rs | 12 +- src/encryption/symmetric/des/tests.rs | 22 +-- src/encryption/symmetric/modes/cbc.rs | 30 ++-- src/encryption/symmetric/modes/ctr.rs | 18 +- src/hashes/poseidon/tests/mod.rs | 21 ++- src/lib.rs | 9 +- src/sumcheck/mod.rs | 12 +- 24 files changed, 315 insertions(+), 174 deletions(-) diff --git a/.gitignore b/.gitignore index e52099e..e936ac3 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ cgt* # ignore instatiations of my test template # exclude compiled files and binaries debug/ target/ - +rustc-ice-* # vs code .vscode diff --git a/Cargo.lock b/Cargo.lock index c009b50..89cc43d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,7 +11,7 @@ dependencies = [ "cfg-if", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -196,7 +196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -211,6 +211,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "bitflags" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" + [[package]] name = "blake2" version = "0.10.6" @@ -278,7 +284,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d748d1f5b807ee6d0df5a548d0130417295c3aaed1dcbbb3d6a2e7106e11fcca" dependencies = [ "num-traits", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -440,7 +446,19 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", ] [[package]] @@ -536,7 +554,7 @@ checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ "byteorder", "keccak", - "rand_core", + "rand_core 0.6.4", "zeroize", ] @@ -598,7 +616,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -644,9 +662,19 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.2", + "zerocopy 0.8.21", ] [[package]] @@ -656,7 +684,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.2", ] [[package]] @@ -665,7 +703,17 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" +dependencies = [ + "getrandom 0.3.1", + "zerocopy 0.8.21", ] [[package]] @@ -717,7 +765,7 @@ dependencies = [ "itertools 0.14.0", "num-traits", "pretty_assertions", - "rand", + "rand 0.9.0", "regex", "rstest", "sha2", @@ -892,6 +940,79 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "winnow" version = "0.6.20" @@ -901,6 +1022,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags", +] + [[package]] name = "yansi" version = "1.0.1" @@ -914,7 +1044,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf01143b2dd5d134f11f545cf9f1431b13b749695cb33bcce051e7568f99478" +dependencies = [ + "zerocopy-derive 0.8.21", ] [[package]] @@ -928,6 +1067,17 @@ dependencies = [ "syn 2.0.91", ] +[[package]] +name = "zerocopy-derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712c8386f4f4299382c9abee219bee7084f78fb939d88b6840fcc1320d5f6da2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + [[package]] name = "zeroize" version = "1.8.1" diff --git a/Cargo.toml b/Cargo.toml index 7fcee36..5d8700f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ version ="0.1.1" exclude =["CHANGELOG.md", "assets/"] [dependencies] -rand ="0.8" +rand ="0.9" itertools ="0.14" hex ="0.4" crypto-bigint="0.6.0-rc.6" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 175afcc..888694d 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -3,9 +3,9 @@ [toolchain] # what toolchain to use. -channel="nightly-2024-06-10" +channel="nightly" # option to specify a date to pin to a particular release -# date = "2024-03-19" +date="2024-06-10" # profiles are groups of components to download when installing a toolchain. # https://rust-lang.github.io/rustup/concepts/profiles.html diff --git a/src/algebra/field/binary_towers/extension.rs b/src/algebra/field/binary_towers/extension.rs index fd435cf..902b1ca 100644 --- a/src/algebra/field/binary_towers/extension.rs +++ b/src/algebra/field/binary_towers/extension.rs @@ -6,8 +6,8 @@ use std::{ }; use rand::{ - distributions::{Distribution, Standard}, Rng, + distr::{Distribution, StandardUniform}, }; use super::{BinaryField, Field, Finite, FiniteField}; @@ -262,7 +262,7 @@ where } } -impl Distribution> for Standard +impl Distribution> for StandardUniform where [(); 1 << K]: { #[inline] diff --git a/src/algebra/field/binary_towers/tests.rs b/src/algebra/field/binary_towers/tests.rs index 97d7d8f..c98a1c4 100644 --- a/src/algebra/field/binary_towers/tests.rs +++ b/src/algebra/field/binary_towers/tests.rs @@ -1,4 +1,4 @@ -use rand::{thread_rng, Rng}; +use rand::{Rng, rng}; use rstest::rstest; use super::*; @@ -54,9 +54,9 @@ fn num_digit(#[case] num: u64, #[case] digits: usize) { #[test] fn add_sub_neg() { - let mut rng = thread_rng(); - let a = rng.gen::>(); - let b = rng.gen::>(); + let mut rng = rng(); + let a = rng.random::>(); + let b = rng.random::>(); assert_eq!(a + a, BinaryTowers::<3>::ZERO); assert_eq!(a + a, b + b); @@ -87,9 +87,9 @@ fn mul_div(#[case] a: BinaryTowers<3>, #[case] b: BinaryTowers<3>, #[case] res: #[test] fn small_by_large_mul() { - let mut rng = thread_rng(); + let mut rng = rng(); for _ in 0..100 { - let a = rng.gen::>(); + let a = rng.random::>(); let val = rng.gen_range(0..1 << (1 << 3)); @@ -111,8 +111,8 @@ fn small_by_large_mul() { #[test] fn efficient_embedding() { - let mut rng = thread_rng(); - let a = rng.gen::>(); + let mut rng = rng(); + let a = rng.random::>(); let (a1, a2) = a.into(); diff --git a/src/algebra/field/extension/gf_101_2.rs b/src/algebra/field/extension/gf_101_2.rs index a1ee314..a911ffc 100644 --- a/src/algebra/field/extension/gf_101_2.rs +++ b/src/algebra/field/extension/gf_101_2.rs @@ -8,7 +8,7 @@ //! verified by finding out embedding degree of the curve, i.e. smallest k such that r|q^k-1. use super::*; -use crate::{Distribution, Monomial, Polynomial, Rng, Standard}; +use crate::{Distribution, Monomial, Polynomial, Rng, StandardUniform}; impl ExtensionField<2, 101> for PlutoBaseFieldExtension { /// irreducible polynomial used to reduce field polynomials to second degree: @@ -70,11 +70,7 @@ impl PlutoBaseFieldExtension { let x0_inv = x0.inverse().expect("x0 must have an inverse"); let x1 = a1 * two_inv * x0_inv; let x = Self::new([x0, x1]); - if -x < x { - (-x, x) - } else { - (x, -x) - } + if -x < x { (-x, x) } else { (x, -x) } }) } } @@ -127,10 +123,11 @@ impl FiniteField for PlutoBaseFieldExtension { const PRIMITIVE_ELEMENT: Self = Self::new([PlutoBaseField::new(14), PlutoBaseField::new(9)]); } -impl Distribution> for Standard { +impl Distribution> for StandardUniform { #[inline] fn sample(&self, rng: &mut R) -> GaloisField { - let coeffs = (0..N).map(|_| rng.gen::>()).collect::>().try_into().unwrap(); + let coeffs = + (0..N).map(|_| rng.random::>()).collect::>().try_into().unwrap(); GaloisField::::new(coeffs) } } @@ -251,10 +248,10 @@ mod tests { #[test] fn add_sub_neg_mul() { - let mut rng = rand::thread_rng(); - let x = ::from(rng.gen::()); - let y = ::from(rng.gen::()); - let z = ::from(rng.gen::()); + let mut rng = rand::rng(); + let x = ::from(rng.random::()); + let y = ::from(rng.random::()); + let z = ::from(rng.random::()); assert_eq!(x + (-x), ::ZERO); assert_eq!(-x, ::ZERO - x); assert_eq!( @@ -273,8 +270,8 @@ mod tests { #[test] fn pow() { - let mut rng = rand::thread_rng(); - let x = ::from(rng.gen::()); + let mut rng = rand::rng(); + let x = ::from(rng.random::()); assert_eq!(x, x.pow(1)); @@ -284,24 +281,24 @@ mod tests { #[test] fn inv_div() { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); // Loop rng's until we get something with inverse. let mut x = ::ZERO; let mut x_inv = None; while x_inv.is_none() { - x = ::from(rng.gen::()); + x = ::from(rng.random::()); x_inv = x.inverse(); } let mut y = ::ZERO; let mut y_inv = None; while y_inv.is_none() { - y = ::from(rng.gen::()); + y = ::from(rng.random::()); y_inv = y.inverse(); } let mut z = ::ZERO; let mut z_inv = None; while z_inv.is_none() { - z = ::from(rng.gen::()); + z = ::from(rng.random::()); z_inv = z.inverse(); } assert_eq!(x * x.inverse().unwrap(), ::ONE); @@ -329,12 +326,12 @@ mod tests { #[test] fn add_sub_mul_subfield() { - let mut rng = rand::thread_rng(); - let x = ::from(rng.gen::()); + let mut rng = rand::rng(); + let x = ::from(rng.random::()); let mut y = ::ZERO; let mut y_inv = None; while y_inv.is_none() { - y = ::from(rng.gen::()); + y = ::from(rng.random::()); y_inv = y.inverse(); } @@ -362,8 +359,8 @@ mod tests { #[test] fn sqrt() { - let mut rng = rand::thread_rng(); - let x = ::from(rng.gen::()); + let mut rng = rand::rng(); + let x = ::from(rng.random::()); let x_sq = x.pow(2); let res = x_sq.sqrt(); @@ -371,8 +368,8 @@ mod tests { assert_eq!(res.unwrap().0 * res.unwrap().0, x * x); - let x_0 = rng.gen::(); - let x_1 = rng.gen::(); + let x_0 = rng.random::(); + let x_1 = rng.random::(); let x = ::new([x_0, x_1]); let x_sq = x.pow(2); diff --git a/src/algebra/field/prime/arithmetic.rs b/src/algebra/field/prime/arithmetic.rs index f2f32ef..b09465e 100644 --- a/src/algebra/field/prime/arithmetic.rs +++ b/src/algebra/field/prime/arithmetic.rs @@ -134,10 +134,10 @@ mod tests { } fn combined_arithmetic_check() { - let mut rng = rand::thread_rng(); - let x = rng.gen::>(); - let y = rng.gen::>(); - let z = rng.gen::>(); + let mut rng = rand::rng(); + let x = rng.random::>(); + let y = rng.random::>(); + let z = rng.random::>(); assert_eq!(x + (-x), >::ZERO); assert_eq!(-x, >::ZERO - x); assert_eq!(x + x, x * >::new(2)); diff --git a/src/algebra/field/prime/mod.rs b/src/algebra/field/prime/mod.rs index 8794f80..a8abd56 100644 --- a/src/algebra/field/prime/mod.rs +++ b/src/algebra/field/prime/mod.rs @@ -5,7 +5,7 @@ use std::{fmt, str::FromStr}; -use rand::{distributions::Standard, prelude::Distribution, Rng}; +use rand::{Rng, distr::StandardUniform, prelude::Distribution}; use super::*; use crate::algebra::Finite; @@ -210,7 +210,7 @@ impl fmt::Display for PrimeField

{ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.value) } } -impl Distribution> for Standard { +impl Distribution> for StandardUniform { #[inline] fn sample(&self, rng: &mut R) -> PrimeField

{ loop { @@ -251,11 +251,7 @@ impl From> for usize { impl From for PrimeField

{ fn from(value: i32) -> Self { let abs = Self::new(value.unsigned_abs() as usize); - if value.is_positive() { - abs - } else { - -abs - } + if value.is_positive() { abs } else { -abs } } } diff --git a/src/algebra/group/prime.rs b/src/algebra/group/prime.rs index b762050..6e80a44 100644 --- a/src/algebra/group/prime.rs +++ b/src/algebra/group/prime.rs @@ -99,20 +99,20 @@ mod tests { fn mul_group_properties() { type MulGroup = MultiplicativePrimeGroup<5, 2>; - let gen = MultiplicativePrimeGroup::<5, 2>::GENERATOR; + let generator = MultiplicativePrimeGroup::<5, 2>::GENERATORERATOR; let ident = MulGroup::IDENTITY; - println!("{:?}, {:?}, {}", gen, gen.inverse().unwrap(), MulGroup::ORDER); + println!("{:?}, {:?}, {}", generator, generator.inverse().unwrap(), MulGroup::ORDER); // commutativity - assert_eq!(gen + ident, ident + gen); + assert_eq!(generator + ident, ident + generator); // inverse - assert_eq!(gen + gen.inverse().unwrap(), ident); + assert_eq!(generator + generator.inverse().unwrap(), ident); // associativity - assert_eq!(gen + (ident + gen), (gen + gen) + ident); + assert_eq!(generator + (ident + generator), (generator + generator) + ident); // scalar multiplication - assert_eq!(gen * 2, gen + gen); + assert_eq!(generator * 2, generator + generator); // order - assert_eq!(gen.order(), MulGroup::ORDER); + assert_eq!(generator.order(), MulGroup::ORDER); } } diff --git a/src/compiler/program.rs b/src/compiler/program.rs index 76ba963..6dac925 100644 --- a/src/compiler/program.rs +++ b/src/compiler/program.rs @@ -14,10 +14,10 @@ use super::{ utils::get_product_key, }; use crate::{ + Field, PlutoScalarField, algebra::field::FiniteField, - compiler::parser::{parse_constraints, WireCoeffs}, + compiler::parser::{WireCoeffs, parse_constraints}, polynomial::{Lagrange, Polynomial}, - Field, PlutoScalarField, }; /// Column represents all three columns in the execution trace which a variable @@ -253,9 +253,9 @@ impl<'a, const GROUP_ORDER: usize> Program<'a, GROUP_ORDER> { /// Evaluates the circuit and fill intermediate variable assignments pub fn evaluate_circuit( - &'a self, - starting_assignments: HashMap, PlutoScalarField>, - ) -> Result, PlutoScalarField>, ProgramError> { + &self, + starting_assignments: HashMap, PlutoScalarField>, + ) -> Result, PlutoScalarField>, ProgramError> { let mut out = starting_assignments.clone(); out.insert(None, PlutoScalarField::ZERO); diff --git a/src/curve/pairing.rs b/src/curve/pairing.rs index 15c978f..9f0a29d 100644 --- a/src/curve/pairing.rs +++ b/src/curve/pairing.rs @@ -2,6 +2,8 @@ use std::fmt::Debug; +use rand::distr::StandardUniform; + use super::*; /// Compute the simplified Tate pairing of two points on the curve. @@ -197,7 +199,7 @@ pub fn tangent_line(a: AffinePoint, input: AffinePoint) line_function::(a, a, input) } -impl Distribution> for Standard { +impl Distribution> for StandardUniform { #[inline] fn sample(&self, rng: &mut R) -> AffinePoint { loop { @@ -214,12 +216,14 @@ impl Distribution> for Standard { } } -impl Distribution> for Standard { +impl Distribution> for StandardUniform { #[inline] fn sample(&self, rng: &mut R) -> AffinePoint { loop { - let x = - PlutoBaseFieldExtension::new([rng.gen::(), rng.gen::()]); + let x = PlutoBaseFieldExtension::new([ + rng.random::(), + rng.random::(), + ]); let rhs: PlutoBaseFieldExtension = x.pow(3) + x * PlutoExtendedCurve::EQUATION_A + PlutoExtendedCurve::EQUATION_B; if rhs.euler_criterion() { @@ -257,10 +261,10 @@ mod tests { // to keep the support disjoint, a random element `S` on extended curve is used, which shouldn't // be equal to P, -Q, P-Q - let mut rng = rand::thread_rng(); - let mut s = rng.gen::>(); + let mut rng = rand::rng(); + let mut s = rng.random::>(); while s == p || s == -q || s == p - q { - s = rng.gen::>(); + s = rng.random::>(); } // (D_Q) ~ (Q+S) - (S) (equivalent divisors) @@ -278,11 +282,11 @@ mod tests { #[test] fn random_point() { - let mut rng = rand::thread_rng(); - let point = rng.gen::>(); + let mut rng = rand::rng(); + let point = rng.random::>(); println!("Random point: {point:?}"); - let ext_point = rng.gen::>(); + let ext_point = rng.random::>(); println!("Random extended point: {ext_point:?}"); } diff --git a/src/diffie_hellman/ecdh.rs b/src/diffie_hellman/ecdh.rs index af1657d..c999723 100644 --- a/src/diffie_hellman/ecdh.rs +++ b/src/diffie_hellman/ecdh.rs @@ -19,16 +19,16 @@ pub fn compute_shared_secret>(d_a: F, mod tests { use super::*; use crate::{ - algebra::{field::prime::PlutoScalarField, group::FiniteCyclicGroup, Finite}, - curve::{pluto_curve::PlutoBaseCurve, AffinePoint}, + algebra::{Finite, field::prime::PlutoScalarField, group::FiniteCyclicGroup}, + curve::{AffinePoint, pluto_curve::PlutoBaseCurve}, }; #[test] fn test_compute_shared_secret() { let mut rng = rand::rngs::OsRng; - let d_a = PlutoScalarField::new(rand::Rng::gen_range(&mut rng, 1..=PlutoScalarField::ORDER)); - let d_b = PlutoScalarField::new(rand::Rng::gen_range(&mut rng, 1..=PlutoScalarField::ORDER)); + let d_a = PlutoScalarField::new(rand::Rng::random_range(&mut rng, 1..=PlutoScalarField::ORDER)); + let d_b = PlutoScalarField::new(rand::Rng::random_range(&mut rng, 1..=PlutoScalarField::ORDER)); let q_a = AffinePoint::::GENERATOR * d_a; let q_b = AffinePoint::::GENERATOR * d_b; diff --git a/src/diffie_hellman/tp_ecdh.rs b/src/diffie_hellman/tp_ecdh.rs index 23c24ff..82ed976 100644 --- a/src/diffie_hellman/tp_ecdh.rs +++ b/src/diffie_hellman/tp_ecdh.rs @@ -1,13 +1,13 @@ //! Tripartite Elliptic Curve Diffie Hellman Key Exchange Algorithm. use crate::{ algebra::{ - field::{extension::PlutoBaseFieldExtension, prime::PlutoScalarField, Field}, + field::{Field, extension::PlutoBaseFieldExtension, prime::PlutoScalarField}, group::FiniteCyclicGroup, }, curve::{ + AffinePoint, EllipticCurve, pairing::pairing, pluto_curve::{PlutoBaseCurve, PlutoExtendedCurve}, - AffinePoint, EllipticCurve, }, }; @@ -78,15 +78,15 @@ pub fn compute_shared_secret( mod tests { use super::*; use crate::{ - algebra::{field::prime::PlutoScalarField, group::FiniteCyclicGroup, Finite}, - curve::{pluto_curve::PlutoBaseCurve, AffinePoint}, + algebra::{Finite, field::prime::PlutoScalarField, group::FiniteCyclicGroup}, + curve::{AffinePoint, pluto_curve::PlutoBaseCurve}, }; #[test] fn test_compute_local_pair() { let mut rng = rand::rngs::OsRng; - let d_a = PlutoScalarField::new(rand::Rng::gen_range(&mut rng, 1..=PlutoScalarField::ORDER)); + let d_a = PlutoScalarField::new(rand::Rng::random_range(&mut rng, 1..=PlutoScalarField::ORDER)); let (p_a, q_a) = compute_local_pair(d_a); @@ -101,9 +101,9 @@ mod tests { let p = AffinePoint::::GENERATOR; let q = AffinePoint::::GENERATOR; - let d_a = PlutoScalarField::new(rand::Rng::gen_range(&mut rng, 1..PlutoScalarField::ORDER)); - let d_b = PlutoScalarField::new(rand::Rng::gen_range(&mut rng, 1..PlutoScalarField::ORDER)); - let d_c = PlutoScalarField::new(rand::Rng::gen_range(&mut rng, 1..PlutoScalarField::ORDER)); + let d_a = PlutoScalarField::new(rand::Rng::random_range(&mut rng, 1..PlutoScalarField::ORDER)); + let d_b = PlutoScalarField::new(rand::Rng::random_range(&mut rng, 1..PlutoScalarField::ORDER)); + let d_c = PlutoScalarField::new(rand::Rng::random_range(&mut rng, 1..PlutoScalarField::ORDER)); let p_a = p * d_a; let p_b = p * d_b; diff --git a/src/dsa/ecdsa.rs b/src/dsa/ecdsa.rs index 47d56b0..c1c89bb 100644 --- a/src/dsa/ecdsa.rs +++ b/src/dsa/ecdsa.rs @@ -29,7 +29,7 @@ pub fn sign>(message: &[u8], private_k let mut rng = rand::rngs::OsRng; // Select a cryptographically secure random integer k from [1, n-1]. - let k = F::from(rand::Rng::gen_range(&mut rng, 1..=F::ORDER)); + let k = F::from(rand::Rng::random_range(&mut rng, 1..=F::ORDER)); // Compute the curve point (x_1, y_1) = k × G. let point = G::GENERATOR * k; @@ -117,13 +117,14 @@ fn hash_and_extract_bits(m: &[u8], bit_count: usize) -> F { #[cfg(test)] mod tests { use super::*; - use crate::algebra::{field::prime::PlutoScalarField, group::FiniteCyclicGroup, Finite}; + use crate::algebra::{Finite, field::prime::PlutoScalarField, group::FiniteCyclicGroup}; #[test] fn test_sign_verify() { // secret key let mut rng = rand::rngs::OsRng; - let s_key = PlutoScalarField::new(rand::Rng::gen_range(&mut rng, 1..=PlutoScalarField::ORDER)); + let s_key = + PlutoScalarField::new(rand::Rng::random_range(&mut rng, 1..=PlutoScalarField::ORDER)); // public key let q_a = AffinePoint::::GENERATOR * s_key; @@ -137,7 +138,8 @@ mod tests { fn test_invalid_signature() { // secret key let mut rng = rand::rngs::OsRng; - let s_key = PlutoScalarField::new(rand::Rng::gen_range(&mut rng, 1..=PlutoScalarField::ORDER)); + let s_key = + PlutoScalarField::new(rand::Rng::random_range(&mut rng, 1..=PlutoScalarField::ORDER)); // public key let q_a = AffinePoint::::GENERATOR * s_key; let m = b"Hello, Pluto!"; diff --git a/src/dsa/eddsa/mod.rs b/src/dsa/eddsa/mod.rs index 2ad89e1..6f557d4 100644 --- a/src/dsa/eddsa/mod.rs +++ b/src/dsa/eddsa/mod.rs @@ -3,7 +3,7 @@ //! References: //! 1. [RFC8032] "Edwards-Curve Digital Signature Algorithm (EdDSA)". use crypto_bigint::{Encoding, U256, U512}; -use curve::{Coordinate, ScalarField, ScalarField64, GENERATOR, ORDER}; +use curve::{Coordinate, GENERATOR, ORDER, ScalarField, ScalarField64}; use rand::Rng; use crate::hashes::sha::Sha512; @@ -50,7 +50,7 @@ impl Ed25519 { let sk = match secret_key { Some(sk) => sk, None => { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); let v: Vec<_> = (0..32).map(|_| rng.gen_range(0..=255)).collect(); let mut a = [0u8; 32]; a.copy_from_slice(&v); diff --git a/src/dsa/eddsa/tests.rs b/src/dsa/eddsa/tests.rs index a3101c7..8d81fa6 100644 --- a/src/dsa/eddsa/tests.rs +++ b/src/dsa/eddsa/tests.rs @@ -103,7 +103,7 @@ fn test_large() { #[bench] fn bench_keygen(b: &mut Bencher) { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); let sk_v: Vec<_> = (0..32).map(|_| rng.gen_range(0..=255)).collect(); let mut sk_b = [0u8; 32]; sk_b.copy_from_slice(&sk_v); @@ -118,7 +118,7 @@ macro_rules! bench_sign { ($($test_name:ident, $n:literal)+) => { $(#[bench] fn $test_name(b: &mut Bencher) { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); let sk_v: Vec<_> = (0..32).map(|_| rng.gen_range(0..=255)).collect(); let mut sk_b = [0u8; 32]; sk_b.copy_from_slice(&sk_v); @@ -142,7 +142,7 @@ bench_sign![ bench_sign_100, 100 bench_sign_1000, 1000 bench_sign_10000, 10000 - bench_sign_100000, 100000 + bench_sign_100000, 100_000 ]; macro_rules! bench_verify { @@ -150,7 +150,7 @@ macro_rules! bench_verify { $( #[bench] fn $name(b: &mut Bencher) { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); let sk_v: Vec<_> = (0..32).map(|_| rng.gen_range(0..=255)).collect(); let mut sk_b = [0u8; 32]; sk_b.copy_from_slice(&sk_v); @@ -177,5 +177,5 @@ bench_verify![ bench_verify_100, 100 bench_verify_1000, 1000 bench_verify_10000, 10000 - bench_verify_100000, 100000 + bench_verify_100000, 100_000 ]; diff --git a/src/encryption/symmetric/chacha/tests.rs b/src/encryption/symmetric/chacha/tests.rs index 80a2efe..e629c8b 100644 --- a/src/encryption/symmetric/chacha/tests.rs +++ b/src/encryption/symmetric/chacha/tests.rs @@ -1,14 +1,14 @@ //! Test vectors from: https://datatracker.ietf.org/doc/html/rfc8439 use chacha20::{ - cipher::{KeyIvInit, StreamCipher, StreamCipherSeek}, ChaCha20, + cipher::{KeyIvInit, StreamCipher, StreamCipherSeek}, }; use hex::FromHex; -use rand::{thread_rng, Rng}; +use rand::{Rng, rng}; use rstest::rstest; -use super::{block, quarter_round, ChaCha, Counter}; +use super::{ChaCha, Counter, block, quarter_round}; use crate::encryption::symmetric::chacha::IETFChaCha20; #[test] @@ -103,10 +103,10 @@ fn counter(#[case] a: [u32; C], #[case] b: [u32; C]) { #[test] fn chacha_fuzz() { - let mut rng = thread_rng(); + let mut rng = rng(); - let key: [u32; 8] = rng.gen(); - let nonce: [u32; 3] = rng.gen(); + let key: [u32; 8] = rng.random(); + let nonce: [u32; 3] = rng.random(); let plaintext = <[u8; 16]>::from_hex("000102030405060708090A0B0C0D0E0F").unwrap(); // ronk chacha cipher diff --git a/src/encryption/symmetric/des/tests.rs b/src/encryption/symmetric/des/tests.rs index 33185d8..ec4e1bb 100644 --- a/src/encryption/symmetric/des/tests.rs +++ b/src/encryption/symmetric/des/tests.rs @@ -1,4 +1,4 @@ -use rand::{thread_rng, Rng}; +use rand::{Rng, rng}; use super::{left_shift, *}; @@ -24,7 +24,7 @@ fn exhaustive_key_search( #[test] /// use multiple keys for more confidence fn known_plaintext_attack() { - let mut rng = thread_rng(); + let mut rng = rng(); let mut plaintext1 = [0u8; 8]; rng.fill(&mut plaintext1); let mut plaintext2 = [0u8; 8]; @@ -45,12 +45,12 @@ fn known_plaintext_attack() { #[test] fn des() { for _ in 0..100 { - let mut rng = thread_rng(); - let secret_key = rng.gen(); + let mut rng = rng(); + let secret_key = rng.random(); let des = DES::new(secret_key).unwrap(); - let message = rng.gen(); + let message = rng.random(); let encrypted = des.encrypt(&message).unwrap(); let decrypted = des.decrypt(&encrypted).unwrap(); @@ -60,12 +60,12 @@ fn des() { #[test] fn des_fuzz() { - let mut rng = thread_rng(); - let key: [u8; 8] = rng.gen(); + let mut rng = rng(); + let key: [u8; 8] = rng.random(); let des_fuzz = DES::new(key).unwrap(); - let data: [u8; 8] = rng.gen(); + let data: [u8; 8] = rng.random(); let encrypted = des_fuzz.encrypt(&data).unwrap(); @@ -100,12 +100,12 @@ fn weak_keys() { #[test] /// DES has a nice property where $y=ENC_k(x)$ and $y'=ENC_{k'}(x')$ fn bit_complement() { - let mut rng = thread_rng(); - let secret_key: u64 = rng.gen(); + let mut rng = rng(); + let secret_key: u64 = rng.random(); let des = DES::new(secret_key.to_be_bytes()).unwrap(); - let message: u64 = rng.gen(); + let message: u64 = rng.random(); let encrypted = des.encrypt(&message.to_be_bytes()).unwrap(); let key_complement = u64::MAX ^ secret_key; diff --git a/src/encryption/symmetric/modes/cbc.rs b/src/encryption/symmetric/modes/cbc.rs index a7a485b..2cf7521 100644 --- a/src/encryption/symmetric/modes/cbc.rs +++ b/src/encryption/symmetric/modes/cbc.rs @@ -31,13 +31,13 @@ impl CBC { /// ``` /// #![allow(incomplete_features)] /// #![feature(generic_const_exprs)] - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::symmetric::{ /// aes::{Block, Key, AES}, /// modes::cbc::CBC, /// }; /// - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let rand_key: [u8; 16] = rng.gen(); /// let key = Key::<128>::new(rand_key); /// let iv = Block(rng.gen()); @@ -82,13 +82,13 @@ impl CBC { /// ``` /// #![allow(incomplete_features)] /// #![feature(generic_const_exprs)] - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::symmetric::{ /// aes::{Block, Key, AES}, /// modes::cbc::CBC, /// }; /// - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let rand_key: [u8; 16] = rng.gen(); /// let key = Key::<128>::new(rand_key); /// let iv = Block(rng.gen()); @@ -135,29 +135,29 @@ impl CBC { #[cfg(test)] mod tests { - use rand::{thread_rng, Rng}; + use rand::{Rng, rng}; use rstest::{fixture, rstest}; use super::*; - use crate::encryption::symmetric::aes::{Block, Key, AES}; + use crate::encryption::symmetric::aes::{AES, Block, Key}; #[fixture] fn rand_key() -> Key<128> { - let mut rng = thread_rng(); - let rand_key: [u8; 16] = rng.gen(); + let mut rng = rng(); + let rand_key: [u8; 16] = rng.random(); Key::new(rand_key) } #[fixture] fn rand_iv() -> Block { - let mut rng = thread_rng(); - Block(rng.gen()) + let mut rng = rng(); + Block(rng.random()) } fn rand_message(length: usize) -> Vec { - let mut rng = thread_rng(); + let mut rng = rng(); - (0..length).map(|_| rng.gen::()).collect() + (0..length).map(|_| rng.random::()).collect() } #[rstest] @@ -165,7 +165,7 @@ mod tests { let cbc = CBC::>::new(rand_iv); for _ in 0..10 { - let mut rng = thread_rng(); + let mut rng = rng(); let plaintext = rand_message(rng.gen_range(1000..10000)); let ciphertext = cbc.encrypt(&rand_key, &plaintext); @@ -185,8 +185,8 @@ mod tests { let cbc2 = CBC::>::new(rand_iv); - let mut rng = thread_rng(); - let plaintext = rand_message(rng.gen_range(1000..100000)); + let mut rng = rng(); + let plaintext = rand_message(rng.gen_range(1000..100_000)); let ciphertext = cbc.encrypt(&rand_key, &plaintext); let ciphertext2 = cbc2.encrypt(&rand_key, &plaintext); diff --git a/src/encryption/symmetric/modes/ctr.rs b/src/encryption/symmetric/modes/ctr.rs index 9faada6..d490e55 100644 --- a/src/encryption/symmetric/modes/ctr.rs +++ b/src/encryption/symmetric/modes/ctr.rs @@ -1,6 +1,6 @@ //! Contains implementation for Counter (CTR) mode of operation in block ciphers -use crate::encryption::{symmetric::counter::Counter, BlockOperations, Encryption}; +use crate::encryption::{BlockOperations, Encryption, symmetric::counter::Counter}; /// [`BlockCipher`] counter mode of operation with two parameters: /// - `C`, a cipher that implements the `BlockCipher` trait. @@ -119,30 +119,30 @@ where [(); C::BLOCK_SIZE - M]: mod tests { use std::{fmt::Write, num::ParseIntError}; - use rand::{thread_rng, Rng}; + use rand::{Rng, rng}; use rstest::{fixture, rstest}; use super::*; - use crate::encryption::symmetric::aes::{Key, AES}; + use crate::encryption::symmetric::aes::{AES, Key}; #[fixture] fn rand_key() -> Key<128> { - let mut rng = thread_rng(); - let rand_key: [u8; 16] = rng.gen(); + let mut rng = rng(); + let rand_key: [u8; 16] = rng.random(); Key::new(rand_key) } fn rand_message(length: usize) -> Vec { - let mut rng = thread_rng(); + let mut rng = rng(); - (0..length).map(|_| rng.gen::()).collect() + (0..length).map(|_| rng.random::()).collect() } #[rstest] fn test_ctr_rand_key(rand_key: Key<128>) { for _ in 0..10 { - let mut rng = thread_rng(); - let nonce: [u8; AES::<128>::BLOCK_SIZE - 4] = rng.gen(); + let mut rng = rng(); + let nonce: [u8; AES::<128>::BLOCK_SIZE - 4] = rng.random(); let counter: Counter<4> = Counter::from(0); let ctr = CTR::, 4>::new(nonce); diff --git a/src/hashes/poseidon/tests/mod.rs b/src/hashes/poseidon/tests/mod.rs index 0a6375f..6be4539 100644 --- a/src/hashes/poseidon/tests/mod.rs +++ b/src/hashes/poseidon/tests/mod.rs @@ -4,16 +4,16 @@ mod constants; use rstest::{fixture, rstest}; use crate::hashes::{ - poseidon::tests::field::{ark_constants, Fr}, Sponge, + poseidon::tests::field::{Fr, ark_constants}, }; mod field; use ark_crypto_primitives::sponge::{ - poseidon::{self, PoseidonSponge as ArkPoseidonSponge}, CryptographicSponge, FieldBasedCryptographicSponge, + poseidon::{self, PoseidonSponge as ArkPoseidonSponge}, }; -use constants::{constants, ALPHA, NUM_F, NUM_P, WIDTH}; -use rand::{thread_rng, Rng}; +use constants::{ALPHA, NUM_F, NUM_P, WIDTH, constants}; +use rand::{Rng, distr::Distribution, rng}; fn load_constants() -> (Vec, Vec>) { let (rc, mds) = constants(); @@ -25,14 +25,13 @@ fn load_constants() -> (Vec, Vec>) { } #[allow(dead_code)] -fn random_constants(width: usize, num_rounds: usize) -> (Vec, Vec>) -where rand::distributions::Standard: rand::distributions::Distribution { - let mut rng = thread_rng(); - let rc: Vec = (0..num_rounds * width).map(|_| rng.gen::()).collect(); +fn random_constants(width: usize, num_rounds: usize) -> (Vec, Vec>) { + let mut rng = rng(); + let rc: Vec = (0..num_rounds * width).map(|_| rng.random::()).collect(); let mut mds: Vec> = vec![vec![F::ZERO; width]; width]; for row in mds.iter_mut() { - *row = (0..width).map(|_| rng.gen::()).collect(); + *row = (0..width).map(|_| rng.random::()).collect(); } (rc, mds) } @@ -41,12 +40,12 @@ where rand::distributions::Standard: rand::distributions::Distribution { fn rate() -> usize { 6 } fn input(absorb_size: usize) -> (Vec, Vec) { - let mut rng = thread_rng(); + let mut rng = rng(); let mut pluto_input = Vec::new(); let mut ark_input = Vec::new(); for _ in 0..absorb_size { - let elem = rng.gen::(); + let elem = rng.random::(); pluto_input.push(PlutoBaseField::from(elem)); ark_input.push(Fr::from(elem)); } diff --git a/src/lib.rs b/src/lib.rs index 7acc5a3..d2b3547 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,11 +14,8 @@ //! - Compiler: Simple DSL to write circuits which can be compiled to polynomials used in PLONK. #![allow(incomplete_features)] -#![feature(effects)] #![feature(const_trait_impl)] -#![feature(const_mut_refs)] #![feature(const_for)] -#![feature(const_option)] #![feature(generic_const_exprs)] #![feature(specialization)] #![feature(test)] @@ -47,20 +44,20 @@ use core::{ }; use rand::{ - distributions::{Distribution, Standard}, Rng, + distr::{Distribution, StandardUniform}, }; #[cfg(test)] use rstest::{fixture, rstest}; use self::{ algebra::field::{ + Field, extension::{GaloisField, PlutoBaseFieldExtension}, prime::{PlutoBaseField, PlutoPrime, PlutoScalarField, PrimeField}, - Field, }, curve::{ - pluto_curve::{PlutoBaseCurve, PlutoExtendedCurve}, AffinePoint, + pluto_curve::{PlutoBaseCurve, PlutoExtendedCurve}, }, polynomial::{Monomial, Polynomial}, }; diff --git a/src/sumcheck/mod.rs b/src/sumcheck/mod.rs index bf392ac..cac2472 100644 --- a/src/sumcheck/mod.rs +++ b/src/sumcheck/mod.rs @@ -9,7 +9,7 @@ //! - [`SumCheckVerifier`] represents the verifier in the protocol. //! - [`SumCheck`] encapsulates both prover and verifier, managing the entire protocol. -use rand::thread_rng; +use rand::rng; use super::*; use crate::{algebra::field::FiniteField, multi_var_poly::MultiVarPolynomial}; @@ -179,8 +179,8 @@ impl SumCheckVerifier { "Verifier Abort: Prover's polynomial doesn't evaluate to claimed value" ); - let mut rng = thread_rng(); - let challenge = F::from(rng.gen::()); + let mut rng = rng(); + let challenge = F::from(rng.random::()); // This is the value the Verifier will check against in the next round // new_claim = h_poly(challenge) as a univariate polynomial @@ -301,11 +301,7 @@ fn format_polynomial(coeffs: &[F]) -> String { } } } - if terms.is_empty() { - "0".to_string() - } else { - terms.join(" + ") - } + if terms.is_empty() { "0".to_string() } else { terms.join(" + ") } } #[cfg(test)] mod tests;