Skip to content

Commit 153b048

Browse files
authored
Merge pull request #1951 from wpaulino/remove-get-node-secret
2 parents d66c70e + acd2ae6 commit 153b048

18 files changed

+486
-333
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use bitcoin::network::constants::Network;
2929

3030
use bitcoin::hashes::Hash as TraitImport;
3131
use bitcoin::hashes::sha256::Hash as Sha256;
32+
use bitcoin::hashes::sha256d::Hash as Sha256dHash;
3233
use bitcoin::hash_types::{BlockHash, WPubkeyHash};
3334

3435
use lightning::chain;
@@ -54,10 +55,9 @@ use lightning::routing::router::{InFlightHtlcs, Route, RouteHop, RouteParameters
5455
use crate::utils::test_logger::{self, Output};
5556
use crate::utils::test_persister::TestPersister;
5657

57-
use bitcoin::secp256k1::{PublicKey, SecretKey, Scalar};
58+
use bitcoin::secp256k1::{Message, PublicKey, SecretKey, Scalar, Secp256k1};
5859
use bitcoin::secp256k1::ecdh::SharedSecret;
59-
use bitcoin::secp256k1::ecdsa::RecoverableSignature;
60-
use bitcoin::secp256k1::Secp256k1;
60+
use bitcoin::secp256k1::ecdsa::{RecoverableSignature, Signature};
6161

6262
use std::mem;
6363
use std::cmp::{self, Ordering};
@@ -174,45 +174,53 @@ impl chain::Watch<EnforcingSigner> for TestChainMonitor {
174174
}
175175

176176
struct KeyProvider {
177-
node_id: u8,
177+
node_secret: SecretKey,
178178
rand_bytes_id: atomic::AtomicU32,
179179
enforcement_states: Mutex<HashMap<[u8;32], Arc<Mutex<EnforcementState>>>>,
180180
}
181181

182182
impl EntropySource for KeyProvider {
183183
fn get_secure_random_bytes(&self) -> [u8; 32] {
184184
let id = self.rand_bytes_id.fetch_add(1, atomic::Ordering::Relaxed);
185-
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];
185+
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_secret[31]];
186186
res[30-4..30].copy_from_slice(&id.to_le_bytes());
187187
res
188188
}
189189
}
190190

191191
impl NodeSigner for KeyProvider {
192-
fn get_node_secret(&self, _recipient: Recipient) -> Result<SecretKey, ()> {
193-
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())
194-
}
195-
196192
fn get_node_id(&self, recipient: Recipient) -> Result<PublicKey, ()> {
197-
let secp_ctx = Secp256k1::signing_only();
198-
Ok(PublicKey::from_secret_key(&secp_ctx, &self.get_node_secret(recipient)?))
193+
let node_secret = match recipient {
194+
Recipient::Node => Ok(&self.node_secret),
195+
Recipient::PhantomNode => Err(())
196+
}?;
197+
Ok(PublicKey::from_secret_key(&Secp256k1::signing_only(), node_secret))
199198
}
200199

201200
fn ecdh(&self, recipient: Recipient, other_key: &PublicKey, tweak: Option<&Scalar>) -> Result<SharedSecret, ()> {
202-
let mut node_secret = self.get_node_secret(recipient)?;
201+
let mut node_secret = match recipient {
202+
Recipient::Node => Ok(self.node_secret.clone()),
203+
Recipient::PhantomNode => Err(())
204+
}?;
203205
if let Some(tweak) = tweak {
204-
node_secret = node_secret.mul_tweak(tweak).unwrap();
206+
node_secret = node_secret.mul_tweak(tweak).map_err(|_| ())?;
205207
}
206208
Ok(SharedSecret::new(other_key, &node_secret))
207209
}
208210

209211
fn get_inbound_payment_key_material(&self) -> KeyMaterial {
210-
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])
212+
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_secret[31]])
211213
}
212214

