text: /*
   * Copyright (C) the libgit2 contributors. All rights reserved.
   *
   * This file is part of libgit2, distributed under the GNU GPL v2 with
   * a Linking Exception. For full terms see the included COPYING file.
   */
  #ifndef INCLUDE_sys_git_credential_h__
  #define INCLUDE_sys_git_credential_h__
  
  #include "git2/common.h"
  #include "git2/credential.h"
  
  /**
   * @file git2/sys/cred.h
   * @brief Git credentials low-level implementation
   * @defgroup git_credential Git credentials low-level implementation
   * @ingroup Git
   * @{
   */
  GIT_BEGIN_DECL
  
  /**
   * The base structure for all credential types
   */
  struct git_credential {
  	git_credential_t credtype; /**< A type of credential */
  
  	/** The deallocator for this type of credentials */
  	void GIT_CALLBACK(free)(git_credential *cred);
  };
  
  /** A plaintext username and password */
  struct git_credential_userpass_plaintext {
  	git_credential parent; /**< The parent credential */
  	char *username;        /**< The username to authenticate as */
  	char *password;        /**< The password to use */
  };
  
  /** Username-only credential information */
  struct git_credential_username {
  	git_credential parent; /**< The parent credential */
  	char username[1];      /**< The username to authenticate as */
  };
  
  /**
   * A ssh key from disk
   */
  struct git_credential_ssh_key {
  	git_credential parent; /**< The parent credential */
  	char *username;        /**< The username to authenticate as */
  	char *publickey;       /**< The path to a public key */
  	char *privatekey;      /**< The path to a private key */
  	char *passphrase;      /**< Passphrase to decrypt the private key */
  };
  
  /**
   * Keyboard-interactive based ssh authentication
   */
  struct git_credential_ssh_interactive {
  	git_credential parent; /**< The parent credential */
  	char *username;        /**< The username to authenticate as */
  
  	/**
  	 * Callback used for authentication.
  	 */
  	git_credential_ssh_interactive_cb prompt_callback;
  
  	void *payload;         /**< Payload passed to prompt_callback */
  };
  
  /**
   * A key with a custom signature function
   */
  struct git_credential_ssh_custom {
  	git_credential parent; /**< The parent credential */
  	char *username;        /**< The username to authenticate as */
  	char *publickey;       /**< The public key data */
  	size_t publickey_len;  /**< Length of the public key */
  
  	/**
  	 * Callback used to sign the data.
  	 */
  	git_credential_sign_cb sign_callback;
  
  	void *payload;         /**< Payload passed to prompt_callback */
  };
  
  GIT_END_DECL
  
  #endif
  