@@ -4596,17 +4596,19 @@ impl<Signer: Sign> Channel<Signer> {
45964596 } )
45974597 }
45984598
4599- /// Gets an UnsignedChannelAnnouncement, as well as a signature covering it using our
4600- /// bitcoin_key, if available, for this channel. The channel must be publicly announceable and
4601- /// available for use (have exchanged FundingLocked messages in both directions). Should be used
4602- /// for both loose and in response to an AnnouncementSignatures message from the remote peer.
4599+ /// Gets an UnsignedChannelAnnouncement for this channel. The channel must be publicly
4600+ /// announceable and available for use (have exchanged FundingLocked messages in both
4601+ /// directions). Should be used for both loose and in response to an AnnouncementSignatures
4602+ /// message from the remote peer.
4603+ ///
46034604 /// Will only fail if we're not in a state where channel_announcement may be sent (including
46044605 /// closing).
4606+ ///
46054607 /// Note that the "channel must be funded" requirement is stricter than BOLT 7 requires - see
46064608 /// https://github.com/lightningnetwork/lightning-rfc/issues/468
46074609 ///
46084610 /// This will only return ChannelError::Ignore upon failure.
4609- pub fn get_channel_announcement ( & self , node_id : PublicKey , chain_hash : BlockHash ) -> Result < ( msgs:: UnsignedChannelAnnouncement , Signature ) , ChannelError > {
4611+ fn get_channel_announcement ( & self , node_id : PublicKey , chain_hash : BlockHash ) -> Result < msgs:: UnsignedChannelAnnouncement , ChannelError > {
46104612 if !self . config . announced_channel {
46114613 return Err ( ChannelError :: Ignore ( "Channel is not available for public announcements" . to_owned ( ) ) ) ;
46124614 }
@@ -4630,19 +4632,30 @@ impl<Signer: Sign> Channel<Signer> {
46304632 excess_data : Vec :: new ( ) ,
46314633 } ;
46324634
4633- let sig = self . holder_signer . sign_channel_announcement ( & msg, & self . secp_ctx )
4635+ Ok ( msg)
4636+ }
4637+
4638+ pub fn get_announcement_sigs ( & self , node_pk : PublicKey , genesis_block_hash : BlockHash ) -> Result < msgs:: AnnouncementSignatures , ChannelError > {
4639+ let announcement = self . get_channel_announcement ( node_pk, genesis_block_hash) ?;
4640+ let ( our_node_sig, our_bitcoin_sig) = self . holder_signer . sign_channel_announcement ( & announcement, & self . secp_ctx )
46344641 . map_err ( |_| ChannelError :: Ignore ( "Signer rejected channel_announcement" . to_owned ( ) ) ) ?;
46354642
4636- Ok ( ( msg, sig) )
4643+ Ok ( msgs:: AnnouncementSignatures {
4644+ channel_id : self . channel_id ( ) ,
4645+ short_channel_id : self . get_short_channel_id ( ) . unwrap ( ) ,
4646+ node_signature : our_node_sig,
4647+ bitcoin_signature : our_bitcoin_sig,
4648+ } )
46374649 }
46384650
46394651 /// Signs the given channel announcement, returning a ChannelError::Ignore if no keys are
46404652 /// available.
4641- fn sign_channel_announcement ( & self , our_node_secret : & SecretKey , our_node_id : PublicKey , msghash : secp256k1 :: Message , announcement : msgs:: UnsignedChannelAnnouncement , our_bitcoin_sig : Signature ) -> Result < msgs:: ChannelAnnouncement , ChannelError > {
4653+ fn sign_channel_announcement ( & self , our_node_id : PublicKey , announcement : msgs:: UnsignedChannelAnnouncement ) -> Result < msgs:: ChannelAnnouncement , ChannelError > {
46424654 if let Some ( ( their_node_sig, their_bitcoin_sig) ) = self . announcement_sigs {
46434655 let were_node_one = announcement. node_id_1 == our_node_id;
46444656
4645- let our_node_sig = self . secp_ctx . sign ( & msghash, our_node_secret) ;
4657+ let ( our_node_sig, our_bitcoin_sig) = self . holder_signer . sign_channel_announcement ( & announcement, & self . secp_ctx )
4658+ . map_err ( |_| ChannelError :: Ignore ( "Signer rejected channel_announcement" . to_owned ( ) ) ) ?;
46464659 Ok ( msgs:: ChannelAnnouncement {
46474660 node_signature_1 : if were_node_one { our_node_sig } else { their_node_sig } ,
46484661 node_signature_2 : if were_node_one { their_node_sig } else { our_node_sig } ,
@@ -4658,8 +4671,8 @@ impl<Signer: Sign> Channel<Signer> {
46584671 /// Processes an incoming announcement_signatures message, providing a fully-signed
46594672 /// channel_announcement message which we can broadcast and storing our counterparty's
46604673 /// signatures for later reconstruction/rebroadcast of the channel_announcement.
4661- pub fn announcement_signatures ( & mut self , our_node_secret : & SecretKey , our_node_id : PublicKey , chain_hash : BlockHash , msg : & msgs:: AnnouncementSignatures ) -> Result < msgs:: ChannelAnnouncement , ChannelError > {
4662- let ( announcement, our_bitcoin_sig ) = self . get_channel_announcement ( our_node_id. clone ( ) , chain_hash) ?;
4674+ pub fn announcement_signatures ( & mut self , our_node_id : PublicKey , chain_hash : BlockHash , msg : & msgs:: AnnouncementSignatures ) -> Result < msgs:: ChannelAnnouncement , ChannelError > {
4675+ let announcement = self . get_channel_announcement ( our_node_id. clone ( ) , chain_hash) ?;
46634676
46644677 let msghash = hash_to_message ! ( & Sha256d :: hash( & announcement. encode( ) [ ..] ) [ ..] ) ;
46654678
@@ -4676,18 +4689,17 @@ impl<Signer: Sign> Channel<Signer> {
46764689
46774690 self . announcement_sigs = Some ( ( msg. node_signature , msg. bitcoin_signature ) ) ;
46784691
4679- self . sign_channel_announcement ( our_node_secret , our_node_id, msghash , announcement, our_bitcoin_sig )
4692+ self . sign_channel_announcement ( our_node_id, announcement)
46804693 }
46814694
46824695 /// Gets a signed channel_announcement for this channel, if we previously received an
46834696 /// announcement_signatures from our counterparty.
4684- pub fn get_signed_channel_announcement ( & self , our_node_secret : & SecretKey , our_node_id : PublicKey , chain_hash : BlockHash ) -> Option < msgs:: ChannelAnnouncement > {
4685- let ( announcement, our_bitcoin_sig ) = match self . get_channel_announcement ( our_node_id. clone ( ) , chain_hash) {
4697+ pub fn get_signed_channel_announcement ( & self , our_node_id : PublicKey , chain_hash : BlockHash ) -> Option < msgs:: ChannelAnnouncement > {
4698+ let announcement = match self . get_channel_announcement ( our_node_id. clone ( ) , chain_hash) {
46864699 Ok ( res) => res,
46874700 Err ( _) => return None ,
46884701 } ;
4689- let msghash = hash_to_message ! ( & Sha256d :: hash( & announcement. encode( ) [ ..] ) [ ..] ) ;
4690- match self . sign_channel_announcement ( our_node_secret, our_node_id, msghash, announcement, our_bitcoin_sig) {
4702+ match self . sign_channel_announcement ( our_node_id, announcement) {
46914703 Ok ( res) => Some ( res) ,
46924704 Err ( _) => None ,
46934705 }
@@ -6270,6 +6282,7 @@ mod tests {
62706282
62716283 let mut signer = InMemorySigner :: new (
62726284 & secp_ctx,
6285+ SecretKey :: from_slice ( & hex:: decode ( "4242424242424242424242424242424242424242424242424242424242424242" ) . unwrap ( ) [ ..] ) . unwrap ( ) ,
62736286 SecretKey :: from_slice ( & hex:: decode ( "30ff4956bbdd3222d44cc5e8a1261dab1e07957bdac5ae88fe3261ef321f3749" ) . unwrap ( ) [ ..] ) . unwrap ( ) ,
62746287 SecretKey :: from_slice ( & hex:: decode ( "0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ) . unwrap ( ) [ ..] ) . unwrap ( ) ,
62756288 SecretKey :: from_slice ( & hex:: decode ( "1111111111111111111111111111111111111111111111111111111111111111" ) . unwrap ( ) [ ..] ) . unwrap ( ) ,
0 commit comments