github.com/decred/dcrlnd@v0.7.6/netann/sign.go (about)

     1  package netann
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/decred/dcrlnd/input"
     7  	"github.com/decred/dcrlnd/keychain"
     8  	"github.com/decred/dcrlnd/lnwallet"
     9  	"github.com/decred/dcrlnd/lnwire"
    10  )
    11  
    12  // SignAnnouncement signs any type of gossip message that is announced on the
    13  // network.
    14  func SignAnnouncement(signer lnwallet.MessageSigner, keyLoc keychain.KeyLocator,
    15  	msg lnwire.Message) (input.Signature, error) {
    16  
    17  	var (
    18  		data []byte
    19  		err  error
    20  	)
    21  
    22  	switch m := msg.(type) {
    23  	case *lnwire.ChannelAnnouncement:
    24  		data, err = m.DataToSign()
    25  	case *lnwire.ChannelUpdate:
    26  		data, err = m.DataToSign()
    27  	case *lnwire.NodeAnnouncement:
    28  		data, err = m.DataToSign()
    29  	default:
    30  		return nil, fmt.Errorf("can't sign %T message", m)
    31  	}
    32  	if err != nil {
    33  		return nil, fmt.Errorf("unable to get data to sign: %v", err)
    34  	}
    35  
    36  	return signer.SignMessage(keyLoc, data, false)
    37  }