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 }