Skip to content

Commit ad49c70

Browse files
authored
p2p/discover: remove type encPubkey (#30172)
The pubkey type was moved to package v4wire a long time ago. Remaining uses of encPubkey were probably left in due to laziness.
1 parent f59d013 commit ad49c70

File tree

6 files changed

+23
-54
lines changed

6 files changed

+23
-54
lines changed

p2p/discover/node.go

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,10 @@
1717
package discover
1818

1919
import (
20-
"crypto/ecdsa"
21-
"crypto/elliptic"
22-
"errors"
23-
"math/big"
2420
"slices"
2521
"sort"
2622
"time"
2723

28-
"github.com/ethereum/go-ethereum/common/math"
29-
"github.com/ethereum/go-ethereum/crypto"
3024
"github.com/ethereum/go-ethereum/p2p/enode"
3125
)
3226

@@ -48,33 +42,6 @@ type tableNode struct {
4842
isValidatedLive bool // true if existence of node is considered validated right now
4943
}
5044

51-
type encPubkey [64]byte
52-
53-
func encodePubkey(key *ecdsa.PublicKey) encPubkey {
54-
var e encPubkey
55-
math.ReadBits(key.X, e[:len(e)/2])
56-
math.ReadBits(key.Y, e[len(e)/2:])
57-
return e
58-
}
59-
60-
func decodePubkey(curve elliptic.Curve, e []byte) (*ecdsa.PublicKey, error) {
61-
if len(e) != len(encPubkey{}) {
62-
return nil, errors.New("wrong size public key data")
63-
}
64-
p := &ecdsa.PublicKey{Curve: curve, X: new(big.Int), Y: new(big.Int)}
65-
half := len(e) / 2
66-
p.X.SetBytes(e[:half])
67-
p.Y.SetBytes(e[half:])
68-
if !p.Curve.IsOnCurve(p.X, p.Y) {
69-
return nil, errors.New("invalid curve point")
70-
}
71-
return p, nil
72-
}
73-
74-
func (e encPubkey) id() enode.ID {
75-
return enode.ID(crypto.Keccak256Hash(e[:]))
76-
}
77-
7845
func unwrapNodes(ns []*tableNode) []*enode.Node {
7946
result := make([]*enode.Node, len(ns))
8047
for i, n := range ns {

p2p/discover/table_util_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"time"
3131

3232
"github.com/ethereum/go-ethereum/crypto"
33+
"github.com/ethereum/go-ethereum/p2p/discover/v4wire"
3334
"github.com/ethereum/go-ethereum/p2p/enode"
3435
"github.com/ethereum/go-ethereum/p2p/enr"
3536
)
@@ -284,7 +285,7 @@ func hexEncPrivkey(h string) *ecdsa.PrivateKey {
284285
}
285286

286287
// hexEncPubkey decodes h as a public key.
287-
func hexEncPubkey(h string) (ret encPubkey) {
288+
func hexEncPubkey(h string) (ret v4wire.Pubkey) {
288289
b, err := hex.DecodeString(h)
289290
if err != nil {
290291
panic(err)

p2p/discover/v4_lookup_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestUDPv4_Lookup(t *testing.T) {
3434
test := newUDPTest(t)
3535

3636
// Lookup on empty table returns no nodes.
37-
targetKey, _ := decodePubkey(crypto.S256(), lookupTestnet.target[:])
37+
targetKey, _ := v4wire.DecodePubkey(crypto.S256(), lookupTestnet.target)
3838
if results := test.udp.LookupPubkey(targetKey); len(results) > 0 {
3939
t.Fatalf("lookup on empty table returned %d results: %#v", len(results), results)
4040
}
@@ -56,7 +56,7 @@ func TestUDPv4_Lookup(t *testing.T) {
5656
results := <-resultC
5757
t.Logf("results:")
5858
for _, e := range results {
59-
t.Logf(" ld=%d, %x", enode.LogDist(lookupTestnet.target.id(), e.ID()), e.ID().Bytes())
59+
t.Logf(" ld=%d, %x", enode.LogDist(lookupTestnet.target.ID(), e.ID()), e.ID().Bytes())
6060
}
6161
if len(results) != bucketSize {
6262
t.Errorf("wrong number of results: got %d, want %d", len(results), bucketSize)
@@ -142,7 +142,7 @@ func serveTestnet(test *udpTest, testnet *preminedTestnet) {
142142
case *v4wire.Ping:
143143
test.packetInFrom(nil, key, to, &v4wire.Pong{Expiration: futureExp, ReplyTok: hash})
144144
case *v4wire.Findnode:
145-
dist := enode.LogDist(n.ID(), testnet.target.id())
145+
dist := enode.LogDist(n.ID(), testnet.target.ID())
146146
nodes := testnet.nodesAtDistance(dist - 1)
147147
test.packetInFrom(nil, key, to, &v4wire.Neighbors{Expiration: futureExp, Nodes: nodes})
148148
}
@@ -156,12 +156,12 @@ func checkLookupResults(t *testing.T, tn *preminedTestnet, results []*enode.Node
156156
t.Helper()
157157
t.Logf("results:")
158158
for _, e := range results {
159-
t.Logf(" ld=%d, %x", enode.LogDist(tn.target.id(), e.ID()), e.ID().Bytes())
159+
t.Logf(" ld=%d, %x", enode.LogDist(tn.target.ID(), e.ID()), e.ID().Bytes())
160160
}
161161
if hasDuplicates(results) {
162162
t.Errorf("result set contains duplicate entries")
163163
}
164-
if !sortedByDistanceTo(tn.target.id(), results) {
164+
if !sortedByDistanceTo(tn.target.ID(), results) {
165165
t.Errorf("result set not sorted by distance to target")
166166
}
167167
wantNodes := tn.closest(len(results))
@@ -231,7 +231,7 @@ var lookupTestnet = &preminedTestnet{
231231
}
232232

233233
type preminedTestnet struct {
234-
target encPubkey
234+
target v4wire.Pubkey
235235
dists [hashBits + 1][]*ecdsa.PrivateKey
236236
}
237237

@@ -304,7 +304,7 @@ func (tn *preminedTestnet) closest(n int) (nodes []*enode.Node) {
304304
}
305305
}
306306
slices.SortFunc(nodes, func(a, b *enode.Node) int {
307-
return enode.DistCmp(tn.target.id(), a.ID(), b.ID())
307+
return enode.DistCmp(tn.target.ID(), a.ID(), b.ID())
308308
})
309309
return nodes[:n]
310310
}
@@ -319,11 +319,11 @@ func (tn *preminedTestnet) mine() {
319319
tn.dists[i] = nil
320320
}
321321

322-
targetSha := tn.target.id()
322+
targetSha := tn.target.ID()
323323
found, need := 0, 40
324324
for found < need {
325325
k := newkey()
326-
ld := enode.LogDist(targetSha, encodePubkey(&k.PublicKey).id())
326+
ld := enode.LogDist(targetSha, v4wire.EncodePubkey(&k.PublicKey).ID())
327327
if len(tn.dists[ld]) < 8 {
328328
tn.dists[ld] = append(tn.dists[ld], k)
329329
found++

p2p/discover/v4_udp.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ func (t *UDPv4) LookupPubkey(key *ecdsa.PublicKey) []*enode.Node {
271271
// case and run the bootstrapping logic.
272272
<-t.tab.refresh()
273273
}
274-
return t.newLookup(t.closeCtx, encodePubkey(key)).run()
274+
return t.newLookup(t.closeCtx, v4wire.EncodePubkey(key)).run()
275275
}
276276

277277
// RandomNodes is an iterator yielding nodes from a random walk of the DHT.
@@ -286,24 +286,24 @@ func (t *UDPv4) lookupRandom() []*enode.Node {
286286

287287
// lookupSelf implements transport.
288288
func (t *UDPv4) lookupSelf() []*enode.Node {
289-
return t.newLookup(t.closeCtx, encodePubkey(&t.priv.PublicKey)).run()
289+
pubkey := v4wire.EncodePubkey(&t.priv.PublicKey)
290+
return t.newLookup(t.closeCtx, pubkey).run()
290291
}
291292

292293
func (t *UDPv4) newRandomLookup(ctx context.Context) *lookup {
293-
var target encPubkey
294+
var target v4wire.Pubkey
294295
crand.Read(target[:])
295296
return t.newLookup(ctx, target)
296297
}
297298

298-
func (t *UDPv4) newLookup(ctx context.Context, targetKey encPubkey) *lookup {
299+
func (t *UDPv4) newLookup(ctx context.Context, targetKey v4wire.Pubkey) *lookup {
299300
target := enode.ID(crypto.Keccak256Hash(targetKey[:]))
300-
ekey := v4wire.Pubkey(targetKey)
301301
it := newLookup(ctx, t.tab, target, func(n *enode.Node) ([]*enode.Node, error) {
302302
addr, ok := n.UDPEndpoint()
303303
if !ok {
304304
return nil, errNoUDPEndpoint
305305
}
306-
return t.findnode(n.ID(), addr, ekey)
306+
return t.findnode(n.ID(), addr, targetKey)
307307
})
308308
return it
309309
}

p2p/discover/v4_udp_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ func TestUDPv4_findnodeMultiReply(t *testing.T) {
314314
// queue a pending findnode request
315315
resultc, errc := make(chan []*enode.Node, 1), make(chan error, 1)
316316
go func() {
317-
rid := encodePubkey(&test.remotekey.PublicKey).id()
317+
rid := v4wire.EncodePubkey(&test.remotekey.PublicKey).ID()
318318
ns, err := test.udp.findnode(rid, test.remoteaddr, testTarget)
319319
if err != nil && len(ns) == 0 {
320320
errc <- err
@@ -433,7 +433,7 @@ func TestUDPv4_successfulPing(t *testing.T) {
433433
// pong packet.
434434
select {
435435
case n := <-added:
436-
rid := encodePubkey(&test.remotekey.PublicKey).id()
436+
rid := v4wire.EncodePubkey(&test.remotekey.PublicKey).ID()
437437
if n.ID() != rid {
438438
t.Errorf("node has wrong ID: got %v, want %v", n.ID(), rid)
439439
}

p2p/discover/v5_udp_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131

3232
"github.com/ethereum/go-ethereum/internal/testlog"
3333
"github.com/ethereum/go-ethereum/log"
34+
"github.com/ethereum/go-ethereum/p2p/discover/v4wire"
3435
"github.com/ethereum/go-ethereum/p2p/discover/v5wire"
3536
"github.com/ethereum/go-ethereum/p2p/enode"
3637
"github.com/ethereum/go-ethereum/p2p/enr"
@@ -576,7 +577,7 @@ func TestUDPv5_lookup(t *testing.T) {
576577
test := newUDPV5Test(t)
577578

578579
// Lookup on empty table returns no nodes.
579-
if results := test.udp.Lookup(lookupTestnet.target.id()); len(results) > 0 {
580+
if results := test.udp.Lookup(lookupTestnet.target.ID()); len(results) > 0 {
580581
t.Fatalf("lookup on empty table returned %d results: %#v", len(results), results)
581582
}
582583

@@ -596,7 +597,7 @@ func TestUDPv5_lookup(t *testing.T) {
596597
// Start the lookup.
597598
resultC := make(chan []*enode.Node, 1)
598599
go func() {
599-
resultC <- test.udp.Lookup(lookupTestnet.target.id())
600+
resultC <- test.udp.Lookup(lookupTestnet.target.ID())
600601
test.close()
601602
}()
602603

@@ -793,7 +794,7 @@ func (test *udpV5Test) packetInFrom(key *ecdsa.PrivateKey, addr netip.AddrPort,
793794

794795
// getNode ensures the test knows about a node at the given endpoint.
795796
func (test *udpV5Test) getNode(key *ecdsa.PrivateKey, addr netip.AddrPort) *enode.LocalNode {
796-
id := encodePubkey(&key.PublicKey).id()
797+
id := v4wire.EncodePubkey(&key.PublicKey).ID()
797798
ln := test.nodesByID[id]
798799
if ln == nil {
799800
db, _ := enode.OpenDB("")

0 commit comments

Comments
 (0)