Skip to content

Commit 355fcb4

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 cc7c19f commit 355fcb4

File tree

8 files changed

+105
-33
lines changed

8 files changed

+105
-33
lines changed

fuzz/src/onion_message.rs

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use lightning::blinded_path::message::{BlindedMessagePath, MessageContext, Offer
99
use lightning::blinded_path::EmptyNodeIdLookUp;
1010
use lightning::ln::features::InitFeatures;
1111
use lightning::ln::msgs::{self, DecodeError, OnionMessageHandler};
12+
use lightning::ln::peer_handler::IgnoringMessageHandler;
1213
use lightning::ln::script::ShutdownScript;
1314
use lightning::offers::invoice::UnsignedBolt12Invoice;
1415
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
@@ -54,6 +55,7 @@ pub fn do_test<L: Logger>(data: &[u8], logger: &L) {
5455
&message_router,
5556
&offers_msg_handler,
5657
&async_payments_msg_handler,
58+
IgnoringMessageHandler {}, // TODO: Move to ChannelManager once it supports DNSSEC.
5759
&custom_msg_handler,
5860
);
5961

lightning-background-processor/src/lib.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
648648
/// # type NetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<Logger>>;
649649
/// # type P2PGossipSync<UL> = lightning::routing::gossip::P2PGossipSync<Arc<NetworkGraph>, Arc<UL>, Arc<Logger>>;
650650
/// # type ChannelManager<B, F, FE> = lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor<B, F, FE>, B, FE, Logger>;
651-
/// # 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>;
651+
/// # 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>;
652652
/// # type Scorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<NetworkGraph>, Arc<Logger>>>;
653653
/// # type PeerManager<B, F, FE, UL> = lightning::ln::peer_handler::SimpleArcPeerManager<SocketDescriptor, ChainMonitor<B, F, FE>, B, FE, Arc<UL>, Logger>;
654654
/// #
@@ -1186,6 +1186,7 @@ mod tests {
11861186
IgnoringMessageHandler,
11871187
Arc<ChannelManager>,
11881188
IgnoringMessageHandler,
1189+
IgnoringMessageHandler,
11891190
>;
11901191

11911192
struct Node {
@@ -1587,6 +1588,7 @@ mod tests {
15871588
IgnoringMessageHandler {},
15881589
manager.clone(),
15891590
IgnoringMessageHandler {},
1591+
IgnoringMessageHandler {},
15901592
));
15911593
let wallet = Arc::new(TestWallet {});
15921594
let sweeper = Arc::new(OutputSweeper::new(

lightning/src/ln/functional_test_utils.rs

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

@@ -3265,6 +3266,7 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
32653266
let onion_messenger = OnionMessenger::new(
32663267
dedicated_entropy, cfgs[i].keys_manager, cfgs[i].logger, &chan_mgrs[i],
32673268
&cfgs[i].message_router, &chan_mgrs[i], &chan_mgrs[i], IgnoringMessageHandler {},
3269+
IgnoringMessageHandler {},
32683270
);
32693271
let gossip_sync = P2PGossipSync::new(cfgs[i].network_graph.as_ref(), None, cfgs[i].logger);
32703272
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
@@ -210,9 +210,7 @@ fn extract_invoice_request<'a, 'b, 'c>(
210210
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected static invoice: {:?}", invoice),
211211
OffersMessage::InvoiceError(error) => panic!("Unexpected invoice_error: {:?}", error),
212212
},
213-
#[cfg(async_payments)]
214-
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
215-
ParsedOnionMessageContents::Custom(message) => panic!("Unexpected custom message: {:?}", message),
213+
_ => panic!("Unexpected message {:?}", message),
216214
},
217215
Ok(PeeledOnion::Forward(_, _)) => panic!("Unexpected onion message forward"),
218216
Err(e) => panic!("Failed to process onion message {:?}", e),
@@ -229,9 +227,7 @@ fn extract_invoice<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, message: &OnionMessage)
229227
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected static invoice: {:?}", invoice),
230228
OffersMessage::InvoiceError(error) => panic!("Unexpected invoice_error: {:?}", error),
231229
},
232-
#[cfg(async_payments)]
233-
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
234-
ParsedOnionMessageContents::Custom(message) => panic!("Unexpected custom message: {:?}", message),
230+
_ => panic!("Unexpected message {:?}", message),
235231
},
236232
Ok(PeeledOnion::Forward(_, _)) => panic!("Unexpected onion message forward"),
237233
Err(e) => panic!("Failed to process onion message {:?}", e),
@@ -250,9 +246,7 @@ fn extract_invoice_error<'a, 'b, 'c>(
250246
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected invoice: {:?}", invoice),
251247
OffersMessage::InvoiceError(error) => error,
252248
},
253-
#[cfg(async_payments)]
254-
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
255-
ParsedOnionMessageContents::Custom(message) => panic!("Unexpected custom message: {:?}", message),
249+
_ => panic!("Unexpected message: {:?}", message),
256250
},
257251
Ok(PeeledOnion::Forward(_, _)) => panic!("Unexpected onion message forward"),
258252
Err(e) => panic!("Failed to process onion message {:?}", e),

lightning/src/ln/peer_handler.rs

+9
Original file line numberDiff line numberDiff line change
@@ -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) {}
156157
}
158+
impl DNSResolverMessageHandler for IgnoringMessageHandler {
159+
fn dnssec_query(
160+
&self, _message: DNSSECQuery, _responder: Option<Responder>,
161+
) -> Option<(DNSResolverMessage, ResponseInstruction)> {
162+
None
163+
}
164+
fn dnssec_proof(&self, _message: DNSSECProof) {}
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

+18-2
Original file line numberDiff line numberDiff line change
@@ -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) {}
9193
}
9294

95+
struct TestDNSResolverMessageHandler {}
96+
97+
impl DNSResolverMessageHandler for TestDNSResolverMessageHandler {
98+
fn dnssec_query(
99+
&self, _message: DNSSECQuery, _responder: Option<Responder>,
100+
) -> Option<(DNSResolverMessage, ResponseInstruction)> {
101+
None
102+
}
103+
fn dnssec_proof(&self, _message: DNSSECProof) {}
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)