code: func (s *Signer) remoteOp(req interface{}, profile, target string) (resp interface{}, err error) {
  	jsonData, err := json.Marshal(req)
  	if err != nil {
  		return nil, cferr.Wrap(cferr.APIClientError, cferr.JSONError, err)
  	}
  
  	p, err := signer.Profile(s, profile)
  	if err != nil {
  		return
  	}
  
  	server := client.NewServerTLS(p.RemoteServer, helpers.CreateTLSConfig(p.RemoteCAs, p.ClientCert))
  	if server == nil {
  		return nil, cferr.Wrap(cferr.PolicyError, cferr.InvalidRequest,
  			errors.New("failed to connect to remote"))
  	}
  
  	server.SetReqModifier(s.reqModifier)
  
  	// There's no auth provider for the "info" method
  	if target == "info" {
  		resp, err = server.Info(jsonData)
  	} else if p.RemoteProvider != nil {
  		resp, err = server.AuthSign(jsonData, nil, p.RemoteProvider)
  	} else {
  		resp, err = server.Sign(jsonData)
  	}
  
  	if err != nil {
  		return nil, err
  	}
  
  	return
  }
docs: // Helper function to perform a remote sign or info request.