Skip to content

Commit 9889c3a

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 fefe905 commit 9889c3a

File tree

8 files changed

+105
-33
lines changed

8 files changed

+105
-33
lines changed

fuzz/src/onion_message.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ pub fn do_test<L: Logger>(data: &[u8], logger: &L) {
5353
&message_router,
5454
&offers_msg_handler,
5555
&async_payments_msg_handler,
56+
IgnoringMessageHandler {}, // TODO: Move to ChannelManager once it supports DNSSEC.
5657
&custom_msg_handler,
5758
);
5859

lightning-background-processor/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ use futures_util::{dummy_waker, Selector, SelectorOutput};
612612
/// # type NetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<Logger>>;
613613
/// # type P2PGossipSync<UL> = lightning::routing::gossip::P2PGossipSync<Arc<NetworkGraph>, Arc<UL>, Arc<Logger>>;
614614
/// # type ChannelManager<B, F, FE> = lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor<B, F, FE>, B, FE, Logger>;
615-
/// # 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>;
615+
/// # 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>;
616616
/// # type Scorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<NetworkGraph>, Arc<Logger>>>;
617617
/// # type PeerManager<B, F, FE, UL> = lightning::ln::peer_handler::SimpleArcPeerManager<SocketDescriptor, ChainMonitor<B, F, FE>, B, FE, Arc<UL>, Logger>;
618618
/// #
@@ -1128,6 +1128,7 @@ mod tests {
11281128
IgnoringMessageHandler,
11291129
Arc<ChannelManager>,
11301130
IgnoringMessageHandler,
1131+
IgnoringMessageHandler,
11311132
>;
11321133

11331134
struct Node {
@@ -1530,6 +1531,7 @@ mod tests {
15301531
IgnoringMessageHandler {},
15311532
manager.clone(),
15321533
IgnoringMessageHandler {},
1534+
IgnoringMessageHandler {},
15331535
));
15341536
let wallet = Arc::new(TestWallet {});
15351537
let sweeper = Arc::new(OutputSweeper::new(

lightning/src/ln/functional_test_utils.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ type TestOnionMessenger<'chan_man, 'node_cfg, 'chan_mon_cfg> = OnionMessenger<
423423
&'node_cfg test_utils::TestMessageRouter<'chan_mon_cfg>,
424424
&'chan_man TestChannelManager<'node_cfg, 'chan_mon_cfg>,
425425
&'chan_man TestChannelManager<'node_cfg, 'chan_mon_cfg>,
426+
IgnoringMessageHandler, // TODO: Swap for ChannelManager (when built with the "dnssec" feature)
426427
IgnoringMessageHandler,
427428
>;
428429

@@ -3276,6 +3277,7 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
32763277
let onion_messenger = OnionMessenger::new(
32773278
dedicated_entropy, cfgs[i].keys_manager, cfgs[i].logger, &chan_mgrs[i],
32783279
&cfgs[i].message_router, &chan_mgrs[i], &chan_mgrs[i], IgnoringMessageHandler {},
3280+
IgnoringMessageHandler {},
32793281
);
32803282
let gossip_sync = P2PGossipSync::new(cfgs[i].network_graph.as_ref(), None, cfgs[i].logger);
32813283
let wallet_source = Arc::new(test_utils::TestWalletSource::new(SecretKey::from_slice(&[i as u8 + 1; 32]).unwrap()));

lightning/src/ln/offers_tests.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,7 @@ fn extract_invoice_request<'a, 'b, 'c>(
196196
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected static invoice: {:?}", invoice),
197197
OffersMessage::InvoiceError(error) => panic!("Unexpected invoice_error: {:?}", error),
198198
},
199-
#[cfg(async_payments)]
200-
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
201-
ParsedOnionMessageContents::Custom(message) => panic!("Unexpected custom message: {:?}", message),
199+
_ => panic!("Unexpected message {:?}", message),
202200
},
203201
Ok(PeeledOnion::Forward(_, _)) => panic!("Unexpected onion message forward"),
204202
Err(e) => panic!("Failed to process onion message {:?}", e),
@@ -215,9 +213,7 @@ fn extract_invoice<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, message: &OnionMessage)
215213
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected static invoice: {:?}", invoice),
216214
OffersMessage::InvoiceError(error) => panic!("Unexpected invoice_error: {:?}", error),
217215
},
218-
#[cfg(async_payments)]
219-
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
220-
ParsedOnionMessageContents::Custom(message) => panic!("Unexpected custom message: {:?}", message),
216+
_ => panic!("Unexpected message {:?}", message),
221217
},
222218
Ok(PeeledOnion::Forward(_, _)) => panic!("Unexpected onion message forward"),
223219
Err(e) => panic!("Failed to process onion message {:?}", e),
@@ -236,9 +232,7 @@ fn extract_invoice_error<'a, 'b, 'c>(
236232
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected invoice: {:?}", invoice),
237233
OffersMessage::InvoiceError(error) => error,
238234
},
239-
#[cfg(async_payments)]
240-
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
241-
ParsedOnionMessageContents::Custom(message) => panic!("Unexpected custom message: {:?}", message),
235+
_ => panic!("Unexpected message: {:?}", message),
242236
},
243237
Ok(PeeledOnion::Forward(_, _)) => panic!("Unexpected onion message forward"),
244238
Err(e) => panic!("Failed to process onion message {:?}", e),

