github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/crypto/vrf/p256/p256_test.go (about)

     1  package p256
     2  
     3  import (
     4  	"crypto/rand"
     5  	"testing"
     6  )
     7  
     8  func TestH1(t *testing.T) {
     9  	for i := 0; i < 10000; i++ {
    10  		m := make([]byte, 100)
    11  		if _, err := rand.Read(m); err != nil {
    12  			t.Fatalf("Failed generating random message: %v", err)
    13  		}
    14  		x, y, err := H1(m)
    15  		if err != nil {
    16  			t.Errorf("H1(%v)=%v, want curve point", m, x)
    17  		}
    18  		if got := curve.Params().IsOnCurve(x, y); !got {
    19  			t.Errorf("H1(%v)=[%v, %v], is not on curve", m, x, y)
    20  		}
    21  	}
    22  }
    23  
    24  func TestH2(t *testing.T) {
    25  	l := 32
    26  	for i := 0; i < 10000; i++ {
    27  		m := make([]byte, 100)
    28  		if _, err := rand.Read(m); err != nil {
    29  			t.Fatalf("Failed generating random message: %v", err)
    30  		}
    31  		x := H2(m)
    32  		if got := len(x.Bytes()); got < 1 || got > l {
    33  			t.Errorf("len(h2(%v)) = %v, want: 1 <= %v <= %v", m, got, got, l)
    34  		}
    35  	}
    36  }
    37  
    38  func TestVRF(t *testing.T) {
    39  	k, pk, err := GeneratePair()
    40  	if err != nil {
    41  		t.Fatalf("Failed generating key pairs: %v", err)
    42  	}
    43  
    44  	m1 := []byte("data1")
    45  	m2 := []byte("data2")
    46  	m3 := []byte("data2")
    47  	beta1, proof1, err := k.Hash(m1)
    48  	if err != nil {
    49  		t.Fatalf("Hash failed: %v", err)
    50  	}
    51  	beta2, proof2, err := k.Hash(m2)
    52  	if err != nil {
    53  		t.Fatalf("Hash failed: %v", err)
    54  	}
    55  	beta3, proof3, err := k.Hash(m3)
    56  	if err != nil {
    57  		t.Fatalf("Hash failed: %v", err)
    58  	}
    59  	for _, tc := range []struct {
    60  		m     []byte
    61  		beta  [32]byte
    62  		proof []byte
    63  		valid bool
    64  	}{
    65  		{m1, beta1, proof1, true},
    66  		{m2, beta2, proof2, true},
    67  		{m3, beta3, proof3, true},
    68  		{m3, beta3, proof2, true},
    69  		{m3, beta3, proof1, false},
    70  	} {
    71  		valid, err := pk.Verify(tc.m, tc.proof, tc.beta)
    72  		if err != nil {
    73  			t.Fatalf("Verify failed: %v", err)
    74  		}
    75  		if got, want := valid, tc.valid; got != want {
    76  			t.Errorf("Verify(%s, %x): %v, want %v", tc.m, tc.proof, got, want)
    77  		}
    78  	}
    79  }