Skip to content

Commit 08340dd

Browse files
committed
Add helper functions to verify node and channel annoucements
1 parent 498f233 commit 08340dd

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

lightning/src/routing/gossip.rs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
//! The [`NetworkGraph`] stores the network gossip and [`P2PGossipSync`] fetches it from peers
1111
1212
use bitcoin::secp256k1::constants::PUBLIC_KEY_SIZE;
13-
use bitcoin::secp256k1::PublicKey;
13+
use bitcoin::secp256k1::{PublicKey, Verification};
1414
use bitcoin::secp256k1::Secp256k1;
1515
use bitcoin::secp256k1;
1616

@@ -404,6 +404,23 @@ macro_rules! get_pubkey_from_node_id {
404404
}
405405
}
406406

407+
pub fn verify_node_announcement<C: Verification>(msg: &NodeAnnouncement, secp_ctx: &Secp256k1<C>) -> Result<(), LightningError> {
408+
let msg_hash = hash_to_message!(&Sha256dHash::hash(&msg.contents.encode()[..])[..]);
409+
secp_verify_sig!(secp_ctx, &msg_hash, &msg.signature, &get_pubkey_from_node_id!(msg.contents.node_id, "node_announcement"), "node_announcement");
410+
411+
Ok(())
412+
}
413+
414+
pub fn verify_channel_announcement<C: Verification>(msg: &ChannelAnnouncement, secp_ctx: &Secp256k1<C>) -> Result<(), LightningError> {
415+
let msg_hash = hash_to_message!(&Sha256dHash::hash(&msg.contents.encode()[..])[..]);
416+
secp_verify_sig!(secp_ctx, &msg_hash, &msg.node_signature_1, &get_pubkey_from_node_id!(msg.contents.node_id_1, "channel_announcement"), "channel_announcement");
417+
secp_verify_sig!(secp_ctx, &msg_hash, &msg.node_signature_2, &get_pubkey_from_node_id!(msg.contents.node_id_2, "channel_announcement"), "channel_announcement");
418+
secp_verify_sig!(secp_ctx, &msg_hash, &msg.bitcoin_signature_1, &get_pubkey_from_node_id!(msg.contents.bitcoin_key_1, "channel_announcement"), "channel_announcement");
419+
secp_verify_sig!(secp_ctx, &msg_hash, &msg.bitcoin_signature_2, &get_pubkey_from_node_id!(msg.contents.bitcoin_key_2, "channel_announcement"), "channel_announcement");
420+
421+
Ok(())
422+
}
423+
407424
impl<G: Deref<Target=NetworkGraph<L>>, U: Deref, L: Deref> RoutingMessageHandler for P2PGossipSync<G, U, L>
408425
where U::Target: UtxoLookup, L::Target: Logger
409426
{
@@ -1387,8 +1404,7 @@ impl<L: Deref> NetworkGraph<L> where L::Target: Logger {
13871404
/// RoutingMessageHandler implementation to call it indirectly. This may be useful to accept
13881405
/// routing messages from a source using a protocol other than the lightning P2P protocol.
13891406
pub fn update_node_from_announcement(&self, msg: &msgs::NodeAnnouncement) -> Result<(), LightningError> {
1390-
let msg_hash = hash_to_message!(&Sha256dHash::hash(&msg.contents.encode()[..])[..]);
1391-
secp_verify_sig!(self.secp_ctx, &msg_hash, &msg.signature, &get_pubkey_from_node_id!(msg.contents.node_id, "node_announcement"), "node_announcement");
1407+
verify_node_announcement(msg, &self.secp_ctx)?;
13921408
self.update_node_from_announcement_intern(&msg.contents, Some(&msg))
13931409
}
13941410

@@ -1451,11 +1467,7 @@ impl<L: Deref> NetworkGraph<L> where L::Target: Logger {
14511467
where
14521468
U::Target: UtxoLookup,
14531469
{
1454-
let msg_hash = hash_to_message!(&Sha256dHash::hash(&msg.contents.encode()[..])[..]);
1455-
secp_verify_sig!(self.secp_ctx, &msg_hash, &msg.node_signature_1, &get_pubkey_from_node_id!(msg.contents.node_id_1, "channel_announcement"), "channel_announcement");
1456-
secp_verify_sig!(self.secp_ctx, &msg_hash, &msg.node_signature_2, &get_pubkey_from_node_id!(msg.contents.node_id_2, "channel_announcement"), "channel_announcement");
1457-
secp_verify_sig!(self.secp_ctx, &msg_hash, &msg.bitcoin_signature_1, &get_pubkey_from_node_id!(msg.contents.bitcoin_key_1, "channel_announcement"), "channel_announcement");
1458-
secp_verify_sig!(self.secp_ctx, &msg_hash, &msg.bitcoin_signature_2, &get_pubkey_from_node_id!(msg.contents.bitcoin_key_2, "channel_announcement"), "channel_announcement");
1470+
verify_channel_announcement(msg, &self.secp_ctx)?;
14591471
self.update_channel_from_unsigned_announcement_intern(&msg.contents, Some(msg), utxo_lookup)
14601472
}
14611473

0 commit comments

Comments
 (0)