github.com/dusk-network/dusk-crypto@v0.1.3/rangeproof/pedersen/pedersen_test.go (about)

     1  package pedersen_test
     2  
     3  import (
     4  	"bytes"
     5  	"math/big"
     6  	"testing"
     7  
     8  	ristretto "github.com/bwesterb/go-ristretto"
     9  	"github.com/dusk-network/dusk-crypto/rangeproof/pedersen"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestPedersenScalar(t *testing.T) {
    14  	ped := pedersen.New([]byte("random data"))
    15  
    16  	s := ristretto.Scalar{}
    17  	s.Rand()
    18  
    19  	commitment := ped.CommitToScalar(s)
    20  
    21  	assert.NotEqual(t, nil, commitment)
    22  
    23  }
    24  
    25  func TestEncodeDecode(t *testing.T) {
    26  	s := ristretto.Scalar{}
    27  	s.Rand()
    28  
    29  	c := pedersen.New([]byte("rand")).CommitToScalar(s)
    30  	assert.True(t, c.Equals(c))
    31  
    32  	buf := &bytes.Buffer{}
    33  	err := c.Encode(buf)
    34  	assert.Nil(t, err)
    35  
    36  	var decC pedersen.Commitment
    37  	err = decC.Decode(buf)
    38  	assert.Nil(t, err)
    39  
    40  	ok := decC.EqualValue(c)
    41  	assert.True(t, ok)
    42  
    43  }
    44  
    45  func TestPedersenVector(t *testing.T) {
    46  	ped := pedersen.New([]byte("some data"))
    47  	// ped.BaseVector.Compute(4) // since values are not precomputed, we will compute two of them here
    48  	var one ristretto.Scalar
    49  	one.SetOne()
    50  
    51  	var two ristretto.Scalar
    52  	two.SetBigInt(big.NewInt(2))
    53  
    54  	vec1 := []ristretto.Scalar{one, one}
    55  	vec2 := []ristretto.Scalar{two, two}
    56  
    57  	comm := ped.CommitToVectors(vec1, vec2)
    58  
    59  	blind := comm.BlindingFactor
    60  
    61  	H0 := ped.BlindPoint // blind
    62  	H1 := ped.BaseVector.Bases[0]
    63  	H2 := ped.BaseVector.Bases[1]
    64  
    65  	ped = pedersen.New(append(ped.GenData, uint8(1)))
    66  
    67  	ped.BaseVector.Compute(4) // since values are not precomputed, we will compute two of them here
    68  
    69  	B0 := ped.BaseVector.Bases[0]
    70  	B1 := ped.BaseVector.Bases[1]
    71  
    72  	var H0blind ristretto.Point
    73  	H0blind.ScalarMult(&H0, &blind)
    74  
    75  	var H1one ristretto.Point
    76  	H1one.ScalarMult(&H1, &one)
    77  
    78  	var H2one ristretto.Point
    79  	H2one.ScalarMult(&H2, &one)
    80  
    81  	var B0two ristretto.Point
    82  	B0two.ScalarMult(&B0, &two)
    83  
    84  	var B1two ristretto.Point
    85  	B1two.ScalarMult(&B1, &two)
    86  
    87  	var expected ristretto.Point
    88  	expected.Add(&H0blind, &H1one)
    89  	expected.Add(&expected, &H2one)
    90  	expected.Add(&expected, &B0two)
    91  	expected.Add(&expected, &B1two)
    92  
    93  	assert.Equal(t, expected.Bytes(), []byte(comm.Value.Bytes()))
    94  }