github.com/prysmaticlabs/prysm@v1.4.4/spectest/general/phase0/bls/verify_test.go (about) 1 package bls 2 3 import ( 4 "encoding/hex" 5 "errors" 6 "path" 7 "testing" 8 9 "github.com/ghodss/yaml" 10 "github.com/prysmaticlabs/prysm/shared/bls" 11 "github.com/prysmaticlabs/prysm/shared/bls/common" 12 "github.com/prysmaticlabs/prysm/shared/testutil" 13 "github.com/prysmaticlabs/prysm/shared/testutil/require" 14 "github.com/prysmaticlabs/prysm/spectest/utils" 15 ) 16 17 func TestVerify(t *testing.T) { 18 t.Run("blst", testVerify) 19 } 20 21 func testVerify(t *testing.T) { 22 testFolders, testFolderPath := utils.TestFolders(t, "general", "phase0", "bls/verify/small") 23 24 for i, folder := range testFolders { 25 t.Run(folder.Name(), func(t *testing.T) { 26 file, err := testutil.BazelFileBytes(path.Join(testFolderPath, folder.Name(), "data.yaml")) 27 require.NoError(t, err) 28 test := &VerifyMsgTest{} 29 require.NoError(t, yaml.Unmarshal(file, test)) 30 31 pkBytes, err := hex.DecodeString(test.Input.Pubkey[2:]) 32 require.NoError(t, err) 33 pk, err := bls.PublicKeyFromBytes(pkBytes) 34 if err != nil { 35 if test.Output == false && errors.Is(err, common.ErrInfinitePubKey) { 36 return 37 } 38 t.Fatalf("cannot unmarshal pubkey: %v", err) 39 } 40 msgBytes, err := hex.DecodeString(test.Input.Message[2:]) 41 require.NoError(t, err) 42 43 sigBytes, err := hex.DecodeString(test.Input.Signature[2:]) 44 require.NoError(t, err) 45 sig, err := bls.SignatureFromBytes(sigBytes) 46 if err != nil { 47 if test.Output == false { 48 return 49 } 50 t.Fatalf("Cannot unmarshal input to signature: %v", err) 51 } 52 53 verified := sig.Verify(pk, msgBytes) 54 if verified != test.Output { 55 t.Fatalf("Signature does not match the expected verification output. "+ 56 "Expected %#v but received %#v for test case %d", test.Output, verified, i) 57 } 58 t.Log("Success") 59 }) 60 } 61 }