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  }