Skip to content

Commit 7bd4b09

Browse files
committed
Rename Rng adapter types and add some static tests for them; add/update some comments. Pacify clippy and cargo vet.
1 parent 682e4f3 commit 7bd4b09

16 files changed

Lines changed: 146 additions & 53 deletions

File tree

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,11 @@ enumflags2 = "0.7"
169169
expect-test = "1.3"
170170
file-rotate = "0.7"
171171
fix-hidden-lifetime-bug = "0.2"
172-
fixed-hash = { version = "0.8", default-features = false, features = ["byteorder", "rustc-hex"] } # FIXME docs
172+
# Note: we deliberately don't enable the `rand` feature of `fixed-hash` because it still uses
173+
# the `rand` crate v0.8.x, so the `random_using` calls generated by `construct_fixed_hash!` would
174+
# require to use an adapter, which is inconvenient (we wrap the macro and provide our own implementation
175+
# of `random_using` instead).
176+
fixed-hash = { version = "0.8", default-features = false, features = ["byteorder", "rustc-hex"] }
173177
flate2 = "1.0"
174178
fs4 = "0.12"
175179
futures = { version = "0.3", default-features = false }

crypto/src/ephemeral_e2e/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub mod error;
1717

1818
use zeroize::Zeroize;
1919

20-
use randomness::{adapters::RngCore08Adapter, CryptoRng};
20+
use randomness::{adapters::Rng08Adapter, CryptoRng};
2121
use serialization::{Decode, DecodeAll, Encode};
2222

