github.com/prysmaticlabs/prysm@v1.4.4/spectest/general/phase0/bls/aggregate_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/bytesutil" 13 "github.com/prysmaticlabs/prysm/shared/testutil" 14 "github.com/prysmaticlabs/prysm/shared/testutil/require" 15 "github.com/prysmaticlabs/prysm/spectest/utils" 16 ) 17 18 func TestAggregateVerify(t *testing.T) { 19 t.Run("blst", testAggregateVerify) 20 } 21 22 func testAggregateVerify(t *testing.T) { 23 testFolders, testFolderPath := utils.TestFolders(t, "general", "phase0", "bls/aggregate_verify/small") 24 25 for i, folder := range testFolders { 26 t.Run(folder.Name(), func(t *testing.T) { 27 file, err := testutil.BazelFileBytes(path.Join(testFolderPath, folder.Name(), "data.yaml")) 28 require.NoError(t, err) 29 test := &AggregateVerifyTest{} 30 require.NoError(t, yaml.Unmarshal(file, test)) 31 pubkeys := make([]common.PublicKey, 0, len(test.Input.Pubkeys)) 32 msgs := make([][32]byte, 0, len(test.Input.Messages)) 33 for _, pubKey := range test.Input.Pubkeys { 34 pkBytes, err := hex.DecodeString(pubKey[2:]) 35 require.NoError(t, err) 36 pk, err := bls.PublicKeyFromBytes(pkBytes) 37 if err != nil { 38 if test.Output == false && errors.Is(err, common.ErrInfinitePubKey) { 39 return 40 } 41 t.Fatalf("cannot unmarshal pubkey: %v", err) 42 } 43 pubkeys = append(pubkeys, pk) 44 } 45 for _, msg := range test.Input.Messages { 46 msgBytes, err := hex.DecodeString(msg[2:]) 47 require.NoError(t, err) 48 require.Equal(t, 32, len(msgBytes)) 49 msgs = append(msgs, bytesutil.ToBytes32(msgBytes)) 50 } 51 sigBytes, err := hex.DecodeString(test.Input.Signature[2:]) 52 require.NoError(t, err) 53 sig, err := bls.SignatureFromBytes(sigBytes) 54 if err != nil { 55 if test.Output == false { 56 return 57 } 58 t.Fatalf("Cannot unmarshal input to signature: %v", err) 59 } 60 61 verified := sig.AggregateVerify(pubkeys, msgs) 62 if verified != test.Output { 63 t.Fatalf("Signature does not match the expected verification output. "+ 64 "Expected %#v but received %#v for test case %d", test.Output, verified, i) 65 } 66 }) 67 } 68 }