github.com/MetalBlockchain/metalgo@v1.11.9/vms/platformvm/signer/proof_of_possession_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 signer
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/MetalBlockchain/metalgo/utils/crypto/bls"
    12  )
    13  
    14  func TestProofOfPossession(t *testing.T) {
    15  	require := require.New(t)
    16  
    17  	blsPOP, err := newProofOfPossession()
    18  	require.NoError(err)
    19  	require.NoError(blsPOP.Verify())
    20  	require.NotNil(blsPOP.Key())
    21  
    22  	blsPOP, err = newProofOfPossession()
    23  	require.NoError(err)
    24  	blsPOP.ProofOfPossession = [bls.SignatureLen]byte{}
    25  	err = blsPOP.Verify()
    26  	require.ErrorIs(err, bls.ErrFailedSignatureDecompress)
    27  
    28  	blsPOP, err = newProofOfPossession()
    29  	require.NoError(err)
    30  	blsPOP.PublicKey = [bls.PublicKeyLen]byte{}
    31  	err = blsPOP.Verify()
    32  	require.ErrorIs(err, bls.ErrFailedPublicKeyDecompress)
    33  
    34  	newBLSPOP, err := newProofOfPossession()
    35  	require.NoError(err)
    36  	newBLSPOP.ProofOfPossession = blsPOP.ProofOfPossession
    37  	err = newBLSPOP.Verify()
    38  	require.ErrorIs(err, errInvalidProofOfPossession)
    39  }
    40  
    41  func TestNewProofOfPossessionDeterministic(t *testing.T) {
    42  	require := require.New(t)
    43  
    44  	sk, err := bls.NewSecretKey()
    45  	require.NoError(err)
    46  
    47  	blsPOP0 := NewProofOfPossession(sk)
    48  	blsPOP1 := NewProofOfPossession(sk)
    49  	require.Equal(blsPOP0, blsPOP1)
    50  }
    51  
    52  func newProofOfPossession() (*ProofOfPossession, error) {
    53  	sk, err := bls.NewSecretKey()
    54  	if err != nil {
    55  		return nil, err
    56  	}
    57  	return NewProofOfPossession(sk), nil
    58  }