Skip to content

Commit 6ae79ef

Browse files
authored
Merge pull request #6914 from marten-seemann/generalize-private-network
Update to go-libp2p 0.6.0
2 parents 77b634b + 53782d4 commit 6ae79ef

File tree

3 files changed

+188
-36
lines changed

3 files changed

+188
-36
lines changed

core/node/libp2p/pnet.go

+30-8
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import (
66
"fmt"
77
"time"
88

9+
"github.com/ipfs/go-ipfs/repo"
10+
911
"github.com/libp2p/go-libp2p"
10-
host "github.com/libp2p/go-libp2p-core/host"
11-
pnet "github.com/libp2p/go-libp2p-pnet"
12+
"github.com/libp2p/go-libp2p-core/host"
13+
"github.com/libp2p/go-libp2p-core/pnet"
1214
"go.uber.org/fx"
13-
14-
"github.com/ipfs/go-ipfs/repo"
15+
"golang.org/x/crypto/salsa20"
16+
"golang.org/x/crypto/sha3"
1517
)
1618

1719
type PNetFingerprint []byte
@@ -22,14 +24,14 @@ func PNet(repo repo.Repo) (opts Libp2pOpts, fp PNetFingerprint, err error) {
2224
return opts, nil, err
2325
}
2426

25-
protec, err := pnet.NewProtector(bytes.NewReader(swarmkey))
27+
psk, err := pnet.DecodeV1PSK(bytes.NewReader(swarmkey))
2628
if err != nil {
2729
return opts, nil, fmt.Errorf("failed to configure private network: %s", err)
2830
}
29-
fp = protec.Fingerprint()
3031

31-
opts.Opts = append(opts.Opts, libp2p.PrivateNetwork(protec))
32-
return opts, fp, nil
32+
opts.Opts = append(opts.Opts, libp2p.PrivateNetwork(psk))
33+
34+
return opts, pnetFingerprint(psk), nil
3335
}
3436

3537
func PNetChecker(repo repo.Repo, ph host.Host, lc fx.Lifecycle) error {
@@ -68,3 +70,23 @@ func PNetChecker(repo repo.Repo, ph host.Host, lc fx.Lifecycle) error {
6870
})
6971
return nil
7072
}
73+
74+
func pnetFingerprint(psk pnet.PSK) []byte {
75+
var pskArr [32]byte
76+
copy(pskArr[:], psk)
77+
78+
enc := make([]byte, 64)
79+
zeros := make([]byte, 64)
80+
out := make([]byte, 16)
81+
82+
// We encrypt data first so we don't feed PSK to hash function.
83+
// Salsa20 function is not reversible thus increasing our security margin.
84+
salsa20.XORKeyStream(enc, zeros, []byte("finprint"), &pskArr)
85+
86+
// Then do Shake-128 hash to reduce its length.
87+
// This way if for some reason Shake is broken and Salsa20 preimage is possible,
88+
// attacker has only half of the bytes necessary to recreate psk.
89+
sha3.ShakeSum128(out, enc)
90+
91+
return out
92+
}

go.mod

+8-8
Original file line numberDiff line numberDiff line change
@@ -58,29 +58,28 @@ require (
5858
github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c
5959
github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2
6060
github.com/jbenet/goprocess v0.1.3
61-
github.com/libp2p/go-libp2p v0.5.2
61+
github.com/libp2p/go-libp2p v0.6.0
6262
github.com/libp2p/go-libp2p-autonat-svc v0.1.0
6363
github.com/libp2p/go-libp2p-circuit v0.1.4
6464
github.com/libp2p/go-libp2p-connmgr v0.2.1
65-
github.com/libp2p/go-libp2p-core v0.4.0
65+
github.com/libp2p/go-libp2p-core v0.5.0
6666
github.com/libp2p/go-libp2p-discovery v0.2.0
6767
github.com/libp2p/go-libp2p-http v0.1.4
6868
github.com/libp2p/go-libp2p-kad-dht v0.5.1
6969
github.com/libp2p/go-libp2p-kbucket v0.2.3
7070
github.com/libp2p/go-libp2p-loggables v0.1.0
71-
github.com/libp2p/go-libp2p-mplex v0.2.1
72-
github.com/libp2p/go-libp2p-peerstore v0.1.4
73-
github.com/libp2p/go-libp2p-pnet v0.1.0
71+
github.com/libp2p/go-libp2p-mplex v0.2.2
72+
github.com/libp2p/go-libp2p-peerstore v0.2.0
7473
github.com/libp2p/go-libp2p-pubsub v0.2.6
7574
github.com/libp2p/go-libp2p-pubsub-router v0.2.1
76-
github.com/libp2p/go-libp2p-quic-transport v0.2.3
75+
github.com/libp2p/go-libp2p-quic-transport v0.3.1
7776
github.com/libp2p/go-libp2p-record v0.1.2
7877
github.com/libp2p/go-libp2p-routing-helpers v0.1.0
7978
github.com/libp2p/go-libp2p-secio v0.2.1
8079
github.com/libp2p/go-libp2p-swarm v0.2.2
8180
github.com/libp2p/go-libp2p-testing v0.1.1
8281
github.com/libp2p/go-libp2p-tls v0.1.3
83-
github.com/libp2p/go-libp2p-yamux v0.2.1
82+
github.com/libp2p/go-libp2p-yamux v0.2.2
8483
github.com/libp2p/go-maddr-filter v0.0.5
8584
github.com/libp2p/go-socket-activation v0.0.2
8685
github.com/mattn/go-runewidth v0.0.8 // indirect
@@ -100,7 +99,8 @@ require (
10099
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7
101100
github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c
102101
go.uber.org/fx v1.10.0
103-
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9
102+
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d
103+
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae
104104
gopkg.in/cheggaaa/pb.v1 v1.0.28
105105
)
106106

0 commit comments

Comments
 (0)