netann: let ValidateChannelAnn take the new interface

This commit is contained in:
Elle Mouton 2024-09-11 12:37:23 +02:00
parent 34e9ee1ee5
commit 35d0c61c12
No known key found for this signature in database
GPG Key ID: D7D916376026F177
2 changed files with 23 additions and 5 deletions

View File

@ -1890,7 +1890,7 @@ func (d *AuthenticatedGossiper) processRejectedEdge(
if err != nil {
return nil, err
}
err = netann.ValidateChannelAnn(chanAnn)
err = netann.ValidateChannelAnn(chanAnn, d.fetchPKScript)
if err != nil {
err := fmt.Errorf("assembled channel announcement proof "+
"for shortChanID=%v isn't valid: %v",
@ -2540,7 +2540,8 @@ func (d *AuthenticatedGossiper) handleChanAnnouncement(nMsg *networkMsg,
// the signatures within the proof as it should be well formed.
var proof *models.ChannelAuthProof
if nMsg.isRemote {
if err := netann.ValidateChannelAnn(ann); err != nil {
err := netann.ValidateChannelAnn(ann, d.fetchPKScript)
if err != nil {
err := fmt.Errorf("unable to validate announcement: "+
"%v", err)
@ -3434,7 +3435,8 @@ func (d *AuthenticatedGossiper) handleAnnSig(nMsg *networkMsg,
// With all the necessary components assembled validate the full
// channel announcement proof.
if err := netann.ValidateChannelAnn(chanAnn); err != nil {
err = netann.ValidateChannelAnn(chanAnn, d.fetchPKScript)
if err != nil {
err := fmt.Errorf("channel announcement proof for "+
"short_chan_id=%v isn't valid: %v", shortChanID, err)

View File

@ -3,6 +3,7 @@ package netann
import (
"bytes"
"errors"
"fmt"
"github.com/btcsuite/btcd/btcec/v2"
"github.com/btcsuite/btcd/chaincfg/chainhash"
@ -88,10 +89,25 @@ func CreateChanAnnouncement(chanProof *models.ChannelAuthProof,
return chanAnn, edge1Ann, edge2Ann, nil
}
// ValidateChannelAnn validates the channel announcement message and checks
// FetchPkScript defines a function that can be used to fetch the output script
// for the transaction with the given SCID.
type FetchPkScript func(*lnwire.ShortChannelID) ([]byte, error)
// ValidateChannelAnn validates the channel announcement.
func ValidateChannelAnn(a lnwire.ChannelAnnouncement, _ FetchPkScript) error {
switch ann := a.(type) {
case *lnwire.ChannelAnnouncement1:
return validateChannelAnn1(ann)
default:
return fmt.Errorf("unhandled implementation of "+
"lnwire.ChannelAnnouncement: %T", a)
}
}
// validateChannelAnn1 validates the channel announcement message and checks
// that node signatures covers the announcement message, and that the bitcoin
// signatures covers the node keys.
func ValidateChannelAnn(a *lnwire.ChannelAnnouncement1) error {
func validateChannelAnn1(a *lnwire.ChannelAnnouncement1) error {
// First, we'll compute the digest (h) which is to be signed by each of
// the keys included within the node announcement message. This hash
// digest includes all the keys, so the (up to 4 signatures) will