From f4a9aea3110a8e9f54f1e32b70b670bdab22c4af Mon Sep 17 00:00:00 2001 From: Jeffrey Czyz Date: Wed, 18 Oct 2023 16:28:54 -0500 Subject: [PATCH] Re-add one-hop onion message fuzzing test Revert fuzz test removal in 6dc42235baaa22320ad78d3e05fab31edad99328. The test originally checked that OnionMessenger would fail for one-hop blinded paths. The commit added support for such paths, but changing the checks was not sufficient since the node was not connected to the introduction node of the reply path. This is required in order to work with the trivial TestMessageRouter. Fix this by explicitly connecting the nodes. --- fuzz/src/onion_message.rs | 62 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/fuzz/src/onion_message.rs b/fuzz/src/onion_message.rs index 9cc3e04a637..d9d5c0a9037 100644 --- a/fuzz/src/onion_message.rs +++ b/fuzz/src/onion_message.rs @@ -7,6 +7,7 @@ use bitcoin::secp256k1::ecdsa::RecoverableSignature; use bitcoin::secp256k1::schnorr; use lightning::sign::{Recipient, KeyMaterial, EntropySource, NodeSigner, SignerProvider}; +use lightning::ln::features::InitFeatures; use lightning::ln::msgs::{self, DecodeError, OnionMessageHandler}; use lightning::ln::script::ShutdownScript; use lightning::offers::invoice::UnsignedBolt12Invoice; @@ -39,9 +40,20 @@ pub fn do_test(data: &[u8], logger: &L) { &keys_manager, &keys_manager, logger, &message_router, &offers_msg_handler, &custom_msg_handler ); - let mut pk = [2; 33]; pk[1] = 0xff; - let peer_node_id_not_used = PublicKey::from_slice(&pk).unwrap(); - onion_messenger.handle_onion_message(&peer_node_id_not_used, &msg); + + let peer_node_id = { + let mut secret_bytes = [0; 32]; + secret_bytes[31] = 2; + let secret = SecretKey::from_slice(&secret_bytes).unwrap(); + PublicKey::from_secret_key(&Secp256k1::signing_only(), &secret) + }; + + let mut features = InitFeatures::empty(); + features.set_onion_messages_optional(); + let init = msgs::Init { features, networks: None, remote_network_address: None }; + + onion_messenger.peer_connected(&peer_node_id, &init, false).unwrap(); + onion_messenger.handle_onion_message(&peer_node_id, &msg); } } @@ -211,6 +223,50 @@ mod tests { #[test] fn test_no_onion_message_breakage() { + let one_hop_om = "\ + 020000000000000000000000000000000000000000000000000000000000000e01055600020000000000000\ + 000000000000000000000000000000000000000000000000e01ae0276020000000000000000000000000000\ + 000000000000000000000000000000000002020000000000000000000000000000000000000000000000000\ + 000000000000e0101022a0000000000000000000000000000014551231950b75fc4402da1732fc9bebf0010\ + 9500000000000000000000000000000004106d000000000000000000000000000000fd1092202a2a2a2a2a2\ + a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ + 000000000000000000000000000000000000000005600000000000000000000000000000000000000000000\ + 000000000000000000"; + let logger = TrackingLogger { lines: Mutex::new(HashMap::new()) }; + super::do_test(&::hex::decode(one_hop_om).unwrap(), &logger); + { + let log_entries = logger.lines.lock().unwrap(); + assert_eq!(log_entries.get(&("lightning::onion_message::messenger".to_string(), + "Received an onion message with path_id None and a reply_path".to_string())), Some(&1)); + assert_eq!(log_entries.get(&("lightning::onion_message::messenger".to_string(), + "Sending onion message when responding to Custom onion message with path_id None".to_string())), Some(&1)); + } + let two_unblinded_hops_om = "\ 020000000000000000000000000000000000000000000000000000000000000e01055600020000000000000\ 000000000000000000000000000000000000000000000000e01350433042102020202020202020202020202\