lightning/src/ln/peer_handler.rs

Lines changed: 9 additions & 0 deletions
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, PendingOnionMessage, Responder, ResponseInstruction};
3435
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
3536
use crate::onion_message::packet::OnionMessageContents;
@@ -158,6 +159,14 @@ impl AsyncPaymentsMessageHandler for IgnoringMessageHandler {
158159
}
159160
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
160161
}
162+
impl DNSResolverMessageHandler for IgnoringMessageHandler {
163+
fn dnssec_query(
164+
&self, _message: DNSSECQuery, _responder: Option<Responder>,
165+
) -> ResponseInstruction<DNSResolverMessage> {
166+
ResponseInstruction::NoResponse
167+
}
168+
fn dnssec_proof(&self, _message: DNSSECProof) {}
169+
}
161170
impl CustomOnionMessageHandler for IgnoringMessageHandler {
162171
type CustomMessage = Infallible;
163172
fn handle_custom_message(&self, _message: Self::CustomMessage, _context: Option<Vec<u8>>, _responder: Option<Responder>) -> ResponseInstruction<Self::CustomMessage> {

lightning/src/onion_message/functional_tests.rs

Lines changed: 18 additions & 2 deletions
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, PendingOnionMessage, Responder, ResponseInstruction, 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>,
@@ -92,6 +94,17 @@ impl AsyncPaymentsMessageHandler for TestAsyncPaymentsMessageHandler {
9294
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
9395
}
9496

97+
struct TestDNSResolverMessageHandler {}
98+
99+
impl DNSResolverMessageHandler for TestDNSResolverMessageHandler {
100+
fn dnssec_query(
101+
&self, _message: DNSSECQuery, _responder: Option<Responder>,
102+
) -> ResponseInstruction<DNSResolverMessage> {
103+
ResponseInstruction::NoResponse
104+
}
105+
fn dnssec_proof(&self, _message: DNSSECProof) {}
106+
}
107+
95108
#[derive(Clone, Debug, PartialEq)]
96109
enum TestCustomMessage {
97110
Ping,
@@ -263,18 +276,21 @@ fn create_nodes_using_cfgs(cfgs: Vec<MessengerCfg>) -> Vec<MessengerNode> {
263276
);
264277
let offers_message_handler = Arc::new(TestOffersMessageHandler {});
265278
let async_payments_message_handler = Arc::new(TestAsyncPaymentsMessageHandler {});
279+
let dns_resolver_message_handler = Arc::new(TestDNSResolverMessageHandler {});
266280
let custom_message_handler = Arc::new(TestCustomMessageHandler::new());
267281
let messenger = if cfg.intercept_offline_peer_oms {
268282
OnionMessenger::new_with_offline_peer_interception(
269283
entropy_source.clone(), node_signer.clone(), logger.clone(),
270284
node_id_lookup, message_router, offers_message_handler,
271-
async_payments_message_handler, custom_message_handler.clone()
285+
async_payments_message_handler, dns_resolver_message_handler,
286+
custom_message_handler.clone(),
272287
)
273288
} else {
274289
OnionMessenger::new(
275290
entropy_source.clone(), node_signer.clone(), logger.clone(),
276291
node_id_lookup, message_router, offers_message_handler,
277-
async_payments_message_handler, custom_message_handler.clone()
292+
async_payments_message_handler, dns_resolver_message_handler,
293+
custom_message_handler.clone(),
278294
)
279295
};
280296
nodes.push(MessengerNode {

0 commit comments

Comments
 (0)