github.com/dusk-network/dusk-crypto@v0.1.3/mlsag/dualkey_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 TestDualKey(t *testing.T) {
    11  
    12  	dk := generateRandDualKeyProof(20)
    13  
    14  	sig, keyImage, err := dk.Prove()
    15  	sig.Verify([]ristretto.Point{keyImage})
    16  	assert.Nil(t, err)
    17  }
    18  
    19  func TestSubCommToZero(t *testing.T) {
    20  	dk := generateRandDualKeyProof(20)
    21  
    22  	var oldPoints []ristretto.Point
    23  
    24  	// Save all of the old keys
    25  	for i := range dk.pubKeysMatrix {
    26  		oldPoint := dk.pubKeysMatrix[i].keys[1]
    27  		oldPoints = append(oldPoints, oldPoint)
    28  	}
    29  
    30  	// Generate random point and subtract from commitment to zero column
    31  	var x ristretto.Point
    32  	x.Rand()
    33  	dk.SubCommToZero(x)
    34  
    35  	for i := range dk.pubKeysMatrix {
    36  		var expectedPoint ristretto.Point
    37  
    38  		// Fetch value of the second key
    39  		// before subtracting x
    40  		newPoint := dk.pubKeysMatrix[i].keys[1]
    41  
    42  		// Calculate expected point
    43  		expectedPoint.Sub(&oldPoints[i], &x)
    44  
    45  		assert.True(t, expectedPoint.Equals(&newPoint))
    46  	}
    47  }
    48  
    49  func generateRandDualKeyProof(numUsers int) *DualKey {
    50  	proof := NewDualKey()
    51  
    52  	numDecoys := numUsers - 1
    53  	numKeys := 2
    54  
    55  	// Generate and add decoys to proof
    56  	matrixPubKeys := generateDecoys(numDecoys, numKeys)
    57  	for i := 0; i < len(matrixPubKeys); i++ {
    58  		pubKeys := matrixPubKeys[i]
    59  		proof.AddDecoy(pubKeys)
    60  	}
    61  
    62  	// Generate and add private keys to proof
    63  	var primaryKey, commToZero ristretto.Scalar
    64  	primaryKey.Rand()
    65  	commToZero.Rand()
    66  	proof.SetPrimaryKey(primaryKey)
    67  	proof.SetCommToZero(commToZero)
    68  
    69  	proof.msg = []byte("hello world")
    70  
    71  	return proof
    72  }