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  }