Skip to content

Commit b6fe251

Browse files
Remove direct dependency on rand and rand_core (#193)
1 parent edcc0da commit b6fe251

File tree

4 files changed

+17
-17
lines changed

4 files changed

+17
-17
lines changed

Cargo.toml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ xchachapoly = ["use-xchacha20poly1305"]
4242

4343
# Enable std features on dependencies if possible.
4444
std = [
45-
"rand_core/std",
45+
"getrandom/std",
4646
"subtle/std",
4747
"ring/std",
4848
"blake2/std",
@@ -73,8 +73,7 @@ harness = false
7373
travis-ci = { repository = "mcginty/snow", branch = "master" }
7474

7575
[dependencies]
76-
# TODO: Waiting on https://github.com/RustCrypto/traits/issues/1642
77-
rand_core = { version = "0.9", default-features = false, features = ["os_rng"] }
76+
getrandom = { version = "0.3" }
7877
subtle = { version = "2.4", default-features = false }
7978

8079
# default crypto provider
@@ -101,8 +100,7 @@ serde_json = "1.0"
101100
serde_derive = "1.0"
102101
hex = "0.4"
103102
x25519-dalek = "2.0"
104-
# TODO: Waiting on https://github.com/RustCrypto/traits/issues/1642
105-
rand = "0.9"
103+
rand_core = { version = "0.9", default-features = false }
106104

107105
[build-dependencies]
108106
rustc_version = "0.4"

src/resolvers/default.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,16 @@ use crate::{
4545
types::{Cipher, Dh, Hash, Random},
4646
Error,
4747
};
48-
use rand_core::OsRng;
48+
49+
// NB: Intentionally private so RNG details aren't leaked into
50+
// the public API.
51+
struct OsRng;
52+
53+
impl Random for OsRng {
54+
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
55+
getrandom::fill(dest).map_err(|_| Error::Rng)
56+
}
57+
}
4958

5059
/// The default resolver provided by snow. This resolver is designed to
5160
/// support as many of the Noise spec primitives as possible with
@@ -177,12 +186,6 @@ struct Kyber1024 {
177186
pubkey: kyber1024::PublicKey,
178187
}
179188

180-
impl Random for OsRng {
181-
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
182-
<Self as rand_core::TryRngCore>::try_fill_bytes(self, dest).map_err(|_| Error::Rng)
183-
}
184-
}
185-
186189
#[cfg(feature = "use-curve25519")]
187190
impl Dh25519 {
188191
fn derive_pubkey(&mut self) {

src/resolvers/ring.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ impl CryptoResolver for RingResolver {
4545
}
4646
}
4747

48+
// NB: Intentionally private so RNG details aren't leaked into
49+
// the public API.
4850
struct RingRng {
4951
rng: SystemRandom,
5052
}

tests/vectors.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
extern crate serde_derive;
55

66
use hex::FromHex;
7-
use rand::RngCore;
87
use serde::{
98
de::{self, Deserialize, Deserializer, Unexpected, Visitor},
109
ser::{Serialize, Serializer},
@@ -306,15 +305,13 @@ fn test_vectors_from_json(json: &str) {
306305

307306
fn random_slice<const N: usize>() -> [u8; N] {
308307
let mut v = [0_u8; N];
309-
let mut rng = rand::rng();
310-
rng.fill_bytes(&mut v);
308+
getrandom::fill(&mut v).unwrap();
311309
v
312310
}
313311

314312
fn random_vec(size: usize) -> Vec<u8> {
315313
let mut v = vec![0_u8; size];
316-
let mut rng = rand::rng();
317-
rng.fill_bytes(&mut v);
314+
getrandom::fill(&mut v).unwrap();
318315
v
319316
}
320317

0 commit comments

Comments
 (0)