github.com/platonnetwork/platon-go@v0.7.6/crypto/vrf/vrf_test.go (about)

     1  package vrf
     2  
     3  import (
     4  	"crypto/ecdsa"
     5  	"crypto/rand"
     6  	"io"
     7  	"testing"
     8  )
     9  
    10  func TestVrf(t *testing.T) {
    11  	for i := 0; i < 10; i++ {
    12  		sk, err := ecdsa.GenerateKey(curve, rand.Reader)
    13  		if nil != err {
    14  			t.Fatal("GenerateKey fail", err)
    15  		}
    16  		sk2, err := ecdsa.GenerateKey(curve, rand.Reader)
    17  		if nil != err {
    18  			t.Fatal("GenerateKey fail", err)
    19  		}
    20  		data := make([]byte, 32)
    21  		io.ReadFull(rand.Reader, data)
    22  		pi, err := Prove(sk, data)
    23  		if nil != err {
    24  			t.Fatal("Generate vrf proof failed", err)
    25  		}
    26  		ok, err := Verify(&sk.PublicKey, pi, data)
    27  		if nil != err || !ok {
    28  			t.Fatal("verification failed", err)
    29  		}
    30  		ok2, err := Verify(&sk2.PublicKey, pi, data)
    31  		if nil != err || ok2 {
    32  			t.Fatal("verification failed", err)
    33  		}
    34  		data = append(data, []byte("message")...)
    35  		ok3, err := Verify(&sk.PublicKey, pi, data)
    36  		if nil != err || ok3 {
    37  			t.Fatal("verification failed", err)
    38  		}
    39  	}
    40  }