diff options
Diffstat (limited to 'device/peer.go')
-rw-r--r-- | device/peer.go | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/device/peer.go b/device/peer.go index 256e4f5..91d975a 100644 --- a/device/peer.go +++ b/device/peer.go @@ -68,7 +68,6 @@ type Peer struct { } func (device *Device) NewPeer(pk NoisePublicKey) (*Peer, error) { - if device.isClosed.Get() { return nil, errors.New("device closed") } @@ -103,20 +102,28 @@ func (device *Device) NewPeer(pk NoisePublicKey) (*Peer, error) { if ok { return nil, errors.New("adding existing peer") } - device.peers.keyMap[pk] = peer // pre-compute DH handshake := &peer.handshake handshake.mutex.Lock() - handshake.remoteStatic = pk handshake.precomputedStaticStatic = device.staticIdentity.privateKey.sharedSecret(pk) + ssIsZero := isZero(handshake.precomputedStaticStatic[:]) + handshake.remoteStatic = pk handshake.mutex.Unlock() // reset endpoint peer.endpoint = nil + // conditionally add + + if !ssIsZero { + device.peers.keyMap[pk] = peer + } else { + return nil, nil + } + // start peer if peer.device.isUp.Get() { |