Skip to content

Commit ebde296

Browse files
committed
Parse and handle DNSResolverMessages in OnionMessenger
This adds the requisite message parsing and handling code for the new DNSSEC messages to `OnionMessenger`.
1 parent 1cf0393 commit ebde296

File tree

8 files changed

+114
-35
lines changed

8 files changed

+114
-35
lines changed

fuzz/src/onion_message.rs

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use lightning::blinded_path::message::{
1111
use lightning::blinded_path::EmptyNodeIdLookUp;
1212
use lightning::ln::features::InitFeatures;
1313
use lightning::ln::msgs::{self, DecodeError, OnionMessageHandler};
14+
use lightning::ln::peer_handler::IgnoringMessageHandler;
1415
use lightning::ln::script::ShutdownScript;
1516
use lightning::offers::invoice::UnsignedBolt12Invoice;
1617
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
@@ -56,6 +57,7 @@ pub fn do_test<L: Logger>(data: &[u8], logger: &L) {
5657
&message_router,
5758
&offers_msg_handler,
5859
&async_payments_msg_handler,
60+
IgnoringMessageHandler {}, // TODO: Move to ChannelManager once it supports DNSSEC.
5961
&custom_msg_handler,
6062
);
6163

lightning-background-processor/src/lib.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
657657
/// # type NetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<Logger>>;
658658
/// # type P2PGossipSync<UL> = lightning::routing::gossip::P2PGossipSync<Arc<NetworkGraph>, Arc<UL>, Arc<Logger>>;
659659
/// # type ChannelManager<B, F, FE> = lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor<B, F, FE>, B, FE, Logger>;
660-
/// # type OnionMessenger<B, F, FE> = lightning::onion_message::messenger::OnionMessenger<Arc<lightning::sign::KeysManager>, Arc<lightning::sign::KeysManager>, Arc<Logger>, Arc<ChannelManager<B, F, FE>>, Arc<lightning::onion_message::messenger::DefaultMessageRouter<Arc<NetworkGraph>, Arc<Logger>, Arc<lightning::sign::KeysManager>>>, Arc<ChannelManager<B, F, FE>>, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler>;
660+
/// # type OnionMessenger<B, F, FE> = lightning::onion_message::messenger::OnionMessenger<Arc<lightning::sign::KeysManager>, Arc<lightning::sign::KeysManager>, Arc<Logger>, Arc<ChannelManager<B, F, FE>>, Arc<lightning::onion_message::messenger::DefaultMessageRouter<Arc<NetworkGraph>, Arc<Logger>, Arc<lightning::sign::KeysManager>>>, Arc<ChannelManager<B, F, FE>>, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler>;
661661
/// # type Scorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<NetworkGraph>, Arc<Logger>>>;
662662
/// # type PeerManager<B, F, FE, UL> = lightning::ln::peer_handler::SimpleArcPeerManager<SocketDescriptor, ChainMonitor<B, F, FE>, B, FE, Arc<UL>, Logger>;
663663
/// #
@@ -1202,6 +1202,7 @@ mod tests {
12021202
IgnoringMessageHandler,
12031203
Arc<ChannelManager>,
12041204
IgnoringMessageHandler,
1205+
IgnoringMessageHandler,
12051206
>;
12061207

12071208
struct Node {
@@ -1604,6 +1605,7 @@ mod tests {
16041605
IgnoringMessageHandler {},
16051606
manager.clone(),
16061607
IgnoringMessageHandler {},
1608+
IgnoringMessageHandler {},
16071609
));
16081610
let wallet = Arc::new(TestWallet {});
16091611
let sweeper = Arc::new(OutputSweeper::new(

lightning/src/ln/functional_test_utils.rs

+2
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ type TestOnionMessenger<'chan_man, 'node_cfg, 'chan_mon_cfg> = OnionMessenger<
415415
&'node_cfg test_utils::TestMessageRouter<'chan_mon_cfg>,
416416
&'chan_man TestChannelManager<'node_cfg, 'chan_mon_cfg>,
417417
&'chan_man TestChannelManager<'node_cfg, 'chan_mon_cfg>,
418+
IgnoringMessageHandler, // TODO: Swap for ChannelManager (when built with the "dnssec" feature)
418419
IgnoringMessageHandler,
419420
>;
420421

@@ -3283,6 +3284,7 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
32833284
let onion_messenger = OnionMessenger::new(
32843285
dedicated_entropy, cfgs[i].keys_manager, cfgs[i].logger, &chan_mgrs[i],
32853286
&cfgs[i].message_router, &chan_mgrs[i], &chan_mgrs[i], IgnoringMessageHandler {},
3287+
IgnoringMessageHandler {},
32863288
);
32873289
let gossip_sync = P2PGossipSync::new(cfgs[i].network_graph.as_ref(), None, cfgs[i].logger);
32883290
let wallet_source = Arc::new(test_utils::TestWalletSource::new(SecretKey::from_slice(&[i as u8 + 1; 32]).unwrap()));

lightning/src/ln/offers_tests.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,7 @@ fn extract_invoice_request<'a, 'b, 'c>(
212212
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected static invoice: {:?}", invoice),
213213
OffersMessage::InvoiceError(error) => panic!("Unexpected invoice_error: {:?}", error),
214214
},
215-
#[cfg(async_payments)]
216-
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
217-
ParsedOnionMessageContents::Custom(message) => panic!("Unexpected custom message: {:?}", message),
215+
_ => panic!("Unexpected message {:?}", message),
218216
},
219217
Ok(PeeledOnion::Forward(_, _)) => panic!("Unexpected onion message forward"),
220218
Err(e) => panic!("Failed to process onion message {:?}", e),
@@ -231,9 +229,7 @@ fn extract_invoice<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, message: &OnionMessage)
231229
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected static invoice: {:?}", invoice),
232230
OffersMessage::InvoiceError(error) => panic!("Unexpected invoice_error: {:?}", error),
233231
},
234-
#[cfg(async_payments)]
235-
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
236-
ParsedOnionMessageContents::Custom(message) => panic!("Unexpected custom message: {:?}", message),
232+
_ => panic!("Unexpected message {:?}", message),
237233
},
238234
Ok(PeeledOnion::Forward(_, _)) => panic!("Unexpected onion message forward"),
239235
Err(e) => panic!("Failed to process onion message {:?}", e),
@@ -252,9 +248,7 @@ fn extract_invoice_error<'a, 'b, 'c>(
252248
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected invoice: {:?}", invoice),
253249
OffersMessage::InvoiceError(error) => error,
254250
},
255-
#[cfg(async_payments)]
256-
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
257-
ParsedOnionMessageContents::Custom(message) => panic!("Unexpected custom message: {:?}", message),
251+
_ => panic!("Unexpected message: {:?}", message),
258252
},
259253
Ok(PeeledOnion::Forward(_, _)) => panic!("Unexpected onion message forward"),
260254
Err(e) => panic!("Failed to process onion message {:?}", e),

