github.com/MetalBlockchain/metalgo@v1.11.9/vms/secp256k1fx/credential_test.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package secp256k1fx
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/MetalBlockchain/metalgo/codec"
    12  	"github.com/MetalBlockchain/metalgo/codec/linearcodec"
    13  	"github.com/MetalBlockchain/metalgo/utils/crypto/secp256k1"
    14  	"github.com/MetalBlockchain/metalgo/vms/components/verify"
    15  )
    16  
    17  func TestCredentialVerify(t *testing.T) {
    18  	cred := Credential{}
    19  	require.NoError(t, cred.Verify())
    20  }
    21  
    22  func TestCredentialVerifyNil(t *testing.T) {
    23  	cred := (*Credential)(nil)
    24  	err := cred.Verify()
    25  	require.ErrorIs(t, err, ErrNilCredential)
    26  }
    27  
    28  func TestCredentialSerialize(t *testing.T) {
    29  	require := require.New(t)
    30  	c := linearcodec.NewDefault()
    31  	m := codec.NewDefaultManager()
    32  	require.NoError(m.RegisterCodec(0, c))
    33  
    34  	expected := []byte{
    35  		// Codec version
    36  		0x00, 0x00,
    37  		// length:
    38  		0x00, 0x00, 0x00, 0x02,
    39  		// sig[0]
    40  		0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
    41  		0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    42  		0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
    43  		0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1e, 0x1d, 0x1f,
    44  		0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
    45  		0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2e, 0x2d, 0x2f,
    46  		0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
    47  		0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
    48  		0x00,
    49  		// sig[1]
    50  		0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
    51  		0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
    52  		0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
    53  		0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5e, 0x5d, 0x5f,
    54  		0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
    55  		0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6e, 0x6d, 0x6f,
    56  		0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
    57  		0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
    58  		0x00,
    59  	}
    60  	cred := Credential{Sigs: [][secp256k1.SignatureLen]byte{
    61  		{
    62  			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
    63  			0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    64  			0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
    65  			0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1e, 0x1d, 0x1f,
    66  			0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
    67  			0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2e, 0x2d, 0x2f,
    68  			0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
    69  			0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
    70  			0x00,
    71  		},
    72  		{
    73  			0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
    74  			0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
    75  			0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
    76  			0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5e, 0x5d, 0x5f,
    77  			0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
    78  			0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6e, 0x6d, 0x6f,
    79  			0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
    80  			0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
    81  			0x00,
    82  		},
    83  	}}
    84  	require.NoError(cred.Verify())
    85  
    86  	result, err := m.Marshal(0, &cred)
    87  	require.NoError(err)
    88  	require.Equal(expected, result)
    89  }
    90  
    91  func TestCredentialNotState(t *testing.T) {
    92  	intf := interface{}(&Credential{})
    93  	_, ok := intf.(verify.State)
    94  	require.False(t, ok)
    95  }