213215
fn sign_invoice(&self, _hrp_bytes: &[u8], _invoice_data: &[u5], _recipient: Recipient) -> Result<RecoverableSignature, ()> {
214216
unreachable!()
215217
}
218+
219+
fn sign_gossip_message(&self, msg: lightning::ln::msgs::UnsignedGossipMessage) -> Result<Signature, ()> {
220+
let msg_hash = Message::from_slice(&Sha256dHash::hash(&msg.encode()[..])[..]).map_err(|_| ())?;
221+
let secp_ctx = Secp256k1::signing_only();
222+
Ok(secp_ctx.sign_ecdsa(&msg_hash, &self.node_secret))
223+
}
216224
}
217225

218226
impl SignerProvider for KeyProvider {
@@ -228,13 +236,12 @@ impl SignerProvider for KeyProvider {
228236
let id = channel_keys_id[0];
229237
let keys = InMemorySigner::new(
230238
&secp_ctx,
231-
self.get_node_secret(Recipient::Node).unwrap(),
232-
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, 4, self.node_id]).unwrap(),
233-
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, 5, self.node_id]).unwrap(),
234-
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, 6, self.node_id]).unwrap(),
235-
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, 7, self.node_id]).unwrap(),
236-
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, 8, self.node_id]).unwrap(),
237-
[id, 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, 9, self.node_id],
239+
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, 4, self.node_secret[31]]).unwrap(),
240+
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, 5, self.node_secret[31]]).unwrap(),
241+
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, 6, self.node_secret[31]]).unwrap(),
242+
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, 7, self.node_secret[31]]).unwrap(),
243+
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, 8, self.node_secret[31]]).unwrap(),
244+
[id, 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, 9, self.node_secret[31]],
238245
channel_value_satoshis,
239246
channel_keys_id,
240247
);
@@ -245,7 +252,7 @@ impl SignerProvider for KeyProvider {
245252
fn read_chan_signer(&self, buffer: &[u8]) -> Result<Self::Signer, DecodeError> {
246253
let mut reader = std::io::Cursor::new(buffer);
247254

248-
let inner: InMemorySigner = ReadableArgs::read(&mut reader, self.get_node_secret(Recipient::Node).unwrap())?;
255+
let inner: InMemorySigner = Readable::read(&mut reader)?;
249256
let state = self.make_enforcement_state_cell(inner.commitment_seed);
250257

251258
Ok(EnforcingSigner {
@@ -257,14 +264,14 @@ impl SignerProvider for KeyProvider {
257264

258265
fn get_destination_script(&self) -> Script {
259266
let secp_ctx = Secp256k1::signing_only();
260-
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();
267+
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_secret[31]]).unwrap();
261268
let our_channel_monitor_claim_key_hash = WPubkeyHash::hash(&PublicKey::from_secret_key(&secp_ctx, &channel_monitor_claim_key).serialize());
262269
Builder::new().push_opcode(opcodes::all::OP_PUSHBYTES_0).push_slice(&our_channel_monitor_claim_key_hash[..]).into_script()
263270
}
264271

265272
fn get_shutdown_scriptpubkey(&self) -> ShutdownScript {
266273
let secp_ctx = Secp256k1::signing_only();
267-
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();
274+
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_secret[31]]).unwrap();
268275
let pubkey_hash = WPubkeyHash::hash(&PublicKey::from_secret_key(&secp_ctx, &secret_key).serialize());
269276
ShutdownScript::new_p2wpkh(&pubkey_hash)
270277
}
@@ -402,7 +409,8 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
402409
macro_rules! make_node {
403410
($node_id: expr, $fee_estimator: expr) => { {
404411
let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new($node_id.to_string(), out.clone()));
405-
let keys_manager = Arc::new(KeyProvider { node_id: $node_id, rand_bytes_id: atomic::AtomicU32::new(0), enforcement_states: Mutex::new(HashMap::new()) });
412+
let node_secret = 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, $node_id]).unwrap();
413+
let keys_manager = Arc::new(KeyProvider { node_secret, rand_bytes_id: atomic::AtomicU32::new(0), enforcement_states: Mutex::new(HashMap::new()) });
406414
let monitor = Arc::new(TestChainMonitor::new(broadcast.clone(), logger.clone(), $fee_estimator.clone(),
407415
Arc::new(TestPersister {
408416
update_ret: Mutex::new(ChannelMonitorUpdateStatus::Completed)

fuzz/src/full_stack.rs

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use bitcoin::network::constants::Network;
2626
use bitcoin::hashes::Hash as TraitImport;
2727
use bitcoin::hashes::HashEngine as TraitImportEngine;
2828
use bitcoin::hashes::sha256::Hash as Sha256;
29+
use bitcoin::hashes::sha256d::Hash as Sha256dHash;
2930
use bitcoin::hash_types::{Txid, BlockHash, WPubkeyHash};
3031

3132
use lightning::chain;
@@ -47,15 +48,14 @@ use lightning::util::errors::APIError;
4748
use lightning::util::events::Event;
4849
use lightning::util::enforcing_trait_impls::{EnforcingSigner, EnforcementState};
4950
use lightning::util::logger::Logger;
50-
use lightning::util::ser::ReadableArgs;
51+
use lightning::util::ser::{Readable, Writeable};
5152

5253
use crate::utils::test_logger;
5354
use crate::utils::test_persister::TestPersister;
5455

55-
use bitcoin::secp256k1::{PublicKey, SecretKey, Scalar};
56+
use bitcoin::secp256k1::{Message, PublicKey, SecretKey, Scalar, Secp256k1};
5657
use bitcoin::secp256k1::ecdh::SharedSecret;
57-
use bitcoin::secp256k1::ecdsa::RecoverableSignature;
58-
use bitcoin::secp256k1::Secp256k1;
58+
use bitcoin::secp256k1::ecdsa::{RecoverableSignature, Signature};
5959

6060
use std::cell::RefCell;
6161
use hashbrown::{HashMap, hash_map};
@@ -183,7 +183,7 @@ impl<'a> std::hash::Hash for Peer<'a> {
183183
type ChannelMan<'a> = ChannelManager<
184184
Arc<chainmonitor::ChainMonitor<EnforcingSigner, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<TestPersister>>>,
185185
Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<KeyProvider>, Arc<KeyProvider>, Arc<FuzzEstimator>, &'a FuzzRouter, Arc<dyn Logger>>;
186-
type PeerMan<'a> = PeerManager<Peer<'a>, Arc<ChannelMan<'a>>, Arc<P2PGossipSync<Arc<NetworkGraph<Arc<dyn Logger>>>, Arc<dyn chain::Access>, Arc<dyn Logger>>>, IgnoringMessageHandler, Arc<dyn Logger>, IgnoringMessageHandler>;
186+
type PeerMan<'a> = PeerManager<Peer<'a>, Arc<ChannelMan<'a>>, Arc<P2PGossipSync<Arc<NetworkGraph<Arc<dyn Logger>>>, Arc<dyn chain::Access>, Arc<dyn Logger>>>, IgnoringMessageHandler, Arc<dyn Logger>, IgnoringMessageHandler, Arc<KeyProvider>>;
187187

188188
struct MoneyLossDetector<'a> {
189189
manager: Arc<ChannelMan<'a>>,
@@ -293,19 +293,21 @@ impl EntropySource for KeyProvider {
293293
}
294294

295295
impl NodeSigner for KeyProvider {
296-
fn get_node_secret(&self, _recipient: Recipient) -> Result<SecretKey, ()> {
297-
Ok(self.node_secret.clone())
298-
}
299-
300296
fn get_node_id(&self, recipient: Recipient) -> Result<PublicKey, ()> {
301-
let secp_ctx = Secp256k1::signing_only();
302-
Ok(PublicKey::from_secret_key(&secp_ctx, &self.get_node_secret(recipient)?))
297+
let node_secret = match recipient {
298+
Recipient::Node => Ok(&self.node_secret),
299+
Recipient::PhantomNode => Err(())
300+
}?;
301+
Ok(PublicKey::from_secret_key(&Secp256k1::signing_only(), node_secret))
303302
}
304303

305304
fn ecdh(&self, recipient: Recipient, other_key: &PublicKey, tweak: Option<&Scalar>) -> Result<SharedSecret, ()> {
306-
let mut node_secret = self.get_node_secret(recipient)?;
305+
let mut node_secret = match recipient {
306+
Recipient::Node => Ok(self.node_secret.clone()),
307+
Recipient::PhantomNode => Err(())
308+
}?;
307309
if let Some(tweak) = tweak {
308-
node_secret = node_secret.mul_tweak(tweak).unwrap();
310+
node_secret = node_secret.mul_tweak(tweak).map_err(|_| ())?;
309311
}
310312
Ok(SharedSecret::new(other_key, &node_secret))
311313
}
@@ -317,6 +319,12 @@ impl NodeSigner for KeyProvider {
317319
fn sign_invoice(&self, _hrp_bytes: &[u8], _invoice_data: &[u5], _recipient: Recipient) -> Result<RecoverableSignature, ()> {
318320
unreachable!()
319321
}
322+
323+
fn sign_gossip_message(&self, msg: lightning::ln::msgs::UnsignedGossipMessage) -> Result<Signature, ()> {
324+
let msg_hash = Message::from_slice(&Sha256dHash::hash(&msg.encode()[..])[..]).map_err(|_| ())?;
325+
let secp_ctx = Secp256k1::signing_only();
326+
Ok(secp_ctx.sign_ecdsa(&msg_hash, &self.node_secret))
327+
}
320328
}
321329

322330
impl SignerProvider for KeyProvider {
@@ -335,7 +343,6 @@ impl SignerProvider for KeyProvider {
335343
EnforcingSigner::new_with_revoked(if inbound {
336344
InMemorySigner::new(
337345
&secp_ctx,
338-
self.node_secret.clone(),
339346
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, ctr]).unwrap(),
340347
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, ctr]).unwrap(),
341348
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, ctr]).unwrap(),
@@ -348,7 +355,6 @@ impl SignerProvider for KeyProvider {
348355
} else {
349356
InMemorySigner::new(
350357
&secp_ctx,
351-
self.node_secret.clone(),
352358
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, 7, ctr]).unwrap(),
353359
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, 8, ctr]).unwrap(),
354360
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, 9, ctr]).unwrap(),
@@ -362,7 +368,7 @@ impl SignerProvider for KeyProvider {
362368
}
363369

364370
fn read_chan_signer(&self, mut data: &[u8]) -> Result<EnforcingSigner, DecodeError> {
365-
let inner: InMemorySigner = ReadableArgs::read(&mut data, self.node_secret.clone())?;
371+
let inner: InMemorySigner = Readable::read(&mut data)?;
366372
let state = Arc::new(Mutex::new(EnforcementState::new()));
367373

368374
Ok(EnforcingSigner::new_with_revoked(
@@ -446,7 +452,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
446452
// keys subsequently generated in this test. Rather than regenerating all the messages manually,
447453
// it's easier to just increment the counter here so the keys don't change.
448454
keys_manager.counter.fetch_sub(3, Ordering::AcqRel);
449-
let our_id = PublicKey::from_secret_key(&Secp256k1::signing_only(), &keys_manager.get_node_secret(Recipient::Node).unwrap());
455+
let our_id = &keys_manager.get_node_id(Recipient::Node).unwrap();
450456
let network_graph = Arc::new(NetworkGraph::new(genesis_block(network).block_hash(), Arc::clone(&logger)));
451457
let gossip_sync = Arc::new(P2PGossipSync::new(Arc::clone(&network_graph), None, Arc::clone(&logger)));
452458
let scorer = FixedPenaltyScorer::with_penalty(0);
@@ -456,7 +462,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
456462
chan_handler: channelmanager.clone(),
457463
route_handler: gossip_sync.clone(),
458464
onion_message_handler: IgnoringMessageHandler {},
459-
}, our_network_key, 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, 0, 15, 0], Arc::clone(&logger), IgnoringMessageHandler{}));
465+
}, 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, 0, 15, 0], Arc::clone(&logger), IgnoringMessageHandler{}, keys_manager.clone()));
460466

