diff --git a/src/network/transportsender.cc b/src/network/transportsender.cc index bf4af6b..2566bcc 100644 --- a/src/network/transportsender.cc +++ b/src/network/transportsender.cc @@ -46,9 +46,9 @@ TransportSender::TransportSender( Connection *s_connection, MyState &in ack_num( 0 ), pending_data_ack( false ), SEND_MINDELAY( 15 ), - last_heard( 0 ) + last_heard( 0 ), + prng() { - srand( time( NULL ) ); /* for chaff */ } /* Try to send roughly two frames per RTT, bounded by limits on frame rate */ @@ -263,13 +263,11 @@ void TransportSender::rationalize_states( void ) template const string TransportSender::make_chaff( void ) { - const int CHAFF_MAX = 16; + const size_t CHAFF_MAX = 16; + const size_t chaff_len = prng.uint8() % (CHAFF_MAX + 1); char chaff[ CHAFF_MAX ]; - for ( int i = 0; i < CHAFF_MAX; i++ ) { - chaff[ i ] = rand() % 256; - } - int chaff_len = rand() % (CHAFF_MAX + 1); + prng.fill( chaff, chaff_len ); return string( chaff, chaff_len ); } diff --git a/src/network/transportsender.h b/src/network/transportsender.h index f016bdf..a47e6dd 100644 --- a/src/network/transportsender.h +++ b/src/network/transportsender.h @@ -27,6 +27,7 @@ #include "transportinstruction.pb.h" #include "transportstate.h" #include "transportfragment.h" +#include "prng.h" using std::list; using std::pair; @@ -86,7 +87,9 @@ namespace Network { uint64_t last_heard; /* last time received new state */ - static const string make_chaff( void ); + /* chaff to disguise instruction length */ + PRNG prng; + const string make_chaff( void ); public: /* constructor */