Browse Source

Merge pull request #1 from p4u/master

add NewPublicKeyFromECDSA
feature/compress-decompress
arnau 3 years ago
committed by GitHub
parent
commit
40de297340
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 0 deletions
  1. +15
    -0
      parsers.go
  2. +14
    -0
      parsers_test.go

+ 15
- 0
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.
@ -108,6 +110,19 @@ func NewPublicKeyFromBytes(b []byte) (*PublicKey, error) {
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
func (sig Signature) MarshalJSON() ([]byte, error) {
return json.Marshal(&struct {

+ 14
- 0
parsers_test.go

@ -6,6 +6,7 @@ import (
"math/big"
"testing"
"github.com/ethereum/go-ethereum/crypto"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@ -92,3 +93,16 @@ func TestBytes(t *testing.T) {
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())
}

Loading…
Cancel
Save