@@ -15,6 +15,8 @@ use futures::{StreamExt, SinkExt};
15
15
use futures:: channel:: mpsc;
16
16
use futures:: lock:: Mutex ;
17
17
use rand:: { thread_rng, Rng } ;
18
+ use sha2:: { Digest , Sha256 } ;
19
+ use sha2:: digest:: generic_array:: typenum:: marker_traits:: Unsigned ;
18
20
19
21
use tox_crypto:: * ;
20
22
use crate :: dht:: ip_port:: IsGlobal ;
@@ -169,7 +171,7 @@ struct OnionNode {
169
171
/// Path used to send packets to this node.
170
172
path_id : OnionPathId ,
171
173
/// Ping id that should be used to announce to this node.
172
- ping_id : Option < sha256 :: Digest > ,
174
+ ping_id : Option < [ u8 ; < Sha256 as Digest > :: OutputSize :: USIZE ] > ,
173
175
/// Data `PublicKey` that should be used to send data packets to our friend
174
176
/// through this node.
175
177
data_pk : Option < PublicKey > ,
@@ -268,7 +270,7 @@ struct AnnouncePacketData<'a> {
268
270
impl < ' a > AnnouncePacketData < ' a > {
269
271
/// Create `InnerOnionAnnounceRequest`. The request is a search request if
270
272
/// pind_id is 0 and an announce request otherwise.
271
- fn request ( & self , node_pk : & PublicKey , ping_id : Option < sha256 :: Digest > , request_id : u64 ) -> InnerOnionAnnounceRequest {
273
+ fn request ( & self , node_pk : & PublicKey , ping_id : Option < [ u8 ; < Sha256 as Digest > :: OutputSize :: USIZE ] > , request_id : u64 ) -> InnerOnionAnnounceRequest {
272
274
let payload = OnionAnnounceRequestPayload {
273
275
ping_id : ping_id. unwrap_or ( INITIAL_PING_ID ) ,
274
276
search_pk : self . search_pk ,
@@ -286,7 +288,7 @@ impl<'a> AnnouncePacketData<'a> {
286
288
self . request ( node_pk, None , request_id)
287
289
}
288
290
/// Create `InnerOnionAnnounceRequest` for an announce request.
289
- pub fn announce_request ( & self , node_pk : & PublicKey , ping_id : sha256 :: Digest , request_id : u64 ) -> InnerOnionAnnounceRequest {
291
+ pub fn announce_request ( & self , node_pk : & PublicKey , ping_id : [ u8 ; < Sha256 as Digest > :: OutputSize :: USIZE ] , request_id : u64 ) -> InnerOnionAnnounceRequest {
290
292
self . request ( node_pk, Some ( ping_id) , request_id)
291
293
}
292
294
}
@@ -469,7 +471,7 @@ impl OnionClient {
469
471
let ( ping_id, data_pk) = if payload. announce_status == AnnounceStatus :: Found {
470
472
( None , Some ( PublicKey ( payload. ping_id_or_pk ) ) )
471
473
} else {
472
- ( Some ( sha256 :: Digest ( payload. ping_id_or_pk ) ) , None )
474
+ ( Some ( payload. ping_id_or_pk ) , None )
473
475
} ;
474
476
475
477
let now = clock_now ( ) ;
@@ -1021,7 +1023,7 @@ mod tests {
1021
1023
keys : [ gen_keypair ( ) . 0 , gen_keypair ( ) . 0 , gen_keypair ( ) . 0 ] ,
1022
1024
path_type : OnionPathType :: Udp ,
1023
1025
} ;
1024
- let ping_id = sha256 :: hash ( & [ 1 , 2 , 3 ] ) ;
1026
+ let ping_id = [ 42 ; 32 ] ;
1025
1027
let data_pk = gen_keypair ( ) . 0 ;
1026
1028
let new_now = now + Duration :: from_secs ( 1 ) ;
1027
1029
let other_onion_node = OnionNode {
@@ -1228,7 +1230,7 @@ mod tests {
1228
1230
// The sender should be added to close nodes
1229
1231
let onion_node = state. announce_list . get_node ( & real_pk, & sender_pk) . unwrap ( ) ;
1230
1232
assert_eq ! ( onion_node. path_id, path. id( ) ) ;
1231
- assert_eq ! ( onion_node. ping_id, Some ( sha256 :: Digest ( ping_id) ) ) ;
1233
+ assert_eq ! ( onion_node. ping_id, Some ( ping_id) ) ;
1232
1234
assert_eq ! ( onion_node. data_pk, None ) ;
1233
1235
assert_eq ! ( onion_node. announce_status, AnnounceStatus :: Announced ) ;
1234
1236
@@ -1920,7 +1922,7 @@ mod tests {
1920
1922
state. paths_pool . path_nodes . put ( node) ;
1921
1923
}
1922
1924
1923
- let ping_id = sha256 :: hash ( & [ 1 , 2 , 3 ] ) ;
1925
+ let ping_id = [ 42 ; 32 ] ;
1924
1926
let now = Instant :: now ( ) ;
1925
1927
1926
1928
let mut nodes_key_by_addr = HashMap :: new ( ) ;
@@ -2064,7 +2066,7 @@ mod tests {
2064
2066
saddr,
2065
2067
path_id : path. id ( ) ,
2066
2068
// regardless of this ping_id search requests should contain 0
2067
- ping_id : Some ( sha256 :: hash ( & [ 1 , 2 , 3 ] ) ) ,
2069
+ ping_id : Some ( [ 42 ; 32 ] ) ,
2068
2070
data_pk : None ,
2069
2071
unsuccessful_pings : 0 ,
2070
2072
added_time : now,
0 commit comments