Skip to content

Commit 4e3a7ed

Browse files
fixup: PENDING REBASE. fixing conflicts and fix sign / verify notif flow
1 parent 839b77b commit 4e3a7ed

File tree

13 files changed

+258
-128
lines changed

13 files changed

+258
-128
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -353,13 +353,17 @@ impl NodeSigner for KeyProvider {
353353
unreachable!()
354354
}
355355

356-
fn sign_gossip_message(
357-
&self, msg: lightning::ln::msgs::UnsignedGossipMessage,
358-
) -> Result<Signature, ()> {
359-
let msg_hash = Message::from_digest(Sha256dHash::hash(&msg.encode()[..]).to_byte_array());
360-
let secp_ctx = Secp256k1::signing_only();
361-
Ok(secp_ctx.sign_ecdsa(&msg_hash, &self.node_secret))
362-
}
356+
fn sign_gossip_message(
357+
&self, msg: lightning::ln::msgs::UnsignedGossipMessage,
358+
) -> Result<Signature, ()> {
359+
let msg_hash = Message::from_digest(Sha256dHash::hash(&msg.encode()[..]).to_byte_array());
360+
let secp_ctx = Secp256k1::signing_only();
361+
Ok(secp_ctx.sign_ecdsa(&msg_hash, &self.node_secret))
362+
}
363+
364+
fn sign_message(&self, msg: &[u8]) -> Result<String, ()> {
365+
Ok(lightning::util::message_signing::sign(msg, &self.node_secret))
366+
}
363367
}
364368

