@@ -587,16 +587,11 @@ where
587
587
a_tor_only. cmp ( b_tor_only) . then ( a_channels. cmp ( b_channels) . reverse ( ) )
588
588
} ) ;
589
589
590
+ let entropy = & * * entropy_source;
590
591
let paths = peer_info
591
592
. into_iter ( )
592
593
. map ( |( peer, _, _) | {
593
- BlindedMessagePath :: new (
594
- & [ peer] ,
595
- recipient,
596
- context. clone ( ) ,
597
- & * * entropy_source,
598
- secp_ctx,
599
- )
594
+ BlindedMessagePath :: new ( & [ peer] , recipient, context. clone ( ) , entropy, secp_ctx)
600
595
} )
601
596
. take ( MAX_PATHS )
602
597
. collect :: < Result < Vec < _ > , _ > > ( ) ;
@@ -1050,32 +1045,27 @@ where
1050
1045
let blinding_factor = {
1051
1046
let mut hmac = HmacEngine :: < Sha256 > :: new ( b"blinded_node_id" ) ;
1052
1047
hmac. input ( control_tlvs_ss. as_ref ( ) ) ;
1053
- Hmac :: from_engine ( hmac) . to_byte_array ( )
1048
+ let hmac = Hmac :: from_engine ( hmac) . to_byte_array ( ) ;
1049
+ Scalar :: from_be_bytes ( hmac) . unwrap ( )
1054
1050
} ;
1055
- match node_signer. ecdh (
1056
- Recipient :: Node ,
1057
- & msg. onion_routing_packet . public_key ,
1058
- Some ( & Scalar :: from_be_bytes ( blinding_factor) . unwrap ( ) ) ,
1059
- ) {
1051
+ let packet_pubkey = & msg. onion_routing_packet . public_key ;
1052
+ match node_signer. ecdh ( Recipient :: Node , packet_pubkey, Some ( & blinding_factor) ) {
1060
1053
Ok ( ss) => ss. secret_bytes ( ) ,
1061
1054
Err ( ( ) ) => {
1062
1055
log_trace ! ( logger, "Failed to compute onion packet shared secret" ) ;
1063
1056
return Err ( ( ) ) ;
1064
1057
} ,
1065
1058
}
1066
1059
} ;
1067
- match onion_utils:: decode_next_untagged_hop (
1060
+ let next_hop = onion_utils:: decode_next_untagged_hop (
1068
1061
onion_decode_ss,
1069
1062
& msg. onion_routing_packet . hop_data [ ..] ,
1070
1063
msg. onion_routing_packet . hmac ,
1071
1064
( control_tlvs_ss, custom_handler. deref ( ) , logger. deref ( ) ) ,
1072
- ) {
1065
+ ) ;
1066
+ match next_hop {
1073
1067
Ok ( (
1074
- Payload :: Receive :: <
1075
- ParsedOnionMessageContents <
1076
- <<CMH as Deref >:: Target as CustomOnionMessageHandler >:: CustomMessage ,
1077
- > ,
1078
- > {
1068
+ Payload :: Receive {
1079
1069
message,
1080
1070
control_tlvs : ReceiveControlTlvs :: Unblinded ( ReceiveTlvs { context } ) ,
1081
1071
reply_path,
@@ -1117,11 +1107,10 @@ where
1117
1107
// unwrapping the onion layers to get to the final payload. Since we don't have the option
1118
1108
// of creating blinded paths with dummy hops currently, we should be ok to not handle this
1119
1109
// for now.
1120
- let new_pubkey = match onion_utils:: next_hop_pubkey (
1121
- & secp_ctx,
1122
- msg. onion_routing_packet . public_key ,
1123
- & onion_decode_ss,
1124
- ) {
1110
+ let packet_pubkey = msg. onion_routing_packet . public_key ;
1111
+ let new_pubkey_opt =
1112
+ onion_utils:: next_hop_pubkey ( & secp_ctx, packet_pubkey, & onion_decode_ss) ;
1113
+ let new_pubkey = match new_pubkey_opt {
1125
1114
Ok ( pk) => pk,
1126
1115
Err ( e) => {
1127
1116
log_trace ! ( logger, "Failed to compute next hop packet pubkey: {}" , e) ;
@@ -1406,14 +1395,14 @@ where
1406
1395
. map_err ( |_| SendError :: GetNodeIdFailed ) ?;
1407
1396
let secp_ctx = & self . secp_ctx ;
1408
1397
1409
- let peers = self
1410
- . message_recipients
1411
- . lock ( )
1412
- . unwrap ( )
1413
- . iter ( )
1414
- . filter ( |( _ , peer ) | matches! ( peer , OnionMessageRecipient :: ConnectedPeer ( _ ) ) )
1415
- . map ( | ( node_id , _ ) | * node_id )
1416
- . collect :: < Vec <_>> ( ) ;
1398
+ let peers = {
1399
+ let message_recipients = self . message_recipients . lock ( ) . unwrap ( ) ;
1400
+ message_recipients
1401
+ . iter ( )
1402
+ . filter ( | ( _ , peer ) | matches ! ( peer , OnionMessageRecipient :: ConnectedPeer ( _ ) ) )
1403
+ . map ( |( node_id , _ ) | * node_id )
1404
+ . collect :: < Vec < _ > > ( )
1405
+ } ;
1417
1406
1418
1407
self . message_router
1419
1408
. create_blinded_paths ( recipient, context, peers, secp_ctx)
@@ -1627,10 +1616,9 @@ where
1627
1616
if num_peer_connecteds <= 1 {
1628
1617
for event in peer_connecteds {
1629
1618
if handler ( event) . await . is_ok ( ) {
1630
- self . pending_peer_connected_events
1631
- . lock( )
1632
- . unwrap( )
1633
- . drain( ..num_peer_connecteds) ;
1619
+ let mut pending_peer_connected_events =
1620
+ self . pending_peer_connected_events . lock ( ) . unwrap ( ) ;
1621
+ pending_peer_connected_events. drain ( ..num_peer_connecteds) ;
1634
1622
} else {
1635
1623
// We failed handling the event. Return to have it eventually replayed.
1636
1624
self . pending_events_processor . store ( false , Ordering :: Release ) ;
@@ -1988,12 +1976,13 @@ where
1988
1976
& self , their_node_id : PublicKey , init : & msgs:: Init , _inbound : bool ,
1989
1977
) -> Result < ( ) , ( ) > {
1990
1978
if init. features . supports_onion_messages ( ) {
1991
- self . message_recipients
1992
- . lock( )
1993
- . unwrap( )
1994
- . entry( their_node_id)
1995
- . or_insert_with( || OnionMessageRecipient :: ConnectedPeer ( VecDeque :: new( ) ) )
1996
- . mark_connected( ) ;
1979
+ {
1980
+ let mut message_recipients = self . message_recipients . lock ( ) . unwrap ( ) ;
1981
+ message_recipients
1982
+ . entry ( their_node_id)
1983
+ . or_insert_with ( || OnionMessageRecipient :: ConnectedPeer ( VecDeque :: new ( ) ) )
1984
+ . mark_connected ( ) ;
1985
+ }
1997
1986
if self . intercept_messages_for_offline_peers {
1998
1987
let mut pending_peer_connected_events =
1999
1988
self . pending_peer_connected_events . lock ( ) . unwrap ( ) ;
@@ -2090,11 +2079,8 @@ where
2090
2079
) ;
2091
2080
}
2092
2081
2093
- self . message_recipients
2094
- . lock( )
2095
- . unwrap( )
2096
- . get_mut( & peer_node_id)
2097
- . and_then( |buffer| buffer. dequeue_message( ) )
2082
+ let mut message_recipients = self . message_recipients . lock ( ) . unwrap ( ) ;
2083
+ message_recipients. get_mut ( & peer_node_id) . and_then ( |buffer| buffer. dequeue_message ( ) )
2098
2084
}
2099
2085
}
2100
2086
0 commit comments