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 }