2323
use crate::symkey;
@@ -48,7 +48,7 @@ pub struct EndToEndPrivateKey {
4848
impl EndToEndPrivateKey {
4949
pub fn new_from_rng<R: CryptoRng>(rng: &mut R) -> EndToEndPrivateKey {
5050
EndToEndPrivateKey {
51-
key: x25519_dalek::ReusableSecret::random_from_rng(&mut RngCore08Adapter(rng)),
51+
key: x25519_dalek::ReusableSecret::random_from_rng(Rng08Adapter(rng)),
5252
}
5353
}
5454

crypto/src/key/secp256k1/extended_keys.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use hmac::{Hmac, Mac};
1919
use secp256k1;
2020
use sha2::Sha512;
2121

22-
use randomness::{adapters::RngCore09Adapter, CryptoRng};
22+
use randomness::{adapters::Rng09Adapter, CryptoRng};
2323
use serialization::{Decode, Encode};
2424

2525
use crate::{
@@ -92,7 +92,7 @@ impl Secp256k1ExtendedPrivateKey {
9292
let mut chain_code = [0u8; 32];
9393
rng.fill_bytes(&mut chain_code);
9494
let chain_code = chain_code.into();
95-
let private_key = secp256k1::SecretKey::new(&mut RngCore09Adapter(rng)).into();
95+
let private_key = secp256k1::SecretKey::new(&mut Rng09Adapter(rng)).into();
9696
// Generate a new private key
9797
let ext_priv = Secp256k1ExtendedPrivateKey {
9898
derivation_path: DerivationPath::empty(),

crypto/src/key/secp256k1/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub mod extended_keys;
1818
use secp256k1;
1919
use zeroize::Zeroize;
2020

21-
use randomness::{adapters::RngCore09Adapter, CryptoRng};
21+
use randomness::{adapters::Rng09Adapter, CryptoRng};
2222
use serialization::{Decode, Encode};
2323

2424
use crate::{
@@ -63,7 +63,7 @@ impl From<secp256k1::SecretKey> for Secp256k1PrivateKey {
6363
impl Secp256k1PrivateKey {
6464
pub fn new<R: CryptoRng>(rng: &mut R) -> (Secp256k1PrivateKey, Secp256k1PublicKey) {
6565
let secp = secp256k1::Secp256k1::new();
66-
let (secret, public) = secp.generate_keypair(&mut RngCore09Adapter(rng));
66+
let (secret, public) = secp.generate_keypair(&mut Rng09Adapter(rng));
6767
(
6868
Secp256k1PrivateKey::from_native(secret),
6969
Secp256k1PublicKey::from_native(public),

crypto/src/vrf/schnorrkel/data.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,15 +150,15 @@ mod tests {
150150
use hex::FromHex;
151151
use schnorrkel::{signing_context, Keypair, PublicKey, SecretKey};
152152

153-
use randomness::{adapters::RngCore08Adapter, make_pseudo_rng, make_true_rng, RngExt as _};
153+
use randomness::{adapters::Rng08Adapter, make_pseudo_rng, make_true_rng, RngExt as _};
154154
use serialization::{DecodeAll, Encode};
155155

156156
use super::*;
157157

158158
#[test]
159159
fn serialization_of_result() {
160160
let mut csprng = make_true_rng();
161-
let keypair = Keypair::generate_with(&mut RngCore08Adapter(&mut csprng));
161+
let keypair = Keypair::generate_with(&mut Rng08Adapter(&mut csprng));
162162

163163
let mut rng = make_pseudo_rng();
164164

crypto/src/vrf/schnorrkel/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
use schnorrkel::{derive::Derivation, Keypair};
1717

18-
use randomness::{adapters::RngCore08Adapter, CryptoRng};
18+
use randomness::{adapters::Rng08Adapter, CryptoRng};
1919
use serialization::{Decode, Encode};
2020

2121
use crate::key::hdkd::{
@@ -123,7 +123,7 @@ pub struct SchnorrkelPrivateKey {
123123

124124
impl SchnorrkelPrivateKey {
125125
pub fn new<R: CryptoRng>(rng: &mut R) -> (SchnorrkelPrivateKey, SchnorrkelPublicKey) {
126-
let sk = schnorrkel::SecretKey::generate_with(&mut RngCore08Adapter(rng));
126+
let sk = schnorrkel::SecretKey::generate_with(&mut Rng08Adapter(rng));
127127
let pk = sk.to_public();
128128
let sk = Self { key: sk };
129129
let pk = SchnorrkelPublicKey { key: pk };
@@ -265,7 +265,7 @@ mod tests {
265265
fn vrf_internal_simple() {
266266
let mut csprng = make_true_rng();
267267

268-
let keypair1 = Keypair::generate_with(&mut RngCore08Adapter(&mut csprng));
268+
let keypair1 = Keypair::generate_with(&mut Rng08Adapter(&mut csprng));
269269

270270
let ctx = signing_context(b"yoo!");
271271
let msg = b"meow";
@@ -299,7 +299,7 @@ mod tests {
299299
"VRF verification with incorrect message passed!"
300300
);
301301

302-
let keypair2 = Keypair::generate_with(&mut RngCore08Adapter(&mut csprng));
302+
let keypair2 = Keypair::generate_with(&mut Rng08Adapter(&mut csprng));
303303
assert!(
304304
keypair2.public.vrf_verify(ctx.bytes(msg), out1, &proof1).is_err(),
305305
"VRF verification with incorrect signer passed!"

crypto/src/vrf/transcript/mod.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub mod with_rng;
2121
mod tests {
2222
use rstest::rstest;
2323

24-
use randomness::adapters::RngCore08Adapter;
24+
use randomness::adapters::Rng08Adapter;
2525
use test_utils::random::{make_seedable_rng, Seed};
2626

2727
use crate::vrf::transcript::with_rng::VRFTranscriptWithRng;
@@ -41,10 +41,8 @@ mod tests {
4141
.attach_raw_data(b"abc", b"xyz")
4242
.attach_u64(b"rx42", 424242);
4343

44-
let mut generator = assembled_transcript
45-
.take()
46-
.build_rng()
47-
.finalize(&mut RngCore08Adapter(&mut rng));
44+
let mut generator =
45+
assembled_transcript.take().build_rng().finalize(&mut Rng08Adapter(&mut rng));
4846

4947
(0..100).map(|_| generator.gen::<u64>()).collect::<Vec<_>>()
5048
};
@@ -57,10 +55,8 @@ mod tests {
5755
.attach_raw_data(b"abc", b"xyz")
5856
.attach_u64(b"rx42", 424242);
5957

60-
let mut generator = assembled_transcript
61-
.take()
62-
.build_rng()
63-
.finalize(&mut RngCore08Adapter(&mut rng2));
58+
let mut generator =
59+
assembled_transcript.take().build_rng().finalize(&mut Rng08Adapter(&mut rng2));
6460

6561
(0..100).map(|_| generator.gen::<u64>()).collect::<Vec<_>>()
6662
};

crypto/src/vrf/transcript/no_rng.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// See the License for the specific language governing permissions and
1414
// limitations under the License.
1515

16-
use randomness::adapters::RngCore08Adapter;
16+
use randomness::adapters::Rng08Adapter;
1717

1818
use super::{traits::SignableTranscript, with_rng::VRFTranscriptWithRng};
1919

@@ -80,7 +80,7 @@ impl schnorrkel::context::SigningTranscript for VRFTranscript {
8080
label,
8181
dest,
8282
nonce_seeds,
83-
RngCore08Adapter(randomness::make_true_rng()),
83+
Rng08Adapter(randomness::make_true_rng()),
8484
)
8585
}
8686
}
@@ -110,11 +110,11 @@ mod tests {
110110
// build a random number generator using each transcript and ensure they both arrive to the same values
111111
let mut g1 = manual_transcript
112112
.build_rng()
113-
.finalize(&mut RngCore08Adapter(&mut ChaChaRng::from_seed([0u8; 32])));
113+
.finalize(&mut Rng08Adapter(&mut ChaChaRng::from_seed([0u8; 32])));
114114
let mut g2 = assembled_transcript
115115
.0
116116
.build_rng()
117-
.finalize(&mut RngCore08Adapter(&mut ChaChaRng::from_seed([0u8; 32])));
117+
.finalize(&mut Rng08Adapter(&mut ChaChaRng::from_seed([0u8; 32])));
118118

119119
for _ in 0..100 {
120120
assert_eq!(g1.gen::<u64>(), g2.gen::<u64>());

crypto/src/vrf/transcript/with_rng.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
use std::sync::{Arc, Mutex};
1717

18-
use randomness::{adapters::RngCore08Adapter, CryptoRng};
18+
use randomness::{adapters::Rng08Adapter, CryptoRng};
1919

2020
use super::{no_rng::VRFTranscript, traits::SignableTranscript};
2121

@@ -78,7 +78,7 @@ impl schnorrkel::context::SigningTranscript for VRFTranscriptWithRng<'_> {
7878

7979
fn witness_bytes(&self, label: &'static [u8], dest: &mut [u8], nonce_seeds: &[&[u8]]) {
8080
let mut r = self.1.lock().expect("Poisoned mutex");
81-
self.witness_bytes_rng(label, dest, nonce_seeds, &mut RngCore08Adapter(&mut *r))
81+
self.witness_bytes_rng(label, dest, nonce_seeds, Rng08Adapter(&mut *r))
8282
}
8383
}
8484

@@ -113,11 +113,11 @@ mod tests {
113113
// build a random number generator using each transcript and ensure they both arrive to the same values
114114
let mut g1 = manual_transcript
115115
.build_rng()
116-
.finalize(&mut RngCore08Adapter(&mut ChaChaRng::from_seed([0u8; 32])));
116+
.finalize(&mut Rng08Adapter(&mut ChaChaRng::from_seed([0u8; 32])));
117117
let mut g2 = assembled_transcript
118118
.0
119119
.build_rng()
120-
.finalize(&mut RngCore08Adapter(&mut ChaChaRng::from_seed([0u8; 32])));
120+
.finalize(&mut Rng08Adapter(&mut ChaChaRng::from_seed([0u8; 32])));
121121

122122
for _ in 0..100 {
123123
assert_eq!(g1.gen::<u64>(), g2.gen::<u64>());

deny.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ ignore = [
5050
# "bincode" is no longer maintained.
5151
"RUSTSEC-2025-0141",
5252

53-
# `rand` is unsound. Note that this has been patched in versions 0.10.1, 0.9.3 and 0.8.6, but we still have
54-
# one place where 0.7.x is technically used - it's a dependency of `probabilistic-collections` v0.7.0.
55-
# But in that crate the actual RNG is only created in `SipHasherBuilder::from_entropy`, which we do not use,
56-
# so our code is still sound.
53+
# `rand` is unsound. Note that this has been patched in versions 0.10.1, 0.9.3 and 0.8.6, but we still
54+
# have one place where `rand` 0.7.x is used - it's a dependency of `probabilistic-collections` v0.7.0.
55+
# But we don't use any code from `probabilistic-collections` that actually creates an RNG, so our code
56+
# is still sound.
5757
"RUSTSEC-2026-0097"
5858
]

0 commit comments

Comments
 (0)