github.com/incognitochain/go-incognito-sdk@v1.0.1/privacy/zkp/serialnumberprivacy/serialnumberprivacy_test.go (about)

     1  package serialnumberprivacy
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/incognitochain/go-incognito-sdk/privacy"
     9  	"github.com/incognitochain/go-incognito-sdk/privacy/zkp/utils"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestPKSNPrivacy(t *testing.T) {
    14  	for i := 0; i < 1000; i++ {
    15  		sk := privacy.GeneratePrivateKey(privacy.RandBytes(31))
    16  		skScalar := new(privacy.Scalar).FromBytesS(sk)
    17  		if skScalar.ScalarValid() == false {
    18  			fmt.Println("Invalid scala key value")
    19  		}
    20  
    21  		SND := privacy.RandomScalar()
    22  		rSK := privacy.RandomScalar()
    23  		rSND := privacy.RandomScalar()
    24  
    25  		serialNumber := new(privacy.Point).Derive(privacy.PedCom.G[privacy.PedersenPrivateKeyIndex], skScalar, SND)
    26  		comSK := privacy.PedCom.CommitAtIndex(skScalar, rSK, privacy.PedersenPrivateKeyIndex)
    27  		comSND := privacy.PedCom.CommitAtIndex(SND, rSND, privacy.PedersenSndIndex)
    28  
    29  		stmt := new(SerialNumberPrivacyStatement)
    30  		stmt.Set(serialNumber, comSK, comSND)
    31  
    32  		witness := new(SNPrivacyWitness)
    33  		witness.Set(stmt, skScalar, rSK, SND, rSND)
    34  
    35  		// proving
    36  		start := time.Now()
    37  		proof, err := witness.Prove(nil)
    38  		assert.Equal(t, nil, err)
    39  
    40  		end := time.Since(start)
    41  		fmt.Printf("Serial number proving time: %v\n", end)
    42  
    43  		//validate sanity proof
    44  		isValidSanity := proof.ValidateSanity()
    45  		assert.Equal(t, true, isValidSanity)
    46  
    47  		// convert proof to bytes array
    48  		proofBytes := proof.Bytes()
    49  		assert.Equal(t, utils.SnPrivacyProofSize, len(proofBytes))
    50  
    51  		// new SNPrivacyProof to set bytes array
    52  		proof2 := new(SNPrivacyProof).Init()
    53  		err = proof2.SetBytes(proofBytes)
    54  		assert.Equal(t, nil, err)
    55  		assert.Equal(t, proof, proof2)
    56  
    57  		start = time.Now()
    58  		res, err := proof2.Verify(nil)
    59  		end = time.Since(start)
    60  		fmt.Printf("Serial number verification time: %v\n", end)
    61  		assert.Equal(t, true, res)
    62  		assert.Equal(t, nil, err)
    63  	}
    64  }