class Net::SSH::Authentication::KeyManager

def sign(identity, data)

blob" format.
will always return the signature in an SSH2-specified "signature
Regardless of the identity's origin or who does the signing, this

been loaded already) and will then be used to sign the data.
private key for the identity will be loaded from disk (if it hasn't
then the ssh-agent will be used to sign the data, otherwise the
identity. If the identity was originally obtained from an ssh-agent,
Sign the given data, using the corresponding private key of the given
def sign(identity, data)
  info = known_identities[identity] or raise KeyManagerError, "the given identity is unknown to the key manager"
  if info[:key].nil? && info[:from] == :file
    begin
      info[:key] = KeyFactory.load_private_key(info[:file], options[:passphrase], !options[:non_interactive])
    rescue OpenSSL::OpenSSLError, Exception => e
      raise KeyManagerError, "the given identity is known, but the private key could not be loaded: #{e.class} (#{e.message})"
    end
  end
  if info[:key]
    return Net::SSH::Buffer.from(:string, identity.ssh_signature_type,
      :mstring, info[:key].ssh_do_sign(data.to_s)).to_s
  end
  if info[:from] == :agent
    raise KeyManagerError, "the agent is no longer available" unless agent
    return agent.sign(identity, data.to_s)
  end
  raise KeyManagerError, "[BUG] can't determine identity origin (#{info.inspect})"
end