code: func (s *serfQueries) handleInstallKey(q *Query) {
  	response := nodeKeyResponse{Result: false}
  	keyring := s.serf.config.MemberlistConfig.Keyring
  	req := keyRequest{}
  
  	err := decodeMessage(q.Payload[1:], &req)
  	if err != nil {
  		s.logger.Printf("[ERR] serf: Failed to decode key request: %v", err)
  		goto SEND
  	}
  
  	if !s.serf.EncryptionEnabled() {
  		response.Message = "No keyring to modify (encryption not enabled)"
  		s.logger.Printf("[ERR] serf: No keyring to modify (encryption not enabled)")
  		goto SEND
  	}
  
  	s.logger.Printf("[INFO] serf: Received install-key query")
  	if err := keyring.AddKey(req.Key); err != nil {
  		response.Message = err.Error()
  		s.logger.Printf("[ERR] serf: Failed to install key: %s", err)
  		goto SEND
  	}
  
  	if s.serf.config.KeyringFile != "" {
  		if err := s.serf.writeKeyringFile(); err != nil {
  			response.Message = err.Error()
  			s.logger.Printf("[ERR] serf: Failed to write keyring file: %s", err)
  			goto SEND
  		}
  	}
  
  	response.Result = true
  
  SEND:
  	s.sendKeyResponse(q, &response)
  }
docs: // handleInstallKey is invoked whenever a new encryption key is received from
  // another member in the cluster, and handles the process of installing it onto
  // the memberlist keyring. This type of query may fail if the provided key does
  // not fit the constraints that memberlist enforces. If the query fails, the
  // response will contain the error message so that it may be relayed.