diff options
author | Etienne Samson <samson.etienne@gmail.com> | 2019-09-09 17:01:44 +0200 |
---|---|---|
committer | Etienne Samson <samson.etienne@gmail.com> | 2019-09-13 16:54:40 +0200 |
commit | 606f6e21a9f08f54d7354e9441f6b6a08abdda3b (patch) | |
tree | 487fb0bbe50d1a55796d32afb8aca895cb7b666f /include | |
parent | 8bf0f7eb26c65b2b937b1f40a384b9b269b0b76d (diff) | |
download | libgit2-606f6e21a9f08f54d7354e9441f6b6a08abdda3b.tar.gz |
cert: move cert enums & struct to its own header
Diffstat (limited to 'include')
-rw-r--r-- | include/git2.h | 1 | ||||
-rw-r--r-- | include/git2/cert.h | 127 | ||||
-rw-r--r-- | include/git2/proxy.h | 4 | ||||
-rw-r--r-- | include/git2/transport.h | 53 | ||||
-rw-r--r-- | include/git2/types.h | 49 |
5 files changed, 133 insertions, 101 deletions
diff --git a/include/git2.h b/include/git2.h index 82ac1d3e9..7f49f8faf 100644 --- a/include/git2.h +++ b/include/git2.h @@ -15,6 +15,7 @@ #include "git2/blame.h" #include "git2/branch.h" #include "git2/buffer.h" +#include "git2/cert.h" #include "git2/checkout.h" #include "git2/cherrypick.h" #include "git2/clone.h" diff --git a/include/git2/cert.h b/include/git2/cert.h new file mode 100644 index 000000000..61a92d4d6 --- /dev/null +++ b/include/git2/cert.h @@ -0,0 +1,127 @@ +/* + * 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_git_cert_h__ +#define INCLUDE_git_cert_h__ + +#include "common.h" + +/** + * @file git2/cert.h + * @brief Git certificate objects + * @defgroup git_cert Certificate objects + * @ingroup Git + * @{ + */ +GIT_BEGIN_DECL + +/** + * Type of host certificate structure that is passed to the check callback + */ +typedef enum git_cert_t { + /** + * No information about the certificate is available. This may + * happen when using curl. + */ + GIT_CERT_NONE, + /** + * The `data` argument to the callback will be a pointer to + * the DER-encoded data. + */ + GIT_CERT_X509, + /** + * The `data` argument to the callback will be a pointer to a + * `git_cert_hostkey` structure. + */ + GIT_CERT_HOSTKEY_LIBSSH2, + /** + * The `data` argument to the callback will be a pointer to a + * `git_strarray` with `name:content` strings containing + * information about the certificate. This is used when using + * curl. + */ + GIT_CERT_STRARRAY, +} git_cert_t; + +/** + * Parent type for `git_cert_hostkey` and `git_cert_x509`. + */ +struct git_cert { + /** + * Type of certificate. A `GIT_CERT_` value. + */ + git_cert_t cert_type; +}; + +/** + * Callback for the user's custom certificate checks. + * + * @param cert The host certificate + * @param valid Whether the libgit2 checks (OpenSSL or WinHTTP) think + * this certificate is valid + * @param host Hostname of the host libgit2 connected to + * @param payload Payload provided by the caller + * @return 0 to proceed with the connection, < 0 to fail the connection + * or > 0 to indicate that the callback refused to act and that + * the existing validity determination should be honored + */ +typedef int GIT_CALLBACK(git_transport_certificate_check_cb)(git_cert *cert, int valid, const char *host, void *payload); + +/** + * Type of SSH host fingerprint + */ +typedef enum { + /** MD5 is available */ + GIT_CERT_SSH_MD5 = (1 << 0), + /** SHA-1 is available */ + GIT_CERT_SSH_SHA1 = (1 << 1), +} git_cert_ssh_t; + +/** + * Hostkey information taken from libssh2 + */ +typedef struct { + git_cert parent; /**< The parent cert */ + + /** + * A hostkey type from libssh2, either + * `GIT_CERT_SSH_MD5` or `GIT_CERT_SSH_SHA1` + */ + git_cert_ssh_t type; + + /** + * Hostkey hash. If type has `GIT_CERT_SSH_MD5` set, this will + * have the MD5 hash of the hostkey. + */ + unsigned char hash_md5[16]; + + /** + * Hostkey hash. If type has `GIT_CERT_SSH_SHA1` set, this will + * have the SHA-1 hash of the hostkey. + */ + unsigned char hash_sha1[20]; +} git_cert_hostkey; + +/** + * X.509 certificate information + */ +typedef struct { + git_cert parent; /**< The parent cert */ + + /** + * Pointer to the X.509 certificate data + */ + void *data; + + /** + * Length of the memory block pointed to by `data`. + */ + size_t len; +} git_cert_x509; + +/** @} */ +GIT_END_DECL +#endif diff --git a/include/git2/proxy.h b/include/git2/proxy.h index 0b3b1fac1..f959ae2e2 100644 --- a/include/git2/proxy.h +++ b/include/git2/proxy.h @@ -8,6 +8,8 @@ #define INCLUDE_git_proxy_h__ #include "common.h" + +#include "cert.h" #include "cred.h" GIT_BEGIN_DECL @@ -67,7 +69,7 @@ typedef struct { * connection to proceed. Returns 0 to allow the connection * or a negative value to indicate an error. */ - git_transport_certificate_check_cb certificate_check; + git_transport_certificate_check_cb certificate_check; /** * Payload to be provided to the credentials and certificate diff --git a/include/git2/transport.h b/include/git2/transport.h index 5b42634ad..5122bc8d6 100644 --- a/include/git2/transport.h +++ b/include/git2/transport.h @@ -10,6 +10,7 @@ #include "indexer.h" #include "net.h" #include "types.h" +#include "cert.h" #include "cred.h" /** @@ -24,58 +25,6 @@ GIT_BEGIN_DECL /** Signature of a function which creates a transport */ typedef int GIT_CALLBACK(git_transport_cb)(git_transport **out, git_remote *owner, void *param); -/** - * Type of SSH host fingerprint - */ -typedef enum { - /** MD5 is available */ - GIT_CERT_SSH_MD5 = (1 << 0), - /** SHA-1 is available */ - GIT_CERT_SSH_SHA1 = (1 << 1), -} git_cert_ssh_t; - -/** - * Hostkey information taken from libssh2 - */ -typedef struct { - git_cert parent; /**< The parent cert */ - - /** - * A hostkey type from libssh2, either - * `GIT_CERT_SSH_MD5` or `GIT_CERT_SSH_SHA1` - */ - git_cert_ssh_t type; - - /** - * Hostkey hash. If type has `GIT_CERT_SSH_MD5` set, this will - * have the MD5 hash of the hostkey. - */ - unsigned char hash_md5[16]; - - /** - * Hostkey hash. If type has `GIT_CERT_SSH_SHA1` set, this will - * have the SHA-1 hash of the hostkey. - */ - unsigned char hash_sha1[20]; -} git_cert_hostkey; - -/** - * X.509 certificate information - */ -typedef struct { - git_cert parent; /**< The parent cert */ - - /** - * Pointer to the X.509 certificate data - */ - void *data; - - /** - * Length of the memory block pointed to by `data`. - */ - size_t len; -} git_cert_x509; - /** @} */ GIT_END_DECL diff --git a/include/git2/types.h b/include/git2/types.h index 9b384ca13..dab46eaf8 100644 --- a/include/git2/types.h +++ b/include/git2/types.h @@ -256,56 +256,9 @@ typedef int GIT_CALLBACK(git_transport_message_cb)(const char *str, int len, voi /** - * Type of host certificate structure that is passed to the check callback - */ -typedef enum git_cert_t { - /** - * No information about the certificate is available. This may - * happen when using curl. - */ - GIT_CERT_NONE, - /** - * The `data` argument to the callback will be a pointer to - * the DER-encoded data. - */ - GIT_CERT_X509, - /** - * The `data` argument to the callback will be a pointer to a - * `git_cert_hostkey` structure. - */ - GIT_CERT_HOSTKEY_LIBSSH2, - /** - * The `data` argument to the callback will be a pointer to a - * `git_strarray` with `name:content` strings containing - * information about the certificate. This is used when using - * curl. - */ - GIT_CERT_STRARRAY, -} git_cert_t; - -/** * Parent type for `git_cert_hostkey` and `git_cert_x509`. */ -typedef struct { - /** - * Type of certificate. A `GIT_CERT_` value. - */ - git_cert_t cert_type; -} git_cert; - -/** - * Callback for the user's custom certificate checks. - * - * @param cert The host certificate - * @param valid Whether the libgit2 checks (OpenSSL or WinHTTP) think - * this certificate is valid - * @param host Hostname of the host libgit2 connected to - * @param payload Payload provided by the caller - * @return 0 to proceed with the connection, < 0 to fail the connection - * or > 0 to indicate that the callback refused to act and that - * the existing validity determination should be honored - */ -typedef int GIT_CALLBACK(git_transport_certificate_check_cb)(git_cert *cert, int valid, const char *host, void *payload); +typedef struct git_cert git_cert; /** * Opaque structure representing a submodule. |