Re-add one-hop onion message fuzzing test
authorJeffrey Czyz <jkczyz@gmail.com>
Wed, 18 Oct 2023 21:28:54 +0000 (16:28 -0500)
committerJeffrey Czyz <jkczyz@gmail.com>
Wed, 25 Oct 2023 23:13:10 +0000 (18:13 -0500)
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

index 9cc3e04a637b4ea4960df59e76870155512c4161..d9d5c0a90376c2cabf5c50ac26b9cd50af23d8a0 100644 (file)
@@ -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<L: Logger>(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\