@@ -6,6 +6,7 @@ use std::net::{IpAddr, SocketAddr};
66use std:: time:: { Duration , Instant , SystemTime } ;
77use sha2:: { Digest , Sha256 } ;
88use sha2:: digest:: generic_array:: typenum:: marker_traits:: Unsigned ;
9+ use rand:: { CryptoRng , Rng } ;
910
1011use tox_binary_io:: * ;
1112use tox_crypto:: * ;
@@ -164,11 +165,9 @@ pub struct OnionAnnounce {
164165
165166impl 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 + CryptoRng > ( 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) ]
340339mod 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 ] ,
0 commit comments