Merge pull request #1 from p4u/master add NewPublicKeyFromECDSA
arnau 17317030+arnaucube@users.noreply.github.com
Mon, 01 Feb 2021 19:08:41 +0100
2 files changed,
29 insertions(+),
0 deletions(-)
M
parsers.go
→
parsers.go
@@ -4,6 +4,8 @@ import (
"encoding/json" "fmt" "math/big" + + "github.com/ethereum/go-ethereum/crypto" ) // swapEndianness swaps the order of the bytes in the slice.@@ -106,6 +108,19 @@ return nil, err
} pk := PublicKey(*p) return &pk, nil +} + +// NewPublicKeyFromECDSA returns a *PublicKey from a serialized/marshaled array +// of bytes generated by the ethereum/standard ECDSA PubKey implementation. +func NewPublicKeyFromECDSA(b []byte) (*PublicKey, error) { + pub, err := crypto.UnmarshalPubkey(b) + if err != nil { + return nil, err + } + pk := new(PublicKey) + pk.X = pub.X + pk.Y = pub.Y + return pk, nil } // MarshalJSON implements the json marshaler for the Signature
M
parsers_test.go
→
parsers_test.go
@@ -6,6 +6,7 @@ "encoding/json"
"math/big" "testing" + "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" )@@ -92,3 +93,16 @@ sig2, err := NewSignatureFromBytes(b)
assert.Nil(t, err) assert.Equal(t, &sig, sig2) } + +func TestImportECDSApubKey(t *testing.T) { + // Generate an ECDSA key + k, err := crypto.GenerateKey() + assert.Nil(t, err) + // Import the ECDSA Public key bytes into a PublicKey type + pk, err := NewPublicKeyFromECDSA(crypto.FromECDSAPub(&k.PublicKey)) + assert.Nil(t, err) + // Set the ECDSA Private key point as a blindsecp256k1 PrivateKey type + bk := PrivateKey(*k.D) + // Compare both public keys + assert.Equal(t, bk.Public().Bytes(), pk.Bytes()) +}