1 /*
2 * Copyright (C) the libgit2 contributors. All rights reserved.
3 *
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
6 */
7 module libgit2_d.cert;
8
9
10 /**
11 * @file git2/cert.h
12 * @brief Git certificate objects
13 * @defgroup git_cert Certificate objects
14 * @ingroup Git
15 * @{
16 */
17 extern (C):
18 nothrow @nogc:
19 public:
20
21 /**
22 * Type of host certificate structure that is passed to the check callback
23 */
24 enum git_cert_t
25 {
26 /**
27 * No information about the certificate is available. This may
28 * happen when using curl.
29 */
30 GIT_CERT_NONE,
31
32 /**
33 * The `data` argument to the callback will be a pointer to
34 * the DER-encoded data.
35 */
36 GIT_CERT_X509,
37
38 /**
39 * The `data` argument to the callback will be a pointer to a
40 * `git_cert_hostkey` structure.
41 */
42 GIT_CERT_HOSTKEY_LIBSSH2,
43
44 /**
45 * The `data` argument to the callback will be a pointer to a
46 * `git_strarray` with `name:content` strings containing
47 * information about the certificate. This is used when using
48 * curl.
49 */
50 GIT_CERT_STRARRAY,
51 }
52
53 //Declaration name in C language
54 enum
55 {
56 GIT_CERT_NONE = .git_cert_t.GIT_CERT_NONE,
57 GIT_CERT_X509 = .git_cert_t.GIT_CERT_X509,
58 GIT_CERT_HOSTKEY_LIBSSH2 = .git_cert_t.GIT_CERT_HOSTKEY_LIBSSH2,
59 GIT_CERT_STRARRAY = .git_cert_t.GIT_CERT_STRARRAY,
60 }
61
62 /**
63 * Parent type for `git_cert_hostkey` and `git_cert_x509`.
64 */
65 struct git_cert
66 {
67 /**
68 * Type of certificate. A `GIT_CERT_` value.
69 */
70 .git_cert_t cert_type;
71 }
72
73 /**
74 * Callback for the user's custom certificate checks.
75 *
76 * Params:
77 * cert = The host certificate
78 * valid = Whether the libgit2 checks (OpenSSL or WinHTTP) think this certificate is valid
79 * host = Hostname of the host libgit2 connected to
80 * payload = Payload provided by the caller
81 *
82 * Returns: 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
83 */
84 alias git_transport_certificate_check_cb = int function(.git_cert* cert, int valid, const (char)* host, void* payload);
85
86 /**
87 * Type of SSH host fingerprint
88 */
89 enum git_cert_ssh_t
90 {
91 /**
92 * MD5 is available
93 */
94 GIT_CERT_SSH_MD5 = 1 << 0,
95
96 /**
97 * SHA-1 is available
98 */
99 GIT_CERT_SSH_SHA1 = 1 << 1,
100
101 /**
102 * SHA-256 is available
103 */
104 GIT_CERT_SSH_SHA256 = 1 << 2,
105 }
106
107 //Declaration name in C language
108 enum
109 {
110 GIT_CERT_SSH_MD5 = .git_cert_ssh_t.GIT_CERT_SSH_MD5,
111 GIT_CERT_SSH_SHA1 = .git_cert_ssh_t.GIT_CERT_SSH_SHA1,
112 GIT_CERT_SSH_SHA256 = .git_cert_ssh_t.GIT_CERT_SSH_SHA256,
113 }
114
115 /**
116 * Hostkey information taken from libssh2
117 */
118 struct git_cert_hostkey
119 {
120 /**
121 * The parent cert
122 */
123 .git_cert parent;
124
125 /**
126 * A hostkey type from libssh2, either
127 * `git_cert_ssh_t.GIT_CERT_SSH_MD5` or `git_cert_ssh_t.GIT_CERT_SSH_SHA1`
128 */
129 .git_cert_ssh_t type = cast(.git_cert_ssh_t)(0);
130
131 /**
132 * Hostkey hash. If type has `git_cert_ssh_t.GIT_CERT_SSH_MD5` set, this will
133 * have the MD5 hash of the hostkey.
134 */
135 ubyte[16] hash_md5;
136
137 /**
138 * Hostkey hash. If type has `git_cert_ssh_t.GIT_CERT_SSH_SHA1` set, this will
139 * have the SHA-1 hash of the hostkey.
140 */
141 ubyte[20] hash_sha1;
142
143 /**
144 * Hostkey hash. If type has `GIT_CERT_SSH_SHA256` set, this will
145 * have the SHA-256 hash of the hostkey.
146 */
147 ubyte[32] hash_sha256;
148 }
149
150 /**
151 * X.509 certificate information
152 */
153 struct git_cert_x509
154 {
155 /**
156 * The parent cert
157 */
158 .git_cert parent;
159
160 /**
161 * Pointer to the X.509 certificate data
162 */
163 void* data;
164
165 /**
166 * Length of the memory block pointed to by `data`.
167 */
168 size_t len;
169 }
170
171 /** @} */