Skip to content

Commit 14d52e5

Browse files
authored
Merge branch 'main' into 418_libp2p_integration
2 parents f5bde07 + cccdfef commit 14d52e5

File tree

6 files changed

+68
-64
lines changed

6 files changed

+68
-64
lines changed

wire/account.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ type Account interface {
4141
Sign(msg []byte) ([]byte, error)
4242
}
4343

44-
const testBackendID = 0
45-
4644
var _ Msg = (*AuthResponseMsg)(nil)
4745

4846
// AuthResponseMsg is the response message in the peer authentication protocol.
@@ -89,7 +87,7 @@ func (m *AuthResponseMsg) Decode(r io.Reader) (err error) {
8987
}
9088

9189
// NewAuthResponseMsg creates an authentication response message.
92-
func NewAuthResponseMsg(acc map[wallet.BackendID]Account) (Msg, error) {
90+
func NewAuthResponseMsg(acc map[wallet.BackendID]Account, backendID wallet.BackendID) (Msg, error) {
9391
addressMap := make(map[wallet.BackendID]Address)
9492
for id, a := range acc {
9593
addressMap[id] = a.Address()
@@ -103,7 +101,7 @@ func NewAuthResponseMsg(acc map[wallet.BackendID]Account) (Msg, error) {
103101
}
104102
addressBytes = append(addressBytes, addrBytes...)
105103
}
106-
signature, err := acc[testBackendID].Sign(addressBytes)
104+
signature, err := acc[backendID].Sign(addressBytes)
107105
if err != nil {
108106
return nil, fmt.Errorf("failed to sign address: %w", err)
109107
}

wire/net/exchange_addr.go

Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -63,33 +63,35 @@ func IsAuthenticationError(err error) bool {
6363
func ExchangeAddrsActive(ctx context.Context, id map[wallet.BackendID]wire.Account, peer map[wallet.BackendID]wire.Address, conn Conn) error {
6464
var err error
6565
ok := pkg.TerminatesCtx(ctx, func() {
66-
authMsg, err2 := wire.NewAuthResponseMsg(id)
67-
if err2 != nil {
68-
err = errors.WithMessage(err2, "creating auth message")
69-
return
70-
}
71-
err = conn.Send(&wire.Envelope{
72-
Sender: wire.AddressMapfromAccountMap(id),
73-
Recipient: peer,
74-
Msg: authMsg,
75-
})
76-
if err != nil {
77-
err = errors.WithMessage(err, "sending message")
78-
return
79-
}
66+
for bid := range id {
67+
authMsg, err2 := wire.NewAuthResponseMsg(id, bid)
68+
if err2 != nil {
69+
err = errors.WithMessage(err2, "creating auth message")
70+
return
71+
}
72+
err = conn.Send(&wire.Envelope{
73+
Sender: wire.AddressMapfromAccountMap(id),
74+
Recipient: peer,
75+
Msg: authMsg,
76+
})
77+
if err != nil {
78+
err = errors.WithMessage(err, "sending message")
79+
return
80+
}
8081

81-
var e *wire.Envelope
82-
if e, err = conn.Recv(); err != nil {
83-
err = errors.WithMessage(err, "receiving message")
84-
} else if _, ok := e.Msg.(*wire.AuthResponseMsg); !ok {
85-
err = errors.Errorf("expected AuthResponse wire msg, got %v", e.Msg.Type())
86-
} else if msg, ok := e.Msg.(*wire.AuthResponseMsg); ok {
87-
if check := VerifyAddressSignature(peer, msg.Signature); check != nil {
88-
err = errors.WithMessage(check, "verifying peer address's signature")
82+
var e *wire.Envelope
83+
if e, err = conn.Recv(); err != nil {
84+
err = errors.WithMessage(err, "receiving message")
85+
} else if _, ok := e.Msg.(*wire.AuthResponseMsg); !ok {
86+
err = errors.Errorf("expected AuthResponse wire msg, got %v", e.Msg.Type())
87+
} else if msg, ok := e.Msg.(*wire.AuthResponseMsg); ok {
88+
if check := VerifyAddressSignature(peer, msg.Signature); check != nil {
89+
err = errors.WithMessage(check, "verifying peer address's signature")
90+
}
91+
} else if !channel.EqualWireMaps(e.Recipient, wire.AddressMapfromAccountMap(id)) &&
92+
!channel.EqualWireMaps(e.Sender, peer) {
93+
err = NewAuthenticationError(e.Sender, e.Recipient, wire.AddressMapfromAccountMap(id), "unmatched response sender or recipient")
8994
}
90-
} else if !channel.EqualWireMaps(e.Recipient, wire.AddressMapfromAccountMap(id)) &&
91-
!channel.EqualWireMaps(e.Sender, peer) {
92-
err = NewAuthenticationError(e.Sender, e.Recipient, wire.AddressMapfromAccountMap(id), "unmatched response sender or recipient")
9395
}
9496
})
9597

@@ -108,33 +110,35 @@ func ExchangeAddrsPassive(ctx context.Context, id map[wallet.BackendID]wire.Acco
108110
var err error
109111
addrs := wire.AddressMapfromAccountMap(id)
110112
ok := pkg.TerminatesCtx(ctx, func() {
111-
var e *wire.Envelope
112-
if e, err = conn.Recv(); err != nil {
113-
err = errors.WithMessage(err, "receiving auth message")
114-
} else if _, ok := e.Msg.(*wire.AuthResponseMsg); !ok {
115-
err = errors.Errorf("expected AuthResponse wire msg, got %v", e.Msg.Type())
116-
} else if !channel.EqualWireMaps(e.Recipient, addrs) {
117-
err = NewAuthenticationError(e.Sender, e.Recipient, wire.AddressMapfromAccountMap(id), "unmatched response sender or recipient")
118-
} else if msg, ok := e.Msg.(*wire.AuthResponseMsg); ok {
119-
if err = VerifyAddressSignature(e.Sender, msg.Signature); err != nil {
120-
err = errors.WithMessage(err, "verifying peer address's signature")
113+
for bid := range id {
114+
var e *wire.Envelope
115+
if e, err = conn.Recv(); err != nil {
116+
err = errors.WithMessage(err, "receiving auth message")
117+
} else if _, ok := e.Msg.(*wire.AuthResponseMsg); !ok {
118+
err = errors.Errorf("expected AuthResponse wire msg, got %v", e.Msg.Type())
119+
} else if !channel.EqualWireMaps(e.Recipient, addrs) {
120+
err = NewAuthenticationError(e.Sender, e.Recipient, wire.AddressMapfromAccountMap(id), "unmatched response sender or recipient")
121+
} else if msg, ok := e.Msg.(*wire.AuthResponseMsg); ok {
122+
if err = VerifyAddressSignature(e.Sender, msg.Signature); err != nil {
123+
err = errors.WithMessage(err, "verifying peer address's signature")
124+
}
121125
}
122-
}
123126

124-
if err != nil {
125-
return
126-
}
127+
if err != nil {
128+
return
129+
}
127130

128-
authMsg, err2 := wire.NewAuthResponseMsg(id)
129-
if err2 != nil {
130-
err = errors.WithMessage(err2, "creating auth message")
131-
return
131+
authMsg, err2 := wire.NewAuthResponseMsg(id, bid)
132+
if err2 != nil {
133+
err = errors.WithMessage(err2, "creating auth message")
134+
return
135+
}
136+
addr, err = e.Sender, conn.Send(&wire.Envelope{
137+
Sender: wire.AddressMapfromAccountMap(id),
138+
Recipient: e.Sender,
139+
Msg: authMsg,
140+
})
132141
}
133-
addr, err = e.Sender, conn.Send(&wire.Envelope{
134-
Sender: wire.AddressMapfromAccountMap(id),
135-
Recipient: e.Sender,
136-
Msg: authMsg,
137-
})
138142
})
139143

140144
if !ok {

wire/net/simple/address.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ import (
3131
"perun.network/go-perun/wire"
3232
)
3333

34-
// testBackendID is the identifier for the simulated Backend.
35-
const testBackendID = 0
36-
3734
// Address is a wire address.
3835
type Address struct {
3936
Name string
@@ -223,18 +220,22 @@ func (a *Address) Cmp(b wire.Address) int {
223220
}
224221

225222
// NewRandomAddresses returns a new random peer address.
226-
func NewRandomAddresses(rng *rand.Rand) map[wallet.BackendID]wire.Address {
223+
func NewRandomAddresses(rng *rand.Rand, backendID []wallet.BackendID) map[wallet.BackendID]wire.Address {
227224
const addrLen = 32
228225
l := rng.Intn(addrLen)
229226
d := make([]byte, l)
230227
if _, err := rng.Read(d); err != nil {
231228
panic(err)
232229
}
233230

234-
a := Address{
235-
Name: string(d),
231+
addresses := make(map[wallet.BackendID]wire.Address)
232+
for _, id := range backendID {
233+
a := Address{
234+
Name: string(d),
235+
}
236+
addresses[id] = &a
236237
}
237-
return map[wallet.BackendID]wire.Address{testBackendID: &a}
238+
return addresses
238239
}
239240

240241
// Verify verifies a message signature.

wire/net/simple/dialer_internal_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ func TestDialer_Dial(t *testing.T) {
140140
})
141141

142142
t.Run("unknown host", func(t *testing.T) {
143-
noHostAddr := NewRandomAddresses(rng)
143+
noHostAddr := NewRandomAddresses(rng, []wallet.BackendID{wiretest.TestBackendID})
144144
d.Register(noHostAddr, "no such host")
145145

146146
ctxtest.AssertTerminates(t, timeout, func() {
@@ -152,7 +152,7 @@ func TestDialer_Dial(t *testing.T) {
152152

153153
t.Run("unknown address", func(t *testing.T) {
154154
ctxtest.AssertTerminates(t, timeout, func() {
155-
unkownAddr := NewRandomAddresses(rng)
155+
unkownAddr := NewRandomAddresses(rng, []wallet.BackendID{wiretest.TestBackendID})
156156
conn, err := d.Dial(context.Background(), unkownAddr, ser)
157157
assert.Error(t, err)
158158
assert.Nil(t, conn)

wire/net/simple/simple_exchange_addr_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"time"
2828

2929
"perun.network/go-perun/channel"
30+
"perun.network/go-perun/wallet"
3031

3132
"github.com/stretchr/testify/assert"
3233
"github.com/stretchr/testify/require"
@@ -108,8 +109,8 @@ func newPipeConnPair() (a wirenet.Conn, b wirenet.Conn) {
108109
// recipient generated using randomness from rng.
109110
func newRandomEnvelope(rng *rand.Rand, m wire.Msg) *wire.Envelope {
110111
return &wire.Envelope{
111-
Sender: NewRandomAddresses(rng),
112-
Recipient: NewRandomAddresses(rng),
112+
Sender: NewRandomAddresses(rng, []wallet.BackendID{wiretest.TestBackendID}),
113+
Recipient: NewRandomAddresses(rng, []wallet.BackendID{wiretest.TestBackendID}),
113114
Msg: m,
114115
}
115116
}

wire/test/msgstest.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func AuthMsgsSerializationTest(t *testing.T, serializerTest func(t *testing.T, m
4040
t.Helper()
4141

4242
rng := pkgtest.Prng(t)
43-
testMsg, err := wire.NewAuthResponseMsg(NewRandomAccountMap(rng, TestBackendID))
43+
testMsg, err := wire.NewAuthResponseMsg(NewRandomAccountMap(rng, TestBackendID), TestBackendID)
4444
if err != nil {
4545
t.Fatal(err)
4646
}

0 commit comments

Comments
 (0)