# File lib/mixlib/authentication/signedheaderauth.rb, line 277
      def do_sign(rsa_key, digest, sign_algorithm, sign_version, use_ssh_agent)
        string_to_sign = canonicalize_request(sign_algorithm, sign_version)
        Mixlib::Authentication.logger.trace "String to sign: '#{string_to_sign}'"
        case sign_version
        when "1.3"
          if use_ssh_agent
            do_sign_ssh_agent(rsa_key, string_to_sign)
          else
            raise AuthenticationError, "RSA private key is required to sign requests, but a public key was provided" unless rsa_key.private?
            rsa_key.sign(digest.new, string_to_sign)
          end
        else
          raise AuthenticationError, "Agent signing mode requires signing protocol version 1.3 or newer" if use_ssh_agent
          raise AuthenticationError, "RSA private key is required to sign requests, but a public key was provided" unless rsa_key.private?
          rsa_key.private_encrypt(string_to_sign)
        end
      end