From be67bd46cdcbe390ec242c812c4687074e7f285a Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 28 Jul 2017 16:26:06 -0700 Subject: [PATCH] lnwire: add a case for a slice of signatures to readElement/writeElement This commit modifies the readElement and writeElement functions to add the capability of reading/writing a slice of btcec.Signature. This new case is required for the upcoming commit which will modify the CommitSig message to include a field which houses signatures of reach HTLC on the commitment transaction. --- lnwire/lnwire.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lnwire/lnwire.go b/lnwire/lnwire.go index 734807807..4475e41a0 100644 --- a/lnwire/lnwire.go +++ b/lnwire/lnwire.go @@ -87,6 +87,19 @@ func writeElement(w io.Writer, element interface{}) error { if _, err := w.Write(b[:]); err != nil { return err } + case []*btcec.Signature: + var b [2]byte + numSigs := uint16(len(e)) + binary.BigEndian.PutUint16(b[:], numSigs) + if _, err := w.Write(b[:]); err != nil { + return err + } + + for _, sig := range e { + if err := writeElement(w, sig); err != nil { + return err + } + } case *btcec.Signature: var b [64]byte err := serializeSigToWire(&b, e) @@ -359,6 +372,25 @@ func readElement(r io.Reader, element interface{}) error { *e = f + case *[]*btcec.Signature: + var l [2]byte + if _, err := io.ReadFull(r, l[:]); err != nil { + return err + } + numSigs := binary.BigEndian.Uint16(l[:]) + + var sigs []*btcec.Signature + if numSigs > 0 { + sigs = make([]*btcec.Signature, numSigs) + for i := 0; i < int(numSigs); i++ { + if err := readElement(r, &sigs[i]); err != nil { + return err + } + } + } + + *e = sigs + case **btcec.Signature: var b [64]byte if _, err := io.ReadFull(r, b[:]); err != nil {