mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 14:52:17 +00:00
p2p: authenticate peer ID
This commit is contained in:
parent
6e823c6e87
commit
488ae529ad
12
p2p/peer.go
12
p2p/peer.go
@ -92,6 +92,7 @@ func newOutboundPeer(addr *NetAddress, reactorsByCh map[byte]Reactor, chDescs []
|
|||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return peer, nil
|
return peer, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,13 +219,12 @@ func (p *peer) Addr() net.Addr {
|
|||||||
|
|
||||||
// PubKey returns peer's public key.
|
// PubKey returns peer's public key.
|
||||||
func (p *peer) PubKey() crypto.PubKey {
|
func (p *peer) PubKey() crypto.PubKey {
|
||||||
if p.config.AuthEnc {
|
if p.NodeInfo() != nil {
|
||||||
|
return p.nodeInfo.PubKey
|
||||||
|
} else if p.config.AuthEnc {
|
||||||
return p.conn.(*SecretConnection).RemotePubKey()
|
return p.conn.(*SecretConnection).RemotePubKey()
|
||||||
}
|
}
|
||||||
if p.NodeInfo() == nil {
|
panic("Attempt to get peer's PubKey before calling Handshake")
|
||||||
panic("Attempt to get peer's PubKey before calling Handshake")
|
|
||||||
}
|
|
||||||
return p.PubKey()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnStart implements BaseService.
|
// OnStart implements BaseService.
|
||||||
@ -306,7 +306,7 @@ func (p *peer) Set(key string, data interface{}) {
|
|||||||
|
|
||||||
// Key returns the peer's ID - the hex encoded hash of its pubkey.
|
// Key returns the peer's ID - the hex encoded hash of its pubkey.
|
||||||
func (p *peer) ID() ID {
|
func (p *peer) ID() ID {
|
||||||
return ID(hex.EncodeToString(p.nodeInfo.PubKey.Address()))
|
return ID(hex.EncodeToString(p.PubKey().Address()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// NodeInfo returns a copy of the peer's NodeInfo.
|
// NodeInfo returns a copy of the peer's NodeInfo.
|
||||||
|
@ -239,9 +239,8 @@ func (sw *Switch) OnStop() {
|
|||||||
// NOTE: This performs a blocking handshake before the peer is added.
|
// NOTE: This performs a blocking handshake before the peer is added.
|
||||||
// NOTE: If error is returned, caller is responsible for calling peer.CloseConn()
|
// NOTE: If error is returned, caller is responsible for calling peer.CloseConn()
|
||||||
func (sw *Switch) addPeer(peer *peer) error {
|
func (sw *Switch) addPeer(peer *peer) error {
|
||||||
|
|
||||||
// Avoid self
|
// Avoid self
|
||||||
if sw.nodeInfo.PubKey.Equals(peer.PubKey().Wrap()) {
|
if sw.nodeKey.ID() == peer.ID() {
|
||||||
return errors.New("Ignoring connection from self")
|
return errors.New("Ignoring connection from self")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,6 +384,14 @@ func (sw *Switch) DialPeerWithAddress(addr *NetAddress, persistent bool) (Peer,
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
peer.SetLogger(sw.Logger.With("peer", addr))
|
peer.SetLogger(sw.Logger.With("peer", addr))
|
||||||
|
|
||||||
|
// authenticate peer
|
||||||
|
if addr.ID == "" {
|
||||||
|
peer.Logger.Info("Dialed peer with unknown ID - unable to authenticate", "addr", addr)
|
||||||
|
} else if addr.ID != peer.ID() {
|
||||||
|
return nil, fmt.Errorf("Failed to authenticate peer %v. Connected to peer with ID %s", addr, peer.ID())
|
||||||
|
}
|
||||||
|
|
||||||
if persistent {
|
if persistent {
|
||||||
peer.makePersistent()
|
peer.makePersistent()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user