@@ -16,7 +16,7 @@ use bitcoin::secp256k1::{PublicKey, Verification};
1616use bitcoin:: secp256k1:: Secp256k1 ;
1717use bitcoin:: secp256k1;
1818
19- use bitcoin:: hashes:: sha256d :: Hash as Sha256dHash ;
19+ use bitcoin:: hashes:: sha256 :: Hash as Sha256Hash ;
2020use bitcoin:: hashes:: Hash ;
2121use bitcoin:: hashes:: hex:: FromHex ;
2222
@@ -412,11 +412,17 @@ macro_rules! get_pubkey_from_node_id {
412412 }
413413}
414414
415+ fn message_sha256d_hash < M : Writeable > ( msg : & M ) -> [ u8 ; 32 ] {
416+ let mut engine = Sha256Hash :: engine ( ) ;
417+ msg. write ( & mut engine) . expect ( "In-memory structs should not fail to serialize" ) ;
418+ Sha256Hash :: hash ( & Sha256Hash :: from_engine ( engine) [ ..] ) . into_inner ( )
419+ }
420+
415421/// Verifies the signature of a [`NodeAnnouncement`].
416422///
417423/// Returns an error if it is invalid.
418424pub fn verify_node_announcement < C : Verification > ( msg : & NodeAnnouncement , secp_ctx : & Secp256k1 < C > ) -> Result < ( ) , LightningError > {
419- let msg_hash = hash_to_message ! ( & Sha256dHash :: hash ( & msg. contents. encode ( ) [ .. ] ) [ ..] ) ;
425+ let msg_hash = hash_to_message ! ( & message_sha256d_hash ( & msg. contents) [ ..] ) ;
420426 secp_verify_sig ! ( secp_ctx, & msg_hash, & msg. signature, & get_pubkey_from_node_id!( msg. contents. node_id, "node_announcement" ) , "node_announcement" ) ;
421427
422428 Ok ( ( ) )
@@ -426,7 +432,7 @@ pub fn verify_node_announcement<C: Verification>(msg: &NodeAnnouncement, secp_ct
426432///
427433/// Returns an error if one of the signatures is invalid.
428434pub fn verify_channel_announcement < C : Verification > ( msg : & ChannelAnnouncement , secp_ctx : & Secp256k1 < C > ) -> Result < ( ) , LightningError > {
429- let msg_hash = hash_to_message ! ( & Sha256dHash :: hash ( & msg. contents. encode ( ) [ .. ] ) [ ..] ) ;
435+ let msg_hash = hash_to_message ! ( & message_sha256d_hash ( & msg. contents) [ ..] ) ;
430436 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" ) ;
431437 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" ) ;
432438 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" ) ;
@@ -1969,7 +1975,7 @@ impl<L: Deref> NetworkGraph<L> where L::Target: Logger {
19691975 } }
19701976 }
19711977
1972- let msg_hash = hash_to_message ! ( & Sha256dHash :: hash ( & msg. encode ( ) [ .. ] ) [ ..] ) ;
1978+ let msg_hash = hash_to_message ! ( & message_sha256d_hash ( & msg) [ ..] ) ;
19731979 if msg. flags & 1 == 1 {
19741980 check_update_latest ! ( channel. two_to_one) ;
19751981 if let Some ( sig) = sig {
0 commit comments