Skip to content

Commit 092ffbb

Browse files
committed
fix(wire/net): remove test backend signature from authMsg of exchange address protocol
Signed-off-by: Minh Huy Tran <huy@perun.network>
1 parent f824816 commit 092ffbb

File tree

3 files changed

+55
-51
lines changed

3 files changed

+55
-51
lines changed

wire/account.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (m *AuthResponseMsg) Decode(r io.Reader) (err error) {
8484
}
8585

8686
// NewAuthResponseMsg creates an authentication response message.
87-
func NewAuthResponseMsg(acc map[wallet.BackendID]Account) (Msg, error) {
87+
func NewAuthResponseMsg(acc map[wallet.BackendID]Account, backendID wallet.BackendID) (Msg, error) {
8888
addressMap := make(map[wallet.BackendID]Address)
8989
for id, a := range acc {
9090
addressMap[id] = a.Address()
@@ -98,7 +98,7 @@ func NewAuthResponseMsg(acc map[wallet.BackendID]Account) (Msg, error) {
9898
}
9999
addressBytes = append(addressBytes, addrBytes...)
100100
}
101-
signature, err := acc[testBackendID].Sign(addressBytes)
101+
signature, err := acc[backendID].Sign(addressBytes)
102102
if err != nil {
103103
return nil, fmt.Errorf("failed to sign address: %w", err)
104104
}

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/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)