@@ -36,7 +36,7 @@ use lightning::chain::{BestBlock, ChannelMonitorUpdateStatus, chainmonitor, chan
3636use lightning:: chain:: channelmonitor:: { ChannelMonitor , MonitorEvent } ;
3737use lightning:: chain:: transaction:: OutPoint ;
3838use lightning:: chain:: chaininterface:: { BroadcasterInterface , ConfirmationTarget , FeeEstimator } ;
39- use lightning:: chain:: keysinterface:: { KeyMaterial , KeysInterface , InMemorySigner , Recipient } ;
39+ use lightning:: chain:: keysinterface:: { KeyMaterial , KeysInterface , InMemorySigner , Recipient , EntropySource , NodeSigner , SignerProvider } ;
4040use lightning:: ln:: { PaymentHash , PaymentPreimage , PaymentSecret } ;
4141use lightning:: ln:: channelmanager:: { self , ChainParameters , ChannelManager , PaymentSendFailure , ChannelManagerReadArgs , PaymentId } ;
4242use lightning:: ln:: channel:: FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE ;
@@ -160,38 +160,28 @@ struct KeyProvider {
160160 rand_bytes_id : atomic:: AtomicU32 ,
161161 enforcement_states : Mutex < HashMap < [ u8 ; 32 ] , Arc < Mutex < EnforcementState > > > > ,
162162}
163- impl KeysInterface for KeyProvider {
164- type Signer = EnforcingSigner ;
165163
166- fn get_node_secret ( & self , _recipient : Recipient ) -> Result < SecretKey , ( ) > {
167- Ok ( SecretKey :: from_slice ( & [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , self . node_id ] ) . unwrap ( ) )
164+ impl EntropySource for KeyProvider {
165+ fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
166+ let id = self . rand_bytes_id . fetch_add ( 1 , atomic:: Ordering :: Relaxed ) ;
167+ let mut res = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 11 , self . node_id ] ;
168+ res[ 30 -4 ..30 ] . copy_from_slice ( & id. to_le_bytes ( ) ) ;
169+ res
168170 }
171+ }
169172
170- fn ecdh ( & self , recipient : Recipient , other_key : & PublicKey , tweak : Option < & Scalar > ) -> Result < SharedSecret , ( ) > {
171- let mut node_secret = self . get_node_secret ( recipient) ?;
172- if let Some ( tweak) = tweak {
173- node_secret = node_secret. mul_tweak ( tweak) . unwrap ( ) ;
174- }
175- Ok ( SharedSecret :: new ( other_key, & node_secret) )
173+ impl NodeSigner for KeyProvider {
174+ fn get_node_secret ( & self , _recipient : Recipient ) -> Result < SecretKey , ( ) > {
175+ Ok ( SecretKey :: from_slice ( & [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , self . node_id ] ) . unwrap ( ) )
176176 }
177177
178178 fn get_inbound_payment_key_material ( & self ) -> KeyMaterial {
179179 KeyMaterial ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , self . node_id ] )
180180 }
181+ }
181182
182- fn get_destination_script ( & self ) -> Script {
183- let secp_ctx = Secp256k1 :: signing_only ( ) ;
184- let channel_monitor_claim_key = SecretKey :: from_slice ( & [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , self . node_id ] ) . unwrap ( ) ;
185- let our_channel_monitor_claim_key_hash = WPubkeyHash :: hash ( & PublicKey :: from_secret_key ( & secp_ctx, & channel_monitor_claim_key) . serialize ( ) ) ;
186- Builder :: new ( ) . push_opcode ( opcodes:: all:: OP_PUSHBYTES_0 ) . push_slice ( & our_channel_monitor_claim_key_hash[ ..] ) . into_script ( )
187- }
188-
189- fn get_shutdown_scriptpubkey ( & self ) -> ShutdownScript {
190- let secp_ctx = Secp256k1 :: signing_only ( ) ;
191- let secret_key = SecretKey :: from_slice ( & [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , self . node_id ] ) . unwrap ( ) ;
192- let pubkey_hash = WPubkeyHash :: hash ( & PublicKey :: from_secret_key ( & secp_ctx, & secret_key) . serialize ( ) ) ;
193- ShutdownScript :: new_p2wpkh ( & pubkey_hash)
194- }
183+ impl SignerProvider for KeyProvider {
184+ type Signer = EnforcingSigner ;
195185
196186 fn generate_channel_keys_id ( & self , _inbound : bool , _channel_value_satoshis : u64 , _user_channel_id : u128 ) -> [ u8 ; 32 ] {
197187 let id = self . rand_bytes_id . fetch_add ( 1 , atomic:: Ordering :: Relaxed ) as u8 ;
@@ -217,13 +207,6 @@ impl KeysInterface for KeyProvider {
217207 EnforcingSigner :: new_with_revoked ( keys, revoked_commitment, false )
218208 }
219209
220- fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
221- let id = self . rand_bytes_id . fetch_add ( 1 , atomic:: Ordering :: Relaxed ) ;
222- let mut res = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 11 , self . node_id ] ;
223- res[ 30 -4 ..30 ] . copy_from_slice ( & id. to_le_bytes ( ) ) ;
224- res
225- }
226-
227210 fn read_chan_signer ( & self , buffer : & [ u8 ] ) -> Result < Self :: Signer , DecodeError > {
228211 let mut reader = std:: io:: Cursor :: new ( buffer) ;
229212
@@ -237,11 +220,23 @@ impl KeysInterface for KeyProvider {
237220 } )
238221 }
239222
240- fn sign_invoice ( & self , _hrp_bytes : & [ u8 ] , _invoice_data : & [ u5 ] , _recipient : Recipient ) -> Result < RecoverableSignature , ( ) > {
241- unreachable ! ( )
223+ fn get_destination_script ( & self ) -> Script {
224+ let secp_ctx = Secp256k1 :: signing_only ( ) ;
225+ let channel_monitor_claim_key = SecretKey :: from_slice ( & [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , self . node_id ] ) . unwrap ( ) ;
226+ let our_channel_monitor_claim_key_hash = WPubkeyHash :: hash ( & PublicKey :: from_secret_key ( & secp_ctx, & channel_monitor_claim_key) . serialize ( ) ) ;
227+ Builder :: new ( ) . push_opcode ( opcodes:: all:: OP_PUSHBYTES_0 ) . push_slice ( & our_channel_monitor_claim_key_hash[ ..] ) . into_script ( )
228+ }
229+
230+ fn get_shutdown_scriptpubkey ( & self ) -> ShutdownScript {
231+ let secp_ctx = Secp256k1 :: signing_only ( ) ;
232+ let secret_key = SecretKey :: from_slice ( & [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , self . node_id ] ) . unwrap ( ) ;
233+ let pubkey_hash = WPubkeyHash :: hash ( & PublicKey :: from_secret_key ( & secp_ctx, & secret_key) . serialize ( ) ) ;
234+ ShutdownScript :: new_p2wpkh ( & pubkey_hash)
242235 }
243236}
244237
238+ impl KeysInterface for KeyProvider { }
239+
245240impl KeyProvider {
246241 fn make_enforcement_state_cell ( & self , commitment_seed : [ u8 ; 32 ] ) -> Arc < Mutex < EnforcementState > > {
247242 let mut revoked_commitments = self . enforcement_states . lock ( ) . unwrap ( ) ;
0 commit comments