461467
let mut should_forward = false;
462468
let mut payments_received: Vec<PaymentHash> = Vec::new();

fuzz/src/onion_message.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,17 +100,19 @@ impl EntropySource for KeyProvider {
100100
}
101101

102102
impl NodeSigner for KeyProvider {
103-
fn get_node_secret(&self, _recipient: Recipient) -> Result<SecretKey, ()> {
104-
Ok(self.node_secret.clone())
105-
}
106-
107103
fn get_node_id(&self, recipient: Recipient) -> Result<PublicKey, ()> {
108-
let secp_ctx = Secp256k1::signing_only();
109-
Ok(PublicKey::from_secret_key(&secp_ctx, &self.get_node_secret(recipient)?))
104+
let node_secret = match recipient {
105+
Recipient::Node => Ok(&self.node_secret),
106+
Recipient::PhantomNode => Err(())
107+
}?;
108+
Ok(PublicKey::from_secret_key(&Secp256k1::signing_only(), node_secret))
110109
}
111110

112111
fn ecdh(&self, recipient: Recipient, other_key: &PublicKey, tweak: Option<&Scalar>) -> Result<SharedSecret, ()> {
113-
let mut node_secret = self.get_node_secret(recipient)?;
112+
let mut node_secret = match recipient {
113+
Recipient::Node => Ok(self.node_secret.clone()),
114+
Recipient::PhantomNode => Err(())
115+
}?;
114116
if let Some(tweak) = tweak {
115117
node_secret = node_secret.mul_tweak(tweak).map_err(|_| ())?;
116118
}
@@ -122,6 +124,10 @@ impl NodeSigner for KeyProvider {
122124
fn sign_invoice(&self, _hrp_bytes: &[u8], _invoice_data: &[u5], _recipient: Recipient) -> Result<RecoverableSignature, ()> {
123125
unreachable!()
124126
}
127+
128+
fn sign_gossip_message(&self, _msg: lightning::ln::msgs::UnsignedGossipMessage) -> Result<bitcoin::secp256k1::ecdsa::Signature, ()> {
129+
unreachable!()
130+
}
125131
}
126132

127133
impl SignerProvider for KeyProvider {

fuzz/src/peer_crypt.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// licenses.
99

1010
use lightning::ln::peer_channel_encryptor::PeerChannelEncryptor;
11+
use lightning::util::test_utils::TestNodeSigner;
1112

1213
use bitcoin::secp256k1::{Secp256k1, PublicKey, SecretKey};
1314

@@ -41,6 +42,7 @@ pub fn do_test(data: &[u8]) {
4142
Ok(key) => key,
4243
Err(_) => return,
4344
};
45+
let node_signer = TestNodeSigner::new(our_network_key);
4446
let ephemeral_key = match SecretKey::from_slice(get_slice!(32)) {
4547
Ok(key) => key,
4648
Err(_) => return,
@@ -53,15 +55,15 @@ pub fn do_test(data: &[u8]) {
5355
};
5456
let mut crypter = PeerChannelEncryptor::new_outbound(their_pubkey, ephemeral_key);
5557
crypter.get_act_one(&secp_ctx);
56-
match crypter.process_act_two(get_slice!(50), &our_network_key, &secp_ctx) {
58+
match crypter.process_act_two(get_slice!(50), &&node_signer) {
5759
Ok(_) => {},
5860
Err(_) => return,
5961
}
6062
assert!(crypter.is_ready_for_encryption());
6163
crypter
6264
} else {
63-
let mut crypter = PeerChannelEncryptor::new_inbound(&our_network_key, &secp_ctx);
64-
match crypter.process_act_one_with_keys(get_slice!(50), &our_network_key, ephemeral_key, &secp_ctx) {
65+
let mut crypter = PeerChannelEncryptor::new_inbound(&&node_signer);
66+
match crypter.process_act_one_with_keys(get_slice!(50), &&node_signer, ephemeral_key, &secp_ctx) {
6567
Ok(_) => {},
6668
Err(_) => return,
6769
}

0 commit comments

Comments
 (0)