mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 17:33:47 +00:00
p2p/enr: update r.raw on DecodeRLP
This commit is contained in:
parent
0315eece6d
commit
74eda001aa
2 changed files with 30 additions and 13 deletions
|
|
@ -135,7 +135,20 @@ func (r *Record) DecodeRLP(s *rlp.Stream) error {
|
|||
return err
|
||||
}
|
||||
|
||||
err = r.verifySignature()
|
||||
sigcontent, err := r.serialisedContent()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// update r.raw
|
||||
blob, err := rlp.EncodeToBytes(r.signature)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
r.raw = append(blob, sigcontent...)
|
||||
|
||||
err = r.verifySignature(sigcontent)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -161,11 +174,11 @@ func (r Record) Equal(o Record) (bool, error) {
|
|||
return false, nil
|
||||
}
|
||||
|
||||
if err := r.verifySignature(); err != nil {
|
||||
if err := r.verifySignature(rr); err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
if err := o.verifySignature(); err != nil {
|
||||
if err := o.verifySignature(oo); err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
|
|
@ -241,7 +254,7 @@ func (r *Record) signAndEncode(privkey *ecdsa.PrivateKey) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (r *Record) verifySignature() error {
|
||||
func (r Record) verifySignature(sigcontent []byte) error {
|
||||
var id ID
|
||||
_, err := r.Load(&id)
|
||||
if err != nil {
|
||||
|
|
@ -254,18 +267,13 @@ func (r *Record) verifySignature() error {
|
|||
}
|
||||
|
||||
// get publickey from record
|
||||
var blob Secp256k1
|
||||
_, err = r.Load(&blob)
|
||||
var secp256k1 Secp256k1
|
||||
_, err = r.Load(&secp256k1)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pk, err := btcec.ParsePubKey(blob, btcec.S256())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
sigcontent, err := r.serialisedContent()
|
||||
pk, err := btcec.ParsePubKey(secp256k1, btcec.S256())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import (
|
|||
"bytes"
|
||||
"encoding/hex"
|
||||
"net"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
|
|
@ -182,10 +183,18 @@ func TestSignEncodeAndDecode(t *testing.T) {
|
|||
t.Errorf("records not equal ; got\n%#v, expected\n%#v", r2, r)
|
||||
}
|
||||
|
||||
_, err = rlp.EncodeToBytes(r2)
|
||||
if !reflect.DeepEqual(r, r2) {
|
||||
t.Errorf("records not deep equal ; got\n%#v, expected\n%#v", r2, r)
|
||||
}
|
||||
|
||||
blob2, err := rlp.EncodeToBytes(r2)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if bytes.Compare(blob, blob2) != 0 {
|
||||
t.Errorf("serialised records not equal ; got\n%#v, expected\n%#v", blob2, blob)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNodeAddress(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue