arnaucube
arnaucube/go-blindsecp256k1Public Self-hosted repository
Merge pull request #1 from p4u/master

add NewPublicKeyFromECDSA
arnau 17317030+arnaucube@users.noreply.github.com
Mon, 01 Feb 2021 19:08:41 +0100
commit

40de2973402323ac8a45009140421d4409cbba94

parent

1846d569ac7ffa74af8464a4e59036b63e92497b

2 files changed, 29 insertions(+), 0 deletions(-)

jump to
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()) +}