Re-add one-hop onion message fuzzing test
[rust-lightning] / 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\