Skip to content

Commit 3b6f7f1

Browse files
committed
Split NetworkGraph message handling fns into unsigned and signed
This takes the now-public `NetworkGraph` message handling functions and splits them all into two methods - one which takes a required Secp256k1 context and verifies signatures and one which takes only the unsigned part of the message and does not take a Secp256k1 context. This both clarifies the public API as well as simplifies it, all without duplicating code. Finally, this adds an assertion in the Router fuzzer to make sure the constants used for message deserialization are correct.
1 parent d9c03f2 commit 3b6f7f1

File tree

2 files changed

+136
-105
lines changed

2 files changed

+136
-105
lines changed

fuzz/src/router.rs

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ use bitcoin::blockdata::script::Builder;
1111
use bitcoin::blockdata::transaction::TxOut;
1212
use bitcoin::hash_types::BlockHash;
1313

14-
use bitcoin::secp256k1;
15-
1614
use lightning::chain;
1715
use lightning::ln::channelmanager::ChannelDetails;
1816
use lightning::ln::features::InitFeatures;
@@ -120,7 +118,10 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
120118
($MsgType: path, $len: expr) => {{
121119
let mut reader = ::std::io::Cursor::new(get_slice!($len));
122120
match <$MsgType>::read(&mut reader) {
123-
Ok(msg) => msg,
121+
Ok(msg) => {
122+
assert_eq!(reader.position(), $len as u64);
123+
msg
124+
},
124125
Err(e) => match e {
125126
msgs::DecodeError::UnknownVersion => return,
126127
msgs::DecodeError::UnknownRequiredFeature => return,
@@ -134,10 +135,10 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
134135
}
135136

136137
macro_rules! decode_msg_with_len16 {
137-
($MsgType: path, $begin_len: expr, $excess: expr) => {
138+
($MsgType: path, $excess: expr) => {
138139
{
139-
let extra_len = slice_to_be16(&get_slice_nonadvancing!($begin_len as usize + 2)[$begin_len..$begin_len + 2]);
140-
decode_msg!($MsgType, $begin_len as usize + 2 + (extra_len as usize) + $excess)
140+
let extra_len = slice_to_be16(get_slice_nonadvancing!(2));
141+
decode_msg!($MsgType, 2 + (extra_len as usize) + $excess)
141142
}
142143
}
143144
}
@@ -162,29 +163,29 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
162163
loop {
163164
match get_slice!(1)[0] {
164165
0 => {
165-
let start_len = slice_to_be16(&get_slice_nonadvancing!(64 + 2)[64..64 + 2]) as usize;
166-
let addr_len = slice_to_be16(&get_slice_nonadvancing!(64+start_len+2 + 74)[64+start_len+2 + 72..64+start_len+2 + 74]);
166+
let start_len = slice_to_be16(&get_slice_nonadvancing!(2)[0..2]) as usize;
167+
let addr_len = slice_to_be16(&get_slice_nonadvancing!(start_len+2 + 74)[start_len+2 + 72..start_len+2 + 74]);
167168
if addr_len > (37+1)*4 {
168169
return;
169170
}
170-
let msg = decode_msg_with_len16!(msgs::NodeAnnouncement, 64, 288);
171-
node_pks.insert(msg.contents.node_id);
172-
let _ = net_graph.update_node_from_announcement::<secp256k1::VerifyOnly>(&msg, None);
171+
let msg = decode_msg_with_len16!(msgs::UnsignedNodeAnnouncement, 288);
172+
node_pks.insert(msg.node_id);
173+
let _ = net_graph.update_node_from_unsigned_announcement(&msg);
173174
},
174175
1 => {
175-
let msg = decode_msg_with_len16!(msgs::ChannelAnnouncement, 64*4, 32+8+33*4);
176-
node_pks.insert(msg.contents.node_id_1);
177-
node_pks.insert(msg.contents.node_id_2);
178-
let _ = net_graph.update_channel_from_announcement::<secp256k1::VerifyOnly, &FuzzChainSource>(&msg, &None, None);
176+
let msg = decode_msg_with_len16!(msgs::UnsignedChannelAnnouncement, 32+8+33*4);
177+
node_pks.insert(msg.node_id_1);
178+
node_pks.insert(msg.node_id_2);
179+
let _ = net_graph.update_channel_from_unsigned_announcement::<&FuzzChainSource>(&msg, &None);
179180
},
180181
2 => {
181-
let msg = decode_msg_with_len16!(msgs::ChannelAnnouncement, 64*4, 32+8+33*4);
182-
node_pks.insert(msg.contents.node_id_1);
183-
node_pks.insert(msg.contents.node_id_2);
184-
let _ = net_graph.update_channel_from_announcement::<secp256k1::VerifyOnly, &FuzzChainSource>(&msg, &Some(&FuzzChainSource { input: Arc::clone(&input) }), None);
182+
let msg = decode_msg_with_len16!(msgs::UnsignedChannelAnnouncement, 32+8+33*4);
183+
node_pks.insert(msg.node_id_1);
184+
node_pks.insert(msg.node_id_2);
185+
let _ = net_graph.update_channel_from_unsigned_announcement(&msg, &Some(&FuzzChainSource { input: Arc::clone(&input) }));
185186
},
186187
3 => {
187-
let _ = net_graph.update_channel(&decode_msg!(msgs::ChannelUpdate, 136), None);
188+
let _ = net_graph.update_channel_unsigned(&decode_msg!(msgs::UnsignedChannelUpdate, 72));
188189
},
189190
4 => {
190191
let short_channel_id = slice_to_be64(get_slice!(8));

0 commit comments

Comments
 (0)