365369
impl SignerProvider for KeyProvider {

fuzz/src/full_stack.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -427,13 +427,17 @@ impl NodeSigner for KeyProvider {
427427
unreachable!()
428428
}
429429

430-
fn sign_gossip_message(
431-
&self, msg: lightning::ln::msgs::UnsignedGossipMessage,
432-
) -> Result<Signature, ()> {
433-
let msg_hash = Message::from_digest(Sha256dHash::hash(&msg.encode()[..]).to_byte_array());
434-
let secp_ctx = Secp256k1::signing_only();
435-
Ok(secp_ctx.sign_ecdsa(&msg_hash, &self.node_secret))
436-
}
430+
fn sign_gossip_message(
431+
&self, msg: lightning::ln::msgs::UnsignedGossipMessage,
432+
) -> Result<Signature, ()> {
433+
let msg_hash = Message::from_digest(Sha256dHash::hash(&msg.encode()[..]).to_byte_array());
434+
let secp_ctx = Secp256k1::signing_only();
435+
Ok(secp_ctx.sign_ecdsa(&msg_hash, &self.node_secret))
436+
}
437+
438+
fn sign_message(&self, msg: &[u8]) -> Result<String, ()> {
439+
Ok(lightning::util::message_signing::sign(msg, &self.node_secret))
440+
}
437441

438442
fn get_peer_storage_key(&self) -> PeerStorageKey {
439443
PeerStorageKey { inner: [42; 32] }

fuzz/src/onion_message.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,15 @@ impl NodeSigner for KeyProvider {
269269
unreachable!()
270270
}
271271

272-
fn sign_gossip_message(
273-
&self, _msg: lightning::ln::msgs::UnsignedGossipMessage,
274-
) -> Result<bitcoin::secp256k1::ecdsa::Signature, ()> {
275-
unreachable!()
276-
}
272+
fn sign_gossip_message(
273+
&self, _msg: lightning::ln::msgs::UnsignedGossipMessage,
274+
) -> Result<bitcoin::secp256k1::ecdsa::Signature, ()> {
275+
unreachable!()
276+
}
277+
278+
fn sign_message(&self, msg: &[u8]) -> Result<String, ()> {
279+
Ok(lightning::util::message_signing::sign(msg, &self.node_secret))
280+
}
277281

278282
fn get_peer_storage_key(&self) -> PeerStorageKey {
279283
unreachable!()

lightning-liquidity/src/lsps5/service.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ use crate::prelude::hash_map::Entry;
2121
use crate::prelude::*;
2222
use crate::sync::{Arc, Mutex};
2323

24-
use bitcoin::secp256k1::{PublicKey, SecretKey};
24+
use bitcoin::secp256k1::PublicKey;
2525

2626
use lightning::ln::channelmanager::AChannelManager;
2727
use lightning::ln::msgs::{ErrorAction, LightningError};
28+
use lightning::sign::NodeSigner;
2829
use lightning::util::logger::Level;
29-
use lightning::util::message_signing;
3030

3131
use core::ops::Deref;
3232
use core::time::Duration;
@@ -81,8 +81,6 @@ impl TimeProvider for DefaultTimeProvider {
8181
pub struct LSPS5ServiceConfig {
8282
/// Maximum number of webhooks allowed per client.
8383
pub max_webhooks_per_client: u32,
84-
/// Signing key for LSP notifications.
85-
pub signing_key: SecretKey,
8684
/// Minimum time between sending the same notification type in hours (default: 24)
8785
pub notification_cooldown_hours: Duration,
8886
}
@@ -122,9 +120,10 @@ pub struct LSPS5ServiceConfig {
122120
/// [`LSPS5ServiceEvent::SendWebhookNotification`]: super::event::LSPS5ServiceEvent::SendWebhookNotification
123121
/// [`app_name`]: super::msgs::LSPS5AppName
124122
/// [`lsps5.webhook_registered`]: super::msgs::WebhookNotificationMethod::LSPS5WebhookRegistered
125-
pub struct LSPS5ServiceHandler<CM: Deref, TP: Deref>
123+
pub struct LSPS5ServiceHandler<CM: Deref, NS: Deref, TP: Deref>
126124
where
127125
CM::Target: AChannelManager,
126+
NS::Target: NodeSigner,
128127
TP::Target: TimeProvider,
129128
{
130129
config: LSPS5ServiceConfig,
@@ -133,18 +132,20 @@ where
133132
pending_messages: Arc<MessageQueue>,
134133
time_provider: TP,
135134
channel_manager: CM,
135+
node_signer: NS,
136136
last_pruning: Mutex<Option<LSPSDateTime>>,
137137
}
138138

139-
impl<CM: Deref, TP: Deref> LSPS5ServiceHandler<CM, TP>
139+
impl<CM: Deref, NS: Deref, TP: Deref> LSPS5ServiceHandler<CM, NS, TP>
140140
where
141141
CM::Target: AChannelManager,
142+
NS::Target: NodeSigner,
142143
TP::Target: TimeProvider,
143144
{
144145
/// Constructs a `LSPS5ServiceHandler` using the given time provider.
145146
pub(crate) fn new_with_time_provider(
146147
event_queue: Arc<EventQueue>, pending_messages: Arc<MessageQueue>, channel_manager: CM,
147-
config: LSPS5ServiceConfig, time_provider: TP,
148+
node_signer: NS, config: LSPS5ServiceConfig, time_provider: TP,
148149
) -> Self {
149150
assert!(config.max_webhooks_per_client > 0, "`max_webhooks_per_client` must be > 0");
150151
Self {
@@ -154,6 +155,7 @@ where
154155
pending_messages,
155156
time_provider,
156157
channel_manager,
158+
node_signer,
157159
last_pruning: Mutex::new(None),
158160
}
159161
}
@@ -468,7 +470,9 @@ where
468470
notification_json
469471
);
470472

471-
Ok(message_signing::sign(message.as_bytes(), &self.config.signing_key))
473+
self.node_signer
474+
.sign_message(message.as_bytes())
475+
.map_err(|_| LSPS5ProtocolError::UnknownError)
472476
}
473477

474478
fn prune_stale_webhooks(&self) {
@@ -500,9 +504,10 @@ where
500504
}
501505
}
502506

503-
impl<CM: Deref, TP: Deref> LSPSProtocolMessageHandler for LSPS5ServiceHandler<CM, TP>
507+
impl<CM: Deref, NS: Deref, TP: Deref> LSPSProtocolMessageHandler for LSPS5ServiceHandler<CM, NS, TP>
504508
where
505509
CM::Target: AChannelManager,
510+
NS::Target: NodeSigner,
506511
TP::Target: TimeProvider,
507512
{
508513
type ProtocolMessage = LSPS5Message;

lightning-liquidity/src/manager.rs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use lightning::ln::channelmanager::{AChannelManager, ChainParameters};
3333
use lightning::ln::msgs::{ErrorAction, LightningError};
3434
use lightning::ln::peer_handler::CustomMessageHandler;
3535
use lightning::ln::wire::CustomMessageReader;
36-
use lightning::sign::EntropySource;
36+
use lightning::sign::{EntropySource, NodeSigner};
3737
use lightning::util::logger::Level;
3838
use lightning::util::ser::{LengthLimitedRead, LengthReadable};
3939
use lightning::util::wakers::Future;
@@ -82,8 +82,8 @@ pub struct LiquidityClientConfig {
8282
/// This is not exported to bindings users as general cover traits aren't useful in other
8383
/// languages.
8484
pub trait ALiquidityManager {
85-
/// A type implementing [`EntropySource`]
86-
type EntropySource: EntropySource + ?Sized;
85+
/// A type implementing [`EntropySource`] and [`NodeSigner`]
86+
type EntropySource: EntropySource + NodeSigner + ?Sized;
8787
/// A type that may be dereferenced to [`Self::EntropySource`].
8888
type ES: Deref<Target = Self::EntropySource> + Clone;
8989
/// A type implementing [`AChannelManager`]
@@ -105,7 +105,7 @@ pub trait ALiquidityManager {
105105
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> ALiquidityManager
106106
for LiquidityManager<ES, CM, C, TP>
107107
where
108-
ES::Target: EntropySource,
108+
ES::Target: EntropySource + NodeSigner,
109109
CM::Target: AChannelManager,
110110
C::Target: Filter,
111111
TP::Target: TimeProvider,
@@ -148,7 +148,7 @@ pub struct LiquidityManager<
148148
C: Deref + Clone,
149149
TP: Deref + Clone,
150150
> where
151-
ES::Target: EntropySource,
151+
ES::Target: EntropySource + NodeSigner,
152152
CM::Target: AChannelManager,
153153
C::Target: Filter,
154154
TP::Target: TimeProvider,
@@ -165,7 +165,7 @@ pub struct LiquidityManager<
165165
lsps1_client_handler: Option<LSPS1ClientHandler<ES>>,
166166
lsps2_service_handler: Option<LSPS2ServiceHandler<CM>>,
167167
lsps2_client_handler: Option<LSPS2ClientHandler<ES>>,
168-
lsps5_service_handler: Option<LSPS5ServiceHandler<CM, TP>>,
168+
lsps5_service_handler: Option<LSPS5ServiceHandler<CM, ES, TP>>,
169169
lsps5_client_handler: Option<LSPS5ClientHandler<ES, TP>>,
170170
service_config: Option<LiquidityServiceConfig>,
171171
_client_config: Option<LiquidityClientConfig>,
@@ -177,7 +177,7 @@ pub struct LiquidityManager<
177177
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone>
178178
LiquidityManager<ES, CM, C, Arc<DefaultTimeProvider>>
179179
where
180-
ES::Target: EntropySource,
180+
ES::Target: EntropySource + NodeSigner,
181181
CM::Target: AChannelManager,
182182
C::Target: Filter,
183183
{
@@ -203,7 +203,7 @@ where
203203
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone>
204204
LiquidityManager<ES, CM, C, TP>
205205
where
206-
ES::Target: EntropySource,
206+
ES::Target: EntropySource + NodeSigner,
207207
CM::Target: AChannelManager,
208208
C::Target: Filter,
209209
TP::Target: TimeProvider,
@@ -266,18 +266,19 @@ where
266266
let lsps5_service_handler = service_config.as_ref().and_then(|config| {
267267
config.lsps5_service_config.as_ref().map(|config| {
268268
if let Some(number) =
269-
<LSPS5ServiceHandler<CM, TP> as LSPSProtocolMessageHandler>::PROTOCOL_NUMBER
269+
<LSPS5ServiceHandler<CM, ES, TP> as LSPSProtocolMessageHandler>::PROTOCOL_NUMBER
270270
{
271271
supported_protocols.push(number);
272272
}
273273

274-
return LSPS5ServiceHandler::new_with_time_provider(
274+
LSPS5ServiceHandler::new_with_time_provider(
275275
Arc::clone(&pending_events),
276276
Arc::clone(&pending_messages),
277277
channel_manager.clone(),
278+
entropy_source.clone(),
278279
config.clone(),
279-
time_provider,
280-
);
280+
time_provider.clone(),
281+
)
281282
})
282283
});
283284

@@ -394,7 +395,7 @@ where
394395
/// Returns a reference to the LSPS5 server-side handler.
395396
///
396397
/// The returned hendler allows to initiate the LSPS5 service-side flow.
397-
pub fn lsps5_service_handler(&self) -> Option<&LSPS5ServiceHandler<CM, TP>> {
398+
pub fn lsps5_service_handler(&self) -> Option<&LSPS5ServiceHandler<CM, ES, TP>> {
398399
self.lsps5_service_handler.as_ref()
399400
}
400401

@@ -551,7 +552,7 @@ where
551552
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> CustomMessageReader
552553
for LiquidityManager<ES, CM, C, TP>
553554
where
554-
ES::Target: EntropySource,
555+
ES::Target: EntropySource + NodeSigner,
555556
CM::Target: AChannelManager,
556557
C::Target: Filter,
557558
TP::Target: TimeProvider,
@@ -573,7 +574,7 @@ where
573574
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> CustomMessageHandler
574575
for LiquidityManager<ES, CM, C, TP>
575576
where
576-
ES::Target: EntropySource,
577+
ES::Target: EntropySource + NodeSigner,
577578
CM::Target: AChannelManager,
578579
C::Target: Filter,
579580
TP::Target: TimeProvider,
@@ -686,7 +687,7 @@ where
686687
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> Listen
687688
for LiquidityManager<ES, CM, C, TP>
688689
where
689-
ES::Target: EntropySource,
690+
ES::Target: EntropySource + NodeSigner,
690691
CM::Target: AChannelManager,
691692
C::Target: Filter,
692693
TP::Target: TimeProvider,
@@ -725,7 +726,7 @@ where
725726
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> Confirm
726727
for LiquidityManager<ES, CM, C, TP>
727728
where
728-
ES::Target: EntropySource,
729+
ES::Target: EntropySource + NodeSigner,
729730
CM::Target: AChannelManager,
730731
C::Target: Filter,
731732
TP::Target: TimeProvider,

lightning-liquidity/tests/common/mod.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
use bitcoin::Network;
44
use lightning::ln::channelmanager::ChainParameters;
5+
use lightning_liquidity::lsps5::service::TimeProvider;
56
use lightning_liquidity::{LiquidityClientConfig, LiquidityManager, LiquidityServiceConfig};
67

78
use lightning::chain::{BestBlock, Filter};
@@ -19,28 +20,30 @@ pub(crate) struct LSPSNodes<'a, 'b, 'c> {
1920

2021
pub(crate) fn create_service_and_client_nodes<'a, 'b, 'c>(
2122
nodes: Vec<Node<'a, 'b, 'c>>, service_config: LiquidityServiceConfig,
22-
client_config: LiquidityClientConfig,
23+
client_config: LiquidityClientConfig, time_provider: Arc<dyn TimeProvider + Send + Sync>,
2324
) -> LSPSNodes<'a, 'b, 'c> {
2425
let chain_params = ChainParameters {
2526
network: Network::Testnet,
2627
best_block: BestBlock::from_network(Network::Testnet),
2728
};
28-
let service_lm = LiquidityManager::new(
29+
let service_lm = LiquidityManager::new_with_custom_time_provider(
2930
nodes[0].keys_manager,
3031
nodes[0].node,
3132
None::<Arc<dyn Filter + Send + Sync>>,
3233
Some(chain_params.clone()),
3334
Some(service_config),
3435
None,
36+
Arc::clone(&time_provider),
3537
);
3638

37-
let client_lm = LiquidityManager::new(
39+
let client_lm = LiquidityManager::new_with_custom_time_provider(
3840
nodes[1].keys_manager,
3941
nodes[1].node,
4042
None::<Arc<dyn Filter + Send + Sync>>,
4143
Some(chain_params),
4244
None,
4345
Some(client_config),
46+
time_provider,
4447
);
4548

4649
let mut iter = nodes.into_iter();
@@ -56,6 +59,7 @@ pub(crate) struct LiquidityNode<'a, 'b, 'c> {
5659
&'c TestKeysInterface,
5760
&'a TestChannelManager<'b, 'c>,
5861
Arc<dyn Filter + Send + Sync>,
62+
Arc<dyn TimeProvider + Send + Sync>,
5963
>,
6064
}
6165

@@ -66,6 +70,7 @@ impl<'a, 'b, 'c> LiquidityNode<'a, 'b, 'c> {
6670
&'c TestKeysInterface,
6771
&'a TestChannelManager<'b, 'c>,
6872
Arc<dyn Filter + Send + Sync>,
73+
Arc<dyn TimeProvider + Send + Sync>,
6974
>,
7075
) -> Self {
7176
Self { inner: node, liquidity_manager }

0 commit comments

Comments
 (0)