mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 09:23:48 +00:00
p2p/enr: Secp256k1 to ecdsa.PublicKey
This commit is contained in:
parent
a2572e399a
commit
d960c08a24
3 changed files with 25 additions and 15 deletions
|
|
@ -193,7 +193,9 @@ func (r *Record) NodeAddr() ([]byte, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
digest := crypto.Keccak256Hash(secp256k1)
|
pk := btcec.PublicKey(secp256k1)
|
||||||
|
|
||||||
|
digest := crypto.Keccak256Hash(pk.SerializeCompressed())
|
||||||
|
|
||||||
return digest.Bytes(), nil
|
return digest.Bytes(), nil
|
||||||
}
|
}
|
||||||
|
|
@ -203,8 +205,8 @@ func (r *Record) Sign(privkey *ecdsa.PrivateKey) error {
|
||||||
|
|
||||||
r.Set(ID(ID_SECP256k1_KECCAK))
|
r.Set(ID(ID_SECP256k1_KECCAK))
|
||||||
|
|
||||||
pk := (*btcec.PublicKey)(&privkey.PublicKey).SerializeCompressed()
|
pk := (*btcec.PublicKey)(&privkey.PublicKey)
|
||||||
secp256k1 := Secp256k1(pk)
|
secp256k1 := Secp256k1(*pk)
|
||||||
r.Set(secp256k1)
|
r.Set(secp256k1)
|
||||||
|
|
||||||
return r.signAndEncode(privkey)
|
return r.signAndEncode(privkey)
|
||||||
|
|
@ -271,11 +273,6 @@ func (r Record) verifySignature(sigcontent []byte) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
pk, err := btcec.ParsePubKey(secp256k1, btcec.S256())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
digest := crypto.Keccak256Hash(sigcontent)
|
digest := crypto.Keccak256Hash(sigcontent)
|
||||||
|
|
||||||
sign, err := btcec.ParseSignature(r.signature, btcec.S256())
|
sign, err := btcec.ParseSignature(r.signature, btcec.S256())
|
||||||
|
|
@ -283,7 +280,7 @@ func (r Record) verifySignature(sigcontent []byte) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !sign.Verify(digest.Bytes(), pk) {
|
if !sign.Verify(digest.Bytes(), (*btcec.PublicKey)(&secp256k1)) {
|
||||||
return errors.New("signature is not valid")
|
return errors.New("signature is not valid")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,9 +120,10 @@ func TestGetSetSecp256k1(t *testing.T) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
got := (*btcec.PublicKey)(&pk).SerializeCompressed()
|
||||||
expected := (*btcec.PublicKey)(&privkey.PublicKey).SerializeCompressed()
|
expected := (*btcec.PublicKey)(&privkey.PublicKey).SerializeCompressed()
|
||||||
if bytes.Compare(pk, expected) != 0 {
|
if bytes.Compare(got, expected) != 0 {
|
||||||
t.Fatalf("got %#v, expected %#v", pk, expected)
|
t.Fatalf("got %#v, expected %#v", got, expected)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,25 +17,37 @@
|
||||||
package enr
|
package enr
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/ecdsa"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcd/btcec"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Secp256k1 []byte
|
type Secp256k1 ecdsa.PublicKey
|
||||||
|
|
||||||
func (Secp256k1) ENRKey() string {
|
func (Secp256k1) ENRKey() string {
|
||||||
return "secp256k1"
|
return "secp256k1"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v Secp256k1) EncodeRLP(w io.Writer) error {
|
func (v Secp256k1) EncodeRLP(w io.Writer) error {
|
||||||
blob := []byte(v)
|
pk := btcec.PublicKey(v)
|
||||||
return rlp.Encode(w, blob)
|
|
||||||
|
return rlp.Encode(w, pk.SerializeCompressed())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Secp256k1) DecodeRLP(s *rlp.Stream) error {
|
func (v *Secp256k1) DecodeRLP(s *rlp.Stream) error {
|
||||||
if err := s.Decode((*[]byte)(v)); err != nil {
|
buf := make([]byte, 33)
|
||||||
|
if err := s.Decode(&buf); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pk, err := btcec.ParsePubKey(buf, btcec.S256())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*v = (Secp256k1)(*pk)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue