Skip to content

Commit bb6d910

Browse files
committed
refactor(rand): remove randombytes_into usages
1 parent 0ab46c1 commit bb6d910

File tree

18 files changed

+123
-132
lines changed

18 files changed

+123
-132
lines changed

examples/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ futures = { version = "0.3", default-features = false, features = ["std", "async
1515
env_logger = "0.8"
1616
hex = "0.4"
1717
failure = "0.1"
18+
rand = "0.8"
1819

1920
[dev-dependencies.tokio]
2021
version = "1.0"

examples/echo.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use futures::{*, future::TryFutureExt};
1010
use futures::channel::mpsc;
1111
use hex::FromHex;
1212
use failure::{err_msg, Error};
13+
use rand::thread_rng;
1314

1415
use std::net::SocketAddr;
1516

@@ -49,11 +50,13 @@ const TCP_RELAYS: [(&str, &str); 5] = [
4950
async fn main() -> Result<(), Error> {
5051
env_logger::init();
5152

53+
let mut rng = thread_rng();
54+
5255
let (dht_pk, dht_sk) = gen_keypair();
5356

5457
// create random tox id and print it
5558
let (real_pk, real_sk) = gen_keypair();
56-
let id = ToxId::new(real_pk);
59+
let id = ToxId::new(&mut rng, real_pk);
5760
println!("your tox id is: {:X}",id);
5861

5962
// Create a channel for server to communicate with network

tox_core/src/dht/server/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ impl Server {
201201
request_queue: Arc::new(RwLock::new(RequestQueue::new(PING_TIMEOUT))),
202202
close_nodes: Arc::new(RwLock::new(ForcedKtree::new(&pk))),
203203
onion_symmetric_key: Arc::new(RwLock::new(onion_symmetric_key)),
204-
onion_announce: Arc::new(RwLock::new(OnionAnnounce::new(pk))),
204+
onion_announce: Arc::new(RwLock::new(OnionAnnounce::new(&mut rng, pk))),
205205
fake_friends_keys,
206206
friends: Arc::new(RwLock::new(friends)),
207207
nodes_to_bootstrap: Arc::new(RwLock::new(Kbucket::new(MAX_TO_BOOTSTRAP))),

tox_core/src/onion/onion_announce.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::net::{IpAddr, SocketAddr};
66
use std::time::{Duration, Instant, SystemTime};
77
use sha2::{Digest, Sha256};
88
use sha2::digest::generic_array::typenum::marker_traits::Unsigned;
9+
use rand::Rng;
910

1011
use tox_binary_io::*;
1112
use tox_crypto::*;
@@ -164,11 +165,9 @@ pub struct OnionAnnounce {
164165

165166
impl OnionAnnounce {
166167
/// Create new `OnionAnnounce` instance.
167-
pub fn new(dht_pk: PublicKey) -> OnionAnnounce {
168-
let mut secret_bytes = [0; SECRET_BYTES_SIZE];
169-
randombytes_into(&mut secret_bytes);
168+
pub fn new<R: Rng>(rng: &mut R, dht_pk: PublicKey) -> OnionAnnounce {
170169
OnionAnnounce {
171-
secret_bytes,
170+
secret_bytes: rng.gen(),
172171
entries: Vec::with_capacity(ONION_ANNOUNCE_MAX_ENTRIES),
173172
dht_pk
174173
}
@@ -338,6 +337,8 @@ impl OnionAnnounce {
338337

339338
#[cfg(test)]
340339
mod tests {
340+
use rand::thread_rng;
341+
341342
use super::*;
342343

343344
const ONION_RETURN_3_PAYLOAD_SIZE: usize = ONION_RETURN_3_SIZE - xsalsa20poly1305::NONCE_SIZE;
@@ -381,7 +382,7 @@ mod tests {
381382
#[test]
382383
fn ping_id_respects_timeout_gap() {
383384
crypto_init().unwrap();
384-
let onion_announce = OnionAnnounce::new(gen_keypair().0);
385+
let onion_announce = OnionAnnounce::new(&mut thread_rng(), gen_keypair().0);
385386

386387
let time = SystemTime::now();
387388
let time_1 = time - Duration::from_secs(unix_time(time) % PING_ID_TIMEOUT.as_secs());
@@ -399,7 +400,7 @@ mod tests {
399400
#[test]
400401
fn ping_id_depends_on_all_args() {
401402
crypto_init().unwrap();
402-
let onion_announce = OnionAnnounce::new(gen_keypair().0);
403+
let onion_announce = OnionAnnounce::new(&mut thread_rng(), gen_keypair().0);
403404

404405
let time_1 = SystemTime::now();
405406
let time_2 = time_1 + PING_ID_TIMEOUT;
@@ -446,7 +447,7 @@ mod tests {
446447
async fn expired_entry_not_in_entries() {
447448
crypto_init().unwrap();
448449
let dht_pk = gen_keypair().0;
449-
let mut onion_announce = OnionAnnounce::new(dht_pk);
450+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
450451

451452
let entry = create_random_entry("1.2.3.4:12345".parse().unwrap());
452453
let entry_pk = entry.pk;
@@ -469,7 +470,7 @@ mod tests {
469470
fn add_to_entries_when_limit_is_not_reached() {
470471
crypto_init().unwrap();
471472
let dht_pk = gen_keypair().0;
472-
let mut onion_announce = OnionAnnounce::new(dht_pk);
473+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
473474

474475
let mut pks = Vec::new();
475476

@@ -492,7 +493,7 @@ mod tests {
492493
async fn add_to_entries_should_update_existent_entry() {
493494
crypto_init().unwrap();
494495
let dht_pk = gen_keypair().0;
495-
let mut onion_announce = OnionAnnounce::new(dht_pk);
496+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
496497

497498
let mut pks = Vec::new();
498499

@@ -533,7 +534,7 @@ mod tests {
533534
async fn add_to_entries_should_replace_timed_out_entries() {
534535
crypto_init().unwrap();
535536
let dht_pk = gen_keypair().0;
536-
let mut onion_announce = OnionAnnounce::new(dht_pk);
537+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
537538

538539
let mut pks = Vec::new();
539540

@@ -576,7 +577,7 @@ mod tests {
576577
fn add_to_entries_should_replace_the_farthest_entry() {
577578
crypto_init().unwrap();
578579
let dht_pk = PublicKey::from_slice(&[0; 32]).unwrap();
579-
let mut onion_announce = OnionAnnounce::new(dht_pk);
580+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
580581

581582
// add one entry with farthest pk
582583
let mut entry = create_random_entry("1.2.3.4:12345".parse().unwrap());
@@ -612,7 +613,7 @@ mod tests {
612613
fn add_to_entries_should_should_not_add_the_farthest_entry() {
613614
crypto_init().unwrap();
614615
let dht_pk = PublicKey::from_slice(&[0; 32]).unwrap();
615-
let mut onion_announce = OnionAnnounce::new(dht_pk);
616+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
616617

617618
let mut pks = Vec::new();
618619

@@ -650,7 +651,7 @@ mod tests {
650651
let data_pk = gen_keypair().0;
651652
let packet_pk = gen_keypair().0;
652653

653-
let mut onion_announce = OnionAnnounce::new(dht_pk);
654+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
654655

655656
// insert random entry
656657
let entry = create_random_entry("1.2.3.4:12345".parse().unwrap());
@@ -687,7 +688,7 @@ mod tests {
687688
let data_pk = gen_keypair().0;
688689
let packet_pk = gen_keypair().0;
689690

690-
let mut onion_announce = OnionAnnounce::new(dht_pk);
691+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
691692

692693
// insert random entry
693694
let entry = create_random_entry("1.2.3.4:12345".parse().unwrap());
@@ -728,7 +729,7 @@ mod tests {
728729
let data_pk = gen_keypair().0;
729730
let packet_pk = gen_keypair().0;
730731

731-
let mut onion_announce = OnionAnnounce::new(dht_pk);
732+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
732733

733734
// insert random entry
734735
let entry = create_random_entry("1.2.3.4:12345".parse().unwrap());
@@ -768,7 +769,7 @@ mod tests {
768769
let data_pk = gen_keypair().0;
769770
let packet_pk = gen_keypair().0;
770771

771-
let mut onion_announce = OnionAnnounce::new(dht_pk);
772+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
772773

773774
// insert ourselves
774775
let mut entry = create_random_entry("1.2.3.4:12345".parse().unwrap());
@@ -807,7 +808,7 @@ mod tests {
807808
crypto_init().unwrap();
808809
let (dht_pk, _dht_sk) = gen_keypair();
809810

810-
let mut onion_announce = OnionAnnounce::new(dht_pk);
811+
let mut onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
811812

812813
// insert random entry
813814
let entry = create_random_entry("1.2.3.4:12345".parse().unwrap());
@@ -852,7 +853,7 @@ mod tests {
852853
crypto_init().unwrap();
853854
let (dht_pk, _dht_sk) = gen_keypair();
854855

855-
let onion_announce = OnionAnnounce::new(dht_pk);
856+
let onion_announce = OnionAnnounce::new(&mut thread_rng(), dht_pk);
856857

857858
let onion_return = OnionReturn {
858859
nonce: [42; xsalsa20poly1305::NONCE_SIZE],

tox_core/src/state_format/old.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use nom::{
77
combinator::rest,
88
bytes::complete::take,
99
};
10+
use rand::{Rng, distributions::{Distribution, Standard}};
1011

1112
use tox_binary_io::*;
1213
use tox_crypto::*;
@@ -36,13 +37,11 @@ pub struct NospamKeys {
3637
/// Number of bytes of serialized [`NospamKeys`](./struct.NospamKeys.html).
3738
pub const NOSPAMKEYSBYTES: usize = NOSPAMBYTES + PUBLICKEYBYTES + SECRETKEYBYTES;
3839

39-
impl NospamKeys {
40-
/// Generates random `NospamKeys`.
41-
pub fn random() -> Self {
42-
let nospam = NoSpam::random();
40+
impl Distribution<NospamKeys> for Standard {
41+
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> NospamKeys {
4342
let (pk, sk) = gen_keypair();
4443
NospamKeys {
45-
nospam,
44+
nospam: rng.gen(),
4645
pk,
4746
sk
4847
}
@@ -615,12 +614,13 @@ impl ToBytes for State {
615614
mod tests {
616615
use super::*;
617616

617+
use rand::thread_rng;
618618
use tox_packet::ip_port::*;
619619

620620
encode_decode_test!(
621621
tox_crypto::crypto_init().unwrap(),
622622
no_spam_keys_encode_decode,
623-
NospamKeys::random()
623+
thread_rng().gen::<NospamKeys>()
624624
);
625625

626626
encode_decode_test!(
@@ -755,7 +755,7 @@ mod tests {
755755
state_encode_decode,
756756
State {
757757
sections: vec![
758-
Section::NospamKeys(NospamKeys::random()),
758+
Section::NospamKeys(thread_rng().gen()),
759759
Section::DhtState(DhtState(vec![
760760
PackedNode {
761761
pk: gen_keypair().0,

tox_crypto/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
33
#![allow(clippy::result_unit_err)]
44

5-
pub use sodiumoxide::randombytes::randombytes_into;
65
pub use sodiumoxide::crypto::box_::*;
76

87
// TODO: check if `#[inline]` is actually useful

tox_packet/src/friend_connection/friend_requests.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,11 @@ impl FriendRequests {
6565
#[cfg(test)]
6666
mod tests {
6767
use super::*;
68+
use crate::toxid::NOSPAMBYTES;
6869

6970
encode_decode_test!(
7071
tox_crypto::crypto_init().unwrap(),
7172
friend_requests_encode_decode,
72-
FriendRequests::new(NoSpam::random(), vec![1,2,3,4])
73+
FriendRequests::new(NoSpam([42; NOSPAMBYTES]), vec![1,2,3,4])
7374
);
7475
}

tox_packet/src/friend_connection/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ impl FromBytes for Packet {
6666
#[cfg(test)]
6767
mod tests {
6868
use super::*;
69-
use crate::toxid::NoSpam;
69+
use crate::toxid::{NoSpam, NOSPAMBYTES};
7070
use crate::dht::packed_node::*;
7171

7272
encode_decode_test!(
@@ -78,7 +78,7 @@ mod tests {
7878
encode_decode_test!(
7979
tox_crypto::crypto_init().unwrap(),
8080
packet_friend_requests_encode_decode,
81-
Packet::FriendRequests(FriendRequests::new(NoSpam::random(), vec![1,2,3,4]))
81+
Packet::FriendRequests(FriendRequests::new(NoSpam([42; NOSPAMBYTES]), vec![1,2,3,4]))
8282
);
8383

8484
encode_decode_test!(

tox_packet/src/messenger/conference/invite.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,6 @@ mod tests {
7373
encode_decode_test!(
7474
tox_crypto::crypto_init().unwrap(),
7575
invite_encode_decode,
76-
Invite::new(1, ConferenceType::Text, ConferenceUid::random())
76+
Invite::new(1, ConferenceType::Text, ConferenceUid([42; CONFERENCE_UID_BYTES]))
7777
);
7878
}

tox_packet/src/messenger/conference/invite_response.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,6 @@ mod tests {
8080
encode_decode_test!(
8181
tox_crypto::crypto_init().unwrap(),
8282
invite_response_encode_decode,
83-
InviteResponse::new(1, 2, ConferenceType::Audio, ConferenceUid::random())
83+
InviteResponse::new(1, 2, ConferenceType::Audio, ConferenceUid([42; CONFERENCE_UID_BYTES]))
8484
);
8585
}

0 commit comments

Comments
 (0)