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 }