github.com/Finschia/finschia-sdk@v0.48.1/crypto/keys/internal/ecdsa/pubkey_internal_test.go (about)

     1  package ecdsa
     2  
     3  import (
     4  	"crypto/elliptic"
     5  	"encoding/hex"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/suite"
     9  )
    10  
    11  var secp256r1 = elliptic.P256()
    12  
    13  func GenSecp256r1() (PrivKey, error) {
    14  	return GenPrivKey(secp256r1)
    15  }
    16  
    17  func TestPKSuite(t *testing.T) {
    18  	suite.Run(t, new(PKSuite))
    19  }
    20  
    21  type CommonSuite struct {
    22  	suite.Suite
    23  	pk PubKey
    24  	sk PrivKey
    25  }
    26  
    27  func (suite *CommonSuite) SetupSuite() {
    28  	sk, err := GenSecp256r1()
    29  	suite.Require().NoError(err)
    30  	suite.sk = sk
    31  	suite.pk = sk.PubKey()
    32  }
    33  
    34  type PKSuite struct{ CommonSuite }
    35  
    36  func (suite *PKSuite) TestString() {
    37  	assert := suite.Assert()
    38  	require := suite.Require()
    39  
    40  	prefix := "abc"
    41  	pkStr := suite.pk.String(prefix)
    42  	assert.Equal(prefix+"{", pkStr[:len(prefix)+1])
    43  	assert.EqualValues('}', pkStr[len(pkStr)-1])
    44  
    45  	bz, err := hex.DecodeString(pkStr[len(prefix)+1 : len(pkStr)-1])
    46  	require.NoError(err)
    47  	assert.EqualValues(suite.pk.Bytes(), bz)
    48  }
    49  
    50  func (suite *PKSuite) TestBytes() {
    51  	bz := suite.sk.Bytes()
    52  	fieldSize := (suite.sk.Curve.Params().BitSize + 7) / 8
    53  	suite.Len(bz, fieldSize)
    54  	var pk *PubKey
    55  	suite.Nil(pk.Bytes())
    56  }
    57  
    58  func (suite *PKSuite) TestMarshal() {
    59  	require := suite.Require()
    60  	const size = 33 // secp256r1 size
    61  
    62  	buffer := make([]byte, size)
    63  	n, err := suite.pk.MarshalTo(buffer)
    64  	require.NoError(err)
    65  	require.Equal(size, n)
    66  
    67  	pk := new(PubKey)
    68  	err = pk.Unmarshal(buffer, secp256r1, size)
    69  	require.NoError(err)
    70  	require.True(pk.PublicKey.Equal(&suite.pk.PublicKey))
    71  }