From 44a01db0eff98636770c40f69cca08f2d879bc85 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Wed, 27 Mar 2019 13:07:47 -0700 Subject: [PATCH] routing: expose VerifyChannelUpdateSignature function --- routing/ann_validation.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/routing/ann_validation.go b/routing/ann_validation.go index 4b304b5a9..184d7009c 100644 --- a/routing/ann_validation.go +++ b/routing/ann_validation.go @@ -2,6 +2,7 @@ package routing import ( "bytes" + "fmt" "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/chaincfg/chainhash" @@ -132,20 +133,28 @@ func ValidateChannelUpdateAnn(pubKey *btcec.PublicKey, capacity btcutil.Amount, return err } - data, err := a.DataToSign() + return VerifyChannelUpdateSignature(a, pubKey) +} + +// VerifyChannelUpdateSignature verifies that the channel update message was +// signed by the party with the given node public key. +func VerifyChannelUpdateSignature(msg *lnwire.ChannelUpdate, + pubKey *btcec.PublicKey) error { + + data, err := msg.DataToSign() if err != nil { - return errors.Errorf("unable to reconstruct message: %v", err) + return fmt.Errorf("unable to reconstruct message data: %v", err) } dataHash := chainhash.DoubleHashB(data) - nodeSig, err := a.Signature.ToSignature() + nodeSig, err := msg.Signature.ToSignature() if err != nil { return err } if !nodeSig.Verify(dataHash, pubKey) { - return errors.Errorf("invalid signature for channel "+ - "update %v", spew.Sdump(a)) + return fmt.Errorf("invalid signature for channel update %v", + spew.Sdump(msg)) } return nil