lightning/src/ln/peer_handler.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
use bitcoin::constants::ChainHash;
1919
use bitcoin::secp256k1::{self, Secp256k1, SecretKey, PublicKey};
2020

21-
use crate::blinded_path::message::{AsyncPaymentsContext, OffersContext};
21+
use crate::blinded_path::message::{AsyncPaymentsContext, DNSResolverContext, OffersContext};
2222
use crate::sign::{NodeSigner, Recipient};
2323
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
2424
use crate::ln::types::ChannelId;
@@ -30,6 +30,7 @@ use crate::ln::peer_channel_encryptor::{PeerChannelEncryptor, NextNoiseStep, Mes
3030
use crate::ln::wire;
3131
use crate::ln::wire::{Encode, Type};
3232
use crate::onion_message::async_payments::{AsyncPaymentsMessageHandler, HeldHtlcAvailable, ReleaseHeldHtlc};
33+
use crate::onion_message::dns_resolution::{DNSResolverMessageHandler, DNSResolverMessage, DNSSECProof, DNSSECQuery};
3334
use crate::onion_message::messenger::{CustomOnionMessageHandler, Responder, ResponseInstruction, MessageSendInstructions};
3435
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
3536
use crate::onion_message::packet::OnionMessageContents;
@@ -154,6 +155,14 @@ impl AsyncPaymentsMessageHandler for IgnoringMessageHandler {
154155
}
155156
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
156157
}
158+
impl DNSResolverMessageHandler for IgnoringMessageHandler {
159+
fn handle_dnssec_query(
160+
&self, _message: DNSSECQuery, _responder: Option<Responder>,
161+
) -> Option<(DNSResolverMessage, ResponseInstruction)> {
162+
None
163+
}
164+
fn handle_dnssec_proof(&self, _message: DNSSECProof, _context: DNSResolverContext) {}
165+
}
157166
impl CustomOnionMessageHandler for IgnoringMessageHandler {
158167
type CustomMessage = Infallible;
159168
fn handle_custom_message(&self, _message: Infallible, _context: Option<Vec<u8>>, _responder: Option<Responder>) -> Option<(Infallible, ResponseInstruction)> {

lightning/src/onion_message/functional_tests.rs

+19-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
//! Onion message testing and test utilities live here.
1111
1212
use crate::blinded_path::EmptyNodeIdLookUp;
13-
use crate::blinded_path::message::{AsyncPaymentsContext, BlindedMessagePath, MessageForwardNode, MessageContext, OffersContext};
13+
use crate::blinded_path::message::{AsyncPaymentsContext, BlindedMessagePath, DNSResolverContext, MessageForwardNode, MessageContext, OffersContext};
1414
use crate::events::{Event, EventsProvider};
1515
use crate::ln::features::{ChannelFeatures, InitFeatures};
1616
use crate::ln::msgs::{self, DecodeError, OnionMessageHandler};
@@ -20,6 +20,7 @@ use crate::sign::{NodeSigner, Recipient};
2020
use crate::util::ser::{FixedLengthReader, LengthReadable, Writeable, Writer};
2121
use crate::util::test_utils;
2222
use super::async_payments::{AsyncPaymentsMessageHandler, HeldHtlcAvailable, ReleaseHeldHtlc};
23+
use super::dns_resolution::{DNSResolverMessageHandler, DNSResolverMessage, DNSSECProof, DNSSECQuery};
2324
use super::messenger::{CustomOnionMessageHandler, DefaultMessageRouter, Destination, OnionMessagePath, OnionMessenger, Responder, ResponseInstruction, MessageSendInstructions, SendError, SendSuccess};
2425
use super::offers::{OffersMessage, OffersMessageHandler};
2526
use super::packet::{OnionMessageContents, Packet};
@@ -52,6 +53,7 @@ struct MessengerNode {
5253
>>,
5354
Arc<TestOffersMessageHandler>,
5455
Arc<TestAsyncPaymentsMessageHandler>,
56+
Arc<TestDNSResolverMessageHandler>,
5557
Arc<TestCustomMessageHandler>
5658
>,
5759
custom_message_handler: Arc<TestCustomMessageHandler>,
@@ -90,6 +92,17 @@ impl AsyncPaymentsMessageHandler for TestAsyncPaymentsMessageHandler {
9092
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
9193
}
9294

95+
struct TestDNSResolverMessageHandler {}
96+
97+
impl DNSResolverMessageHandler for TestDNSResolverMessageHandler {
98+
fn handle_dnssec_query(
99+
&self, _message: DNSSECQuery, _responder: Option<Responder>,
100+
) -> Option<(DNSResolverMessage, ResponseInstruction)> {
101+
None
102+
}
103+
fn handle_dnssec_proof(&self, _message: DNSSECProof, _context: DNSResolverContext) {}
104+
}
105+
93106
#[derive(Clone, Debug, PartialEq)]
94107
enum TestCustomMessage {
95108
Ping,
@@ -264,18 +277,21 @@ fn create_nodes_using_cfgs(cfgs: Vec<MessengerCfg>) -> Vec<MessengerNode> {
264277
);
265278
let offers_message_handler = Arc::new(TestOffersMessageHandler {});
266279
let async_payments_message_handler = Arc::new(TestAsyncPaymentsMessageHandler {});
280+
let dns_resolver_message_handler = Arc::new(TestDNSResolverMessageHandler {});
267281
let custom_message_handler = Arc::new(TestCustomMessageHandler::new());
268282
let messenger = if cfg.intercept_offline_peer_oms {
269283
OnionMessenger::new_with_offline_peer_interception(
270284
entropy_source.clone(), node_signer.clone(), logger.clone(),
271285
node_id_lookup, message_router, offers_message_handler,
272-
async_payments_message_handler, custom_message_handler.clone()
286+
async_payments_message_handler, dns_resolver_message_handler,
287+
custom_message_handler.clone(),
273288
)
274289
} else {
275290
OnionMessenger::new(
276291
entropy_source.clone(), node_signer.clone(), logger.clone(),
277292
node_id_lookup, message_router, offers_message_handler,
278-
async_payments_message_handler, custom_message_handler.clone()
293+
async_payments_message_handler, dns_resolver_message_handler,
294+
custom_message_handler.clone(),
279295
)
280296
};
281297
nodes.push(MessengerNode {

0 commit comments

Comments
 (0)