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
|
||||
}
|
||||
|
||||
digest := crypto.Keccak256Hash(secp256k1)
|
||||
pk := btcec.PublicKey(secp256k1)
|
||||
|
||||
digest := crypto.Keccak256Hash(pk.SerializeCompressed())
|
||||
|
||||
return digest.Bytes(), nil
|
||||
}
|
||||
|
|
@ -203,8 +205,8 @@ func (r *Record) Sign(privkey *ecdsa.PrivateKey) error {
|
|||
|
||||
r.Set(ID(ID_SECP256k1_KECCAK))
|
||||
|
||||
pk := (*btcec.PublicKey)(&privkey.PublicKey).SerializeCompressed()
|
||||
secp256k1 := Secp256k1(pk)
|
||||
pk := (*btcec.PublicKey)(&privkey.PublicKey)
|
||||
secp256k1 := Secp256k1(*pk)
|
||||
r.Set(secp256k1)
|
||||
|
||||
return r.signAndEncode(privkey)
|
||||
|
|
@ -271,11 +273,6 @@ func (r Record) verifySignature(sigcontent []byte) error {
|
|||
return err
|
||||
}
|
||||
|
||||
pk, err := btcec.ParsePubKey(secp256k1, btcec.S256())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
digest := crypto.Keccak256Hash(sigcontent)
|
||||
|
||||
sign, err := btcec.ParseSignature(r.signature, btcec.S256())
|
||||
|
|
@ -283,7 +280,7 @@ func (r Record) verifySignature(sigcontent []byte) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if !sign.Verify(digest.Bytes(), pk) {
|
||||
if !sign.Verify(digest.Bytes(), (*btcec.PublicKey)(&secp256k1)) {
|
||||
return errors.New("signature is not valid")
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -120,9 +120,10 @@ func TestGetSetSecp256k1(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
got := (*btcec.PublicKey)(&pk).SerializeCompressed()
|
||||
expected := (*btcec.PublicKey)(&privkey.PublicKey).SerializeCompressed()
|
||||
if bytes.Compare(pk, expected) != 0 {
|
||||
t.Fatalf("got %#v, expected %#v", pk, expected)
|
||||
if bytes.Compare(got, expected) != 0 {
|
||||
t.Fatalf("got %#v, expected %#v", got, expected)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,25 +17,37 @@
|
|||
package enr
|
||||
|
||||
import (
|
||||
"crypto/ecdsa"
|
||||
"io"
|
||||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/ethereum/go-ethereum/rlp"
|
||||
)
|
||||
|
||||
type Secp256k1 []byte
|
||||
type Secp256k1 ecdsa.PublicKey
|
||||
|
||||
func (Secp256k1) ENRKey() string {
|
||||
return "secp256k1"
|
||||
}
|
||||
|
||||
func (v Secp256k1) EncodeRLP(w io.Writer) error {
|
||||
blob := []byte(v)
|
||||
return rlp.Encode(w, blob)
|
||||
pk := btcec.PublicKey(v)
|
||||
|
||||
return rlp.Encode(w, pk.SerializeCompressed())
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
pk, err := btcec.ParsePubKey(buf, btcec.S256())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*v = (Secp256k1)(*pk)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue