diff --git a/Cargo.lock b/Cargo.lock index 61e346a..bdda12c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,17 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -49,8 +60,7 @@ dependencies = [ [[package]] name = "bls12_381" version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bc6d6292be3a19e6379786dac800f551e5865a5bb51ebbe3064ab80433f403" +source = "git+https://github.com/zkcrypto/bls12_381.git?rev=d5df9da6b20619bf77cc432447c02f8f6a6a1fb3#d5df9da6b20619bf77cc432447c02f8f6a6a1fb3" dependencies = [ "ff", "rand_core", @@ -189,15 +199,31 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "ff" -version = "0.13.1" +version = "0.14.0-pre.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "d42dd26f5790eda47c1a2158ea4120e32c35ddc9a7743c98a292accc01b54ef3" dependencies = [ "bitvec", + "ff_derive", "rand_core", "subtle", ] +[[package]] +name = "ff_derive" +version = "0.14.0-pre.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9266df7c7c72e5a865a447aca13bf480d7310eaa4f84de117c33e361d4da8888" +dependencies = [ + "addchain", + "num-bigint", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "funty" version = "2.0.0" @@ -206,9 +232,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "group" -version = "0.13.0" +version = "0.14.0-pre.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "1ff6a0b2dd4b981b1ae9e3e6830ab146771f3660d31d57bafd9018805a91b0f1" dependencies = [ "ff", "rand_core", @@ -300,6 +326,26 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -375,15 +421,15 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand_core" -version = "0.6.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" [[package]] name = "rand_xorshift" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ "rand_core", ] @@ -491,7 +537,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -512,6 +558,17 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.100" @@ -592,7 +649,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 2.0.100", "wasm-bindgen-shared", ] @@ -614,7 +671,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/Cargo.toml b/Cargo.toml index 2af6262..460f944 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,37 +14,18 @@ version = "0.10.0" edition = "2021" rust-version = "1.63" -[dependencies.bitvec] -version = "1" -default-features = false - -[dependencies.bls12_381] -version = "0.8" -default-features = false - -[dependencies.ff] -version = "0.13" -default-features = false - -[dependencies.group] -version = "0.13" -default-features = false - -[dependencies.rand_core] -version = "0.6" -default-features = false - -[dependencies.subtle] -version = "^2.2.1" -default-features = false +[dependencies] +bitvec = { version = "1", default-features = false } +bls12_381 = { version = "0.8", default-features = false } +ff = { version = "=0.14.0-pre.0", default-features = false } +group = { version = "=0.14.0-pre.0", default-features = false } +rand_core = { version = "0.9", default-features = false } +subtle = { version = "^2.2.1", default-features = false } [dev-dependencies] criterion = "0.3" csv = ">= 1.0, < 1.2" # csv 1.2 has MSRV 1.60 - -[dev-dependencies.rand_xorshift] -version = "0.3" -default-features = false +rand_xorshift = { version = "0.4", default-features = false } [features] default = ["alloc", "bits"] @@ -62,3 +43,6 @@ harness = false [[bench]] name = "point_bench" harness = false + +[patch.crates-io] +bls12_381 = { git = "https://github.com/zkcrypto/bls12_381.git", rev = "d5df9da6b20619bf77cc432447c02f8f6a6a1fb3" } diff --git a/RELEASES.md b/RELEASES.md index 9da0cdf..729a791 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,6 +1,7 @@ # Unreleased ## Changed - Bumped MSRV to `1.63.0` +- Bumped dependencies to `bls12_381 0.9`, `ff 0.14`, `group 0.14`. # 0.10.0 ## Changed diff --git a/src/fr.rs b/src/fr.rs index 870f58e..a73b5f8 100644 --- a/src/fr.rs +++ b/src/fr.rs @@ -6,7 +6,7 @@ use core::fmt; use core::ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign}; use ff::{Field, PrimeField}; -use rand_core::RngCore; +use rand_core::TryRngCore; use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; #[cfg(feature = "bits")] @@ -681,10 +681,10 @@ impl Field for Fr { const ZERO: Self = Self::zero(); const ONE: Self = Self::one(); - fn random(mut rng: impl RngCore) -> Self { + fn try_from_rng(rng: &mut R) -> Result { let mut buf = [0; 64]; - rng.fill_bytes(&mut buf); - Self::from_bytes_wide(&buf) + rng.try_fill_bytes(&mut buf)?; + Ok(Self::from_bytes_wide(&buf)) } #[must_use] diff --git a/src/lib.rs b/src/lib.rs index 014173a..70b245c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,7 +46,7 @@ use group::{ prime::PrimeGroup, Curve, Group, GroupEncoding, }; -use rand_core::RngCore; +use rand_core::TryRngCore; use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; #[cfg(feature = "alloc")] @@ -1241,10 +1241,10 @@ impl_binops_multiplicative!(SubgroupPoint, Fr); impl Group for ExtendedPoint { type Scalar = Fr; - fn random(mut rng: impl RngCore) -> Self { + fn try_from_rng(rng: &mut R) -> Result { loop { - let v = Fq::random(&mut rng); - let flip_sign = rng.next_u32() % 2 != 0; + let v = Fq::try_from_rng(rng)?; + let flip_sign = rng.try_next_u32()? % 2 != 0; // See AffinePoint::from_bytes for details. let v2 = v.square(); @@ -1260,7 +1260,7 @@ impl Group for ExtendedPoint { let p = p.unwrap().to_curve(); if bool::from(!p.is_identity()) { - return p; + return Ok(p); } } } @@ -1287,12 +1287,12 @@ impl Group for ExtendedPoint { impl Group for SubgroupPoint { type Scalar = Fr; - fn random(mut rng: impl RngCore) -> Self { + fn try_from_rng(rng: &mut R) -> Result { loop { - let p = ExtendedPoint::random(&mut rng).clear_cofactor(); + let p = ExtendedPoint::try_from_rng(rng)?.clear_cofactor(); if bool::from(!p.is_identity()) { - return p; + return Ok(p); } } }