provide client version in secureservice

This commit is contained in:
Sergey Cherepanov 2023-06-13 15:39:22 +02:00
parent 38090ee68f
commit be58956bec
No known key found for this signature in database
GPG Key ID: 87F8EDE8FBDF637C
3 changed files with 23 additions and 16 deletions

View File

@ -8,9 +8,13 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
) )
func newNoVerifyChecker(protoVersion uint32) handshake.CredentialChecker { func newNoVerifyChecker(protoVersion uint32, clientVersion string) handshake.CredentialChecker {
return &noVerifyChecker{ return &noVerifyChecker{
cred: &handshakeproto.Credentials{Type: handshakeproto.CredentialsType_SkipVerify, Version: protoVersion}, cred: &handshakeproto.Credentials{
Type: handshakeproto.CredentialsType_SkipVerify,
Version: protoVersion,
ClientVersion: clientVersion,
},
} }
} }
@ -33,16 +37,18 @@ func (n noVerifyChecker) CheckCredential(remotePeerId string, cred *handshakepro
}, nil }, nil
} }
func newPeerSignVerifier(protoVersion uint32, account *accountdata.AccountKeys) handshake.CredentialChecker { func newPeerSignVerifier(protoVersion uint32, clientVersion string, account *accountdata.AccountKeys) handshake.CredentialChecker {
return &peerSignVerifier{ return &peerSignVerifier{
protoVersion: protoVersion, protoVersion: protoVersion,
account: account, clientVersion: clientVersion,
account: account,
} }
} }
type peerSignVerifier struct { type peerSignVerifier struct {
protoVersion uint32 protoVersion uint32
account *accountdata.AccountKeys clientVersion string
account *accountdata.AccountKeys
} }
func (p *peerSignVerifier) MakeCredentials(remotePeerId string) *handshakeproto.Credentials { func (p *peerSignVerifier) MakeCredentials(remotePeerId string) *handshakeproto.Credentials {
@ -58,9 +64,10 @@ func (p *peerSignVerifier) MakeCredentials(remotePeerId string) *handshakeproto.
} }
payload, _ := msg.Marshal() payload, _ := msg.Marshal()
return &handshakeproto.Credentials{ return &handshakeproto.Credentials{
Type: handshakeproto.CredentialsType_SignedPeerIds, Type: handshakeproto.CredentialsType_SignedPeerIds,
Payload: payload, Payload: payload,
Version: p.protoVersion, Version: p.protoVersion,
ClientVersion: p.clientVersion,
} }
} }

View File

@ -15,8 +15,8 @@ func TestPeerSignVerifier_CheckCredential(t *testing.T) {
identity1, _ := a1.SignKey.GetPublic().Marshall() identity1, _ := a1.SignKey.GetPublic().Marshall()
identity2, _ := a2.SignKey.GetPublic().Marshall() identity2, _ := a2.SignKey.GetPublic().Marshall()
cc1 := newPeerSignVerifier(0, a1) cc1 := newPeerSignVerifier(0, "test:v1", a1)
cc2 := newPeerSignVerifier(0, a2) cc2 := newPeerSignVerifier(0, "test:v1", a2)
c1 := a2.PeerId c1 := a2.PeerId
c2 := a1.PeerId c2 := a1.PeerId
@ -40,8 +40,8 @@ func TestIncompatibleVersion(t *testing.T) {
a2 := newTestAccData(t) a2 := newTestAccData(t)
_, _ = a1.SignKey.GetPublic().Marshall() _, _ = a1.SignKey.GetPublic().Marshall()
cc1 := newPeerSignVerifier(0, a1) cc1 := newPeerSignVerifier(0, "test:v1", a1)
cc2 := newPeerSignVerifier(1, a2) cc2 := newPeerSignVerifier(1, "test:v1", a2)
c1 := a2.PeerId c1 := a2.PeerId
c2 := a1.PeerId c2 := a1.PeerId

View File

@ -64,8 +64,8 @@ func (s *secureService) Init(a *app.App) (err error) {
if s.key, err = crypto.UnmarshalEd25519PrivateKey(peerKey); err != nil { if s.key, err = crypto.UnmarshalEd25519PrivateKey(peerKey); err != nil {
return return
} }
s.noVerifyChecker = newNoVerifyChecker(s.protoVersion) s.noVerifyChecker = newNoVerifyChecker(s.protoVersion, a.VersionName())
s.peerSignVerifier = newPeerSignVerifier(s.protoVersion, account.Account()) s.peerSignVerifier = newPeerSignVerifier(s.protoVersion, a.VersionName(), account.Account())
s.nodeconf = a.MustComponent(nodeconf.CName).(nodeconf.Service) s.nodeconf = a.MustComponent(nodeconf.CName).(nodeconf.Service)