github.com/dusk-network/dusk-crypto@v0.1.3/mlsag/proof_test.go (about)

     1  package mlsag
     2  
     3  import (
     4  	"testing"
     5  
     6  	ristretto "github.com/bwesterb/go-ristretto"
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestAddDecoys(t *testing.T) {
    11  	p := Proof{}
    12  	assert.Equal(t, 0, len(p.pubKeysMatrix))
    13  
    14  	for i := 0; i < 100; i++ {
    15  		p.AddDecoy(generateDecoy(2))
    16  		assert.Equal(t, i+1, len(p.pubKeysMatrix))
    17  	}
    18  }
    19  
    20  func TestAddSecretKeys(t *testing.T) {
    21  
    22  	// Add secret key, then check if corresponding pubKey gets added
    23  	p := Proof{}
    24  
    25  	decoy := generateDecoy(2)
    26  	p.AddDecoy(decoy)
    27  	assert.Equal(t, 1, len(p.pubKeysMatrix))
    28  
    29  	realKeys := generateSks(2)
    30  	for i := range realKeys {
    31  		p.AddSecret(realKeys[i])
    32  	}
    33  
    34  	p.addSignerPubKey()
    35  
    36  	assert.Equal(t, 2, len(p.pubKeysMatrix))
    37  
    38  	// Check that the privKeys match the pubkeys
    39  	var firstPubKey, secondPubKey ristretto.Point
    40  	firstPubKey.ScalarMultBase(&realKeys[0])
    41  	secondPubKey.ScalarMultBase(&realKeys[1])
    42  
    43  	assert.True(t, p.pubKeysMatrix[1].keys[0] == firstPubKey)
    44  	assert.True(t, p.pubKeysMatrix[1].keys[1] == secondPubKey)
    45  }
    46  
    47  func generateSks(n int) PrivKeys {
    48  	p := PrivKeys{}
    49  
    50  	for i := 0; i < n; i++ {
    51  		var x ristretto.Scalar
    52  		x.Rand()
    53  		p.AddPrivateKey(x)
    54  	}
    55  	return p
    56  }