diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml new file mode 100644 index 00000000..ecd48508 --- /dev/null +++ b/.github/workflows/check.yaml @@ -0,0 +1,114 @@ +name: Check + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: [main] + +jobs: + fmt: + name: fmt + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly-2024-06-10 + components: rustfmt + + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + + - name: cargo fmt + run: cargo fmt --all -- --check + + taplo: + name: taplo + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly-2024-06-10 + + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + + - name: Install taplo + uses: taiki-e/install-action@v2 + with: + tool: taplo-cli + + - name: Run taplo fmt + run: taplo fmt --check + + clippy: + name: clippy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly-2024-06-10 + components: clippy + + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + + - name: cargo clippy + run: cargo clippy --all + + udeps: + name: udeps + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly-2024-06-10 + + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + + - name: Install cargo-udeps + uses: taiki-e/install-action@v2 + with: + tool: cargo-udeps + + - name: Run cargo-udeps + run: cargo udeps + + semver: + name: semver + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Rust (nightly for project) + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly-2024-06-10 + + - name: Install stable Rust (for semver) + uses: dtolnay/rust-toolchain@stable + + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + + - name: Install cargo-semver-checks + uses: taiki-e/install-action@cargo-semver-checks + + - name: Run semver checks + run: cargo +stable semver-checks check-release --workspace \ No newline at end of file diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml deleted file mode 100644 index 0853d8e7..00000000 --- a/.github/workflows/lint.yaml +++ /dev/null @@ -1,40 +0,0 @@ -name: lint - -on: - pull_request: - types: [opened, synchronize, reopened] - push: - branches: [main] - -jobs: - fmt: - name: fmt - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Install Rust - uses: dtolnay/rust-toolchain@master - with: - toolchain: nightly-2024-06-10 - components: rustfmt - - - name: cargo fmt - run: cargo fmt --all -- --check - - clippy: - name: clippy - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Install Rust - uses: dtolnay/rust-toolchain@master - with: - toolchain: nightly-2024-06-10 - components: clippy - - - name: cargo clippy - run: cargo clippy --all diff --git a/Cargo.lock b/Cargo.lock index 435405d6..4201374b 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.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" + [[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.0", + "zerocopy 0.8.16", ] [[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.0", ] [[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b08f3c9802962f7e1b25113931d94f43ed9725bebc59db9d0c3e9a23b67e15ff" +dependencies = [ + "getrandom 0.3.1", + "zerocopy 0.8.16", ] [[package]] @@ -717,8 +765,7 @@ dependencies = [ "itertools 0.14.0", "num-traits", "pretty_assertions", - "rand", - "regex", + "rand 0.9.0", "rstest", "sha2", ] @@ -892,6 +939,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 +1021,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 +1043,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.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b8c07a70861ce02bad1607b5753ecb2501f67847b9f9ada7c160fff0ec6300c" +dependencies = [ + "zerocopy-derive 0.8.16", ] [[package]] @@ -928,6 +1066,17 @@ dependencies = [ "syn 2.0.91", ] +[[package]] +name = "zerocopy-derive" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5226bc9a9a9836e7428936cde76bb6b22feea1a8bfdbc0d241136e4d13417e25" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + [[package]] name = "zeroize" version = "1.8.1" diff --git a/Cargo.toml b/Cargo.toml index fda332c9..84d8d876 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,11 +9,10 @@ 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" -regex ="1.11.1" num-traits ="0.2.19" [dev-dependencies] diff --git a/examples/aes_chained_cbc.rs b/examples/aes_chained_cbc.rs index 3fb101a9..ffda1925 100644 --- a/examples/aes_chained_cbc.rs +++ b/examples/aes_chained_cbc.rs @@ -6,7 +6,7 @@ //! attacker can detect which original message was used in the ciphertext which is shown here. #![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, @@ -52,18 +52,18 @@ fn attacker<'a>(key: &Key<128>, iv: &Block, ciphertext: Vec) -> &'a [u8] { /// We simulate Chained CBC and show that attacker can know whether initial plaintext was message 1 /// or 2. fn main() { - let mut rng = thread_rng(); + let mut rng = rng(); // generate a random key and publicly known IV, and initiate CBC with AES cipher - let key = Key::<128>::new(rng.gen()); - let iv = Block(rng.gen()); + let key = Key::<128>::new(rng.random()); + let iv = Block(rng.random()); let cbc = CBC::>::new(iv); // Chose 2 random messages, {m_0, m_1} let messages = attacker_chosen_message(); // select a uniform bit b, and chose message m_b for encryption - let bit = rng.gen_range(0..=1); + let bit = rng.random_range(0..=1); let encrypted = cbc.encrypt(&key, messages[bit]); let predicted_message = attacker(&key, &iv, encrypted); diff --git a/src/algebra/field/binary_towers/extension.rs b/src/algebra/field/binary_towers/extension.rs index fd435cf0..eb425e3e 100644 --- a/src/algebra/field/binary_towers/extension.rs +++ b/src/algebra/field/binary_towers/extension.rs @@ -6,7 +6,7 @@ use std::{ }; use rand::{ - distributions::{Distribution, Standard}, + distr::{Distribution, StandardUniform}, Rng, }; @@ -262,12 +262,12 @@ where } } -impl Distribution> for Standard +impl Distribution> for StandardUniform where [(); 1 << K]: { #[inline] fn sample(&self, rng: &mut R) -> BinaryTowers { - let num = rng.gen_range(1..1 << (1 << K)); + let num = rng.random_range(1..1 << (1 << K)); let coefficients = to_bool_vec(num, 1 << K).try_into().unwrap_or_else(|v: Vec| { panic!("Expected a Vec of length {} but it was {}", 1 << K, v.len()) }); diff --git a/src/algebra/field/binary_towers/tests.rs b/src/algebra/field/binary_towers/tests.rs index 97d7d8f1..e95353be 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,11 +87,11 @@ 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)); + let val = rng.random_range(0..1 << (1 << 3)); let b = BinaryTowers::<3>::from(val); let d = BinaryTowers::<5>::from(val); @@ -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 a1ee314e..559bbf77 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: @@ -127,10 +127,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) } } @@ -147,7 +148,7 @@ impl Mul for PlutoBaseFieldExtension { Polynomial::::from(Self::IRREDUCIBLE_POLYNOMIAL_COEFFICIENTS); let product = (poly_self * poly_rhs) % poly_irred; let res: [PlutoBaseField; 2] = - array::from_fn(|i| product.coefficients.get(i).cloned().unwrap_or(PlutoBaseField::ZERO)); + array::from_fn(|i| product.coefficients.get(i).copied().unwrap_or(PlutoBaseField::ZERO)); Self::new(res) } @@ -251,10 +252,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!( @@ -268,13 +269,13 @@ mod tests { assert_eq!(x - (y + z), (x - y) - z); assert_eq!((x + y) - z, x + (y - z)); assert_eq!(x * (y + z), x * y + x * z); - assert_eq!(x + y + z + x + y + z, [x, x, y, y, z, z].iter().cloned().sum()); + assert_eq!(x + y + z + x + y + z, [x, x, y, y, z, z].iter().copied().sum()); } #[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 +285,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 +330,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 +363,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 +372,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/mod.rs b/src/algebra/field/mod.rs index 71303f5b..66e7694b 100644 --- a/src/algebra/field/mod.rs +++ b/src/algebra/field/mod.rs @@ -13,7 +13,6 @@ use super::Finite; /// A field is a set of elements on which addition, subtraction, multiplication, and division are /// defined. - #[const_trait] pub trait Field: std::fmt::Debug diff --git a/src/algebra/field/prime/arithmetic.rs b/src/algebra/field/prime/arithmetic.rs index f2f32eff..77f75f0e 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)); @@ -148,7 +148,7 @@ mod tests { assert_eq!(x - (y + z), (x - y) - z); assert_eq!((x + y) - z, x + (y - z)); assert_eq!(x * (y + z), x * y + x * z); - assert_eq!(x + y + z + x + y + z, [x, x, y, y, z, z].iter().cloned().sum()); + assert_eq!(x + y + z + x + y + z, [x, x, y, y, z, z].iter().copied().sum()); } #[rstest] diff --git a/src/algebra/field/prime/mod.rs b/src/algebra/field/prime/mod.rs index 8794f80f..fb919e8a 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::{distr::StandardUniform, prelude::Distribution, Rng}; 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 { diff --git a/src/curve/pairing.rs b/src/curve/pairing.rs index 15c978f7..b5438f1e 100644 --- a/src/curve/pairing.rs +++ b/src/curve/pairing.rs @@ -197,7 +197,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 +214,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 +259,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 +280,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 af1657d9..f15e258b 100644 --- a/src/diffie_hellman/ecdh.rs +++ b/src/diffie_hellman/ecdh.rs @@ -25,10 +25,10 @@ mod tests { #[test] fn test_compute_shared_secret() { - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rng(); - 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 23c24ffd..cfbfb99c 100644 --- a/src/diffie_hellman/tp_ecdh.rs +++ b/src/diffie_hellman/tp_ecdh.rs @@ -69,13 +69,13 @@ pub fn compute_shared_secret( let pairing = pairing::<_, { PlutoBaseCurve::ORDER }>(p_b, q_c); - let shared_secret = pairing.pow(d_a.value); - - shared_secret + pairing.pow(d_a.value) } #[cfg(test)] mod tests { + use rand::rng; + use super::*; use crate::{ algebra::{field::prime::PlutoScalarField, group::FiniteCyclicGroup, Finite}, @@ -84,9 +84,9 @@ mod tests { #[test] fn test_compute_local_pair() { - let mut rng = rand::rngs::OsRng; + let mut rng = rng(); - 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); @@ -96,14 +96,14 @@ mod tests { #[test] fn test_compute_tripartite_shared_secret() { - let mut rng = rand::rngs::OsRng; + let mut rng = rng(); 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 47d56b09..1d5ef04f 100644 --- a/src/dsa/ecdsa.rs +++ b/src/dsa/ecdsa.rs @@ -27,9 +27,9 @@ pub fn sign>(message: &[u8], private_k let bit_count = (F::ORDER.leading_zeros() - 1) as usize; let z = hash_and_extract_bits::(message, bit_count); - let mut rng = rand::rngs::OsRng; + let mut rng = rand::rng(); // 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; @@ -116,14 +116,17 @@ fn hash_and_extract_bits(m: &[u8], bit_count: usize) -> F { #[cfg(test)] mod tests { + use rand::rng; + use super::*; use crate::algebra::{field::prime::PlutoScalarField, group::FiniteCyclicGroup, Finite}; #[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 mut rng = rng(); + let s_key = + PlutoScalarField::new(rand::Rng::random_range(&mut rng, 1..=PlutoScalarField::ORDER)); // public key let q_a = AffinePoint::::GENERATOR * s_key; @@ -136,8 +139,9 @@ mod tests { #[test] 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 mut rng = rng(); + 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 2ad89e19..1e903e4c 100644 --- a/src/dsa/eddsa/mod.rs +++ b/src/dsa/eddsa/mod.rs @@ -50,8 +50,8 @@ impl Ed25519 { let sk = match secret_key { Some(sk) => sk, None => { - let mut rng = rand::thread_rng(); - let v: Vec<_> = (0..32).map(|_| rng.gen_range(0..=255)).collect(); + let mut rng = rand::rng(); + let v: Vec<_> = (0..32).map(|_| rng.random_range(0..=255)).collect(); let mut a = [0u8; 32]; a.copy_from_slice(&v); a diff --git a/src/dsa/eddsa/tests.rs b/src/dsa/eddsa/tests.rs index a3101c7b..fce40215 100644 --- a/src/dsa/eddsa/tests.rs +++ b/src/dsa/eddsa/tests.rs @@ -103,8 +103,8 @@ fn test_large() { #[bench] fn bench_keygen(b: &mut Bencher) { - let mut rng = rand::thread_rng(); - let sk_v: Vec<_> = (0..32).map(|_| rng.gen_range(0..=255)).collect(); + let mut rng = rand::rng(); + let sk_v: Vec<_> = (0..32).map(|_| rng.random_range(0..=255)).collect(); let mut sk_b = [0u8; 32]; sk_b.copy_from_slice(&sk_v); @@ -118,13 +118,13 @@ macro_rules! bench_sign { ($($test_name:ident, $n:literal)+) => { $(#[bench] fn $test_name(b: &mut Bencher) { - let mut rng = rand::thread_rng(); - let sk_v: Vec<_> = (0..32).map(|_| rng.gen_range(0..=255)).collect(); + let mut rng = rand::rng(); + let sk_v: Vec<_> = (0..32).map(|_| rng.random_range(0..=255)).collect(); let mut sk_b = [0u8; 32]; sk_b.copy_from_slice(&sk_v); let ed25519 = Ed25519::new(Some(sk_b)); - let msg_v: Vec<_> = (0..$n).map(|_| rng.gen_range(0..=255)).collect(); + let msg_v: Vec<_> = (0..$n).map(|_| rng.random_range(0..=255)).collect(); let mut msg_b = [0u8; $n]; msg_b.copy_from_slice(&msg_v); @@ -150,13 +150,13 @@ macro_rules! bench_verify { $( #[bench] fn $name(b: &mut Bencher) { - let mut rng = rand::thread_rng(); - let sk_v: Vec<_> = (0..32).map(|_| rng.gen_range(0..=255)).collect(); + let mut rng = rand::rng(); + let sk_v: Vec<_> = (0..32).map(|_| rng.random_range(0..=255)).collect(); let mut sk_b = [0u8; 32]; sk_b.copy_from_slice(&sk_v); let ed25519 = Ed25519::new(Some(sk_b)); - let msg_v: Vec<_> = (0..$n).map(|_| rng.gen_range(0..=255)).collect(); + let msg_v: Vec<_> = (0..$n).map(|_| rng.random_range(0..=255)).collect(); let mut msg_b = [0u8; $n]; msg_b.copy_from_slice(&msg_v); diff --git a/src/encryption/symmetric/aes/mod.rs b/src/encryption/symmetric/aes/mod.rs index 93a68908..4287d2a5 100644 --- a/src/encryption/symmetric/aes/mod.rs +++ b/src/encryption/symmetric/aes/mod.rs @@ -372,13 +372,13 @@ where [(); N / 8]: /// #![allow(incomplete_features)] /// #![feature(generic_const_exprs)] /// - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::{ /// symmetric::aes::{Block, Key, AES}, /// Encryption, /// }; /// - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let key = Key::<128>::new(rng.gen()); /// let plaintext = rng.gen(); /// let aes = AES::new(key).unwrap(); @@ -438,12 +438,12 @@ where [(); N / 8]: /// #![allow(incomplete_features)] /// #![feature(generic_const_exprs)] /// - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::{ /// symmetric::aes::{Block, Key, AES}, /// Encryption, /// }; - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let key = Key::<128>::new(rng.gen()); /// let plaintext = rng.gen(); /// let aes = AES::new(key).unwrap(); diff --git a/src/encryption/symmetric/chacha/mod.rs b/src/encryption/symmetric/chacha/mod.rs index 6ee924e1..fade5b74 100644 --- a/src/encryption/symmetric/chacha/mod.rs +++ b/src/encryption/symmetric/chacha/mod.rs @@ -184,9 +184,9 @@ impl ChaCha { /// /// ## Usage /// ``` - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::symmetric::chacha::{ChaCha, Counter}; - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let key: [u32; 8] = rng.gen(); /// let nonce: [u32; 3] = rng.gen(); /// @@ -249,9 +249,9 @@ impl ChaCha { /// /// ## Usage /// ``` - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::symmetric::chacha::{ChaCha, Counter}; - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let key: [u32; 8] = rng.gen(); /// let nonce: [u32; 3] = rng.gen(); /// @@ -273,24 +273,6 @@ impl ChaCha { ) -> Result, ::Error> { self.encrypt(counter, ciphertext) } - - /// Encrypts a plaintext of arbitrary length using [`Self::encrypt`] with a given counter. - - fn encrypt_with_counter( - &self, - counter: &Counter, - plaintext: &[u8], - ) -> Result, ::Error> { - self.encrypt(counter, plaintext) - } - - fn decrypt_with_counter( - &self, - counter: &Counter, - ciphertext: &[u8], - ) -> Result, ::Error> { - self.decrypt(counter, ciphertext) - } } impl Encryption for ChaCha { diff --git a/src/encryption/symmetric/chacha/tests.rs b/src/encryption/symmetric/chacha/tests.rs index 80a2efe3..7806757e 100644 --- a/src/encryption/symmetric/chacha/tests.rs +++ b/src/encryption/symmetric/chacha/tests.rs @@ -5,7 +5,7 @@ use chacha20::{ ChaCha20, }; use hex::FromHex; -use rand::{thread_rng, Rng}; +use rand::{rng, Rng}; use rstest::rstest; use super::{block, quarter_round, ChaCha, Counter}; @@ -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/mod.rs b/src/encryption/symmetric/des/mod.rs index 5ca54545..51dd27df 100644 --- a/src/encryption/symmetric/des/mod.rs +++ b/src/encryption/symmetric/des/mod.rs @@ -57,9 +57,9 @@ impl DES { /// /// ## Example /// ```rust - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::symmetric::des::DES; - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let secret_key = rng.gen(); /// /// let subkeys = DES::setup(secret_key); @@ -205,9 +205,9 @@ impl Encryption for DES { /// /// ## Example /// ```rust - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::{symmetric::des::DES, Encryption}; - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let secret_key = rng.gen(); /// let message = rng.gen(); /// let des = DES::new(secret_key).unwrap(); @@ -244,9 +244,9 @@ impl Encryption for DES { /// /// ## Example /// ```rust - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::{symmetric::des::DES, Encryption}; - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let secret_key = rng.gen(); /// let message = rng.gen(); /// let des = DES::new(secret_key).unwrap(); diff --git a/src/encryption/symmetric/des/tests.rs b/src/encryption/symmetric/des/tests.rs index 33185d80..7bd7d632 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 a7a485b9..f1535695 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,7 +135,7 @@ impl CBC { #[cfg(test)] mod tests { - use rand::{thread_rng, Rng}; + use rand::{rng, Rng}; use rstest::{fixture, rstest}; use super::*; @@ -143,21 +143,21 @@ mod tests { #[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,8 +165,8 @@ mod tests { let cbc = CBC::>::new(rand_iv); for _ in 0..10 { - let mut rng = thread_rng(); - let plaintext = rand_message(rng.gen_range(1000..10000)); + let mut rng = rng(); + let plaintext = rand_message(rng.random_range(1000..10000)); let ciphertext = cbc.encrypt(&rand_key, &plaintext); let decrypted = cbc.decrypt(&rand_key, &ciphertext); @@ -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.random_range(1000..100000)); 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 9faada65..dc3521df 100644 --- a/src/encryption/symmetric/modes/ctr.rs +++ b/src/encryption/symmetric/modes/ctr.rs @@ -28,7 +28,7 @@ where [(); C::BLOCK_SIZE - M]: /// ``` /// #![allow(incomplete_features)] /// #![feature(generic_const_exprs)] - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::{ /// symmetric::{ /// aes::{Key, AES}, @@ -38,7 +38,7 @@ where [(); C::BLOCK_SIZE - M]: /// BlockOperations, /// }; /// - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let rand_key: [u8; 16] = rng.gen(); /// let key = Key::<128>::new(rand_key); /// let nonce: [u8; 12] = rng.gen(); @@ -83,7 +83,7 @@ where [(); C::BLOCK_SIZE - M]: /// ``` /// #![allow(incomplete_features)] /// #![feature(generic_const_exprs)] - /// use rand::{thread_rng, Rng}; + /// use rand::{rng, Rng}; /// use ronkathon::encryption::{ /// symmetric::{ /// aes::{Key, AES}, @@ -93,7 +93,7 @@ where [(); C::BLOCK_SIZE - M]: /// BlockOperations, /// }; /// - /// let mut rng = thread_rng(); + /// let mut rng = rng(); /// let rand_key: [u8; 16] = rng.gen(); /// let key = Key::<128>::new(rand_key); /// let nonce: [u8; 12] = rng.gen(); @@ -119,7 +119,7 @@ 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::*; @@ -127,27 +127,27 @@ mod tests { #[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); - let plaintext = rand_message(rng.gen_range(1000..10000)); + let plaintext = rand_message(rng.random_range(1000..10000)); let ciphertext = ctr.encrypt(&rand_key, &counter, &plaintext).unwrap(); let decrypted = ctr.decrypt(&rand_key, &counter, &ciphertext).unwrap(); diff --git a/src/hashes/poseidon/tests/mod.rs b/src/hashes/poseidon/tests/mod.rs index 0a6375f7..648b5f16 100644 --- a/src/hashes/poseidon/tests/mod.rs +++ b/src/hashes/poseidon/tests/mod.rs @@ -13,7 +13,7 @@ use ark_crypto_primitives::sponge::{ CryptographicSponge, FieldBasedCryptographicSponge, }; use constants::{constants, ALPHA, NUM_F, NUM_P, WIDTH}; -use rand::{thread_rng, Rng}; +use rand::{rng, Rng}; fn load_constants() -> (Vec, Vec>) { let (rc, mds) = constants(); @@ -26,13 +26,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(); +where rand::distr::StandardUniform: rand::distr::Distribution { + 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 +41,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/hashes/sha3.rs b/src/hashes/sha3.rs index 30d5899f..1928ee9f 100644 --- a/src/hashes/sha3.rs +++ b/src/hashes/sha3.rs @@ -35,12 +35,6 @@ const RC: [u64; 24] = [ 0x8000000080008008, ]; -/// Rotation offsets for ρ step -const RHO: [[u32; 5]; 5] = - [[0, 36, 3, 41, 18], [1, 44, 10, 45, 2], [62, 6, 43, 15, 61], [28, 55, 25, 21, 56], [ - 27, 20, 39, 8, 14, - ]]; - #[derive(Clone, Debug)] struct KeccakState { lanes: [[u64; 5]; 5], @@ -277,6 +271,10 @@ impl Shake { } } +impl Default for Shake { + fn default() -> Self { Self::new() } +} + /// Type alias for SHA3-224. pub type Sha3_224 = Sha3<28>; /// Type alias for SHA3-256. diff --git a/src/lib.rs b/src/lib.rs index 7acc5a38..6b560278 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -47,7 +47,7 @@ use core::{ }; use rand::{ - distributions::{Distribution, Standard}, + distr::{Distribution, StandardUniform}, Rng, }; #[cfg(test)] use rstest::{fixture, rstest}; diff --git a/src/sumcheck/mod.rs b/src/sumcheck/mod.rs index bf392ac4..2b2b67d8 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::().try_into().unwrap()); // This is the value the Verifier will check against in the next round // new_claim = h_poly(challenge) as a univariate polynomial