@@ -72,15 +72,15 @@ fn pass_along_path(path: &Vec<MessengerNode>, expected_path_id: Option<[u8; 32]>
72
72
fn one_hop ( ) {
73
73
let nodes = create_nodes ( 2 ) ;
74
74
75
- nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: Node ( nodes[ 1 ] . get_node_pk ( ) ) ) . unwrap ( ) ;
75
+ nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: Node ( nodes[ 1 ] . get_node_pk ( ) ) , None ) . unwrap ( ) ;
76
76
pass_along_path ( & nodes, None ) ;
77
77
}
78
78
79
79
#[ test]
80
80
fn two_unblinded_hops ( ) {
81
81
let nodes = create_nodes ( 3 ) ;
82
82
83
- nodes[ 0 ] . messenger . send_onion_message ( & [ nodes[ 1 ] . get_node_pk ( ) ] , Destination :: Node ( nodes[ 2 ] . get_node_pk ( ) ) ) . unwrap ( ) ;
83
+ nodes[ 0 ] . messenger . send_onion_message ( & [ nodes[ 1 ] . get_node_pk ( ) ] , Destination :: Node ( nodes[ 2 ] . get_node_pk ( ) ) , None ) . unwrap ( ) ;
84
84
pass_along_path ( & nodes, None ) ;
85
85
}
86
86
@@ -91,7 +91,7 @@ fn two_unblinded_two_blinded() {
91
91
let secp_ctx = Secp256k1 :: new ( ) ;
92
92
let blinded_route = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 3 ] . get_node_pk ( ) , nodes[ 4 ] . get_node_pk ( ) ] , & * nodes[ 4 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
93
93
94
- nodes[ 0 ] . messenger . send_onion_message ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 2 ] . get_node_pk ( ) ] , Destination :: BlindedRoute ( blinded_route) ) . unwrap ( ) ;
94
+ nodes[ 0 ] . messenger . send_onion_message ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 2 ] . get_node_pk ( ) ] , Destination :: BlindedRoute ( blinded_route) , None ) . unwrap ( ) ;
95
95
pass_along_path ( & nodes, None ) ;
96
96
}
97
97
@@ -102,7 +102,7 @@ fn three_blinded_hops() {
102
102
let secp_ctx = Secp256k1 :: new ( ) ;
103
103
let blinded_route = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 2 ] . get_node_pk ( ) , nodes[ 3 ] . get_node_pk ( ) ] , & * nodes[ 3 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
104
104
105
- nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: BlindedRoute ( blinded_route) ) . unwrap ( ) ;
105
+ nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: BlindedRoute ( blinded_route) , None ) . unwrap ( ) ;
106
106
pass_along_path ( & nodes, None ) ;
107
107
}
108
108
@@ -116,7 +116,7 @@ fn too_big_packet_error() {
116
116
let hop_node_id = PublicKey :: from_secret_key ( & secp_ctx, & hop_secret) ;
117
117
118
118
let hops = [ hop_node_id; 400 ] ;
119
- let err = nodes[ 0 ] . messenger . send_onion_message ( & hops, Destination :: Node ( hop_node_id) ) . unwrap_err ( ) ;
119
+ let err = nodes[ 0 ] . messenger . send_onion_message ( & hops, Destination :: Node ( hop_node_id) , None ) . unwrap_err ( ) ;
120
120
assert_eq ! ( err, SendError :: TooBigPacket ) ;
121
121
}
122
122
@@ -129,13 +129,57 @@ fn invalid_blinded_route_error() {
129
129
let secp_ctx = Secp256k1 :: new ( ) ;
130
130
let mut blinded_route = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 2 ] . get_node_pk ( ) ] , & * nodes[ 2 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
131
131
blinded_route. blinded_hops . clear ( ) ;
132
- let err = nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: BlindedRoute ( blinded_route) ) . unwrap_err ( ) ;
132
+ let err = nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: BlindedRoute ( blinded_route) , None ) . unwrap_err ( ) ;
133
133
assert_eq ! ( err, SendError :: TooFewBlindedHops ) ;
134
134
135
135
// 1 hop
136
136
let mut blinded_route = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 2 ] . get_node_pk ( ) ] , & * nodes[ 2 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
137
137
blinded_route. blinded_hops . remove ( 0 ) ;
138
138
assert_eq ! ( blinded_route. blinded_hops. len( ) , 1 ) ;
139
- let err = nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: BlindedRoute ( blinded_route) ) . unwrap_err ( ) ;
139
+ let err = nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: BlindedRoute ( blinded_route) , None ) . unwrap_err ( ) ;
140
140
assert_eq ! ( err, SendError :: TooFewBlindedHops ) ;
141
141
}
142
+
143
+ #[ test]
144
+ fn two_hop_reply_path ( ) {
145
+ let mut nodes = create_nodes ( 3 ) ;
146
+ let secp_ctx = Secp256k1 :: new ( ) ;
147
+
148
+ // Destination::Node
149
+ let reply_path = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 0 ] . get_node_pk ( ) ] , & * nodes[ 0 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
150
+ nodes[ 0 ] . messenger . send_onion_message ( & [ nodes[ 1 ] . get_node_pk ( ) ] , Destination :: Node ( nodes[ 2 ] . get_node_pk ( ) ) , Some ( reply_path) ) . unwrap ( ) ;
151
+ pass_along_path ( & nodes, None ) ;
152
+ nodes. reverse ( ) ;
153
+ pass_along_path ( & nodes, None ) ;
154
+
155
+ // Destination::BlindedRoute
156
+ let blinded_route = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 2 ] . get_node_pk ( ) ] , & * nodes[ 2 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
157
+ let reply_path = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 0 ] . get_node_pk ( ) ] , & * nodes[ 0 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
158
+
159
+ nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: BlindedRoute ( blinded_route) , Some ( reply_path) ) . unwrap ( ) ;
160
+ pass_along_path ( & nodes, None ) ;
161
+ nodes. reverse ( ) ;
162
+ pass_along_path ( & nodes, None ) ;
163
+ }
164
+
165
+ #[ test]
166
+ fn three_hop_reply_path ( ) {
167
+ let mut nodes = create_nodes ( 4 ) ;
168
+ let secp_ctx = Secp256k1 :: new ( ) ;
169
+
170
+ // Destination::Node
171
+ let reply_path = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 2 ] . get_node_pk ( ) , nodes[ 1 ] . get_node_pk ( ) , nodes[ 0 ] . get_node_pk ( ) ] , & * nodes[ 0 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
172
+ nodes[ 0 ] . messenger . send_onion_message ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 2 ] . get_node_pk ( ) ] , Destination :: Node ( nodes[ 3 ] . get_node_pk ( ) ) , Some ( reply_path) ) . unwrap ( ) ;
173
+ pass_along_path ( & nodes, None ) ;
174
+ nodes. reverse ( ) ;
175
+ pass_along_path ( & nodes, None ) ;
176
+
177
+ // Destination::BlindedRoute
178
+ let blinded_route = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 1 ] . get_node_pk ( ) , nodes[ 2 ] . get_node_pk ( ) , nodes[ 3 ] . get_node_pk ( ) ] , & * nodes[ 3 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
179
+ let reply_path = BlindedRoute :: new :: < EnforcingSigner , _ , _ > ( & [ nodes[ 2 ] . get_node_pk ( ) , nodes[ 1 ] . get_node_pk ( ) , nodes[ 0 ] . get_node_pk ( ) ] , & * nodes[ 0 ] . keys_manager , & secp_ctx) . unwrap ( ) ;
180
+
181
+ nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: BlindedRoute ( blinded_route) , Some ( reply_path) ) . unwrap ( ) ;
182
+ pass_along_path ( & nodes, None ) ;
183
+ nodes. reverse ( ) ;
184
+ pass_along_path ( & nodes, None ) ;
185
+ }
0 commit comments