Skip to content

Commit 10375a6

Browse files
committed
Centralize dependency on Rng instance
Use tink_core::subtle::random::rng() return an instance of the tink_core::subtle::random::Generator trait, which is just a combination of rand::RngCore and rand::CryptoRng. Use this rng() instance throughout the code. Drop a couple of direct dependencies on rand which were not needed.
1 parent 12692a0 commit 10375a6

File tree

11 files changed

+31
-22
lines changed

11 files changed

+31
-22
lines changed

Cargo.lock

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

aead/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ aes-gcm-siv = "^0.10"
1818
chacha20poly1305 = "^0.8"
1919
generic-array = "^0.14.4"
2020
prost = "^0.8"
21-
rand = "^0.7"
2221
tink-core = "^0.2"
2322
tink-mac = "^0.2"
2423
tink-proto = "^0.2"

core/src/keyset/manager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ impl Manager {
209209

210210
/// Generate a key id that has not been used by any key in the [`Keyset`](tink_proto::Keyset).
211211
fn new_key_id(&self) -> KeyId {
212-
let mut rng = rand::thread_rng();
212+
let mut rng = crate::subtle::random::rng();
213213

214214
loop {
215215
let ret = rng.gen::<u32>();

core/src/subtle/random.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,28 @@
1616

1717
//! Utilities for random data.
1818
19-
use rand::{thread_rng, Rng};
19+
use rand::Rng;
20+
21+
/// Trait that encapsulates the required traits that a generator instance
22+
/// must implement.
23+
pub trait Generator: rand::RngCore + rand::CryptoRng {}
24+
25+
// Blanket implementation.
26+
impl<T> Generator for T where T: rand::RngCore + rand::CryptoRng {}
27+
28+
/// Return a random number generator suitable for cryptographic operation.
29+
pub fn rng() -> Box<dyn Generator> {
30+
Box::new(rand::thread_rng())
31+
}
2032

2133
/// Return a vector of the given `size` filled with random bytes.
2234
pub fn get_random_bytes(size: usize) -> Vec<u8> {
2335
let mut data = vec![0u8; size];
24-
thread_rng().fill(&mut data[..]);
36+
rng().fill(&mut data[..]);
2537
data
2638
}
2739

2840
/// Randomly generate an unsigned 32-bit integer.
2941
pub fn get_random_uint32() -> u32 {
30-
thread_rng().gen()
42+
rng().gen()
3143
}

signature/src/ed25519_signer_key_manager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl tink_core::registry::KeyManager for Ed25519SignerKeyManager {
4747
}
4848

4949
fn new_key(&self, _serialized_key_format: &[u8]) -> Result<Vec<u8>, TinkError> {
50-
let mut csprng = rand::rngs::OsRng {};
50+
let mut csprng = tink_core::subtle::random::rng();
5151
let keypair = ed25519_dalek::Keypair::generate(&mut csprng);
5252

5353
let public_proto = tink_proto::Ed25519PublicKey {

streaming/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ aes = { version = "^0.7.4", features = ["ctr"] }
1414
# Need the `std` feature for Error type conversion
1515
aes-gcm = { version = "^0.9.2", features = ["std"] }
1616
prost = "^0.8"
17-
rand = "^0.7"
1817
tink-core = "^0.2"
1918
tink-mac = "^0.2"
2019
tink-proto = "^0.2"

tests/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ pub fn get_ecdsa_params(
387387
/// Create an [`Ed25519PrivateKey`](tink_proto::Ed25519PrivateKey) with randomly generated key
388388
/// material.
389389
pub fn new_ed25519_private_key() -> tink_proto::Ed25519PrivateKey {
390-
let mut csprng = rand::thread_rng();
390+
let mut csprng = tink_core::subtle::random::rng();
391391
let keypair = ed25519_dalek::Keypair::generate(&mut csprng);
392392

393393
let public_proto = tink_proto::Ed25519PublicKey {

tests/tests/aead/subtle/chacha20poly1305_test.rs

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

1717
use super::{chacha20poly1305_vectors::*, wycheproof::*};
18-
use rand::{thread_rng, Rng};
18+
use rand::Rng;
1919
use std::collections::HashSet;
2020
use tink_aead::subtle;
2121
use tink_core::{subtle::random::get_random_bytes, Aead};
@@ -172,7 +172,7 @@ fn test_cha_cha20_poly1305_modify_ciphertext() {
172172
.unwrap_or_else(|e| panic!("#{}: encrypt failed: {:?}", i, e));
173173

174174
if !aad.is_empty() {
175-
let alter_aad_idx = thread_rng().gen_range(0, aad.len());
175+
let alter_aad_idx = tink_core::subtle::random::rng().gen_range(0, aad.len());
176176
aad[alter_aad_idx] ^= 0x80;
177177
assert!(
178178
ca.decrypt(&ct, &aad).is_err(),
@@ -182,7 +182,7 @@ fn test_cha_cha20_poly1305_modify_ciphertext() {
182182
aad[alter_aad_idx] ^= 0x80;
183183
}
184184

185-
let alter_ct_idx = thread_rng().gen_range(0, ct.len());
185+
let alter_ct_idx = tink_core::subtle::random::rng().gen_range(0, ct.len());
186186
ct[alter_ct_idx] ^= 0x80;
187187
assert!(
188188
ca.decrypt(&ct, &aad).is_err(),

tests/tests/aead/subtle/xchacha20poly1305_test.rs

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

1717
use super::{wycheproof::*, xchacha20poly1305_vectors::*};
18-
use rand::{thread_rng, Rng};
18+
use rand::Rng;
1919
use std::collections::HashSet;
2020
use tink_aead::subtle;
2121
use tink_core::{subtle::random::get_random_bytes, Aead};
@@ -173,7 +173,7 @@ fn test_x_cha_cha20_poly1305_modify_ciphertext() {
173173
.unwrap_or_else(|e| panic!("#{}: encrypt failed: {:?}", i, e));
174174

175175
if !aad.is_empty() {
176-
let alter_aad_idx = thread_rng().gen_range(0, aad.len());
176+
let alter_aad_idx = tink_core::subtle::random::rng().gen_range(0, aad.len());
177177
aad[alter_aad_idx] ^= 0x80;
178178
assert!(
179179
ca.decrypt(&ct, &aad).is_err(),
@@ -183,7 +183,7 @@ fn test_x_cha_cha20_poly1305_modify_ciphertext() {
183183
aad[alter_aad_idx] ^= 0x80;
184184
}
185185

186-
let alter_ct_idx = thread_rng().gen_range(0, ct.len());
186+
let alter_ct_idx = tink_core::subtle::random::rng().gen_range(0, ct.len());
187187
ct[alter_ct_idx] ^= 0x80;
188188
assert!(
189189
ca.decrypt(&ct, &aad).is_err(),

tests/tests/signature/subtle/ed25519_signer_verifier_test.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use tink_tests::WycheproofResult;
2323
#[test]
2424
fn test_ed25519_deterministic() {
2525
let data = get_random_bytes(20);
26-
let mut csprng = rand::thread_rng();
26+
let mut csprng = tink_core::subtle::random::rng();
2727
let keypair = Keypair::generate(&mut csprng);
2828

2929
// Use the private key and public key directly to create new instances
@@ -46,7 +46,7 @@ fn test_ed25519_deterministic() {
4646
#[test]
4747
fn test_ed25519_verify_modified_signature() {
4848
let data = get_random_bytes(20);
49-
let mut csprng = rand::thread_rng();
49+
let mut csprng = tink_core::subtle::random::rng();
5050
let keypair = Keypair::generate(&mut csprng);
5151

5252
// Use the private key and public key directly to create new instances
@@ -73,7 +73,7 @@ fn test_ed25519_verify_modified_signature() {
7373
#[test]
7474
fn test_ed25519_verify_truncated_signature() {
7575
let data = get_random_bytes(20);
76-
let mut csprng = rand::thread_rng();
76+
let mut csprng = tink_core::subtle::random::rng();
7777
let keypair = Keypair::generate(&mut csprng);
7878

7979
// Use the private key and public key directly to create new instances
@@ -89,7 +89,7 @@ fn test_ed25519_verify_truncated_signature() {
8989
#[test]
9090
fn test_ed25519_verify_modified_message() {
9191
let mut data = get_random_bytes(20);
92-
let mut csprng = rand::thread_rng();
92+
let mut csprng = tink_core::subtle::random::rng();
9393
let keypair = Keypair::generate(&mut csprng);
9494

9595
// Use the private key and public key directly to create new instances
@@ -114,7 +114,7 @@ fn test_ed25519_verify_modified_message() {
114114
}
115115
#[test]
116116
fn test_ed25519_sign_verify() {
117-
let mut csprng = rand::thread_rng();
117+
let mut csprng = tink_core::subtle::random::rng();
118118
let keypair = Keypair::generate(&mut csprng);
119119
let seed = keypair.secret.as_bytes().to_vec();
120120

0 commit comments

Comments
 (0)