Skip to content

Commit 91b23a0

Browse files
committed
Reject rumors of channels that are from one node back to itself
1 parent a71abac commit 91b23a0

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

src/ln/channelmanager.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3355,9 +3355,9 @@ mod tests {
33553355
chain_hash: genesis_block(Network::Testnet).header.bitcoin_hash(),
33563356
short_channel_id: as_chan.get_short_channel_id().unwrap(),
33573357
node_id_1: if were_node_one { as_network_key } else { bs_network_key },
3358-
node_id_2: if !were_node_one { bs_network_key } else { as_network_key },
3358+
node_id_2: if were_node_one { bs_network_key } else { as_network_key },
33593359
bitcoin_key_1: if were_node_one { as_bitcoin_key } else { bs_bitcoin_key },
3360-
bitcoin_key_2: if !were_node_one { bs_bitcoin_key } else { as_bitcoin_key },
3360+
bitcoin_key_2: if were_node_one { bs_bitcoin_key } else { as_bitcoin_key },
33613361
excess_data: Vec::new(),
33623362
};
33633363
}
@@ -3372,9 +3372,9 @@ mod tests {
33723372
let bs_node_sig = secp_ctx.sign(&msghash, &nodes[1].node.our_network_key);
33733373
chan_announcement = msgs::ChannelAnnouncement {
33743374
node_signature_1 : if were_node_one { as_node_sig } else { bs_node_sig},
3375-
node_signature_2 : if !were_node_one { bs_node_sig } else { as_node_sig},
3375+
node_signature_2 : if were_node_one { bs_node_sig } else { as_node_sig},
33763376
bitcoin_signature_1: if were_node_one { as_bitcoin_sig } else { bs_bitcoin_sig },
3377-
bitcoin_signature_2 : if !were_node_one { bs_bitcoin_sig } else { as_bitcoin_sig },
3377+
bitcoin_signature_2 : if were_node_one { bs_bitcoin_sig } else { as_bitcoin_sig },
33783378
contents: $unsigned_msg
33793379
}
33803380
}

src/ln/router.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ impl RoutingMessageHandler for Router {
199199
}
200200

201201
fn handle_channel_announcement(&self, msg: &msgs::ChannelAnnouncement) -> Result<bool, HandleError> {
202+
if msg.contents.node_id_1 == msg.contents.node_id_2 || msg.contents.bitcoin_key_1 == msg.contents.bitcoin_key_2 {
203+
return Err(HandleError{err: "Channel announcement node had a channel with itself", action: Some(ErrorAction::IgnoreError)});
204+
}
205+
202206
let msg_hash = Message::from_slice(&Sha256dHash::from_data(&msg.contents.encode()[..])[..]).unwrap();
203207
secp_verify_sig!(self.secp_ctx, &msg_hash, &msg.node_signature_1, &msg.contents.node_id_1);
204208
secp_verify_sig!(self.secp_ctx, &msg_hash, &msg.node_signature_2, &msg.contents.node_id_2);

0 commit comments

Comments
 (0)