1
1
// Imports that need to be added manually
2
2
use bech32:: u5;
3
3
use bitcoin:: blockdata:: script:: ScriptBuf ;
4
- use bitcoin:: secp256k1:: { PublicKey , Scalar , Secp256k1 , SecretKey , self } ;
5
4
use bitcoin:: secp256k1:: ecdh:: SharedSecret ;
6
5
use bitcoin:: secp256k1:: ecdsa:: RecoverableSignature ;
7
6
use bitcoin:: secp256k1:: schnorr;
7
+ use bitcoin:: secp256k1:: { self , PublicKey , Scalar , Secp256k1 , SecretKey } ;
8
8
9
9
use lightning:: blinded_path:: { BlindedPath , EmptyNodeIdLookUp } ;
10
10
use lightning:: ln:: features:: InitFeatures ;
11
11
use lightning:: ln:: msgs:: { self , DecodeError , OnionMessageHandler } ;
12
12
use lightning:: ln:: script:: ShutdownScript ;
13
13
use lightning:: offers:: invoice:: UnsignedBolt12Invoice ;
14
14
use lightning:: offers:: invoice_request:: UnsignedInvoiceRequest ;
15
- use lightning:: sign:: { Recipient , KeyMaterial , EntropySource , NodeSigner , SignerProvider } ;
16
- use lightning:: util:: test_channel_signer:: TestChannelSigner ;
17
- use lightning:: util:: logger:: Logger ;
18
- use lightning:: util:: ser:: { Readable , Writeable , Writer } ;
19
- use lightning:: onion_message:: messenger:: { CustomOnionMessageHandler , Destination , MessageRouter , OnionMessagePath , OnionMessenger , PendingOnionMessage , Responder , ResponseInstruction } ;
15
+ use lightning:: onion_message:: messenger:: {
16
+ CustomOnionMessageHandler , Destination , MessageRouter , OnionMessagePath , OnionMessenger ,
17
+ PendingOnionMessage , Responder , ResponseInstruction ,
18
+ } ;
20
19
use lightning:: onion_message:: offers:: { OffersMessage , OffersMessageHandler } ;
21
20
use lightning:: onion_message:: packet:: OnionMessageContents ;
21
+ use lightning:: sign:: { EntropySource , KeyMaterial , NodeSigner , Recipient , SignerProvider } ;
22
+ use lightning:: util:: logger:: Logger ;
23
+ use lightning:: util:: ser:: { Readable , Writeable , Writer } ;
24
+ use lightning:: util:: test_channel_signer:: TestChannelSigner ;
22
25
23
26
use crate :: utils:: test_logger;
24
27
@@ -32,17 +35,19 @@ pub fn do_test<L: Logger>(data: &[u8], logger: &L) {
32
35
let mut secret_bytes = [ 1 ; 32 ] ;
33
36
secret_bytes[ 31 ] = 2 ;
34
37
let secret = SecretKey :: from_slice ( & secret_bytes) . unwrap ( ) ;
35
- let keys_manager = KeyProvider {
36
- node_secret : secret,
37
- counter : AtomicU64 :: new ( 0 ) ,
38
- } ;
38
+ let keys_manager = KeyProvider { node_secret : secret, counter : AtomicU64 :: new ( 0 ) } ;
39
39
let node_id_lookup = EmptyNodeIdLookUp { } ;
40
40
let message_router = TestMessageRouter { } ;
41
41
let offers_msg_handler = TestOffersMessageHandler { } ;
42
42
let custom_msg_handler = TestCustomMessageHandler { } ;
43
43
let onion_messenger = OnionMessenger :: new (
44
- & keys_manager, & keys_manager, logger, & node_id_lookup, & message_router,
45
- & offers_msg_handler, & custom_msg_handler
44
+ & keys_manager,
45
+ & keys_manager,
46
+ logger,
47
+ & node_id_lookup,
48
+ & message_router,
49
+ & offers_msg_handler,
50
+ & custom_msg_handler,
46
51
) ;
47
52
48
53
let peer_node_id = {
@@ -78,13 +83,9 @@ struct TestMessageRouter {}
78
83
79
84
impl MessageRouter for TestMessageRouter {
80
85
fn find_path (
81
- & self , _sender : PublicKey , _peers : Vec < PublicKey > , destination : Destination
86
+ & self , _sender : PublicKey , _peers : Vec < PublicKey > , destination : Destination ,
82
87
) -> Result < OnionMessagePath , ( ) > {
83
- Ok ( OnionMessagePath {
84
- intermediate_nodes : vec ! [ ] ,
85
- destination,
86
- first_node_addresses : None ,
87
- } )
88
+ Ok ( OnionMessagePath { intermediate_nodes : vec ! [ ] , destination, first_node_addresses : None } )
88
89
}
89
90
90
91
fn create_blinded_paths < T : secp256k1:: Signing + secp256k1:: Verification > (
@@ -97,7 +98,9 @@ impl MessageRouter for TestMessageRouter {
97
98
struct TestOffersMessageHandler { }
98
99
99
100
impl OffersMessageHandler for TestOffersMessageHandler {
100
- fn handle_message ( & self , _message : OffersMessage , _responder : Option < Responder > ) -> ResponseInstruction < OffersMessage > {
101
+ fn handle_message (
102
+ & self , _message : OffersMessage , _responder : Option < Responder > ,
103
+ ) -> ResponseInstruction < OffersMessage > {
101
104
ResponseInstruction :: NoResponse
102
105
}
103
106
}
@@ -127,16 +130,20 @@ struct TestCustomMessageHandler {}
127
130
128
131
impl CustomOnionMessageHandler for TestCustomMessageHandler {
129
132
type CustomMessage = TestCustomMessage ;
130
- fn handle_custom_message ( & self , message : Self :: CustomMessage , responder : Option < Responder > ) -> ResponseInstruction < Self :: CustomMessage > {
133
+ fn handle_custom_message (
134
+ & self , message : Self :: CustomMessage , responder : Option < Responder > ,
135
+ ) -> ResponseInstruction < Self :: CustomMessage > {
131
136
match responder {
132
137
Some ( responder) => responder. respond ( message) ,
133
- None => ResponseInstruction :: NoResponse
138
+ None => ResponseInstruction :: NoResponse ,
134
139
}
135
140
}
136
- fn read_custom_message < R : io:: Read > ( & self , _message_type : u64 , buffer : & mut R ) -> Result < Option < Self :: CustomMessage > , msgs:: DecodeError > {
141
+ fn read_custom_message < R : io:: Read > (
142
+ & self , _message_type : u64 , buffer : & mut R ,
143
+ ) -> Result < Option < Self :: CustomMessage > , msgs:: DecodeError > {
137
144
let mut buf = Vec :: new ( ) ;
138
145
buffer. read_to_end ( & mut buf) ?;
139
- return Ok ( Some ( TestCustomMessage { } ) )
146
+ return Ok ( Some ( TestCustomMessage { } ) ) ;
140
147
}
141
148
fn release_pending_custom_messages ( & self ) -> Vec < PendingOnionMessage < Self :: CustomMessage > > {
142
149
vec ! [ ]
@@ -158,39 +165,48 @@ struct KeyProvider {
158
165
impl EntropySource for KeyProvider {
159
166
fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
160
167
let ctr = self . counter . fetch_add ( 1 , Ordering :: Relaxed ) ;
161
- [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
162
- ( ctr >> 8 * 7 ) as u8 , ( ctr >> 8 * 6 ) as u8 , ( ctr >> 8 * 5 ) as u8 , ( ctr >> 8 * 4 ) as u8 , ( ctr >> 8 * 3 ) as u8 , ( ctr >> 8 * 2 ) as u8 , ( ctr >> 8 * 1 ) as u8 , 14 , ( ctr >> 8 * 0 ) as u8 ]
168
+ #[ rustfmt:: skip]
169
+ let random_bytes = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
170
+ ( ctr >> 8 * 7 ) as u8 , ( ctr >> 8 * 6 ) as u8 , ( ctr >> 8 * 5 ) as u8 , ( ctr >> 8 * 4 ) as u8 ,
171
+ ( ctr >> 8 * 3 ) as u8 , ( ctr >> 8 * 2 ) as u8 , ( ctr >> 8 * 1 ) as u8 , 14 , ( ctr >> 8 * 0 ) as u8 ] ;
172
+ random_bytes
163
173
}
164
174
}
165
175
166
176
impl NodeSigner for KeyProvider {
167
177
fn get_node_id ( & self , recipient : Recipient ) -> Result < PublicKey , ( ) > {
168
178
let node_secret = match recipient {
169
179
Recipient :: Node => Ok ( & self . node_secret ) ,
170
- Recipient :: PhantomNode => Err ( ( ) )
180
+ Recipient :: PhantomNode => Err ( ( ) ) ,
171
181
} ?;
172
182
Ok ( PublicKey :: from_secret_key ( & Secp256k1 :: signing_only ( ) , node_secret) )
173
183
}
174
184
175
- fn ecdh ( & self , recipient : Recipient , other_key : & PublicKey , tweak : Option < & Scalar > ) -> Result < SharedSecret , ( ) > {
185
+ fn ecdh (
186
+ & self , recipient : Recipient , other_key : & PublicKey , tweak : Option < & Scalar > ,
187
+ ) -> Result < SharedSecret , ( ) > {
176
188
let mut node_secret = match recipient {
177
189
Recipient :: Node => Ok ( self . node_secret . clone ( ) ) ,
178
- Recipient :: PhantomNode => Err ( ( ) )
190
+ Recipient :: PhantomNode => Err ( ( ) ) ,
179
191
} ?;
180
192
if let Some ( tweak) = tweak {
181
193
node_secret = node_secret. mul_tweak ( tweak) . map_err ( |_| ( ) ) ?;
182
194
}
183
195
Ok ( SharedSecret :: new ( other_key, & node_secret) )
184
196
}
185
197
186
- fn get_inbound_payment_key_material ( & self ) -> KeyMaterial { unreachable ! ( ) }
198
+ fn get_inbound_payment_key_material ( & self ) -> KeyMaterial {
199
+ unreachable ! ( )
200
+ }
187
201
188
- fn sign_invoice ( & self , _hrp_bytes : & [ u8 ] , _invoice_data : & [ u5 ] , _recipient : Recipient ) -> Result < RecoverableSignature , ( ) > {
202
+ fn sign_invoice (
203
+ & self , _hrp_bytes : & [ u8 ] , _invoice_data : & [ u5 ] , _recipient : Recipient ,
204
+ ) -> Result < RecoverableSignature , ( ) > {
189
205
unreachable ! ( )
190
206
}
191
207
192
208
fn sign_bolt12_invoice_request (
193
- & self , _invoice_request : & UnsignedInvoiceRequest
209
+ & self , _invoice_request : & UnsignedInvoiceRequest ,
194
210
) -> Result < schnorr:: Signature , ( ) > {
195
211
unreachable ! ( )
196
212
}
@@ -201,7 +217,9 @@ impl NodeSigner for KeyProvider {
201
217
unreachable ! ( )
202
218
}
203
219
204
- fn sign_gossip_message ( & self , _msg : lightning:: ln:: msgs:: UnsignedGossipMessage ) -> Result < bitcoin:: secp256k1:: ecdsa:: Signature , ( ) > {
220
+ fn sign_gossip_message (
221
+ & self , _msg : lightning:: ln:: msgs:: UnsignedGossipMessage ,
222
+ ) -> Result < bitcoin:: secp256k1:: ecdsa:: Signature , ( ) > {
205
223
unreachable ! ( )
206
224
}
207
225
}
@@ -211,17 +229,29 @@ impl SignerProvider for KeyProvider {
211
229
#[ cfg( taproot) ]
212
230
type TaprootSigner = TestChannelSigner ;
213
231
214
- fn generate_channel_keys_id ( & self , _inbound : bool , _channel_value_satoshis : u64 , _user_channel_id : u128 ) -> [ u8 ; 32 ] { unreachable ! ( ) }
232
+ fn generate_channel_keys_id (
233
+ & self , _inbound : bool , _channel_value_satoshis : u64 , _user_channel_id : u128 ,
234
+ ) -> [ u8 ; 32 ] {
235
+ unreachable ! ( )
236
+ }
215
237
216
- fn derive_channel_signer ( & self , _channel_value_satoshis : u64 , _channel_keys_id : [ u8 ; 32 ] ) -> Self :: EcdsaSigner {
238
+ fn derive_channel_signer (
239
+ & self , _channel_value_satoshis : u64 , _channel_keys_id : [ u8 ; 32 ] ,
240
+ ) -> Self :: EcdsaSigner {
217
241
unreachable ! ( )
218
242
}
219
243
220
- fn read_chan_signer ( & self , _data : & [ u8 ] ) -> Result < TestChannelSigner , DecodeError > { unreachable ! ( ) }
244
+ fn read_chan_signer ( & self , _data : & [ u8 ] ) -> Result < TestChannelSigner , DecodeError > {
245
+ unreachable ! ( )
246
+ }
221
247
222
- fn get_destination_script ( & self , _channel_keys_id : [ u8 ; 32 ] ) -> Result < ScriptBuf , ( ) > { unreachable ! ( ) }
248
+ fn get_destination_script ( & self , _channel_keys_id : [ u8 ; 32 ] ) -> Result < ScriptBuf , ( ) > {
249
+ unreachable ! ( )
250
+ }
223
251
224
- fn get_shutdown_scriptpubkey ( & self ) -> Result < ShutdownScript , ( ) > { unreachable ! ( ) }
252
+ fn get_shutdown_scriptpubkey ( & self ) -> Result < ShutdownScript , ( ) > {
253
+ unreachable ! ( )
254
+ }
225
255
}
226
256
227
257
#[ cfg( test) ]
@@ -237,8 +267,17 @@ mod tests {
237
267
}
238
268
impl Logger for TrackingLogger {
239
269
fn log ( & self , record : Record ) {
240
- * self . lines . lock ( ) . unwrap ( ) . entry ( ( record. module_path . to_string ( ) , format ! ( "{}" , record. args) ) ) . or_insert ( 0 ) += 1 ;
241
- println ! ( "{:<5} [{} : {}, {}] {}" , record. level. to_string( ) , record. module_path, record. file, record. line, record. args) ;
270
+ let mut lines_lock = self . lines . lock ( ) . unwrap ( ) ;
271
+ let key = ( record. module_path . to_string ( ) , format ! ( "{}" , record. args) ) ;
272
+ * lines_lock. entry ( key) . or_insert ( 0 ) += 1 ;
273
+ println ! (
274
+ "{:<5} [{} : {}, {}] {}" ,
275
+ record. level. to_string( ) ,
276
+ record. module_path,
277
+ record. file,
278
+ record. line,
279
+ record. args
280
+ ) ;
242
281
}
243
282
}
244
283
0 commit comments