1414
1515use crate :: constants:: { HEADER_INTEGRITY_MAC_SIZE , MAX_PATH_LENGTH , NODE_META_INFO_SIZE } ;
1616use crate :: crypto;
17- use crate :: header:: keys :: RoutingKeys ;
17+ use crate :: header:: shared_secret :: ExpandedSharedSecret ;
1818use crate :: { constants, utils} ;
1919
2020pub const FILLER_STEP_SIZE_INCREASE : usize = NODE_META_INFO_SIZE + HEADER_INTEGRITY_MAC_SIZE ;
2121
2222#[ derive( Debug , PartialEq , Eq ) ]
23- pub struct Filler {
24- value : Vec < u8 > ,
25- }
23+ pub struct Filler ( Vec < u8 > ) ;
2624
2725impl Filler {
28- pub fn new ( routing_keys : & [ RoutingKeys ] ) -> Self {
29- assert ! ( routing_keys . len( ) <= MAX_PATH_LENGTH ) ;
30- let filler_value = routing_keys
26+ pub ( crate ) fn new ( expanded_shared_secrets : & [ ExpandedSharedSecret ] ) -> Self {
27+ assert ! ( expanded_shared_secrets . len( ) <= MAX_PATH_LENGTH ) ;
28+ let filler_value = expanded_shared_secrets
3129 . iter ( )
32- . map ( |node_routing_keys| node_routing_keys . stream_cipher_key ) // we only want the cipher key
30+ . map ( |ess| ess . stream_cipher_key ( ) ) // we only want the cipher key
3331 . map ( |cipher_key| {
3432 crypto:: generate_pseudorandom_bytes (
35- & cipher_key,
33+ cipher_key,
3634 & crypto:: STREAM_CIPHER_INIT_VECTOR ,
3735 constants:: STREAM_CIPHER_OUTPUT_LENGTH ,
3836 )
@@ -45,9 +43,7 @@ impl Filler {
4543 Self :: filler_step ( filler_string_accumulator, i, pseudorandom_bytes)
4644 } ,
4745 ) ;
48- Self {
49- value : filler_value,
50- }
46+ Self ( filler_value)
5147 }
5248
5349 fn filler_step (
@@ -75,41 +71,44 @@ impl Filler {
7571
7672 filler_string_accumulator
7773 }
74+ }
7875
79- pub fn get_value ( self ) -> Vec < u8 > {
80- self . value
76+ impl From < Vec < u8 > > for Filler {
77+ fn from ( raw_bytes : Vec < u8 > ) -> Self {
78+ Self ( raw_bytes)
8179 }
80+ }
8281
83- pub ( crate ) fn from_raw ( raw_value : Vec < u8 > ) -> Self {
84- Filler { value : raw_value }
82+ impl From < Filler > for Vec < u8 > {
83+ fn from ( filler : Filler ) -> Self {
84+ filler. 0
8585 }
8686}
8787
8888#[ cfg( test) ]
8989mod test_creating_pseudorandom_bytes {
90- use crate :: header:: keys;
91-
9290 use super :: * ;
91+ use crate :: header:: shared_secret:: ExpandSecret ;
9392 use x25519_dalek:: { PublicKey , StaticSecret } ;
9493
9594 #[ test]
9695 fn with_no_keys_it_generates_empty_filler_string ( ) {
97- let routing_keys : Vec < RoutingKeys > = vec ! [ ] ;
98- let filler_string = Filler :: new ( & routing_keys ) ;
96+ let expanded_shared_secret : Vec < _ > = vec ! [ ] ;
97+ let filler_string = Filler :: new ( & expanded_shared_secret ) ;
9998
100- assert_eq ! ( 0 , filler_string. value . len( ) ) ;
99+ assert_eq ! ( 0 , filler_string. 0 . len( ) ) ;
101100 }
102101
103102 #[ test]
104103 fn with_1_key_it_generates_filler_of_length_1_times_3_times_security_parameter ( ) {
105104 let shared_keys = [ PublicKey :: from ( & StaticSecret :: random ( ) ) ] ;
106- let routing_keys : Vec < _ > = shared_keys
105+ let expanded_shared_secret : Vec < _ > = shared_keys
107106 . iter ( )
108- . map ( |& key| keys :: RoutingKeys :: derive ( key) )
107+ . map ( |& key| key. expand_shared_secret ( ) )
109108 . collect ( ) ;
110- let filler_string = Filler :: new ( & routing_keys ) ;
109+ let filler_string = Filler :: new ( & expanded_shared_secret ) ;
111110
112- assert_eq ! ( FILLER_STEP_SIZE_INCREASE , filler_string. value . len( ) ) ;
111+ assert_eq ! ( FILLER_STEP_SIZE_INCREASE , filler_string. 0 . len( ) ) ;
113112 }
114113
115114 #[ test]
@@ -119,12 +118,12 @@ mod test_creating_pseudorandom_bytes {
119118 PublicKey :: from ( & StaticSecret :: random ( ) ) ,
120119 PublicKey :: from ( & StaticSecret :: random ( ) ) ,
121120 ] ;
122- let routing_keys : Vec < _ > = shared_keys
121+ let expanded_shared_secret : Vec < _ > = shared_keys
123122 . iter ( )
124- . map ( |& key| keys :: RoutingKeys :: derive ( key) )
123+ . map ( |& key| key. expand_shared_secret ( ) )
125124 . collect ( ) ;
126- let filler_string = Filler :: new ( & routing_keys ) ;
127- assert_eq ! ( 3 * FILLER_STEP_SIZE_INCREASE , filler_string. value . len( ) ) ;
125+ let filler_string = Filler :: new ( & expanded_shared_secret ) ;
126+ assert_eq ! ( 3 * FILLER_STEP_SIZE_INCREASE , filler_string. 0 . len( ) ) ;
128127 }
129128
130129 #[ test]
@@ -133,43 +132,43 @@ mod test_creating_pseudorandom_bytes {
133132 let shared_keys: Vec < _ > = std:: iter:: repeat_n ( ( ) , constants:: MAX_PATH_LENGTH + 1 )
134133 . map ( |_| PublicKey :: from ( & StaticSecret :: random ( ) ) )
135134 . collect ( ) ;
136- let routing_keys : Vec < _ > = shared_keys
135+ let expanded_shared_secrets : Vec < _ > = shared_keys
137136 . iter ( )
138- . map ( |& key| keys :: RoutingKeys :: derive ( key) )
137+ . map ( |& key| key. expand_shared_secret ( ) )
139138 . collect ( ) ;
140- Filler :: new ( & routing_keys ) ;
139+ Filler :: new ( & expanded_shared_secrets ) ;
141140 }
142141}
143142
144143#[ cfg( test) ]
145144mod test_new_filler_bytes {
146145 use super :: * ;
147- use crate :: test_utils:: fixtures:: routing_keys_fixture ;
146+ use crate :: test_utils:: fixtures:: expanded_shared_secret_fixture ;
148147
149148 #[ test]
150- fn it_retusn_filler_bytes_of_correct_length_for_3_routing_keys ( ) {
151- let routing_key_1 = routing_keys_fixture ( ) ;
152- let routing_key_2 = routing_keys_fixture ( ) ;
153- let routing_key_3 = routing_keys_fixture ( ) ;
154- let routing_keys = [ routing_key_1, routing_key_2, routing_key_3] ;
155- let filler = Filler :: new ( & routing_keys ) ;
149+ fn it_retusn_filler_bytes_of_correct_length_for_3_expanded_shared_secret ( ) {
150+ let routing_key_1 = expanded_shared_secret_fixture ( ) ;
151+ let routing_key_2 = expanded_shared_secret_fixture ( ) ;
152+ let routing_key_3 = expanded_shared_secret_fixture ( ) ;
153+ let expanded_shared_secret = [ routing_key_1, routing_key_2, routing_key_3] ;
154+ let filler = Filler :: new ( & expanded_shared_secret ) ;
156155 assert_eq ! (
157- FILLER_STEP_SIZE_INCREASE * ( routing_keys . len( ) ) ,
158- filler. get_value ( ) . len( )
156+ FILLER_STEP_SIZE_INCREASE * ( expanded_shared_secret . len( ) ) ,
157+ filler. 0 . len( )
159158 )
160159 }
161160
162161 #[ test]
163- fn it_retusn_filler_bytes_of_correct_length_for_4_routing_keys ( ) {
164- let routing_key_1 = routing_keys_fixture ( ) ;
165- let routing_key_2 = routing_keys_fixture ( ) ;
166- let routing_key_3 = routing_keys_fixture ( ) ;
167- let routing_key_4 = routing_keys_fixture ( ) ;
168- let routing_keys = [ routing_key_1, routing_key_2, routing_key_3, routing_key_4] ;
169- let filler = Filler :: new ( & routing_keys ) ;
162+ fn it_retusn_filler_bytes_of_correct_length_for_4_expanded_shared_secret ( ) {
163+ let routing_key_1 = expanded_shared_secret_fixture ( ) ;
164+ let routing_key_2 = expanded_shared_secret_fixture ( ) ;
165+ let routing_key_3 = expanded_shared_secret_fixture ( ) ;
166+ let routing_key_4 = expanded_shared_secret_fixture ( ) ;
167+ let expanded_shared_secret = [ routing_key_1, routing_key_2, routing_key_3, routing_key_4] ;
168+ let filler = Filler :: new ( & expanded_shared_secret ) ;
170169 assert_eq ! (
171- FILLER_STEP_SIZE_INCREASE * ( routing_keys . len( ) ) ,
172- filler. get_value ( ) . len( )
170+ FILLER_STEP_SIZE_INCREASE * ( expanded_shared_secret . len( ) ) ,
171+ filler. 0 . len( )
173172 )
174173 }
175174}
0 commit comments