github.com/dusk-network/dusk-crypto@v0.1.3/mlsag/responses.go (about) 1 package mlsag 2 3 import ( 4 "encoding/binary" 5 "errors" 6 "io" 7 8 ristretto "github.com/bwesterb/go-ristretto" 9 ) 10 11 type Responses []ristretto.Scalar 12 13 func (res Responses) Equals(other Responses) bool { 14 15 if len(res) != len(other) { 16 return false 17 } 18 19 for i := range res { 20 ok := res[i].Equals(&other[i]) 21 if !ok { 22 return ok 23 } 24 } 25 return true 26 } 27 func (res *Responses) AddResponse(r ristretto.Scalar) { 28 *res = append(*res, r) 29 } 30 31 func (res Responses) Len() int { 32 return len(res) 33 } 34 35 func (res Responses) Encode(w io.Writer) error { 36 for i := range res { 37 response := res[i] 38 err := binary.Write(w, binary.BigEndian, response.Bytes()) 39 if err != nil { 40 return err 41 } 42 } 43 return nil 44 } 45 46 func (res *Responses) Decode(r io.Reader, numResponses uint32) error { 47 if res == nil { 48 return errors.New("struct is nil") 49 } 50 51 var xBytes [32]byte 52 var x ristretto.Scalar 53 for i := uint32(0); i < numResponses; i++ { 54 err := binary.Read(r, binary.BigEndian, &xBytes) 55 if err != nil { 56 return err 57 } 58 x.SetBytes(&xBytes) 59 res.AddResponse(x) 60 } 61 return nil 62 }