github.com/ava-labs/avalanchego@v1.11.11/vms/platformvm/warp/signertest/signertest.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package signertest 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "github.com/ava-labs/avalanchego/ids" 12 "github.com/ava-labs/avalanchego/utils/constants" 13 "github.com/ava-labs/avalanchego/utils/crypto/bls" 14 "github.com/ava-labs/avalanchego/vms/platformvm/warp" 15 ) 16 17 // SignerTests is a list of all signer tests 18 var SignerTests = map[string]func(t *testing.T, s warp.Signer, sk *bls.SecretKey, networkID uint32, chainID ids.ID){ 19 "WrongChainID": TestWrongChainID, 20 "WrongNetworkID": TestWrongNetworkID, 21 "Verifies": TestVerifies, 22 } 23 24 // Test that using a random SourceChainID results in an error 25 func TestWrongChainID(t *testing.T, s warp.Signer, _ *bls.SecretKey, _ uint32, _ ids.ID) { 26 require := require.New(t) 27 28 msg, err := warp.NewUnsignedMessage( 29 constants.UnitTestID, 30 ids.GenerateTestID(), 31 []byte("payload"), 32 ) 33 require.NoError(err) 34 35 _, err = s.Sign(msg) 36 // TODO: require error to be ErrWrongSourceChainID 37 require.Error(err) //nolint:forbidigo // currently returns grpc errors too 38 } 39 40 // Test that using a different networkID results in an error 41 func TestWrongNetworkID(t *testing.T, s warp.Signer, _ *bls.SecretKey, networkID uint32, blockchainID ids.ID) { 42 require := require.New(t) 43 44 msg, err := warp.NewUnsignedMessage( 45 networkID+1, 46 blockchainID, 47 []byte("payload"), 48 ) 49 require.NoError(err) 50 51 _, err = s.Sign(msg) 52 // TODO: require error to be ErrWrongNetworkID 53 require.Error(err) //nolint:forbidigo // currently returns grpc errors too 54 } 55 56 // Test that a signature generated with the signer verifies correctly 57 func TestVerifies(t *testing.T, s warp.Signer, sk *bls.SecretKey, networkID uint32, chainID ids.ID) { 58 require := require.New(t) 59 60 msg, err := warp.NewUnsignedMessage( 61 networkID, 62 chainID, 63 []byte("payload"), 64 ) 65 require.NoError(err) 66 67 sigBytes, err := s.Sign(msg) 68 require.NoError(err) 69 70 sig, err := bls.SignatureFromBytes(sigBytes) 71 require.NoError(err) 72 73 pk := bls.PublicFromSecretKey(sk) 74 msgBytes := msg.Bytes() 75 require.True(bls.Verify(pk, sig, msgBytes)) 76 }