New handshake, use softcrdt upstream

This commit is contained in:
Neil Alexander 2023-03-18 12:14:32 +00:00
parent 1420ea5662
commit 83c1a810b5
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
6 changed files with 123 additions and 47 deletions

View file

@ -278,7 +278,7 @@ func (intf *link) handler(dial *linkDial) error {
})
meta := version_getBaseMetadata()
meta.key = intf.links.core.public
meta.publicKey = intf.links.core.public
metaBytes := meta.encode()
if err := intf.conn.SetDeadline(time.Now().Add(time.Second * 6)); err != nil {
return fmt.Errorf("failed to set handshake deadline: %w", err)
@ -311,8 +311,8 @@ func (intf *link) handler(dial *linkDial) error {
intf.links.core.log.Debugf("%s: %s is incompatible version (local %s, remote %s)",
connectError,
intf.lname,
fmt.Sprintf("%d.%d", base.ver, base.minorVer),
fmt.Sprintf("%d.%d", meta.ver, meta.minorVer),
fmt.Sprintf("%d.%d", base.majorVer, base.minorVer),
fmt.Sprintf("%d.%d", meta.majorVer, meta.minorVer),
)
return errors.New("remote node is incompatible version")
}
@ -320,7 +320,7 @@ func (intf *link) handler(dial *linkDial) error {
// check - in future versions we really should check a signature or something like that.
if pinned := intf.options.pinnedEd25519Keys; len(pinned) > 0 {
var key keyArray
copy(key[:], meta.key)
copy(key[:], meta.publicKey)
if _, allowed := pinned[key]; !allowed {
return fmt.Errorf("node public key that does not match pinned keys")
}
@ -329,14 +329,14 @@ func (intf *link) handler(dial *linkDial) error {
allowed := intf.links.core.config._allowedPublicKeys
isallowed := len(allowed) == 0
for k := range allowed {
if bytes.Equal(k[:], meta.key) {
if bytes.Equal(k[:], meta.publicKey) {
isallowed = true
break
}
}
if intf.incoming && !intf.force && !isallowed {
_ = intf.close()
return fmt.Errorf("node public key %q is not in AllowedPublicKeys", hex.EncodeToString(meta.key))
return fmt.Errorf("node public key %q is not in AllowedPublicKeys", hex.EncodeToString(meta.publicKey))
}
phony.Block(intf.links, func() {
@ -347,13 +347,13 @@ func (intf *link) handler(dial *linkDial) error {
if intf.incoming {
dir = "inbound"
}
remoteAddr := net.IP(address.AddrForKey(meta.key)[:]).String()
remoteAddr := net.IP(address.AddrForKey(meta.publicKey)[:]).String()
remoteStr := fmt.Sprintf("%s@%s", remoteAddr, intf.info.remote)
localStr := intf.conn.LocalAddr()
intf.links.core.log.Infof("Connected %s %s: %s, source %s",
dir, strings.ToUpper(intf.info.linkType), remoteStr, localStr)
err = intf.links.core.HandleConn(meta.key, intf.conn, intf.options.priority)
err = intf.links.core.HandleConn(meta.publicKey, intf.conn, intf.options.priority)
switch err {
case io.EOF, net.ErrClosed, nil:
intf.links.core.log.Infof("Disconnected %s %s: %s, source %s",