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  }