From c496808d3952301902f9ae4f049d0b6ecb183fa6 Mon Sep 17 00:00:00 2001 From: gilcu3 Date: Thu, 16 Jul 2026 09:41:52 +0200 Subject: [PATCH] chore: bump deps including rand_core --- Cargo.lock | 196 ++++++++++++++++++++++++++++++-------------- Cargo.toml | 12 +-- src/fp.rs | 8 +- src/fp12.rs | 6 +- src/fp2.rs | 6 +- src/fp6.rs | 14 ++-- src/g1.rs | 22 +++-- src/g2.rs | 22 +++-- src/gt.rs | 10 +-- src/lib.rs | 2 +- src/scalar.rs | 8 +- src/serde_impl.rs | 2 +- src/tests/engine.rs | 2 +- src/tests/field.rs | 18 ++-- src/tests/mod.rs | 2 +- 15 files changed, 199 insertions(+), 131 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa11156..ff9c54b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,12 +1,29 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "addchain" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5665045de74fda906c0abfaec40cf2551f88c34dccea869f3fe950dde7209764" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bitvec" -version = "1.0.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" dependencies = [ "funty", "radium", @@ -16,9 +33,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" +checksum = "c20659f9bbee16cbbd2f7393e40ab6309f5a98f76a2eb57a995ec508b72387fe" dependencies = [ "cc", "glob", @@ -53,9 +70,9 @@ checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "cc" -version = "1.2.48" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c481bdbf0ed3b892f6f806287d72acd515b352a4ec27a208489b8c1bc839633a" +checksum = "54413ede23c2daf518f35156dfde027feb2374004d63bd497f983c8db9c0e313" dependencies = [ "find-msvc-tools", "shlex", @@ -69,20 +86,36 @@ checksum = "bd63582de2b59ea1aa48d7c1941b5d87618d95484397521b3acdfa0e1e9f5e45" [[package]] name = "ff" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" dependencies = [ "bitvec", + "ff_derive", "rand_core", "subtle", ] +[[package]] +name = "ff_derive" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241afe8c15ffa21933eaefe8a563af36fd9fc98a3e8a044e8f7db52eb1fae3d8" +dependencies = [ + "addchain", + "num-bigint", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "ef25905e51abafe4dcea6c15fec58c57b601cdbd0ee53d22ea1d3016c587d39b" [[package]] name = "funty" @@ -92,15 +125,15 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "group" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" dependencies = [ "ff", "rand", @@ -111,9 +144,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" [[package]] name = "hex" @@ -123,21 +156,49 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "num-bigint" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] [[package]] name = "num_cpus" @@ -151,27 +212,27 @@ dependencies = [ [[package]] name = "pairing" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +checksum = "33f6413397336802d16a342e69a5bd9c8b8cc2fa9fc9298044cd3443f77f1010" dependencies = [ "group", ] [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.41" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -184,39 +245,33 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.5" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" dependencies = [ "rand_core", ] [[package]] name = "rand_core" -version = "0.6.4" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "rand_xorshift" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +checksum = "60aa6af80be32871323012e02e6e65f8a7cc7890931ae421d217ad8fe0df2ccf" dependencies = [ "rand_core", ] -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -224,42 +279,42 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "subtle" @@ -269,9 +324,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.106" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -295,9 +361,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "wyz" @@ -310,20 +376,26 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index 889ad62..258215b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,19 +16,19 @@ rustdoc-args = [ "--html-in-header", "katex-header.html" ] [dependencies] blst = { version = "0.3.10", default-features = true } -rand_core = "0.6" -ff = "0.13" -group = { version = "0.13", features = ["tests"] } -pairing_lib = { version = "0.23", package = "pairing" } +rand_core = "0.10" +ff = "0.14" +group = { version = "0.14", features = ["tests"] } +pairing_lib = { version = "0.24", package = "pairing" } subtle = "2.2.1" -zeroize = "1.8.2" +zeroize = "1.9.0" serde = { version = "1.0", features = ["derive"], optional = true } ec-gpu = { version = "0.2.0", optional = true } byte-slice-cast = "1.0.0" [dev-dependencies] -rand_xorshift = "0.3.0" +rand_xorshift = "0.5.0" serde_json = "1.0.57" hex = "0.4.2" diff --git a/src/fp.rs b/src/fp.rs index d408c17..564f6a7 100644 --- a/src/fp.rs +++ b/src/fp.rs @@ -8,7 +8,7 @@ use core::{ ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign}, }; use ff::Field; -use rand_core::RngCore; +use rand_core::TryRng; use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; use crate::fp2::Fp2; @@ -505,18 +505,18 @@ const NUM_BITS: u32 = 381; const REPR_SHAVE_BITS: usize = 384 - NUM_BITS as usize; impl Field for Fp { - fn random(mut rng: impl RngCore) -> Self { + fn try_random(rng: &mut R) -> Result { loop { let mut raw = [0u64; 6]; for int in raw.iter_mut() { - *int = rng.next_u64(); + *int = rng.try_next_u64()?; } // Mask away the unused most-significant bits. raw[5] &= 0xffffffffffffffff >> REPR_SHAVE_BITS; if let Some(fp) = Fp::from_u64s_le(&raw).into() { - return fp; + return Ok(fp); } } } diff --git a/src/fp12.rs b/src/fp12.rs index a12c581..0a2412a 100644 --- a/src/fp12.rs +++ b/src/fp12.rs @@ -8,7 +8,7 @@ use core::{ }; use ff::Field; -use rand_core::RngCore; +use rand_core::TryRng; use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; use crate::{fp::Fp, fp2::Fp2, fp6::Fp6}; @@ -211,8 +211,8 @@ impl_sum!(Fp12); impl_product!(Fp12); impl Field for Fp12 { - fn random(mut rng: impl RngCore) -> Self { - Fp12::new(Fp6::random(&mut rng), Fp6::random(&mut rng)) + fn try_random(rng: &mut R) -> Result { + Ok(Fp12::new(Fp6::try_random(rng)?, Fp6::try_random(rng)?)) } const ZERO: Self = Fp12::new(Fp6::ZERO, Fp6::ZERO); diff --git a/src/fp2.rs b/src/fp2.rs index f7eb579..d9ec6a4 100644 --- a/src/fp2.rs +++ b/src/fp2.rs @@ -8,7 +8,7 @@ use core::{ ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign}, }; use ff::Field; -use rand_core::RngCore; +use rand_core::TryRng; use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; use crate::fp::{Fp, FROBENIUS_COEFF_FP2_C1}; @@ -249,8 +249,8 @@ impl Fp2 { } impl Field for Fp2 { - fn random(mut rng: impl RngCore) -> Self { - Fp2::new(Fp::random(&mut rng), Fp::random(&mut rng)) + fn try_random(rng: &mut R) -> Result { + Ok(Fp2::new(Fp::try_random(rng)?, Fp::try_random(rng)?)) } const ZERO: Self = Fp2(blst_fp2 { diff --git a/src/fp6.rs b/src/fp6.rs index 4de23f2..1f2dbc0 100644 --- a/src/fp6.rs +++ b/src/fp6.rs @@ -13,7 +13,7 @@ use crate::{ }; use ff::Field; -use rand_core::RngCore; +use rand_core::TryRng; use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; /// This represents an element $c_0 + c_1 v + c_2 v^2$ of $\mathbb{F}_{p^6} = \mathbb{F}_{p^2} / v^3 - u - 1$. @@ -253,12 +253,12 @@ impl_sum!(Fp6); impl_product!(Fp6); impl Field for Fp6 { - fn random(mut rng: impl RngCore) -> Self { - Fp6::new( - Fp2::random(&mut rng), - Fp2::random(&mut rng), - Fp2::random(&mut rng), - ) + fn try_random(rng: &mut R) -> Result { + Ok(Fp6::new( + Fp2::try_random(rng)?, + Fp2::try_random(rng)?, + Fp2::try_random(rng)?, + )) } const ZERO: Self = Fp6::new(Fp2::ZERO, Fp2::ZERO, Fp2::ZERO); diff --git a/src/g1.rs b/src/g1.rs index 343c01c..7cafd8e 100644 --- a/src/g1.rs +++ b/src/g1.rs @@ -10,10 +10,10 @@ use std::io::Read; use blst::*; use group::{ - prime::{PrimeCurve, PrimeCurveAffine, PrimeGroup}, - Curve, Group, GroupEncoding, UncompressedEncoding, WnafGroup, + prime::{PrimeCurve, PrimeGroup}, + Curve, CurveAffine, Group, GroupEncoding, UncompressedEncoding, WnafGroup, }; -use rand_core::RngCore; +use rand_core::TryRng; use subtle::{Choice, ConditionallySelectable, CtOption}; use crate::{fp::Fp, Bls12, Engine, G2Affine, Gt, PairingCurveAffine, Scalar}; @@ -651,10 +651,10 @@ impl G1Projective { impl Group for G1Projective { type Scalar = Scalar; - fn random(mut rng: impl RngCore) -> Self { + fn try_random(rng: &mut R) -> Result { let mut out = blst_p1::default(); let mut msg = [0u8; 64]; - rng.fill_bytes(&mut msg); + rng.try_fill_bytes(&mut msg)?; const DST: [u8; 16] = [0; 16]; const AUG: [u8; 16] = [0; 16]; @@ -670,7 +670,7 @@ impl Group for G1Projective { ) }; - G1Projective(out) + Ok(G1Projective(out)) } fn identity() -> Self { @@ -713,18 +713,16 @@ impl WnafGroup for G1Projective { impl PrimeGroup for G1Projective {} impl Curve for G1Projective { - type AffineRepr = G1Affine; + type Affine = G1Affine; - fn to_affine(&self) -> Self::AffineRepr { + fn to_affine(&self) -> Self::Affine { self.into() } } -impl PrimeCurve for G1Projective { - type Affine = G1Affine; -} +impl PrimeCurve for G1Projective {} -impl PrimeCurveAffine for G1Affine { +impl CurveAffine for G1Affine { type Scalar = Scalar; type Curve = G1Projective; diff --git a/src/g2.rs b/src/g2.rs index bcb9106..77e665d 100644 --- a/src/g2.rs +++ b/src/g2.rs @@ -10,10 +10,10 @@ use core::{ use blst::*; use group::{ - prime::{PrimeCurve, PrimeCurveAffine, PrimeGroup}, - Curve, Group, GroupEncoding, UncompressedEncoding, WnafGroup, + prime::{PrimeCurve, PrimeGroup}, + Curve, CurveAffine, Group, GroupEncoding, UncompressedEncoding, WnafGroup, }; -use rand_core::RngCore; +use rand_core::TryRng; use subtle::{Choice, ConditionallySelectable, CtOption}; use crate::{fp2::Fp2, Bls12, Engine, G1Affine, Gt, PairingCurveAffine, Scalar}; @@ -273,7 +273,7 @@ where } } -impl PrimeCurveAffine for G2Affine { +impl CurveAffine for G2Affine { type Scalar = Scalar; type Curve = G2Projective; @@ -619,10 +619,10 @@ impl G2Projective { impl Group for G2Projective { type Scalar = Scalar; - fn random(mut rng: impl RngCore) -> Self { + fn try_random(rng: &mut R) -> Result { let mut out = blst_p2::default(); let mut msg = [0u8; 64]; - rng.fill_bytes(&mut msg); + rng.try_fill_bytes(&mut msg)?; const DST: [u8; 16] = [0; 16]; const AUG: [u8; 16] = [0; 16]; @@ -638,7 +638,7 @@ impl Group for G2Projective { ) }; - G2Projective(out) + Ok(G2Projective(out)) } fn identity() -> Self { @@ -680,16 +680,14 @@ impl WnafGroup for G2Projective { impl PrimeGroup for G2Projective {} impl Curve for G2Projective { - type AffineRepr = G2Affine; + type Affine = G2Affine; - fn to_affine(&self) -> Self::AffineRepr { + fn to_affine(&self) -> Self::Affine { self.into() } } -impl PrimeCurve for G2Projective { - type Affine = G2Affine; -} +impl PrimeCurve for G2Projective {} impl GroupEncoding for G2Projective { type Repr = G2Compressed; diff --git a/src/gt.rs b/src/gt.rs index 9d8bfcd..ff9f17a 100644 --- a/src/gt.rs +++ b/src/gt.rs @@ -8,7 +8,7 @@ use core::{ use blst::*; use ff::Field; use group::Group; -use rand_core::RngCore; +use rand_core::TryRng; use subtle::{Choice, ConstantTimeEq}; use crate::{fp::Fp, fp12::Fp12, fp2::Fp2, fp6::Fp6, traits::Compress, Scalar}; @@ -159,16 +159,16 @@ where impl Group for Gt { type Scalar = Scalar; - fn random(mut rng: impl RngCore) -> Self { + fn try_random(rng: &mut R) -> Result { loop { - let mut out = Fp12::random(&mut rng); + let mut out = Fp12::try_random(rng)?; // Not all elements of Fp12 are elements of the prime-order multiplicative // subgroup. We run the random element through final_exponentiation to obtain // a valid element, which requires that it is non-zero. if !bool::from(out.is_zero()) { unsafe { blst_final_exp(&mut out.0, &out.0) }; - return Gt(out); + return Ok(Gt(out)); } } } @@ -397,7 +397,7 @@ impl Compress for Gt { mod tests { use super::*; - use group::{prime::PrimeCurveAffine, Curve}; + use group::{Curve, CurveAffine}; use pairing_lib::{Engine, MillerLoopResult, MultiMillerLoop}; use rand_core::SeedableRng; use rand_xorshift::XorShiftRng; diff --git a/src/lib.rs b/src/lib.rs index 7933e10..62ac58a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -41,7 +41,7 @@ mod tests; pub use crate::{fp::Fp, fp12::Fp12, fp2::Fp2}; use ff::Field; -use group::prime::PrimeCurveAffine; +use group::CurveAffine; use pairing_lib::{Engine, MultiMillerLoop, PairingCurveAffine}; /// Bls12-381 engine diff --git a/src/scalar.rs b/src/scalar.rs index ad96703..e654100 100644 --- a/src/scalar.rs +++ b/src/scalar.rs @@ -13,7 +13,7 @@ use core::{ use blst::*; use byte_slice_cast::AsByteSlice; use ff::{Field, FieldBits, PrimeField, PrimeFieldBits}; -use rand_core::RngCore; +use rand_core::TryRng; use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; use zeroize::Zeroize; @@ -341,18 +341,18 @@ impl_mul_assign!(Scalar); const REPR_SHAVE_BITS: usize = 256 - Scalar::NUM_BITS as usize; impl Field for Scalar { - fn random(mut rng: impl RngCore) -> Self { + fn try_random(rng: &mut R) -> Result { loop { let mut raw = [0u64; 4]; for int in raw.iter_mut() { - *int = rng.next_u64(); + *int = rng.try_next_u64()?; } // Mask away the unused most-significant bits. raw[3] &= 0xffffffffffffffff >> REPR_SHAVE_BITS; if let Some(scalar) = Scalar::from_u64s_le(&raw).into() { - return scalar; + return Ok(scalar); } } } diff --git a/src/serde_impl.rs b/src/serde_impl.rs index 51a5a0a..29054a5 100644 --- a/src/serde_impl.rs +++ b/src/serde_impl.rs @@ -2,7 +2,7 @@ use core::convert::TryFrom; use core::fmt; use core::marker::PhantomData; -use group::{prime::PrimeCurveAffine, Curve}; +use group::{prime::PrimeCurveAffine, Curve, CurveAffine}; use serde::{ de::{Error as DeserializeError, SeqAccess, Visitor}, ser::SerializeTuple, diff --git a/src/tests/engine.rs b/src/tests/engine.rs index 8c7575d..3eccfbb 100644 --- a/src/tests/engine.rs +++ b/src/tests/engine.rs @@ -1,7 +1,7 @@ use core::ops::MulAssign; use ff::Field; -use group::{prime::PrimeCurveAffine, Curve, Group}; +use group::{Curve, CurveAffine, Group}; use pairing_lib::{Engine, MillerLoopResult, MultiMillerLoop, PairingCurveAffine}; use rand_core::SeedableRng; use rand_xorshift::XorShiftRng; diff --git a/src/tests/field.rs b/src/tests/field.rs index 6bf62e5..4fe1fb5 100644 --- a/src/tests/field.rs +++ b/src/tests/field.rs @@ -1,5 +1,5 @@ use ff::{Field, PrimeField}; -use rand_core::{RngCore, SeedableRng}; +use rand_core::{Rng, SeedableRng}; use rand_xorshift::XorShiftRng; pub fn random_sqrt_tests() { @@ -107,7 +107,7 @@ pub fn from_str_tests() { assert!(F::from_str_vartime("00000000000").is_none()); } -fn random_multiplication_tests(rng: &mut R) { +fn random_multiplication_tests(rng: &mut R) { for _ in 0..10000 { let a = F::random(&mut *rng); let b = F::random(&mut *rng); @@ -130,7 +130,7 @@ fn random_multiplication_tests(rng: &mut R) { } } -fn random_addition_tests(rng: &mut R) { +fn random_addition_tests(rng: &mut R) { for _ in 0..10000 { let a = F::random(&mut *rng); let b = F::random(&mut *rng); @@ -153,7 +153,7 @@ fn random_addition_tests(rng: &mut R) { } } -fn random_subtraction_tests(rng: &mut R) { +fn random_subtraction_tests(rng: &mut R) { for _ in 0..10000 { let b = F::random(&mut *rng); let a = F::random(&mut *rng); @@ -171,7 +171,7 @@ fn random_subtraction_tests(rng: &mut R) { } } -fn random_negation_tests(rng: &mut R) { +fn random_negation_tests(rng: &mut R) { for _ in 0..10000 { let a = F::random(&mut *rng); let mut b = a; @@ -182,7 +182,7 @@ fn random_negation_tests(rng: &mut R) { } } -fn random_doubling_tests(rng: &mut R) { +fn random_doubling_tests(rng: &mut R) { for _ in 0..10000 { let mut a = F::random(&mut *rng); let mut b = a; @@ -193,7 +193,7 @@ fn random_doubling_tests(rng: &mut R) { } } -fn random_squaring_tests(rng: &mut R) { +fn random_squaring_tests(rng: &mut R) { for _ in 0..10000 { let mut a = F::random(&mut *rng); let mut b = a; @@ -204,7 +204,7 @@ fn random_squaring_tests(rng: &mut R) { } } -fn random_inversion_tests(rng: &mut R) { +fn random_inversion_tests(rng: &mut R) { assert_eq!(F::ZERO.invert().is_none().unwrap_u8(), 1); for i in 0..10000 { @@ -216,7 +216,7 @@ fn random_inversion_tests(rng: &mut R) { } } -fn random_expansion_tests(rng: &mut R) { +fn random_expansion_tests(rng: &mut R) { for _ in 0..10000 { // Compare (a + b)(c + d) and (a*c + b*c + a*d + b*d) diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 492fe8e..590163b 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -4,7 +4,7 @@ pub mod field; #[cfg(feature = "gpu")] #[test] fn u64_to_u32_test() { - use rand_core::{RngCore, SeedableRng}; + use rand_core::{Rng, SeedableRng}; use rand_xorshift::XorShiftRng; let seed = [0; 16];