|
10 | 10 | //! The [`NetworkGraph`] stores the network gossip and [`P2PGossipSync`] fetches it from peers
|
11 | 11 |
|
12 | 12 | use bitcoin::secp256k1::constants::PUBLIC_KEY_SIZE;
|
13 |
| -use bitcoin::secp256k1::PublicKey; |
| 13 | +use bitcoin::secp256k1::{PublicKey, Verification}; |
14 | 14 | use bitcoin::secp256k1::Secp256k1;
|
15 | 15 | use bitcoin::secp256k1;
|
16 | 16 |
|
@@ -404,6 +404,23 @@ macro_rules! get_pubkey_from_node_id {
|
404 | 404 | }
|
405 | 405 | }
|
406 | 406 |
|
| 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 | + |
407 | 424 | impl<G: Deref<Target=NetworkGraph<L>>, U: Deref, L: Deref> RoutingMessageHandler for P2PGossipSync<G, U, L>
|
408 | 425 | where U::Target: UtxoLookup, L::Target: Logger
|
409 | 426 | {
|
@@ -1387,8 +1404,7 @@ impl<L: Deref> NetworkGraph<L> where L::Target: Logger {
|
1387 | 1404 | /// RoutingMessageHandler implementation to call it indirectly. This may be useful to accept
|
1388 | 1405 | /// routing messages from a source using a protocol other than the lightning P2P protocol.
|
1389 | 1406 | 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)?; |
1392 | 1408 | self.update_node_from_announcement_intern(&msg.contents, Some(&msg))
|
1393 | 1409 | }
|
1394 | 1410 |
|
@@ -1451,11 +1467,7 @@ impl<L: Deref> NetworkGraph<L> where L::Target: Logger {
|
1451 | 1467 | where
|
1452 | 1468 | U::Target: UtxoLookup,
|
1453 | 1469 | {
|
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)?; |
1459 | 1471 | self.update_channel_from_unsigned_announcement_intern(&msg.contents, Some(msg), utxo_lookup)
|
1460 | 1472 | }
|
1461 | 1473 |
|
|
0 commit comments