github.com/incognitochain/go-incognito-sdk@v1.0.1/privacy/zkp/oneoutofmany/oneoutofmany_test.go (about) 1 package oneoutofmany 2 3 import ( 4 "fmt" 5 "github.com/incognitochain/go-incognito-sdk/privacy" 6 "github.com/incognitochain/go-incognito-sdk/privacy/zkp/utils" 7 "github.com/stretchr/testify/assert" 8 "io/ioutil" 9 "log" 10 "testing" 11 "time" 12 ) 13 14 func TestMain(m *testing.M) { 15 log.SetOutput(ioutil.Discard) 16 m.Run() 17 } 18 19 var _ = func() (_ struct{}) { 20 fmt.Println("This runs before init()!") 21 return 22 }() 23 24 //TestPKOneOfMany test protocol for one of many Commitment is Commitment to zero 25 func TestPKOneOfMany(t *testing.T) { 26 // prepare witness for Out out of many protocol 27 for i := 0; i < 10; i++ { 28 witness := new(OneOutOfManyWitness) 29 30 //indexIsZero := int(common.RandInt() % privacy.CommitmentRingSize) 31 indexIsZero := 0 32 33 // list of commitments 34 commitments := make([]*privacy.Point, privacy.CommitmentRingSize) 35 values := make([]*privacy.Scalar, privacy.CommitmentRingSize) 36 randoms := make([]*privacy.Scalar, privacy.CommitmentRingSize) 37 38 for i := 0; i < privacy.CommitmentRingSize; i++ { 39 values[i] = privacy.RandomScalar() 40 randoms[i] = privacy.RandomScalar() 41 commitments[i] = privacy.PedCom.CommitAtIndex(values[i], randoms[i], privacy.PedersenSndIndex) 42 } 43 44 // create Commitment to zero at indexIsZero 45 values[indexIsZero] = new(privacy.Scalar).FromUint64(0) 46 commitments[indexIsZero] = privacy.PedCom.CommitAtIndex(values[indexIsZero], randoms[indexIsZero], privacy.PedersenSndIndex) 47 48 witness.Set(commitments, randoms[indexIsZero], uint64(indexIsZero)) 49 start := time.Now() 50 proof, err := witness.Prove() 51 assert.Equal(t, nil, err) 52 end := time.Since(start) 53 //fmt.Printf("One out of many proving time: %v\n", end) 54 55 //fmt.Printf("Proof: %v\n", proof) 56 57 // validate sanity for proof 58 isValidSanity := proof.ValidateSanity() 59 assert.Equal(t, true, isValidSanity) 60 61 // verify the proof 62 start = time.Now() 63 res, err := proof.Verify() 64 end = time.Since(start) 65 fmt.Printf("One out of many verification time: %v\n", end) 66 assert.Equal(t, true, res) 67 assert.Equal(t, nil, err) 68 69 //Convert proof to bytes array 70 proofBytes := proof.Bytes() 71 assert.Equal(t, utils.OneOfManyProofSize, len(proofBytes)) 72 73 // revert bytes array to proof 74 proof2 := new(OneOutOfManyProof).Init() 75 err = proof2.SetBytes(proofBytes) 76 assert.Equal(t, nil, err) 77 proof2.Statement.Commitments = commitments 78 assert.Equal(t, proof, proof2) 79 80 // verify the proof 81 start = time.Now() 82 res, err = proof2.Verify() 83 end = time.Since(start) 84 fmt.Printf("One out of many verification time: %v\n", end) 85 assert.Equal(t, true, res) 86 assert.Equal(t, nil, err) 87 88 } 89 }