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 }