code: func (sa *discoverySecurityAdapter) ValidateAliveMsg(m *proto.SignedGossipMessage) bool {
  	am := m.GetAliveMsg()
  	if am == nil || am.Membership == nil || am.Membership.PkiId == nil || !m.IsSigned() {
  		sa.logger.Warning("Invalid alive message:", m)
  		return false
  	}
  
  	var identity api.PeerIdentityType
  
  	// If identity is included inside AliveMessage
  	if am.Identity != nil {
  		identity = api.PeerIdentityType(am.Identity)
  		claimedPKIID := am.Membership.PkiId
  		err := sa.idMapper.Put(claimedPKIID, identity)
  		if err != nil {
  			sa.logger.Debugf("Failed validating identity of %v reason: %+v", am, errors.WithStack(err))
  			return false
  		}
  	} else {
  		identity, _ = sa.idMapper.Get(am.Membership.PkiId)
  		if identity != nil {
  			sa.logger.Debug("Fetched identity of", am.Membership.PkiId, "from identity store")
  		}
  	}
  
  	if identity == nil {
  		sa.logger.Debug("Don't have certificate for", am)
  		return false
  	}
  
  	return sa.validateAliveMsgSignature(m, identity)
  }
docs: // validateAliveMsg validates that an Alive message is authentic