2 * Copyright (C) 2000-2012 Free Software Foundation, Inc.
4 * Author: Nikos Mavrogiannopoulos
6 * This file is part of GnuTLS.
8 * The GnuTLS is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; either version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>
23 /* This file contains the types and prototypes for all the
24 * high level functionality of the gnutls main library.
26 * If the optional C++ binding was built, it is available in
29 * The openssl compatibility layer (which is under the GNU GPL
30 * license) is in gnutls/openssl.h.
32 * The low level cipher functionality is in gnutls/crypto.h.
34 module iv
.gnutls
/*is aliced*/;
35 pragma(lib
, "gnutls");
36 pragma(lib
, "gcrypt");
39 import core
.sys
.posix
.sys
.types
: time_t
;
44 alias gnutls_params_function
= int function (gnutls_session_t
, gnutls_params_type_t
, gnutls_params_st
*);
45 alias gnutls_certificate_verify_function
= int function (gnutls_session_t
);
46 alias gnutls_db_store_func
= int function (void *, gnutls_datum_t key
, gnutls_datum_t data
);
47 alias gnutls_db_remove_func
= int function (void *, gnutls_datum_t key
);
48 alias gnutls_db_retr_func
= gnutls_datum_t
function (void *, gnutls_datum_t key
);
49 alias gnutls_handshake_post_client_hello_func
= int function (gnutls_session_t
);
50 alias gnutls_handshake_hook_func
= int function (gnutls_session_t
, uint htype
, uint post
, uint incoming
, const(gnutls_datum_t
)* msg
);
51 alias gnutls_time_func
= time_t
function (time_t
* t
);
52 alias mutex_init_func
= int function (void **mutex
);
53 alias mutex_lock_func
= int function (void **mutex
);
54 alias mutex_unlock_func
= int function (void **mutex
);
55 alias mutex_deinit_func
= int function (void **mutex
);
56 alias gnutls_alloc_function
= void * function (usize
);
57 alias gnutls_calloc_function
= void * function (usize
, usize
);
58 alias gnutls_is_secure_function
= int function (const(void)* );
59 alias gnutls_free_function
= void function (void *);
60 alias gnutls_realloc_function
= void * function (void *, usize
);
61 alias gnutls_log_func
= void function (int, const(char)* );
62 alias gnutls_audit_log_func
= void function (gnutls_session_t
, const(char)* );
63 alias gnutls_pull_func
= ssize
function (gnutls_transport_ptr_t
, void *, usize
);
64 alias gnutls_push_func
= ssize
function (gnutls_transport_ptr_t
, const(void)* , usize
);
65 alias gnutls_pull_timeout_func
= int function (gnutls_transport_ptr_t
, uint ms
);
66 alias gnutls_vec_push_func
= ssize
function (gnutls_transport_ptr_t
, const(giovec_t
)* iov
, int iovcnt
);
67 alias gnutls_errno_func
= int function (gnutls_transport_ptr_t
);
68 alias gnutls_srp_server_credentials_function
= int function (gnutls_session_t
, const(char)* username
, gnutls_datum_t
* salt
, gnutls_datum_t
* verifier
, gnutls_datum_t
* generator
, gnutls_datum_t
* prime
);
69 alias gnutls_srp_client_credentials_function
= int function (gnutls_session_t
, char **, char **);
70 alias gnutls_psk_server_credentials_function
= int function (gnutls_session_t
, const(char)* username
, gnutls_datum_t
* key
);
71 alias gnutls_psk_client_credentials_function
= int function (gnutls_session_t
, char** username
, gnutls_datum_t
* key
);
72 alias gnutls_certificate_retrieve_function
= int function (gnutls_session_t
, const(gnutls_datum_t
)* req_ca_rdn
, int nreqs
, const(gnutls_pk_algorithm_t
)* pk_algos
, int pk_algos_length
, gnutls_retr2_st
*);
73 alias gnutls_tdb_store_func
= int function (const(char)* db_name
, const(char)* host
, const(char)* service
, time_t expiration
, const(gnutls_datum_t
)* pubkey
);
74 alias gnutls_tdb_store_commitment_func
= int function (const(char)* db_name
, const(char)* host
, const(char)* service
, time_t expiration
, gnutls_digest_algorithm_t hash_algo
, const(gnutls_datum_t
)* hash
);
75 alias gnutls_tdb_verify_func
= int function (const(char)* db_name
, const(char)* host
, const(char)* service
, const(gnutls_datum_t
)* pubkey
);
76 alias gnutls_pin_callback_t
= int function (void *userdata
, int attempt
, const(char)* token_url
, const(char)* token_label
, uint flags
, char* pin
, usize pin_max
);
77 alias gnutls_ext_recv_func
= int function (gnutls_session_t session
, const(ubyte)* data
, usize len
);
78 alias gnutls_ext_send_func
= int function (gnutls_session_t session
, gnutls_buffer_t extdata
);
79 alias gnutls_ext_deinit_data_func
= void function (gnutls_ext_priv_data_t data
);
80 alias gnutls_ext_pack_func
= int function (gnutls_ext_priv_data_t data
, gnutls_buffer_t packed_data
);
81 alias gnutls_ext_unpack_func
= int function (gnutls_buffer_t packed_data
, gnutls_ext_priv_data_t
*data
);
82 alias gnutls_supp_recv_func
= int function (gnutls_session_t session
, const(ubyte)* data
, usize data_size
);
83 alias gnutls_supp_send_func
= int function (gnutls_session_t session
, gnutls_buffer_t buf
);
87 enum GNUTLS_VERSION
= "3.7.1";
89 enum GNUTLS_VERSION_MAJOR
= 3;
90 enum GNUTLS_VERSION_MINOR
= 4;
91 enum GNUTLS_VERSION_PATCH
= 10;
93 enum GNUTLS_VERSION_NUMBER
= 0x03040a;
95 enum GNUTLS_CIPHER_RIJNDAEL_128_CBC
= GNUTLS_CIPHER_AES_128_CBC
;
96 enum GNUTLS_CIPHER_RIJNDAEL_256_CBC
= GNUTLS_CIPHER_AES_256_CBC
;
97 enum GNUTLS_CIPHER_RIJNDAEL_CBC
= GNUTLS_CIPHER_AES_128_CBC
;
98 enum GNUTLS_CIPHER_ARCFOUR
= GNUTLS_CIPHER_ARCFOUR_128
;
100 /* Use the following definition globally in your program to disable
101 * implicit initialization of gnutls. */
103 #define GNUTLS_SKIP_GLOBAL_INIT int _gnutls_global_init_skip() @nogc; \
104 int _gnutls_global_init_skip(void) {return 1;}
108 * gnutls_cipher_algorithm_t:
109 * @GNUTLS_CIPHER_UNKNOWN: Value to identify an unknown/unsupported algorithm.
110 * @GNUTLS_CIPHER_NULL: The NULL (identity) encryption algorithm.
111 * @GNUTLS_CIPHER_ARCFOUR_128: ARCFOUR stream cipher with 128-bit keys.
112 * @GNUTLS_CIPHER_3DES_CBC: 3DES in CBC mode.
113 * @GNUTLS_CIPHER_AES_128_CBC: AES in CBC mode with 128-bit keys.
114 * @GNUTLS_CIPHER_AES_192_CBC: AES in CBC mode with 192-bit keys.
115 * @GNUTLS_CIPHER_AES_256_CBC: AES in CBC mode with 256-bit keys.
116 * @GNUTLS_CIPHER_ARCFOUR_40: ARCFOUR stream cipher with 40-bit keys.
117 * @GNUTLS_CIPHER_CAMELLIA_128_CBC: Camellia in CBC mode with 128-bit keys.
118 * @GNUTLS_CIPHER_CAMELLIA_192_CBC: Camellia in CBC mode with 192-bit keys.
119 * @GNUTLS_CIPHER_CAMELLIA_256_CBC: Camellia in CBC mode with 256-bit keys.
120 * @GNUTLS_CIPHER_RC2_40_CBC: RC2 in CBC mode with 40-bit keys.
121 * @GNUTLS_CIPHER_DES_CBC: DES in CBC mode (56-bit keys).
122 * @GNUTLS_CIPHER_AES_128_GCM: AES in GCM mode with 128-bit keys.
123 * @GNUTLS_CIPHER_AES_256_GCM: AES in GCM mode with 256-bit keys.
124 * @GNUTLS_CIPHER_AES_128_CCM: AES in CCM mode with 128-bit keys.
125 * @GNUTLS_CIPHER_AES_256_CCM: AES in CCM mode with 256-bit keys.
126 * @GNUTLS_CIPHER_AES_128_CCM_8: AES in CCM mode with 64-bit tag and 128-bit keys.
127 * @GNUTLS_CIPHER_AES_256_CCM_8: AES in CCM mode with 64-bit tag and 256-bit keys.
128 * @GNUTLS_CIPHER_CAMELLIA_128_GCM: CAMELLIA in GCM mode with 128-bit keys.
129 * @GNUTLS_CIPHER_CAMELLIA_256_GCM: CAMELLIA in GCM mode with 256-bit keys.
130 * @GNUTLS_CIPHER_SALSA20_256: Salsa20 with 256-bit keys.
131 * @GNUTLS_CIPHER_ESTREAM_SALSA20_256: Estream's Salsa20 variant with 256-bit keys.
132 * @GNUTLS_CIPHER_CHACHA20_POLY1305: The Chacha20 cipher with the Poly1305 authenticator (AEAD).
133 * @GNUTLS_CIPHER_IDEA_PGP_CFB: IDEA in CFB mode (placeholder - unsupported).
134 * @GNUTLS_CIPHER_3DES_PGP_CFB: 3DES in CFB mode (placeholder - unsupported).
135 * @GNUTLS_CIPHER_CAST5_PGP_CFB: CAST5 in CFB mode (placeholder - unsupported).
136 * @GNUTLS_CIPHER_BLOWFISH_PGP_CFB: Blowfish in CFB mode (placeholder - unsupported).
137 * @GNUTLS_CIPHER_SAFER_SK128_PGP_CFB: Safer-SK in CFB mode with 128-bit keys (placeholder - unsupported).
138 * @GNUTLS_CIPHER_AES128_PGP_CFB: AES in CFB mode with 128-bit keys (placeholder - unsupported).
139 * @GNUTLS_CIPHER_AES192_PGP_CFB: AES in CFB mode with 192-bit keys (placeholder - unsupported).
140 * @GNUTLS_CIPHER_AES256_PGP_CFB: AES in CFB mode with 256-bit keys (placeholder - unsupported).
141 * @GNUTLS_CIPHER_TWOFISH_PGP_CFB: Twofish in CFB mode (placeholder - unsupported).
143 * Enumeration of different symmetric encryption algorithms.
145 alias gnutls_cipher_algorithm
= gnutls_cipher_algorithm_t
;
146 alias gnutls_cipher_algorithm_t
= int;
148 GNUTLS_CIPHER_UNKNOWN
= 0,
149 GNUTLS_CIPHER_NULL
= 1,
150 GNUTLS_CIPHER_ARCFOUR_128
= 2,
151 GNUTLS_CIPHER_3DES_CBC
= 3,
152 GNUTLS_CIPHER_AES_128_CBC
= 4,
153 GNUTLS_CIPHER_AES_256_CBC
= 5,
154 GNUTLS_CIPHER_ARCFOUR_40
= 6,
155 GNUTLS_CIPHER_CAMELLIA_128_CBC
= 7,
156 GNUTLS_CIPHER_CAMELLIA_256_CBC
= 8,
157 GNUTLS_CIPHER_AES_192_CBC
= 9,
158 GNUTLS_CIPHER_AES_128_GCM
= 10,
159 GNUTLS_CIPHER_AES_256_GCM
= 11,
160 GNUTLS_CIPHER_CAMELLIA_192_CBC
= 12,
161 GNUTLS_CIPHER_SALSA20_256
= 13,
162 GNUTLS_CIPHER_ESTREAM_SALSA20_256
= 14,
163 GNUTLS_CIPHER_CAMELLIA_128_GCM
= 15,
164 GNUTLS_CIPHER_CAMELLIA_256_GCM
= 16,
165 GNUTLS_CIPHER_RC2_40_CBC
= 17,
166 GNUTLS_CIPHER_DES_CBC
= 18,
167 GNUTLS_CIPHER_AES_128_CCM
= 19,
168 GNUTLS_CIPHER_AES_256_CCM
= 20,
169 GNUTLS_CIPHER_AES_128_CCM_8
= 21,
170 GNUTLS_CIPHER_AES_256_CCM_8
= 22,
171 GNUTLS_CIPHER_CHACHA20_POLY1305
= 23,
173 /* used only for PGP internals. Ignored in TLS/SSL
175 GNUTLS_CIPHER_IDEA_PGP_CFB
= 200,
176 GNUTLS_CIPHER_3DES_PGP_CFB
= 201,
177 GNUTLS_CIPHER_CAST5_PGP_CFB
= 202,
178 GNUTLS_CIPHER_BLOWFISH_PGP_CFB
= 203,
179 GNUTLS_CIPHER_SAFER_SK128_PGP_CFB
= 204,
180 GNUTLS_CIPHER_AES128_PGP_CFB
= 205,
181 GNUTLS_CIPHER_AES192_PGP_CFB
= 206,
182 GNUTLS_CIPHER_AES256_PGP_CFB
= 207,
183 GNUTLS_CIPHER_TWOFISH_PGP_CFB
= 208
187 * gnutls_kx_algorithm_t:
188 * @GNUTLS_KX_UNKNOWN: Unknown key-exchange algorithm.
189 * @GNUTLS_KX_RSA: RSA key-exchange algorithm.
190 * @GNUTLS_KX_DHE_DSS: DHE-DSS key-exchange algorithm.
191 * @GNUTLS_KX_DHE_RSA: DHE-RSA key-exchange algorithm.
192 * @GNUTLS_KX_ECDHE_RSA: ECDHE-RSA key-exchange algorithm.
193 * @GNUTLS_KX_ECDHE_ECDSA: ECDHE-ECDSA key-exchange algorithm.
194 * @GNUTLS_KX_ANON_DH: Anon-DH key-exchange algorithm.
195 * @GNUTLS_KX_ANON_ECDH: Anon-ECDH key-exchange algorithm.
196 * @GNUTLS_KX_SRP: SRP key-exchange algorithm.
197 * @GNUTLS_KX_RSA_EXPORT: RSA-EXPORT key-exchange algorithm (defunc).
198 * @GNUTLS_KX_SRP_RSA: SRP-RSA key-exchange algorithm.
199 * @GNUTLS_KX_SRP_DSS: SRP-DSS key-exchange algorithm.
200 * @GNUTLS_KX_PSK: PSK key-exchange algorithm.
201 * @GNUTLS_KX_DHE_PSK: DHE-PSK key-exchange algorithm.
202 * @GNUTLS_KX_ECDHE_PSK: ECDHE-PSK key-exchange algorithm.
203 * @GNUTLS_KX_RSA_PSK: RSA-PSK key-exchange algorithm.
205 * Enumeration of different key exchange algorithms.
207 alias gnutls_kx_algorithm_t
= int;
209 GNUTLS_KX_UNKNOWN
= 0,
211 GNUTLS_KX_DHE_DSS
= 2,
212 GNUTLS_KX_DHE_RSA
= 3,
213 GNUTLS_KX_ANON_DH
= 4,
215 GNUTLS_KX_RSA_EXPORT
= 6,
216 GNUTLS_KX_SRP_RSA
= 7,
217 GNUTLS_KX_SRP_DSS
= 8,
219 GNUTLS_KX_DHE_PSK
= 10,
220 GNUTLS_KX_ANON_ECDH
= 11,
221 GNUTLS_KX_ECDHE_RSA
= 12,
222 GNUTLS_KX_ECDHE_ECDSA
= 13,
223 GNUTLS_KX_ECDHE_PSK
= 14,
224 GNUTLS_KX_RSA_PSK
= 15
228 * gnutls_params_type_t:
229 * @GNUTLS_PARAMS_RSA_EXPORT: Session RSA-EXPORT parameters (defunc).
230 * @GNUTLS_PARAMS_DH: Session Diffie-Hellman parameters.
231 * @GNUTLS_PARAMS_ECDH: Session Elliptic-Curve Diffie-Hellman parameters.
233 * Enumeration of different TLS session parameter types.
235 alias gnutls_params_type_t
= int;
237 GNUTLS_PARAMS_RSA_EXPORT
= 1,
238 GNUTLS_PARAMS_DH
= 2,
239 GNUTLS_PARAMS_ECDH
= 3
243 * gnutls_credentials_type_t:
244 * @GNUTLS_CRD_CERTIFICATE: Certificate credential.
245 * @GNUTLS_CRD_ANON: Anonymous credential.
246 * @GNUTLS_CRD_SRP: SRP credential.
247 * @GNUTLS_CRD_PSK: PSK credential.
248 * @GNUTLS_CRD_IA: IA credential.
250 * Enumeration of different credential types.
252 alias gnutls_credentials_type_t
= int;
254 GNUTLS_CRD_CERTIFICATE
= 1,
261 enum GNUTLS_MAC_SHA
= GNUTLS_MAC_SHA1
;
262 enum GNUTLS_DIG_SHA
= GNUTLS_DIG_SHA1
;
265 * gnutls_mac_algorithm_t:
266 * @GNUTLS_MAC_UNKNOWN: Unknown MAC algorithm.
267 * @GNUTLS_MAC_NULL: NULL MAC algorithm (empty output).
268 * @GNUTLS_MAC_MD5: HMAC-MD5 algorithm.
269 * @GNUTLS_MAC_SHA1: HMAC-SHA-1 algorithm.
270 * @GNUTLS_MAC_RMD160: HMAC-RMD160 algorithm.
271 * @GNUTLS_MAC_MD2: HMAC-MD2 algorithm.
272 * @GNUTLS_MAC_SHA256: HMAC-SHA-256 algorithm.
273 * @GNUTLS_MAC_SHA384: HMAC-SHA-384 algorithm.
274 * @GNUTLS_MAC_SHA512: HMAC-SHA-512 algorithm.
275 * @GNUTLS_MAC_SHA224: HMAC-SHA-224 algorithm.
276 * @GNUTLS_MAC_AEAD: MAC implicit through AEAD cipher.
277 * @GNUTLS_MAC_UMAC_96: The UMAC-96 MAC algorithm.
278 * @GNUTLS_MAC_UMAC_128: The UMAC-128 MAC algorithm.
280 * Enumeration of different Message Authentication Code (MAC)
283 alias gnutls_mac_algorithm_t
= int;
285 GNUTLS_MAC_UNKNOWN
= 0,
289 GNUTLS_MAC_RMD160
= 4,
291 GNUTLS_MAC_SHA256
= 6,
292 GNUTLS_MAC_SHA384
= 7,
293 GNUTLS_MAC_SHA512
= 8,
294 GNUTLS_MAC_SHA224
= 9,
295 /* If you add anything here, make sure you align with
296 gnutls_digest_algorithm_t. */
297 GNUTLS_MAC_AEAD
= 200, /* indicates that MAC is on the cipher */
298 GNUTLS_MAC_UMAC_96
= 201,
299 GNUTLS_MAC_UMAC_128
= 202
303 * gnutls_digest_algorithm_t:
304 * @GNUTLS_DIG_UNKNOWN: Unknown hash algorithm.
305 * @GNUTLS_DIG_NULL: NULL hash algorithm (empty output).
306 * @GNUTLS_DIG_MD5: MD5 algorithm.
307 * @GNUTLS_DIG_SHA1: SHA-1 algorithm.
308 * @GNUTLS_DIG_RMD160: RMD160 algorithm.
309 * @GNUTLS_DIG_MD2: MD2 algorithm.
310 * @GNUTLS_DIG_SHA256: SHA-256 algorithm.
311 * @GNUTLS_DIG_SHA384: SHA-384 algorithm.
312 * @GNUTLS_DIG_SHA512: SHA-512 algorithm.
313 * @GNUTLS_DIG_SHA224: SHA-224 algorithm.
315 * Enumeration of different digest (hash) algorithms.
317 alias gnutls_digest_algorithm_t
= int;
319 GNUTLS_DIG_UNKNOWN
= GNUTLS_MAC_UNKNOWN
,
320 GNUTLS_DIG_NULL
= GNUTLS_MAC_NULL
,
321 GNUTLS_DIG_MD5
= GNUTLS_MAC_MD5
,
322 GNUTLS_DIG_SHA1
= GNUTLS_MAC_SHA1
,
323 GNUTLS_DIG_RMD160
= GNUTLS_MAC_RMD160
,
324 GNUTLS_DIG_MD2
= GNUTLS_MAC_MD2
,
325 GNUTLS_DIG_SHA256
= GNUTLS_MAC_SHA256
,
326 GNUTLS_DIG_SHA384
= GNUTLS_MAC_SHA384
,
327 GNUTLS_DIG_SHA512
= GNUTLS_MAC_SHA512
,
328 GNUTLS_DIG_SHA224
= GNUTLS_MAC_SHA224
329 /* If you add anything here, make sure you align with
330 gnutls_mac_algorithm_t. */
333 /* exported for other gnutls headers. This is the maximum number of
334 * algorithms (ciphers, kx or macs).
336 enum GNUTLS_MAX_ALGORITHM_NUM
= 32;
337 enum GNUTLS_MAX_SESSION_ID_SIZE
= 32;
341 * gnutls_compression_method_t:
342 * @GNUTLS_COMP_UNKNOWN: Unknown compression method.
343 * @GNUTLS_COMP_NULL: The NULL compression method (no compression).
344 * @GNUTLS_COMP_DEFLATE: The DEFLATE compression method from zlib.
345 * @GNUTLS_COMP_ZLIB: Same as %GNUTLS_COMP_DEFLATE.
347 * Enumeration of different TLS compression methods.
349 alias gnutls_compression_method_t
= int;
351 GNUTLS_COMP_UNKNOWN
= 0,
352 GNUTLS_COMP_NULL
= 1,
353 GNUTLS_COMP_DEFLATE
= 2,
354 GNUTLS_COMP_ZLIB
= GNUTLS_COMP_DEFLATE
358 * Flags for gnutls_init()
360 * @GNUTLS_SERVER: Connection end is a server.
361 * @GNUTLS_CLIENT: Connection end is a client.
362 * @GNUTLS_DATAGRAM: Connection is datagram oriented (DTLS).
363 * @GNUTLS_NONBLOCK: Connection should not block.
364 * @GNUTLS_NO_SIGNAL: In systems where SIGPIPE is delivered on send, it will be disabled. That flag has effect in systems which support the MSG_NOSIGNAL sockets flag.
365 * @GNUTLS_NO_EXTENSIONS: Do not enable any TLS extensions by default.
366 * @GNUTLS_NO_REPLAY_PROTECTION: Disable any replay protection in DTLS.
369 enum GNUTLS_SERVER
= 1;
370 enum GNUTLS_CLIENT
= (1<<1);
371 enum GNUTLS_DATAGRAM
= (1<<2);
372 enum GNUTLS_NONBLOCK
= (1<<3);
373 enum GNUTLS_NO_EXTENSIONS
= (1<<4);
374 enum GNUTLS_NO_REPLAY_PROTECTION
= (1<<5);
375 enum GNUTLS_NO_SIGNAL
= (1<<6);
377 enum GNUTLS_FORCE_CLIENT_CERT
= (1<<9);
379 GNUTLS_ALLOW_ID_CHANGE = (1<<7),
380 GNUTLS_ENABLE_FALSE_START = (1<<8),
381 GNUTLS_FORCE_CLIENT_CERT = (1<<9),
382 GNUTLS_NO_TICKETS = (1<<10),
383 GNUTLS_KEY_SHARE_TOP = (1<<11),
384 GNUTLS_KEY_SHARE_TOP2 = (1<<12),
385 GNUTLS_KEY_SHARE_TOP3 = (1<<13),
386 GNUTLS_POST_HANDSHAKE_AUTH = (1<<14),
387 GNUTLS_NO_AUTO_REKEY = (1<<15),
388 GNUTLS_SAFE_PADDING_CHECK = (1<<16),
389 GNUTLS_ENABLE_EARLY_START = (1<<17),
390 GNUTLS_ENABLE_RAWPK = (1<<18),
391 GNUTLS_AUTO_REAUTH = (1<<19),
392 GNUTLS_ENABLE_EARLY_DATA = (1<<20),
393 GNUTLS_NO_AUTO_SEND_TICKET = (1<<21)
396 * gnutls_alert_level_t:
397 * @GNUTLS_AL_WARNING: Alert of warning severity.
398 * @GNUTLS_AL_FATAL: Alert of fatal severity.
400 * Enumeration of different TLS alert severities.
402 alias gnutls_alert_level_t
= int;
404 GNUTLS_AL_WARNING
= 1,
409 * gnutls_alert_description_t:
410 * @GNUTLS_A_CLOSE_NOTIFY: Close notify.
411 * @GNUTLS_A_UNEXPECTED_MESSAGE: Unexpected message.
412 * @GNUTLS_A_BAD_RECORD_MAC: Bad record MAC.
413 * @GNUTLS_A_DECRYPTION_FAILED: Decryption failed.
414 * @GNUTLS_A_RECORD_OVERFLOW: Record overflow.
415 * @GNUTLS_A_DECOMPRESSION_FAILURE: Decompression failed.
416 * @GNUTLS_A_HANDSHAKE_FAILURE: Handshake failed.
417 * @GNUTLS_A_SSL3_NO_CERTIFICATE: No certificate.
418 * @GNUTLS_A_BAD_CERTIFICATE: Certificate is bad.
419 * @GNUTLS_A_UNSUPPORTED_CERTIFICATE: Certificate is not supported.
420 * @GNUTLS_A_CERTIFICATE_REVOKED: Certificate was revoked.
421 * @GNUTLS_A_CERTIFICATE_EXPIRED: Certificate is expired.
422 * @GNUTLS_A_CERTIFICATE_UNKNOWN: Unknown certificate.
423 * @GNUTLS_A_ILLEGAL_PARAMETER: Illegal parameter.
424 * @GNUTLS_A_UNKNOWN_CA: CA is unknown.
425 * @GNUTLS_A_ACCESS_DENIED: Access was denied.
426 * @GNUTLS_A_DECODE_ERROR: Decode error.
427 * @GNUTLS_A_DECRYPT_ERROR: Decrypt error.
428 * @GNUTLS_A_EXPORT_RESTRICTION: Export restriction.
429 * @GNUTLS_A_PROTOCOL_VERSION: Error in protocol version.
430 * @GNUTLS_A_INSUFFICIENT_SECURITY: Insufficient security.
431 * @GNUTLS_A_USER_CANCELED: User canceled.
432 * @GNUTLS_A_INTERNAL_ERROR: Internal error.
433 * @GNUTLS_A_INAPPROPRIATE_FALLBACK: Inappropriate fallback,
434 * @GNUTLS_A_NO_RENEGOTIATION: No renegotiation is allowed.
435 * @GNUTLS_A_CERTIFICATE_UNOBTAINABLE: Could not retrieve the
436 * specified certificate.
437 * @GNUTLS_A_UNSUPPORTED_EXTENSION: An unsupported extension was
439 * @GNUTLS_A_UNRECOGNIZED_NAME: The server name sent was not
441 * @GNUTLS_A_UNKNOWN_PSK_IDENTITY: The SRP/PSK username is missing
443 * @GNUTLS_A_NO_APPLICATION_PROTOCOL: The ALPN protocol requested is
444 * not supported by the peer.
446 * Enumeration of different TLS alerts.
448 alias gnutls_alert_description_t
= int;
450 GNUTLS_A_CLOSE_NOTIFY
,
451 GNUTLS_A_UNEXPECTED_MESSAGE
= 10,
452 GNUTLS_A_BAD_RECORD_MAC
= 20,
453 GNUTLS_A_DECRYPTION_FAILED
,
454 GNUTLS_A_RECORD_OVERFLOW
,
455 GNUTLS_A_DECOMPRESSION_FAILURE
= 30,
456 GNUTLS_A_HANDSHAKE_FAILURE
= 40,
457 GNUTLS_A_SSL3_NO_CERTIFICATE
= 41,
458 GNUTLS_A_BAD_CERTIFICATE
= 42,
459 GNUTLS_A_UNSUPPORTED_CERTIFICATE
,
460 GNUTLS_A_CERTIFICATE_REVOKED
,
461 GNUTLS_A_CERTIFICATE_EXPIRED
,
462 GNUTLS_A_CERTIFICATE_UNKNOWN
,
463 GNUTLS_A_ILLEGAL_PARAMETER
,
465 GNUTLS_A_ACCESS_DENIED
,
466 GNUTLS_A_DECODE_ERROR
= 50,
467 GNUTLS_A_DECRYPT_ERROR
,
468 GNUTLS_A_EXPORT_RESTRICTION
= 60,
469 GNUTLS_A_PROTOCOL_VERSION
= 70,
470 GNUTLS_A_INSUFFICIENT_SECURITY
,
471 GNUTLS_A_INTERNAL_ERROR
= 80,
472 GNUTLS_A_INAPPROPRIATE_FALLBACK
= 86,
473 GNUTLS_A_USER_CANCELED
= 90,
474 GNUTLS_A_NO_RENEGOTIATION
= 100,
475 GNUTLS_A_UNSUPPORTED_EXTENSION
= 110,
476 GNUTLS_A_CERTIFICATE_UNOBTAINABLE
= 111,
477 GNUTLS_A_UNRECOGNIZED_NAME
= 112,
478 GNUTLS_A_UNKNOWN_PSK_IDENTITY
= 115,
479 GNUTLS_A_NO_APPLICATION_PROTOCOL
= 120
483 * gnutls_handshake_description_t:
484 * @GNUTLS_HANDSHAKE_HELLO_REQUEST: Hello request.
485 * @GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST: DTLS Hello verify request.
486 * @GNUTLS_HANDSHAKE_CLIENT_HELLO: Client hello.
487 * @GNUTLS_HANDSHAKE_SERVER_HELLO: Server hello.
488 * @GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: New session ticket.
489 * @GNUTLS_HANDSHAKE_CERTIFICATE_PKT: Certificate packet.
490 * @GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: Server key exchange.
491 * @GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: Certificate request.
492 * @GNUTLS_HANDSHAKE_SERVER_HELLO_DONE: Server hello done.
493 * @GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY: Certificate verify.
494 * @GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE: Client key exchange.
495 * @GNUTLS_HANDSHAKE_FINISHED: Finished.
496 * @GNUTLS_HANDSHAKE_CERTIFICATE_STATUS: Certificate status (OCSP).
497 * @GNUTLS_HANDSHAKE_SUPPLEMENTAL: Supplemental.
498 * @GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC: Change Cipher Spec.
499 * @GNUTLS_HANDSHAKE_CLIENT_HELLO_V2: SSLv2 Client Hello.
501 * Enumeration of different TLS handshake packets.
503 alias gnutls_handshake_description_t
= int;
505 GNUTLS_HANDSHAKE_HELLO_REQUEST
= 0,
506 GNUTLS_HANDSHAKE_CLIENT_HELLO
= 1,
507 GNUTLS_HANDSHAKE_SERVER_HELLO
= 2,
508 GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST
= 3,
509 GNUTLS_HANDSHAKE_NEW_SESSION_TICKET
= 4,
510 GNUTLS_HANDSHAKE_CERTIFICATE_PKT
= 11,
511 GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE
= 12,
512 GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST
= 13,
513 GNUTLS_HANDSHAKE_SERVER_HELLO_DONE
= 14,
514 GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY
= 15,
515 GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE
= 16,
516 GNUTLS_HANDSHAKE_FINISHED
= 20,
517 GNUTLS_HANDSHAKE_CERTIFICATE_STATUS
= 22,
518 GNUTLS_HANDSHAKE_SUPPLEMENTAL
= 23,
519 GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC
= 254,
520 GNUTLS_HANDSHAKE_CLIENT_HELLO_V2
= 1024
523 enum GNUTLS_HANDSHAKE_ANY
= (cast(uint)-1);
526 *gnutls_handshake_description_get_name(gnutls_handshake_description_t
530 * gnutls_certificate_status_t:
531 * @GNUTLS_CERT_INVALID: The certificate is not signed by one of the
532 * known authorities or the signature is invalid (deprecated by the flags
533 * %GNUTLS_CERT_SIGNATURE_FAILURE and %GNUTLS_CERT_SIGNER_NOT_FOUND).
534 * @GNUTLS_CERT_SIGNATURE_FAILURE: The signature verification failed.
535 * @GNUTLS_CERT_REVOKED: Certificate is revoked by its authority. In X.509 this will be
536 * set only if CRLs are checked.
537 * @GNUTLS_CERT_SIGNER_NOT_FOUND: The certificate's issuer is not known.
538 * This is the case if the issuer is not included in the trusted certificate list.
539 * @GNUTLS_CERT_SIGNER_NOT_CA: The certificate's signer was not a CA. This
540 * may happen if this was a version 1 certificate, which is common with
541 * some CAs, or a version 3 certificate without the basic constrains extension.
542 * @GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE: The certificate's signer constraints were
544 * @GNUTLS_CERT_INSECURE_ALGORITHM: The certificate was signed using an insecure
545 * algorithm such as MD2 or MD5. These algorithms have been broken and
546 * should not be trusted.
547 * @GNUTLS_CERT_NOT_ACTIVATED: The certificate is not yet activated.
548 * @GNUTLS_CERT_EXPIRED: The certificate has expired.
549 * @GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED: The revocation data are old and have been superseded.
550 * @GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE: The revocation data have a future issue date.
551 * @GNUTLS_CERT_UNEXPECTED_OWNER: The owner is not the expected one.
552 * @GNUTLS_CERT_MISMATCH: The certificate presented isn't the expected one (TOFU)
553 * @GNUTLS_CERT_PURPOSE_MISMATCH: The certificate or an intermediate does not match the intended purpose (extended key usage).
555 * Enumeration of certificate status codes. Note that the status
556 * bits may have different meanings in OpenPGP keys and X.509
557 * certificate verification.
559 alias gnutls_certificate_status_t
= int;
561 GNUTLS_CERT_INVALID
= 1 << 1,
562 GNUTLS_CERT_REVOKED
= 1 << 5,
563 GNUTLS_CERT_SIGNER_NOT_FOUND
= 1 << 6,
564 GNUTLS_CERT_SIGNER_NOT_CA
= 1 << 7,
565 GNUTLS_CERT_INSECURE_ALGORITHM
= 1 << 8,
566 GNUTLS_CERT_NOT_ACTIVATED
= 1 << 9,
567 GNUTLS_CERT_EXPIRED
= 1 << 10,
568 GNUTLS_CERT_SIGNATURE_FAILURE
= 1 << 11,
569 GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED
= 1 << 12,
570 GNUTLS_CERT_UNEXPECTED_OWNER
= 1 << 14,
571 GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE
= 1 << 15,
572 GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE
= 1 << 16,
573 GNUTLS_CERT_MISMATCH
= 1 << 17,
574 GNUTLS_CERT_PURPOSE_MISMATCH
= 1 << 18
578 * gnutls_certificate_request_t:
579 * @GNUTLS_CERT_IGNORE: Ignore certificate.
580 * @GNUTLS_CERT_REQUEST: Request certificate.
581 * @GNUTLS_CERT_REQUIRE: Require certificate.
583 * Enumeration of certificate request types.
585 alias gnutls_certificate_request_t
= int;
587 GNUTLS_CERT_IGNORE
= 0,
588 GNUTLS_CERT_REQUEST
= 1,
589 GNUTLS_CERT_REQUIRE
= 2
593 * gnutls_openpgp_crt_status_t:
594 * @GNUTLS_OPENPGP_CERT: Send entire certificate.
595 * @GNUTLS_OPENPGP_CERT_FINGERPRINT: Send only certificate fingerprint.
597 * Enumeration of ways to send OpenPGP certificate.
599 alias gnutls_openpgp_crt_status_t
= int;
601 GNUTLS_OPENPGP_CERT
= 0,
602 GNUTLS_OPENPGP_CERT_FINGERPRINT
= 1
606 * gnutls_close_request_t:
607 * @GNUTLS_SHUT_RDWR: Disallow further receives/sends.
608 * @GNUTLS_SHUT_WR: Disallow further sends.
610 * Enumeration of how TLS session should be terminated. See gnutls_bye().
612 alias gnutls_close_request_t
= int;
614 GNUTLS_SHUT_RDWR
= 0,
620 * @GNUTLS_SSL3: SSL version 3.0.
621 * @GNUTLS_TLS1_0: TLS version 1.0.
622 * @GNUTLS_TLS1: Same as %GNUTLS_TLS1_0.
623 * @GNUTLS_TLS1_1: TLS version 1.1.
624 * @GNUTLS_TLS1_2: TLS version 1.2.
625 * @GNUTLS_DTLS1_0: DTLS version 1.0.
626 * @GNUTLS_DTLS1_2: DTLS version 1.2.
627 * @GNUTLS_DTLS0_9: DTLS version 0.9 (Cisco AnyConnect / OpenSSL 0.9.8e).
628 * @GNUTLS_VERSION_MAX: Maps to the highest supported TLS version.
629 * @GNUTLS_VERSION_UNKNOWN: Unknown SSL/TLS version.
631 * Enumeration of different SSL/TLS protocol versions.
633 alias gnutls_protocol_t
= int;
637 GNUTLS_TLS1
= GNUTLS_TLS1_0
,
641 GNUTLS_DTLS0_9
= 200,
642 GNUTLS_DTLS1_0
= 201, /* 201 */
643 GNUTLS_DTLS1_2
= 202,
644 GNUTLS_DTLS_VERSION_MIN
= GNUTLS_DTLS0_9
,
645 GNUTLS_DTLS_VERSION_MAX
= GNUTLS_DTLS1_2
,
646 GNUTLS_TLS_VERSION_MAX
= GNUTLS_TLS1_2
,
647 GNUTLS_VERSION_UNKNOWN
= 0xff /* change it to 0xffff */
651 * gnutls_certificate_type_t:
652 * @GNUTLS_CRT_UNKNOWN: Unknown certificate type.
653 * @GNUTLS_CRT_X509: X.509 Certificate.
654 * @GNUTLS_CRT_OPENPGP: OpenPGP certificate.
655 * @GNUTLS_CRT_RAW: Raw public key (SubjectPublicKey)
657 * Enumeration of different certificate types.
659 alias gnutls_certificate_type_t
= int;
661 GNUTLS_CRT_UNKNOWN
= 0,
663 GNUTLS_CRT_OPENPGP
= 2,
668 * gnutls_x509_crt_fmt_t:
669 * @GNUTLS_X509_FMT_DER: X.509 certificate in DER format (binary).
670 * @GNUTLS_X509_FMT_PEM: X.509 certificate in PEM format (text).
672 * Enumeration of different certificate encoding formats.
674 alias gnutls_x509_crt_fmt_t
= int;
676 GNUTLS_X509_FMT_DER
= 0,
677 GNUTLS_X509_FMT_PEM
= 1
681 * gnutls_certificate_print_formats_t:
682 * @GNUTLS_CRT_PRINT_FULL: Full information about certificate.
683 * @GNUTLS_CRT_PRINT_FULL_NUMBERS: Full information about certificate and include easy to parse public key parameters.
684 * @GNUTLS_CRT_PRINT_COMPACT: Information about certificate name in one line, plus identification of the public key.
685 * @GNUTLS_CRT_PRINT_ONELINE: Information about certificate in one line.
686 * @GNUTLS_CRT_PRINT_UNSIGNED_FULL: All info for an unsigned certificate.
688 * Enumeration of different certificate printing variants.
690 alias gnutls_certificate_print_formats
= gnutls_certificate_print_formats_t
;
691 alias gnutls_certificate_print_formats_t
= int;
693 GNUTLS_CRT_PRINT_FULL
= 0,
694 GNUTLS_CRT_PRINT_ONELINE
= 1,
695 GNUTLS_CRT_PRINT_UNSIGNED_FULL
= 2,
696 GNUTLS_CRT_PRINT_COMPACT
= 3,
697 GNUTLS_CRT_PRINT_FULL_NUMBERS
= 4
700 enum GNUTLS_PK_ECC
= GNUTLS_PK_EC
;
702 * gnutls_pk_algorithm_t:
703 * @GNUTLS_PK_UNKNOWN: Unknown public-key algorithm.
704 * @GNUTLS_PK_RSA: RSA public-key algorithm.
705 * @GNUTLS_PK_DSA: DSA public-key algorithm.
706 * @GNUTLS_PK_DH: Diffie-Hellman algorithm. Used to generate parameters.
707 * @GNUTLS_PK_EC: Elliptic curve algorithm. Used to generate parameters.
709 * Enumeration of different public-key algorithms.
711 alias gnutls_pk_algorithm_t
= int;
713 GNUTLS_PK_UNKNOWN
= 0,
720 const(char)* gnutls_pk_algorithm_get_name(gnutls_pk_algorithm_t algorithm
) @nogc;
723 * gnutls_sign_algorithm_t:
724 * @GNUTLS_SIGN_UNKNOWN: Unknown signature algorithm.
725 * @GNUTLS_SIGN_RSA_SHA1: Digital signature algorithm RSA with SHA-1
726 * @GNUTLS_SIGN_RSA_SHA: Same as %GNUTLS_SIGN_RSA_SHA1.
727 * @GNUTLS_SIGN_DSA_SHA1: Digital signature algorithm DSA with SHA-1
728 * @GNUTLS_SIGN_DSA_SHA224: Digital signature algorithm DSA with SHA-224
729 * @GNUTLS_SIGN_DSA_SHA256: Digital signature algorithm DSA with SHA-256
730 * @GNUTLS_SIGN_DSA_SHA384: Digital signature algorithm DSA with SHA-384
731 * @GNUTLS_SIGN_DSA_SHA512: Digital signature algorithm DSA with SHA-512
732 * @GNUTLS_SIGN_DSA_SHA: Same as %GNUTLS_SIGN_DSA_SHA1.
733 * @GNUTLS_SIGN_RSA_MD5: Digital signature algorithm RSA with MD5.
734 * @GNUTLS_SIGN_RSA_MD2: Digital signature algorithm RSA with MD2.
735 * @GNUTLS_SIGN_RSA_RMD160: Digital signature algorithm RSA with RMD-160.
736 * @GNUTLS_SIGN_RSA_SHA256: Digital signature algorithm RSA with SHA-256.
737 * @GNUTLS_SIGN_RSA_SHA384: Digital signature algorithm RSA with SHA-384.
738 * @GNUTLS_SIGN_RSA_SHA512: Digital signature algorithm RSA with SHA-512.
739 * @GNUTLS_SIGN_RSA_SHA224: Digital signature algorithm RSA with SHA-224.
740 * @GNUTLS_SIGN_ECDSA_SHA1: ECDSA with SHA1.
741 * @GNUTLS_SIGN_ECDSA_SHA256: Digital signature algorithm ECDSA with SHA-256.
742 * @GNUTLS_SIGN_ECDSA_SHA384: Digital signature algorithm ECDSA with SHA-384.
743 * @GNUTLS_SIGN_ECDSA_SHA512: Digital signature algorithm ECDSA with SHA-512.
744 * @GNUTLS_SIGN_ECDSA_SHA224: Digital signature algorithm ECDSA with SHA-224.
746 * Enumeration of different digital signature algorithms.
748 alias gnutls_sign_algorithm_t
= int;
750 GNUTLS_SIGN_UNKNOWN
= 0,
751 GNUTLS_SIGN_RSA_SHA1
= 1,
752 GNUTLS_SIGN_RSA_SHA
= GNUTLS_SIGN_RSA_SHA1
,
753 GNUTLS_SIGN_DSA_SHA1
= 2,
754 GNUTLS_SIGN_DSA_SHA
= GNUTLS_SIGN_DSA_SHA1
,
755 GNUTLS_SIGN_RSA_MD5
= 3,
756 GNUTLS_SIGN_RSA_MD2
= 4,
757 GNUTLS_SIGN_RSA_RMD160
= 5,
758 GNUTLS_SIGN_RSA_SHA256
= 6,
759 GNUTLS_SIGN_RSA_SHA384
= 7,
760 GNUTLS_SIGN_RSA_SHA512
= 8,
761 GNUTLS_SIGN_RSA_SHA224
= 9,
762 GNUTLS_SIGN_DSA_SHA224
= 10,
763 GNUTLS_SIGN_DSA_SHA256
= 11,
764 GNUTLS_SIGN_ECDSA_SHA1
= 12,
765 GNUTLS_SIGN_ECDSA_SHA224
= 13,
766 GNUTLS_SIGN_ECDSA_SHA256
= 14,
767 GNUTLS_SIGN_ECDSA_SHA384
= 15,
768 GNUTLS_SIGN_ECDSA_SHA512
= 16,
769 GNUTLS_SIGN_DSA_SHA384
= 17,
770 GNUTLS_SIGN_DSA_SHA512
= 18
774 * gnutls_ecc_curve_t:
775 * @GNUTLS_ECC_CURVE_INVALID: Cannot be known
776 * @GNUTLS_ECC_CURVE_SECP192R1: the SECP192R1 curve
777 * @GNUTLS_ECC_CURVE_SECP224R1: the SECP224R1 curve
778 * @GNUTLS_ECC_CURVE_SECP256R1: the SECP256R1 curve
779 * @GNUTLS_ECC_CURVE_SECP384R1: the SECP384R1 curve
780 * @GNUTLS_ECC_CURVE_SECP521R1: the SECP521R1 curve
782 * Enumeration of ECC curves.
784 alias gnutls_ecc_curve_t
= int;
786 GNUTLS_ECC_CURVE_INVALID
= 0,
787 GNUTLS_ECC_CURVE_SECP224R1
,
788 GNUTLS_ECC_CURVE_SECP256R1
,
789 GNUTLS_ECC_CURVE_SECP384R1
,
790 GNUTLS_ECC_CURVE_SECP521R1
,
791 GNUTLS_ECC_CURVE_SECP192R1
794 /* macros to allow specifying a specific curve in gnutls_privkey_generate()
795 * and gnutls_x509_privkey_generate() */
796 uint GNUTLS_CURVE_TO_BITS() (uint curve
) { return cast(uint)((1U<<31)|
(cast(uint)(curve
))); }
797 uint GNUTLS_BITS_TO_CURVE() (uint bits
) { return ((cast(uint)(bits
)) & 0x7FFFFFFFU
); }
798 uint GNUTLS_BITS_ARE_CURVE() (uint bits
) { return ((cast(uint)(bits
)) & 0x80000000U
); }
801 * gnutls_sec_param_t:
802 * @GNUTLS_SEC_PARAM_UNKNOWN: Cannot be known
803 * @GNUTLS_SEC_PARAM_INSECURE: Less than 42 bits of security
804 * @GNUTLS_SEC_PARAM_EXPORT: 42 bits of security
805 * @GNUTLS_SEC_PARAM_VERY_WEAK: 64 bits of security
806 * @GNUTLS_SEC_PARAM_WEAK: 72 bits of security
807 * @GNUTLS_SEC_PARAM_LOW: 80 bits of security
808 * @GNUTLS_SEC_PARAM_LEGACY: 96 bits of security
809 * @GNUTLS_SEC_PARAM_MEDIUM: 112 bits of security (used to be %GNUTLS_SEC_PARAM_NORMAL)
810 * @GNUTLS_SEC_PARAM_HIGH: 128 bits of security
811 * @GNUTLS_SEC_PARAM_ULTRA: 192 bits of security
812 * @GNUTLS_SEC_PARAM_FUTURE: 256 bits of security
814 * Enumeration of security parameters for passive attacks.
816 alias gnutls_sec_param_t
= int;
818 GNUTLS_SEC_PARAM_UNKNOWN
= 0,
819 GNUTLS_SEC_PARAM_INSECURE
= 5,
820 GNUTLS_SEC_PARAM_EXPORT
= 10,
821 GNUTLS_SEC_PARAM_VERY_WEAK
= 15,
822 GNUTLS_SEC_PARAM_WEAK
= 20,
823 GNUTLS_SEC_PARAM_LOW
= 25,
824 GNUTLS_SEC_PARAM_LEGACY
= 30,
825 GNUTLS_SEC_PARAM_MEDIUM
= 35,
826 GNUTLS_SEC_PARAM_HIGH
= 40,
827 GNUTLS_SEC_PARAM_ULTRA
= 45,
828 GNUTLS_SEC_PARAM_FUTURE
= 50
832 enum GNUTLS_SEC_PARAM_NORMAL
= GNUTLS_SEC_PARAM_MEDIUM
;
835 * gnutls_channel_binding_t:
836 * @GNUTLS_CB_TLS_UNIQUE: "tls-unique" (RFC 5929) channel binding
838 * Enumeration of support channel binding types.
840 alias gnutls_channel_binding_t
= int;
846 /* If you want to change this, then also change the define in
847 * gnutls_int.h, and recompile.
849 struct gnutls_transport_ptr_t_s
{}
850 alias gnutls_transport_ptr_t
= gnutls_transport_ptr_t_s
*;
852 struct gnutls_session_int
{}
853 alias gnutls_session_t
= gnutls_session_int
*;
855 struct gnutls_dh_params_int
{}
856 alias gnutls_dh_params_t
= gnutls_dh_params_int
*;
859 struct gnutls_x509_privkey_int
{}
860 alias gnutls_rsa_params_t
= gnutls_x509_privkey_int
*;
862 struct gnutls_priority_st
{}
863 alias gnutls_priority_t
= gnutls_priority_st
*;
865 struct gnutls_datum_t
{
871 union gnutls_params_st_params_union
{
872 gnutls_dh_params_t dh
;
873 gnutls_rsa_params_t rsa_export
;
876 struct gnutls_params_st
{
877 gnutls_params_type_t type
;
878 gnutls_params_st_params_union params
;
882 //alias gnutls_params_function = int function (gnutls_session_t, gnutls_params_type_t, gnutls_params_st *) @nogc;
884 /* internal functions */
886 int gnutls_init(gnutls_session_t
* session
, uint flags
) @nogc;
887 void gnutls_deinit(gnutls_session_t session
) @nogc;
888 //#define _gnutls_deinit(x) gnutls_deinit(x)
890 int gnutls_bye(gnutls_session_t session
, gnutls_close_request_t how
) @nogc;
892 int gnutls_handshake(gnutls_session_t session
) @nogc;
894 enum GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT
= (cast(uint)-1);
895 void gnutls_handshake_set_timeout(gnutls_session_t session
,
897 int gnutls_rehandshake(gnutls_session_t session
) @nogc;
899 gnutls_alert_description_t
gnutls_alert_get(gnutls_session_t session
) @nogc;
900 int gnutls_alert_send(gnutls_session_t session
,
901 gnutls_alert_level_t level
,
902 gnutls_alert_description_t desc
) @nogc;
903 int gnutls_alert_send_appropriate(gnutls_session_t session
, int err
) @nogc;
904 const(char)* gnutls_alert_get_name(gnutls_alert_description_t alert
) @nogc;
905 const(char)* gnutls_alert_get_strname(gnutls_alert_description_t alert
) @nogc;
907 gnutls_sec_param_t
gnutls_pk_bits_to_sec_param(gnutls_pk_algorithm_t algo
,
909 const(char)* gnutls_sec_param_get_name(gnutls_sec_param_t param
) @nogc;
910 uint gnutls_sec_param_to_pk_bits(gnutls_pk_algorithm_t algo
,
911 gnutls_sec_param_t param
) @nogc;
913 gnutls_sec_param_to_symmetric_bits(gnutls_sec_param_t param
) @nogc;
915 /* Elliptic curves */
916 const(char)* gnutls_ecc_curve_get_name(gnutls_ecc_curve_t curve
) @nogc;
917 const(char)* gnutls_ecc_curve_get_oid(gnutls_ecc_curve_t curve
) @nogc;
919 int gnutls_ecc_curve_get_size(gnutls_ecc_curve_t curve
) @nogc;
920 gnutls_ecc_curve_t
gnutls_ecc_curve_get(gnutls_session_t session
) @nogc;
922 /* get information on the current session */
923 gnutls_cipher_algorithm_t
gnutls_cipher_get(gnutls_session_t session
) @nogc;
924 gnutls_kx_algorithm_t
gnutls_kx_get(gnutls_session_t session
) @nogc;
925 gnutls_mac_algorithm_t
gnutls_mac_get(gnutls_session_t session
) @nogc;
926 gnutls_compression_method_t
927 gnutls_compression_get(gnutls_session_t session
) @nogc;
928 gnutls_certificate_type_t
929 gnutls_certificate_type_get(gnutls_session_t session
) @nogc;
931 int gnutls_sign_algorithm_get(gnutls_session_t session
) @nogc;
932 int gnutls_sign_algorithm_get_client(gnutls_session_t session
) @nogc;
934 int gnutls_sign_algorithm_get_requested(gnutls_session_t session
,
936 gnutls_sign_algorithm_t
* algo
) @nogc;
938 /* the name of the specified algorithms */
939 const(char)* gnutls_cipher_get_name(gnutls_cipher_algorithm_t algorithm
) @nogc;
940 const(char)* gnutls_mac_get_name(gnutls_mac_algorithm_t algorithm
) @nogc;
942 const(char)* gnutls_digest_get_name(gnutls_digest_algorithm_t algorithm
) @nogc;
943 const(char)* gnutls_digest_get_oid(gnutls_digest_algorithm_t algorithm
) @nogc;
945 const(char)* gnutls_compression_get_name(gnutls_compression_method_t
947 const(char)* gnutls_kx_get_name(gnutls_kx_algorithm_t algorithm
) @nogc;
948 const(char)* gnutls_certificate_type_get_name(gnutls_certificate_type_t
950 const(char)* gnutls_pk_get_name(gnutls_pk_algorithm_t algorithm
) @nogc;
951 const(char)* gnutls_pk_get_oid(gnutls_pk_algorithm_t algorithm
) @nogc;
953 const(char)* gnutls_sign_get_name(gnutls_sign_algorithm_t algorithm
) @nogc;
954 const(char)* gnutls_sign_get_oid(gnutls_sign_algorithm_t algorithm
) @nogc;
956 usize
gnutls_cipher_get_key_size(gnutls_cipher_algorithm_t algorithm
) @nogc;
957 usize
gnutls_mac_get_key_size(gnutls_mac_algorithm_t algorithm
) @nogc;
959 int gnutls_sign_is_secure(gnutls_sign_algorithm_t algorithm
) @nogc;
960 gnutls_digest_algorithm_t
961 gnutls_sign_get_hash_algorithm(gnutls_sign_algorithm_t sign
) @nogc;
962 gnutls_pk_algorithm_t
963 gnutls_sign_get_pk_algorithm(gnutls_sign_algorithm_t sign
) @nogc;
964 gnutls_sign_algorithm_t
965 gnutls_pk_to_sign(gnutls_pk_algorithm_t pk
,
966 gnutls_digest_algorithm_t hash
) @nogc;
968 //#define gnutls_sign_algorithm_get_name gnutls_sign_get_name
969 alias gnutls_sign_algorithm_get_name
= gnutls_sign_get_name
;
971 gnutls_mac_algorithm_t
gnutls_mac_get_id(const(char)* name
) @nogc;
972 gnutls_digest_algorithm_t
gnutls_digest_get_id(const(char)* name
) @nogc;
974 gnutls_compression_method_t
gnutls_compression_get_id(const(char)* name
) @nogc;
975 gnutls_cipher_algorithm_t
gnutls_cipher_get_id(const(char)* name
) @nogc;
976 gnutls_kx_algorithm_t
gnutls_kx_get_id(const(char)* name
) @nogc;
977 gnutls_protocol_t
gnutls_protocol_get_id(const(char)* name
) @nogc;
978 gnutls_certificate_type_t
gnutls_certificate_type_get_id(const(char)* name
) @nogc;
979 gnutls_pk_algorithm_t
gnutls_pk_get_id(const(char)* name
) @nogc;
980 gnutls_sign_algorithm_t
gnutls_sign_get_id(const(char)* name
) @nogc;
981 gnutls_ecc_curve_t
gnutls_ecc_curve_get_id(const(char)* name
) @nogc;
983 gnutls_digest_algorithm_t
gnutls_oid_to_digest(const(char)* oid
) @nogc;
984 gnutls_pk_algorithm_t
gnutls_oid_to_pk(const(char)* oid
) @nogc;
985 gnutls_sign_algorithm_t
gnutls_oid_to_sign(const(char)* oid
) @nogc;
986 gnutls_ecc_curve_t
gnutls_oid_to_ecc_curve(const(char)* oid
) @nogc;
988 /* list supported algorithms */
989 const(gnutls_ecc_curve_t
)* gnutls_ecc_curve_list() @nogc;
990 const(gnutls_cipher_algorithm_t
)* gnutls_cipher_list() @nogc;
991 const(gnutls_mac_algorithm_t
)* gnutls_mac_list() @nogc;
992 const(gnutls_digest_algorithm_t
)* gnutls_digest_list() @nogc;
993 const(gnutls_compression_method_t
)* gnutls_compression_list() @nogc;
994 const(gnutls_protocol_t
)* gnutls_protocol_list() @nogc;
995 const(gnutls_certificate_type_t
)* gnutls_certificate_type_list() @nogc;
996 const(gnutls_kx_algorithm_t
)* gnutls_kx_list() @nogc;
997 const(gnutls_pk_algorithm_t
)* gnutls_pk_list() @nogc;
998 const(gnutls_sign_algorithm_t
)* gnutls_sign_list() @nogc;
999 const(char)* gnutls_cipher_suite_info(usize idx
,
1001 gnutls_kx_algorithm_t
* kx
,
1002 gnutls_cipher_algorithm_t
* cipher
,
1003 gnutls_mac_algorithm_t
* mac
,
1004 gnutls_protocol_t
* min_version
) @nogc;
1006 /* error functions */
1007 int gnutls_error_is_fatal(int error
) @nogc;
1008 int gnutls_error_to_alert(int err
, int *level
) @nogc;
1010 void gnutls_perror(int error
) @nogc;
1011 const(char)* gnutls_strerror(int error
) @nogc;
1012 const(char)* gnutls_strerror_name(int error
) @nogc;
1014 /* Semi-internal functions.
1016 void gnutls_handshake_set_private_extensions(gnutls_session_t session
,
1018 int gnutls_handshake_set_random(gnutls_session_t session
,
1019 const(gnutls_datum_t
)* random
) @nogc;
1021 gnutls_handshake_description_t
1022 gnutls_handshake_get_last_out(gnutls_session_t session
) @nogc;
1023 gnutls_handshake_description_t
1024 gnutls_handshake_get_last_in(gnutls_session_t session
) @nogc;
1026 /* Record layer functions.
1028 enum GNUTLS_HEARTBEAT_WAIT
= 1;
1029 int gnutls_heartbeat_ping(gnutls_session_t session
, usize data_size
,
1030 uint max_tries
, uint flags
) @nogc;
1031 int gnutls_heartbeat_pong(gnutls_session_t session
, uint flags
) @nogc;
1033 void gnutls_record_set_timeout(gnutls_session_t session
, uint ms
) @nogc;
1034 void gnutls_record_disable_padding(gnutls_session_t session
) @nogc;
1036 void gnutls_record_cork(gnutls_session_t session
) @nogc;
1037 enum GNUTLS_RECORD_WAIT
= 1;
1038 int gnutls_record_uncork(gnutls_session_t session
, uint flags
) @nogc;
1039 usize
gnutls_record_discard_queued(gnutls_session_t session
) @nogc;
1042 gnutls_record_get_state(gnutls_session_t session
,
1044 gnutls_datum_t
*mac_key
,
1046 gnutls_datum_t
*cipher_key
,
1047 ubyte* seq_number
/*[8]*/) @nogc;
1050 gnutls_record_set_state(gnutls_session_t session
,
1052 ubyte* seq_number
/*[8]*/) @nogc;
1054 struct gnutls_range_st
{
1059 int gnutls_range_split(gnutls_session_t session
,
1060 const(gnutls_range_st
)* orig
,
1061 gnutls_range_st
* small_range
,
1062 gnutls_range_st
* rem_range
) @nogc;
1064 ssize
gnutls_record_send(gnutls_session_t session
, const(void)* data
,
1065 usize data_size
) @nogc;
1066 ssize
gnutls_record_send_range(gnutls_session_t session
,
1067 const(void)* data
, usize data_size
,
1068 const(gnutls_range_st
)* range
) @nogc;
1069 ssize
gnutls_record_recv(gnutls_session_t session
, void *data
,
1070 usize data_size
) @nogc;
1073 alias gnutls_packet_t
= mbuffer_st
*;
1076 gnutls_record_recv_packet(gnutls_session_t session
,
1077 gnutls_packet_t
*packet
) @nogc;
1079 void gnutls_packet_get(gnutls_packet_t packet
, gnutls_datum_t
*data
, ubyte *sequence
) @nogc;
1080 void gnutls_packet_deinit(gnutls_packet_t packet
) @nogc;
1082 alias gnutls_read
= gnutls_record_recv
;
1083 alias gnutls_write
= gnutls_record_send
;
1084 ssize
gnutls_record_recv_seq(gnutls_session_t session
, void *data
,
1085 usize data_size
, ubyte *seq
) @nogc;
1087 usize
gnutls_record_overhead_size(gnutls_session_t session
) @nogc;
1089 usize
gnutls_est_record_overhead_size(gnutls_protocol_t version_
,
1090 gnutls_cipher_algorithm_t cipher
,
1091 gnutls_mac_algorithm_t mac
,
1092 gnutls_compression_method_t comp
,
1095 void gnutls_session_enable_compatibility_mode(gnutls_session_t session
) @nogc;
1096 //???#define gnutls_record_set_max_empty_records(session, x)
1097 void gnutls_record_set_max_empty_records(gnutls_session_t session
, int x
) {}
1099 int gnutls_record_can_use_length_hiding(gnutls_session_t session
) @nogc;
1101 int gnutls_record_get_direction(gnutls_session_t session
) @nogc;
1103 usize
gnutls_record_get_max_size(gnutls_session_t session
) @nogc;
1104 ssize
gnutls_record_set_max_size(gnutls_session_t session
, usize size
) @nogc;
1106 usize
gnutls_record_check_pending(gnutls_session_t session
) @nogc;
1107 usize
gnutls_record_check_corked(gnutls_session_t session
) @nogc;
1109 void gnutls_session_force_valid(gnutls_session_t session
) @nogc;
1111 int gnutls_prf(gnutls_session_t session
,
1112 usize label_size
, const(char)* label
,
1113 int server_random_first
,
1114 usize extra_size
, const(char)* extra
,
1115 usize outsize
, char *out_
) @nogc;
1116 int gnutls_prf_rfc5705(gnutls_session_t session
,
1117 usize label_size
, const(char)* label
,
1118 usize context_size
, const(char)* context
,
1119 usize outsize
, char *out_
) @nogc;
1121 int gnutls_prf_raw(gnutls_session_t session
,
1122 usize label_size
, const(char)* label
,
1123 usize seed_size
, const(char)* seed
,
1124 usize outsize
, char *out_
) @nogc;
1127 * gnutls_server_name_type_t:
1128 * @GNUTLS_NAME_DNS: Domain Name System name type.
1130 * Enumeration of different server name types.
1132 alias gnutls_server_name_type_t
= int;
1137 int gnutls_server_name_set(gnutls_session_t session
,
1138 gnutls_server_name_type_t type
,
1139 const(void)* name
, usize name_length
) @nogc;
1141 int gnutls_server_name_get(gnutls_session_t session
,
1142 void *data
, usize
* data_length
,
1143 uint *type
, uint indx
) @nogc;
1145 uint gnutls_heartbeat_get_timeout(gnutls_session_t session
) @nogc;
1146 void gnutls_heartbeat_set_timeouts(gnutls_session_t session
,
1147 uint retrans_timeout
,
1148 uint total_timeout
) @nogc;
1150 enum GNUTLS_HB_PEER_ALLOWED_TO_SEND
= (1);
1151 enum GNUTLS_HB_PEER_NOT_ALLOWED_TO_SEND
= (1<<1);
1154 void gnutls_heartbeat_enable(gnutls_session_t session
, uint type
) @nogc;
1156 enum GNUTLS_HB_LOCAL_ALLOWED_TO_SEND
= (1<<2);
1157 int gnutls_heartbeat_allowed(gnutls_session_t session
, uint type
) @nogc;
1159 /* Safe renegotiation */
1160 int gnutls_safe_renegotiation_status(gnutls_session_t session
) @nogc;
1161 uint gnutls_session_ext_master_secret_status(gnutls_session_t session
) @nogc;
1162 uint gnutls_session_etm_status(gnutls_session_t session
) @nogc;
1165 * gnutls_supplemental_data_format_type_t:
1166 * @GNUTLS_SUPPLEMENTAL_UNKNOWN: Unknown data format
1168 * Enumeration of different supplemental data types (RFC 4680).
1170 alias gnutls_supplemental_data_format_type_t
= int;
1172 GNUTLS_SUPPLEMENTAL_UNKNOWN
= 0,
1175 const(char)* gnutls_supplemental_get_name(gnutls_supplemental_data_format_type_t type
) @nogc;
1177 /* SessionTicket, RFC 5077. */
1178 int gnutls_session_ticket_key_generate(gnutls_datum_t
* key
) @nogc;
1179 int gnutls_session_ticket_enable_client(gnutls_session_t session
) @nogc;
1180 int gnutls_session_ticket_enable_server(gnutls_session_t session
,
1181 const(gnutls_datum_t
)* key
) @nogc;
1183 /* SRTP, RFC 5764 */
1186 * gnutls_srtp_profile_t:
1187 * @GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80: 128 bit AES with a 80 bit HMAC-SHA1
1188 * @GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32: 128 bit AES with a 32 bit HMAC-SHA1
1189 * @GNUTLS_SRTP_NULL_HMAC_SHA1_80: NULL cipher with a 80 bit HMAC-SHA1
1190 * @GNUTLS_SRTP_NULL_HMAC_SHA1_32: NULL cipher with a 32 bit HMAC-SHA1
1192 * Enumeration of different SRTP protection profiles.
1194 alias gnutls_srtp_profile_t
= int;
1196 GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80
= 0x0001,
1197 GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32
= 0x0002,
1198 GNUTLS_SRTP_NULL_HMAC_SHA1_80
= 0x0005,
1199 GNUTLS_SRTP_NULL_HMAC_SHA1_32
= 0x0006
1202 int gnutls_srtp_set_profile(gnutls_session_t session
,
1203 gnutls_srtp_profile_t profile
) @nogc;
1204 int gnutls_srtp_set_profile_direct(gnutls_session_t session
,
1205 const(char)* profiles
,
1206 const(char)* *err_pos
) @nogc;
1207 int gnutls_srtp_get_selected_profile(gnutls_session_t session
,
1208 gnutls_srtp_profile_t
* profile
) @nogc;
1210 const(char)* gnutls_srtp_get_profile_name(gnutls_srtp_profile_t profile
) @nogc;
1211 int gnutls_srtp_get_profile_id(const(char)* name
,
1212 gnutls_srtp_profile_t
* profile
) @nogc;
1213 int gnutls_srtp_get_keys(gnutls_session_t session
,
1215 uint key_material_size
,
1216 gnutls_datum_t
* client_key
,
1217 gnutls_datum_t
* client_salt
,
1218 gnutls_datum_t
* server_key
,
1219 gnutls_datum_t
* server_salt
) @nogc;
1221 int gnutls_srtp_set_mki(gnutls_session_t session
,
1222 const(gnutls_datum_t
)* mki
) @nogc;
1223 int gnutls_srtp_get_mki(gnutls_session_t session
, gnutls_datum_t
* mki
) @nogc;
1225 /* ALPN TLS extension */
1226 enum GNUTLS_ALPN_MAND
= 1;
1227 int gnutls_alpn_get_selected_protocol(gnutls_session_t session
,
1228 gnutls_datum_t
* protocol
) @nogc;
1229 int gnutls_alpn_set_protocols(gnutls_session_t session
,
1230 const(gnutls_datum_t
)* protocols
,
1231 uint protocols_size
, uint flags
) @nogc;
1233 int gnutls_key_generate(gnutls_datum_t
* key
, uint key_size
) @nogc;
1235 /* if you just want some defaults, use the following.
1238 int gnutls_priority_init(gnutls_priority_t
* priority_cache
,
1239 const(char)* priorities
, const(char)* *err_pos
) @nogc;
1240 void gnutls_priority_deinit(gnutls_priority_t priority_cache
) @nogc;
1241 int gnutls_priority_get_cipher_suite_index(gnutls_priority_t pcache
,
1245 enum GNUTLS_PRIORITY_LIST_INIT_KEYWORDS
= 1;
1246 enum GNUTLS_PRIORITY_LIST_SPECIAL
= 2;
1248 gnutls_priority_string_list(uint iter
, uint flags
) @nogc;
1250 int gnutls_priority_set(gnutls_session_t session
,
1251 gnutls_priority_t priority
) @nogc;
1252 int gnutls_priority_set_direct(gnutls_session_t session
,
1253 const(char)* priorities
,
1254 const(char)* *err_pos
) @nogc;
1256 int gnutls_priority_certificate_type_list(gnutls_priority_t pcache
,
1257 const(uint)* *list
) @nogc;
1258 int gnutls_priority_sign_list(gnutls_priority_t pcache
,
1259 const(uint)* *list
) @nogc;
1260 int gnutls_priority_protocol_list(gnutls_priority_t pcache
,
1261 const(uint)* *list
) @nogc;
1262 int gnutls_priority_compression_list(gnutls_priority_t pcache
,
1263 const(uint)* *list
) @nogc;
1264 int gnutls_priority_ecc_curve_list(gnutls_priority_t pcache
,
1265 const(uint)* *list
) @nogc;
1267 int gnutls_priority_kx_list(gnutls_priority_t pcache
,
1268 const(uint)* *list
) @nogc;
1269 int gnutls_priority_cipher_list(gnutls_priority_t pcache
,
1270 const(uint)* *list
) @nogc;
1271 int gnutls_priority_mac_list(gnutls_priority_t pcache
,
1272 const(uint)* *list
) @nogc;
1274 /* for compatibility
1276 int gnutls_set_default_priority(gnutls_session_t session
) @nogc;
1278 /* Returns the name of a cipher suite */
1279 const(char)* gnutls_cipher_suite_get_name(gnutls_kx_algorithm_t
1281 gnutls_cipher_algorithm_t
1283 gnutls_mac_algorithm_t
1284 mac_algorithm
) @nogc;
1286 /* get the currently used protocol version */
1287 gnutls_protocol_t
gnutls_protocol_get_version(gnutls_session_t session
) @nogc;
1289 const(char)* gnutls_protocol_get_name(gnutls_protocol_t version_
) @nogc;
1294 int gnutls_session_set_data(gnutls_session_t session
,
1295 const(void)* session_data
,
1296 usize session_data_size
) @nogc;
1297 int gnutls_session_get_data(gnutls_session_t session
, void *session_data
,
1298 usize
* session_data_size
) @nogc;
1299 int gnutls_session_get_data2(gnutls_session_t session
,
1300 gnutls_datum_t
* data
) @nogc;
1301 void gnutls_session_get_random(gnutls_session_t session
,
1302 gnutls_datum_t
* client
,
1303 gnutls_datum_t
* server
) @nogc;
1304 char *gnutls_session_get_desc(gnutls_session_t session
) @nogc;
1306 //alias gnutls_certificate_verify_function = int function (gnutls_session_t) @nogc;
1307 void gnutls_session_set_verify_function(gnutls_session_t session
, gnutls_certificate_verify_function func
) /*@nogc*/;
1310 * gnutls_vdata_types_t:
1311 * @GNUTLS_DT_UNKNOWN: Unknown data type.
1312 * @GNUTLS_DT_DNS_HOSTNAME: The data contain a null-terminated DNS hostname; the hostname will be
1313 * matched using the RFC6125 rules.
1314 * @GNUTLS_DT_RFC822NAME: The data contain a null-terminated email address; the email will be
1315 * matched against the RFC822Name field of the certificate, or the EMAIL DN component if the
1316 * former isn't available. Prior to matching the email address will be converted to ACE
1317 * (ASCII-compatible-encoding).
1318 * @GNUTLS_DT_KEY_PURPOSE_OID: The data contain a null-terminated key purpose OID. It will be matched
1319 * against the certificate's Extended Key Usage extension.
1321 * Enumeration of different typed-data options. They are used as input to certificate
1322 * verification functions to provide information about the name and purpose of the
1323 * certificate. Only a single option of a type can be provided to the relevant functions.
1325 alias gnutls_vdata_types_t
= int;
1327 GNUTLS_DT_UNKNOWN
= 0,
1328 GNUTLS_DT_DNS_HOSTNAME
= 1,
1329 GNUTLS_DT_KEY_PURPOSE_OID
= 2,
1330 GNUTLS_DT_RFC822NAME
= 3
1334 struct gnutls_typed_vdata_st
{
1335 gnutls_vdata_types_t type
;
1340 void gnutls_session_set_verify_cert(gnutls_session_t session
,
1341 const(char)* hostname
, uint flags
) @nogc;
1344 gnutls_session_set_verify_cert2(gnutls_session_t session
,
1345 gnutls_typed_vdata_st
* data
,
1346 uint elements
, uint flags
) @nogc;
1348 uint gnutls_session_get_verify_cert_status(gnutls_session_t
) @nogc;
1350 int gnutls_session_set_premaster(gnutls_session_t session
,
1352 gnutls_protocol_t version_
,
1353 gnutls_kx_algorithm_t kx
,
1354 gnutls_cipher_algorithm_t cipher
,
1355 gnutls_mac_algorithm_t mac
,
1356 gnutls_compression_method_t comp
,
1357 const(gnutls_datum_t
)* master
,
1358 const(gnutls_datum_t
)* session_id
) @nogc;
1360 /* returns the session ID */
1361 enum GNUTLS_MAX_SESSION_ID
= 32;
1362 int gnutls_session_get_id(gnutls_session_t session
, void *session_id
,
1363 usize
* session_id_size
) @nogc;
1364 int gnutls_session_get_id2(gnutls_session_t session
,
1365 gnutls_datum_t
* session_id
) @nogc;
1367 int gnutls_session_set_id(gnutls_session_t session
,
1368 const(gnutls_datum_t
)* sid
) @nogc;
1370 int gnutls_session_channel_binding(gnutls_session_t session
,
1371 gnutls_channel_binding_t cbtype
,
1372 gnutls_datum_t
* cb
) @nogc;
1374 /* checks if this session is a resumed one
1376 int gnutls_session_is_resumed(gnutls_session_t session
) @nogc;
1377 int gnutls_session_resumption_requested(gnutls_session_t session
) @nogc;
1379 //alias gnutls_db_store_func = int function (void *, gnutls_datum_t key, gnutls_datum_t data) @nogc;
1380 //alias gnutls_db_remove_func = int function (void *, gnutls_datum_t key) @nogc;
1381 //alias gnutls_db_retr_func = gnutls_datum_t function (void *, gnutls_datum_t key) @nogc;
1383 void gnutls_db_set_cache_expiration(gnutls_session_t session
, int seconds
) @nogc;
1384 uint gnutls_db_get_default_cache_expiration() @nogc;
1386 void gnutls_db_remove_session(gnutls_session_t session
) @nogc;
1387 void gnutls_db_set_retrieve_function(gnutls_session_t session
,
1388 gnutls_db_retr_func retr_func
) /*@nogc*/;
1389 void gnutls_db_set_remove_function(gnutls_session_t session
,
1390 gnutls_db_remove_func rem_func
) /*@nogc*/;
1391 void gnutls_db_set_store_function(gnutls_session_t session
,
1392 gnutls_db_store_func store_func
) /*@nogc*/;
1393 void gnutls_db_set_ptr(gnutls_session_t session
, void *ptr
) @nogc;
1394 void *gnutls_db_get_ptr(gnutls_session_t session
) @nogc;
1395 int gnutls_db_check_entry(gnutls_session_t session
,
1396 gnutls_datum_t session_entry
) @nogc;
1397 time_t
gnutls_db_check_entry_time(gnutls_datum_t
* entry
) @nogc;
1400 * gnutls_handshake_hook_func:
1401 * @session: the current session
1402 * @htype: the type of the handshake message (%gnutls_handshake_description_t)
1403 * @post: non zero if this is a post-process/generation call and zero otherwise
1404 * @incoming: non zero if this is an incoming message and zero if this is an outgoing message
1405 * @msg: the (const) data of the handshake message without the handshake headers.
1407 * Function prototype for handshake hooks. It is set using
1408 * gnutls_handshake_set_hook_function().
1410 * Returns: Non zero on error.
1412 enum GNUTLS_HOOK_POST
= (1);
1413 enum GNUTLS_HOOK_PRE
= (0);
1414 enum GNUTLS_HOOK_BOTH
= (-1);
1416 //alias gnutls_handshake_hook_func = int function (gnutls_session_t, uint htype, uint post, uint incoming, const(gnutls_datum_t)* msg) @nogc;
1417 void gnutls_handshake_set_hook_function(gnutls_session_t session
,
1418 uint htype
, int post
,
1419 gnutls_handshake_hook_func func
) /*@nogc*/;
1421 //alias gnutls_handshake_post_client_hello_func = int function (gnutls_session_t) @nogc;
1423 gnutls_handshake_set_post_client_hello_function(gnutls_session_t session
,
1424 gnutls_handshake_post_client_hello_func
1427 void gnutls_handshake_set_max_packet_length(gnutls_session_t session
,
1430 /* returns libgnutls version (call it with a NULL argument)
1432 const(char)* gnutls_check_version(const(char)* req_version
) @nogc;
1434 /* Functions for setting/clearing credentials
1436 void gnutls_credentials_clear(gnutls_session_t session
) @nogc;
1438 /* cred is a structure defined by the kx algorithm
1440 int gnutls_credentials_set(gnutls_session_t session
,
1441 gnutls_credentials_type_t type
, void *cred
) @nogc;
1442 int gnutls_credentials_get(gnutls_session_t session
,
1443 gnutls_credentials_type_t type
, void **cred
) @nogc;
1444 alias gnutls_cred_set
= gnutls_credentials_set
;
1448 struct gnutls_pubkey_st
{}
1449 alias gnutls_pubkey_t
= gnutls_pubkey_st
*;
1451 struct gnutls_privkey_st
{}
1452 alias gnutls_privkey_t
= gnutls_privkey_st
*;
1454 //struct gnutls_x509_privkey_int {}
1455 alias gnutls_x509_privkey_t
= gnutls_x509_privkey_int
*;
1457 struct gnutls_x509_crl_int
{}
1458 alias gnutls_x509_crl_t
= gnutls_x509_crl_int
*;
1460 struct gnutls_x509_crt_int
{}
1461 alias gnutls_x509_crt_t
= gnutls_x509_crt_int
*;
1463 struct gnutls_x509_crq_int
{}
1464 alias gnutls_x509_crq_t
= gnutls_x509_crq_int
*;
1466 struct gnutls_openpgp_keyring_int
{}
1467 alias gnutls_openpgp_keyring_t
= gnutls_openpgp_keyring_int
*;
1470 /* Credential structures - used in gnutls_credentials_set() @nogc; */
1472 struct gnutls_certificate_credentials_st
{}
1473 alias gnutls_certificate_credentials_t
= gnutls_certificate_credentials_st
*;
1474 alias gnutls_certificate_server_credentials
= gnutls_certificate_credentials_t
;
1475 alias gnutls_certificate_client_credentials
= gnutls_certificate_credentials_t
;
1477 struct gnutls_anon_server_credentials_st
{}
1478 struct gnutls_anon_client_credentials_st
{}
1479 alias gnutls_anon_server_credentials_t
= gnutls_anon_server_credentials_st
*;
1480 alias gnutls_anon_client_credentials_t
= gnutls_anon_client_credentials_st
*;
1482 void gnutls_anon_free_server_credentials(gnutls_anon_server_credentials_t
1485 gnutls_anon_allocate_server_credentials(gnutls_anon_server_credentials_t
1488 void gnutls_anon_set_server_dh_params(gnutls_anon_server_credentials_t res
,
1489 gnutls_dh_params_t dh_params
) @nogc;
1492 gnutls_anon_set_server_params_function(gnutls_anon_server_credentials_t
1493 res
, gnutls_params_function func
) /*@nogc*/;
1496 gnutls_anon_free_client_credentials(gnutls_anon_client_credentials_t sc
) @nogc;
1498 gnutls_anon_allocate_client_credentials(gnutls_anon_client_credentials_t
1501 /* CERTFILE is an x509 certificate in PEM form.
1502 * KEYFILE is a pkcs-1 private key in PEM form (for RSA keys).
1505 gnutls_certificate_free_credentials(gnutls_certificate_credentials_t sc
) @nogc;
1507 gnutls_certificate_allocate_credentials(gnutls_certificate_credentials_t
1511 gnutls_certificate_get_issuer(gnutls_certificate_credentials_t sc
,
1512 gnutls_x509_crt_t cert
,
1513 gnutls_x509_crt_t
* issuer
,
1516 int gnutls_certificate_get_crt_raw(gnutls_certificate_credentials_t sc
,
1517 uint idx1
, uint idx2
,
1518 gnutls_datum_t
* cert
) @nogc;
1521 gnutls_certificate_get_x509_crt(gnutls_certificate_credentials_t res
,
1523 gnutls_x509_crt_t
**crt_list
,
1524 uint *crt_list_size
) @nogc;
1527 gnutls_certificate_get_x509_key(gnutls_certificate_credentials_t res
,
1529 gnutls_x509_privkey_t
*key
) @nogc;
1531 void gnutls_certificate_free_keys(gnutls_certificate_credentials_t sc
) @nogc;
1532 void gnutls_certificate_free_cas(gnutls_certificate_credentials_t sc
) @nogc;
1533 void gnutls_certificate_free_ca_names(gnutls_certificate_credentials_t sc
) @nogc;
1534 void gnutls_certificate_free_crls(gnutls_certificate_credentials_t sc
) @nogc;
1536 void gnutls_certificate_set_dh_params(gnutls_certificate_credentials_t res
,
1537 gnutls_dh_params_t dh_params
) @nogc;
1538 void gnutls_certificate_set_verify_flags(gnutls_certificate_credentials_t
1539 res
, uint flags
) @nogc;
1541 gnutls_certificate_get_verify_flags(gnutls_certificate_credentials_t res
) @nogc;
1544 * gnutls_certificate_flags:
1545 * @GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH: Skip the key and certificate matching check.
1547 * Enumeration of different certificate credentials flags.
1549 alias gnutls_certificate_flags
= int;
1551 GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH
= 1
1554 void gnutls_certificate_set_flags(gnutls_certificate_credentials_t
,
1557 void gnutls_certificate_set_verify_limits(gnutls_certificate_credentials_t
1559 uint max_depth
) @nogc;
1562 gnutls_certificate_get_verify_flags(gnutls_certificate_credentials_t
) @nogc;
1565 gnutls_certificate_set_x509_system_trust(gnutls_certificate_credentials_t
1569 gnutls_certificate_set_x509_trust_file(gnutls_certificate_credentials_t
1570 cred
, const(char)* cafile
,
1571 gnutls_x509_crt_fmt_t type
) @nogc;
1573 gnutls_certificate_set_x509_trust_dir(gnutls_certificate_credentials_t cred
,
1574 const(char)* ca_dir
,
1575 gnutls_x509_crt_fmt_t type
) @nogc;
1577 int gnutls_certificate_set_x509_trust_mem(gnutls_certificate_credentials_t
1578 res
, const(gnutls_datum_t
)* ca
,
1579 gnutls_x509_crt_fmt_t type
) @nogc;
1582 gnutls_certificate_set_x509_crl_file(gnutls_certificate_credentials_t
1583 res
, const(char)* crlfile
,
1584 gnutls_x509_crt_fmt_t type
) @nogc;
1585 int gnutls_certificate_set_x509_crl_mem(gnutls_certificate_credentials_t
1586 res
, const(gnutls_datum_t
)* CRL
,
1587 gnutls_x509_crt_fmt_t type
) @nogc;
1590 gnutls_certificate_set_x509_key_file(gnutls_certificate_credentials_t
1591 res
, const(char)* certfile
,
1592 const(char)* keyfile
,
1593 gnutls_x509_crt_fmt_t type
) @nogc;
1596 gnutls_certificate_set_x509_key_file2(gnutls_certificate_credentials_t
1597 res
, const(char)* certfile
,
1598 const(char)* keyfile
,
1599 gnutls_x509_crt_fmt_t type
,
1603 int gnutls_certificate_set_x509_key_mem(gnutls_certificate_credentials_t
1604 res
, const(gnutls_datum_t
)* cert
,
1605 const(gnutls_datum_t
)* key
,
1606 gnutls_x509_crt_fmt_t type
) @nogc;
1608 int gnutls_certificate_set_x509_key_mem2(gnutls_certificate_credentials_t
1609 res
, const(gnutls_datum_t
)* cert
,
1610 const(gnutls_datum_t
)* key
,
1611 gnutls_x509_crt_fmt_t type
,
1615 void gnutls_certificate_send_x509_rdn_sequence(gnutls_session_t session
,
1619 gnutls_certificate_set_x509_simple_pkcs12_file
1620 (gnutls_certificate_credentials_t res
, const(char)* pkcs12file
,
1621 gnutls_x509_crt_fmt_t type
, const(char)* password
) @nogc;
1623 gnutls_certificate_set_x509_simple_pkcs12_mem
1624 (gnutls_certificate_credentials_t res
, const(gnutls_datum_t
)* p12blob
,
1625 gnutls_x509_crt_fmt_t type
, const(char)* password
) @nogc;
1627 /* New functions to allow setting already parsed X.509 stuff.
1630 int gnutls_certificate_set_x509_key(gnutls_certificate_credentials_t res
,
1631 gnutls_x509_crt_t
* cert_list
,
1633 gnutls_x509_privkey_t key
) @nogc;
1634 int gnutls_certificate_set_x509_trust(gnutls_certificate_credentials_t res
,
1635 gnutls_x509_crt_t
* ca_list
,
1636 int ca_list_size
) @nogc;
1637 int gnutls_certificate_set_x509_crl(gnutls_certificate_credentials_t res
,
1638 gnutls_x509_crl_t
* crl_list
,
1639 int crl_list_size
) @nogc;
1641 int gnutls_certificate_get_x509_key(gnutls_certificate_credentials_t res
,
1643 gnutls_x509_privkey_t
*key
) @nogc;
1644 int gnutls_certificate_get_x509_crt(gnutls_certificate_credentials_t res
,
1646 gnutls_x509_crt_t
**crt_list
,
1647 uint *crt_list_size
) @nogc;
1649 /* OCSP status request extension, RFC 6066 */
1650 alias gnutls_status_request_ocsp_func
= int function
1651 (gnutls_session_t session
, void *ptr
, gnutls_datum_t
* ocsp_response
) @nogc;
1654 gnutls_certificate_set_ocsp_status_request_function
1655 (gnutls_certificate_credentials_t res
,
1656 gnutls_status_request_ocsp_func ocsp_func
, void *ptr
) /*@nogc*/;
1659 gnutls_certificate_set_ocsp_status_request_file
1660 (gnutls_certificate_credentials_t res
, const(char)* response_file
,
1663 int gnutls_ocsp_status_request_enable_client(gnutls_session_t session
,
1664 gnutls_datum_t
* responder_id
,
1665 usize responder_id_size
,
1667 request_extensions
) @nogc;
1669 int gnutls_ocsp_status_request_get(gnutls_session_t session
,
1670 gnutls_datum_t
* response
) @nogc;
1672 enum GNUTLS_OCSP_SR_IS_AVAIL
= 1;
1673 int gnutls_ocsp_status_request_is_checked(gnutls_session_t session
,
1676 /* global state functions
1678 int gnutls_global_init() @nogc;
1679 void gnutls_global_deinit() @nogc;
1683 * @t: where to store time.
1685 * Function prototype for time()-like function. Set with
1686 * gnutls_global_set_time_function().
1688 * Returns: Number of seconds since the epoch, or (time_t)-1 on errors.
1690 //alias gnutls_time_func = time_t function (time_t * t) @nogc;
1692 //alias mutex_init_func = int function (void **mutex) @nogc;
1693 //alias mutex_lock_func = int function (void **mutex) @nogc;
1694 //alias mutex_unlock_func = int function (void **mutex) @nogc;
1695 //alias mutex_deinit_func = int function (void **mutex) @nogc;
1697 void gnutls_global_set_mutex(mutex_init_func init
,
1698 mutex_deinit_func deinit
,
1699 mutex_lock_func
lock,
1700 mutex_unlock_func unlock
) /*@nogc*/;
1702 //alias gnutls_alloc_function = void * function (usize) @nogc;
1703 //alias gnutls_calloc_function = void * function (usize, usize) @nogc;
1704 //alias gnutls_is_secure_function = int function (const(void)* ) @nogc;
1705 //alias gnutls_free_function = void function (void *) @nogc;
1706 //alias gnutls_realloc_function = void * function (void *, usize) @nogc;
1708 void gnutls_global_set_time_function(gnutls_time_func time_func
) /*@nogc*/;
1710 /* For use in callbacks */
1711 extern __gshared
/*_SYM_EXPORT*/ gnutls_alloc_function gnutls_malloc
;
1712 extern __gshared
/*_SYM_EXPORT*/ gnutls_realloc_function gnutls_realloc
;
1713 extern __gshared
/*_SYM_EXPORT*/ gnutls_calloc_function gnutls_calloc
;
1714 extern __gshared
/*_SYM_EXPORT*/ gnutls_free_function gnutls_free
;
1716 extern __gshared
/*_SYM_EXPORT*/ char * function (const(char)* ) gnutls_strdup
;
1718 /* a variant of memset that doesn't get optimized out */
1719 void gnutls_memset(void *data
, int c
, usize size
) @nogc;
1721 /* constant time memcmp */
1722 int gnutls_memcmp(const(void)* s1
, const(void)* s2
, usize n
) @nogc;
1724 //alias gnutls_log_func = void function (int, const(char)* ) @nogc;
1725 //alias gnutls_audit_log_func = void function (gnutls_session_t, const(char)* ) @nogc;
1726 void gnutls_global_set_log_function(gnutls_log_func log_func
) /*@nogc*/;
1727 void gnutls_global_set_audit_log_function(gnutls_audit_log_func log_func
) /*@nogc*/;
1728 void gnutls_global_set_log_level(int level
) @nogc;
1730 /* Diffie-Hellman parameter handling.
1732 int gnutls_dh_params_init(gnutls_dh_params_t
* dh_params
) @nogc;
1733 void gnutls_dh_params_deinit(gnutls_dh_params_t dh_params
) @nogc;
1734 int gnutls_dh_params_import_raw(gnutls_dh_params_t dh_params
,
1735 const(gnutls_datum_t
)* prime
,
1736 const(gnutls_datum_t
)* generator
) @nogc;
1737 int gnutls_dh_params_import_raw2(gnutls_dh_params_t dh_params
,
1738 const(gnutls_datum_t
)* prime
,
1739 const(gnutls_datum_t
)* generator
,
1740 uint key_bits
) @nogc;
1741 int gnutls_dh_params_import_pkcs3(gnutls_dh_params_t params
,
1742 const(gnutls_datum_t
)* pkcs3_params
,
1743 gnutls_x509_crt_fmt_t format
) @nogc;
1744 int gnutls_dh_params_generate2(gnutls_dh_params_t params
,
1746 int gnutls_dh_params_export_pkcs3(gnutls_dh_params_t params
,
1747 gnutls_x509_crt_fmt_t format
,
1749 usize
* params_data_size
) @nogc;
1750 int gnutls_dh_params_export2_pkcs3(gnutls_dh_params_t params
,
1751 gnutls_x509_crt_fmt_t format
,
1752 gnutls_datum_t
* out_
) @nogc;
1753 int gnutls_dh_params_export_raw(gnutls_dh_params_t params
,
1754 gnutls_datum_t
* prime
,
1755 gnutls_datum_t
* generator
,
1757 int gnutls_dh_params_cpy(gnutls_dh_params_t dst
, gnutls_dh_params_t src
) @nogc;
1764 void *iov_base
; /* Starting address */
1765 usize iov_len
; /* Number of bytes to transfer */
1768 //alias gnutls_pull_func = ssize function (gnutls_transport_ptr_t, void *, usize) @nogc;
1769 //alias gnutls_push_func = ssize function (gnutls_transport_ptr_t, const(void)* , usize) @nogc;
1771 int gnutls_system_recv_timeout(gnutls_transport_ptr_t ptr
, uint ms
) @nogc;
1772 //alias gnutls_pull_timeout_func = int function (gnutls_transport_ptr_t, uint ms) @nogc;
1774 //alias gnutls_vec_push_func = ssize function (gnutls_transport_ptr_t, const(giovec_t)* iov, int iovcnt) @nogc;
1776 //alias gnutls_errno_func = int function (gnutls_transport_ptr_t) @nogc;
1780 /* This will be defined as macro. */
1781 void gnutls_transport_set_int (gnutls_session_t session, int r) @nogc;
1785 void gnutls_transport_set_int2(gnutls_session_t session
, int r
, int s
) @nogc;
1786 //#define gnutls_transport_set_int(s, i) gnutls_transport_set_int2(s, i, i)
1787 void gnutls_transport_set_int(gnutls_session_t session
, int i
) { gnutls_transport_set_int2(session
, i
, i
); }
1789 void gnutls_transport_get_int2(gnutls_session_t session
, int *r
, int *s
) @nogc;
1790 int gnutls_transport_get_int(gnutls_session_t session
) @nogc;
1792 void gnutls_transport_set_ptr(gnutls_session_t session
,
1793 gnutls_transport_ptr_t ptr
) @nogc;
1794 void gnutls_transport_set_ptr2(gnutls_session_t session
,
1795 gnutls_transport_ptr_t recv_ptr
,
1796 gnutls_transport_ptr_t send_ptr
) @nogc;
1798 gnutls_transport_ptr_t
gnutls_transport_get_ptr(gnutls_session_t session
) @nogc;
1799 void gnutls_transport_get_ptr2(gnutls_session_t session
,
1800 gnutls_transport_ptr_t
* recv_ptr
,
1801 gnutls_transport_ptr_t
* send_ptr
) @nogc;
1803 void gnutls_transport_set_vec_push_function(gnutls_session_t session
,
1804 gnutls_vec_push_func vec_func
) /*@nogc*/;
1805 void gnutls_transport_set_push_function(gnutls_session_t session
,
1806 gnutls_push_func push_func
) /*@nogc*/;
1807 void gnutls_transport_set_pull_function(gnutls_session_t session
,
1808 gnutls_pull_func pull_func
) /*@nogc*/;
1810 void gnutls_transport_set_pull_timeout_function(gnutls_session_t session
,
1811 gnutls_pull_timeout_func
1814 void gnutls_transport_set_errno_function(gnutls_session_t session
,
1815 gnutls_errno_func errno_func
) /*@nogc*/;
1817 void gnutls_transport_set_errno(gnutls_session_t session
, int err
) @nogc;
1821 void gnutls_session_set_ptr(gnutls_session_t session
, void *ptr
) @nogc;
1822 void *gnutls_session_get_ptr(gnutls_session_t session
) @nogc;
1824 void gnutls_openpgp_send_cert(gnutls_session_t session
,
1825 gnutls_openpgp_crt_status_t status
) @nogc;
1827 /* This function returns the hash of the given data.
1829 int gnutls_fingerprint(gnutls_digest_algorithm_t algo
,
1830 const(gnutls_datum_t
)* data
, void *result
,
1831 usize
* result_size
) @nogc;
1834 * gnutls_random_art_t:
1835 * @GNUTLS_RANDOM_ART_OPENSSH: OpenSSH-style random art.
1837 * Enumeration of different random art types.
1839 //alias gnutls_random_art = gnutls_random_art_t;
1840 alias gnutls_random_art_t
= int;
1842 GNUTLS_RANDOM_ART_OPENSSH
= 1
1845 int gnutls_random_art(gnutls_random_art_t type
,
1846 const(char)* key_type
, uint key_size
,
1847 void *fpr
, usize fpr_size
, gnutls_datum_t
* art
) @nogc;
1852 struct gnutls_srp_server_credentials_st
{}
1853 struct gnutls_srp_client_credentials_st
{}
1854 alias gnutls_srp_server_credentials_t
= gnutls_srp_server_credentials_st
*;
1855 alias gnutls_srp_client_credentials_t
= gnutls_srp_client_credentials_st
*;
1858 gnutls_srp_free_client_credentials(gnutls_srp_client_credentials_t sc
) @nogc;
1860 gnutls_srp_allocate_client_credentials(gnutls_srp_client_credentials_t
*
1862 int gnutls_srp_set_client_credentials(gnutls_srp_client_credentials_t res
,
1863 const(char)* username
,
1864 const(char)* password
) @nogc;
1867 gnutls_srp_free_server_credentials(gnutls_srp_server_credentials_t sc
) @nogc;
1869 gnutls_srp_allocate_server_credentials(gnutls_srp_server_credentials_t
*
1871 int gnutls_srp_set_server_credentials_file(gnutls_srp_server_credentials_t
1872 res
, const(char)* password_file
,
1873 const(char)* password_conf_file
) @nogc;
1875 const(char)* gnutls_srp_server_get_username(gnutls_session_t session
) @nogc;
1877 void gnutls_srp_set_prime_bits(gnutls_session_t session
,
1880 int gnutls_srp_verifier(const(char)* username
,
1881 const(char)* password
,
1882 const(gnutls_datum_t
)* salt
,
1883 const(gnutls_datum_t
)* generator
,
1884 const(gnutls_datum_t
)* prime
,
1885 gnutls_datum_t
* res
) @nogc;
1887 /* The static parameters defined in draft-ietf-tls-srp-05
1888 * Those should be used as input to gnutls_srp_verifier().
1890 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_4096_group_prime
;
1891 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_4096_group_generator
;
1893 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_3072_group_prime
;
1894 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_3072_group_generator
;
1896 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_2048_group_prime
;
1897 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_2048_group_generator
;
1899 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_1536_group_prime
;
1900 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_1536_group_generator
;
1902 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_1024_group_prime
;
1903 extern __gshared
/*_SYM_EXPORT*/ const gnutls_datum_t gnutls_srp_1024_group_generator
;
1905 /*alias gnutls_srp_server_credentials_function = int function (gnutls_session_t,
1906 const(char)* username,
1907 gnutls_datum_t * salt,
1912 gnutls_datum_t * prime) @nogc;*/
1914 gnutls_srp_set_server_credentials_function(gnutls_srp_server_credentials_t
1916 gnutls_srp_server_credentials_function func
) /*@nogc*/;
1918 //alias gnutls_srp_client_credentials_function = int function (gnutls_session_t, char **, char **) @nogc;
1920 gnutls_srp_set_client_credentials_function(gnutls_srp_client_credentials_t
1922 gnutls_srp_client_credentials_function func
) /*@nogc*/;
1924 int gnutls_srp_base64_encode(const(gnutls_datum_t
)* data
, char *result
,
1925 usize
* result_size
) @nogc;
1926 int gnutls_srp_base64_encode2(const(gnutls_datum_t
)* data
,
1927 gnutls_datum_t
* result
) @nogc;
1929 int gnutls_srp_base64_decode(const(gnutls_datum_t
)* b64_data
, char *result
,
1930 usize
* result_size
) @nogc;
1931 int gnutls_srp_base64_decode2(const(gnutls_datum_t
)* b64_data
,
1932 gnutls_datum_t
* result
) @nogc;
1934 alias gnutls_srp_base64_encode_alloc
= gnutls_srp_base64_encode2
;
1935 alias gnutls_srp_base64_decode_alloc
= gnutls_srp_base64_decode2
;
1938 gnutls_srp_set_server_fake_salt_seed(gnutls_srp_server_credentials_t
1940 const(gnutls_datum_t
)* seed
,
1941 uint salt_length
) @nogc;
1944 struct gnutls_psk_server_credentials_st
{}
1945 struct gnutls_psk_client_credentials_st
{}
1946 alias gnutls_psk_server_credentials_t
= gnutls_psk_server_credentials_st
*;
1947 alias gnutls_psk_client_credentials_t
= gnutls_psk_client_credentials_st
*;
1950 * gnutls_psk_key_flags:
1951 * @GNUTLS_PSK_KEY_RAW: PSK-key in raw format.
1952 * @GNUTLS_PSK_KEY_HEX: PSK-key in hex format.
1954 * Enumeration of different PSK key flags.
1956 alias gnutls_psk_key_flags
= int;
1958 GNUTLS_PSK_KEY_RAW
= 0,
1963 gnutls_psk_free_client_credentials(gnutls_psk_client_credentials_t sc
) @nogc;
1965 gnutls_psk_allocate_client_credentials(gnutls_psk_client_credentials_t
*
1967 int gnutls_psk_set_client_credentials(gnutls_psk_client_credentials_t res
,
1968 const(char)* username
,
1969 const(gnutls_datum_t
)* key
,
1970 gnutls_psk_key_flags flags
) @nogc;
1973 gnutls_psk_free_server_credentials(gnutls_psk_server_credentials_t sc
) @nogc;
1975 gnutls_psk_allocate_server_credentials(gnutls_psk_server_credentials_t
*
1977 int gnutls_psk_set_server_credentials_file(gnutls_psk_server_credentials_t
1978 res
, const(char)* password_file
) @nogc;
1981 gnutls_psk_set_server_credentials_hint(gnutls_psk_server_credentials_t
1982 res
, const(char)* hint
) @nogc;
1984 const(char)* gnutls_psk_server_get_username(gnutls_session_t session
) @nogc;
1985 const(char)* gnutls_psk_client_get_hint(gnutls_session_t session
) @nogc;
1987 //alias gnutls_psk_server_credentials_function = int function (gnutls_session_t, const(char)* username, gnutls_datum_t* key) @nogc;
1989 gnutls_psk_set_server_credentials_function(gnutls_psk_server_credentials_t
1991 gnutls_psk_server_credentials_function func
) /*@nogc*/;
1993 //alias gnutls_psk_client_credentials_function = int function (gnutls_session_t, char** username, gnutls_datum_t* key) @nogc;
1995 gnutls_psk_set_client_credentials_function(gnutls_psk_client_credentials_t
1997 gnutls_psk_client_credentials_function func
) /*@nogc*/;
1999 int gnutls_hex_encode(const(gnutls_datum_t
)* data
, char *result
,
2000 usize
* result_size
) @nogc;
2001 int gnutls_hex_decode(const(gnutls_datum_t
)* hex_data
, void *result
,
2002 usize
* result_size
) @nogc;
2004 int gnutls_hex_encode2(const(gnutls_datum_t
)* data
, gnutls_datum_t
*result
) @nogc;
2005 int gnutls_hex_decode2(const(gnutls_datum_t
)* data
, gnutls_datum_t
*result
) @nogc;
2008 gnutls_psk_set_server_dh_params(gnutls_psk_server_credentials_t res
,
2009 gnutls_dh_params_t dh_params
) @nogc;
2012 gnutls_psk_set_server_params_function(gnutls_psk_server_credentials_t
2013 res
, gnutls_params_function func
) /*@nogc*/;
2016 * gnutls_x509_subject_alt_name_t:
2017 * @GNUTLS_SAN_DNSNAME: DNS-name SAN.
2018 * @GNUTLS_SAN_RFC822NAME: E-mail address SAN.
2019 * @GNUTLS_SAN_URI: URI SAN.
2020 * @GNUTLS_SAN_IPADDRESS: IP address SAN.
2021 * @GNUTLS_SAN_OTHERNAME: OtherName SAN.
2022 * @GNUTLS_SAN_DN: DN SAN.
2023 * @GNUTLS_SAN_OTHERNAME_XMPP: Virtual SAN, used by
2024 * gnutls_x509_crt_get_subject_alt_othername_oid.
2026 * Enumeration of different subject alternative names types.
2028 alias gnutls_x509_subject_alt_name_t
= int;
2030 GNUTLS_SAN_DNSNAME
= 1,
2031 GNUTLS_SAN_RFC822NAME
= 2,
2033 GNUTLS_SAN_IPADDRESS
= 4,
2034 GNUTLS_SAN_OTHERNAME
= 5,
2036 /* The following are "virtual" subject alternative name types, in
2037 that they are represented by an otherName value and an OID.
2038 Used by gnutls_x509_crt_get_subject_alt_othername_oid. */
2039 GNUTLS_SAN_OTHERNAME_XMPP
= 1000
2042 struct gnutls_openpgp_crt_int
;
2043 alias gnutls_openpgp_crt_t
= gnutls_openpgp_crt_int
*;
2045 struct gnutls_openpgp_privkey_int
;
2046 alias gnutls_openpgp_privkey_t
= gnutls_openpgp_privkey_int
*;
2048 struct gnutls_pkcs11_privkey_st
;
2049 alias gnutls_pkcs11_privkey_t
= gnutls_pkcs11_privkey_st
*;
2052 * gnutls_privkey_type_t:
2053 * @GNUTLS_PRIVKEY_X509: X.509 private key, #gnutls_x509_privkey_t.
2054 * @GNUTLS_PRIVKEY_OPENPGP: OpenPGP private key, #gnutls_openpgp_privkey_t.
2055 * @GNUTLS_PRIVKEY_PKCS11: PKCS11 private key, #gnutls_pkcs11_privkey_t.
2056 * @GNUTLS_PRIVKEY_EXT: External private key, operating using callbacks.
2058 * Enumeration of different private key types.
2060 alias gnutls_privkey_type_t
= int;
2062 GNUTLS_PRIVKEY_X509
,
2063 GNUTLS_PRIVKEY_OPENPGP
,
2064 GNUTLS_PRIVKEY_PKCS11
,
2068 union gnutls_retr2_st_cert_union
{
2069 gnutls_x509_crt_t
*x509
;
2070 gnutls_openpgp_crt_t pgp
;
2073 union gnutls_retr2_st_key_union
{
2074 gnutls_x509_privkey_t x509
;
2075 gnutls_openpgp_privkey_t pgp
;
2076 gnutls_pkcs11_privkey_t pkcs11
;
2079 struct gnutls_retr2_st
{
2080 gnutls_certificate_type_t cert_type
;
2081 gnutls_privkey_type_t key_type
;
2083 gnutls_retr2_st_cert_union cert
;
2084 uint ncerts
; /* one for pgp keys */
2086 gnutls_retr2_st_key_union key
;
2088 uint deinit_all
; /* if non zero all keys will be deinited */
2092 /* Functions that allow auth_info_t structures handling
2095 gnutls_credentials_type_t
gnutls_auth_get_type(gnutls_session_t session
) @nogc;
2096 gnutls_credentials_type_t
2097 gnutls_auth_server_get_type(gnutls_session_t session
) @nogc;
2098 gnutls_credentials_type_t
2099 gnutls_auth_client_get_type(gnutls_session_t session
) @nogc;
2103 void gnutls_dh_set_prime_bits(gnutls_session_t session
, uint bits
) @nogc;
2104 int gnutls_dh_get_secret_bits(gnutls_session_t session
) @nogc;
2105 int gnutls_dh_get_peers_public_bits(gnutls_session_t session
) @nogc;
2106 int gnutls_dh_get_prime_bits(gnutls_session_t session
) @nogc;
2108 int gnutls_dh_get_group(gnutls_session_t session
, gnutls_datum_t
* raw_gen
,
2109 gnutls_datum_t
* raw_prime
) @nogc;
2110 int gnutls_dh_get_pubkey(gnutls_session_t session
,
2111 gnutls_datum_t
* raw_key
) @nogc;
2116 /* These are set on the credentials structure.
2119 /* use gnutls_certificate_set_retrieve_function2() in abstract.h
2120 * instead. It's much more efficient.
2123 //alias gnutls_certificate_retrieve_function = int function (gnutls_session_t, const(gnutls_datum_t)* req_ca_rdn, int nreqs, const(gnutls_pk_algorithm_t)* pk_algos, int pk_algos_length, gnutls_retr2_st*) @nogc;
2126 gnutls_certificate_set_retrieve_function(gnutls_certificate_credentials_t
2128 gnutls_certificate_retrieve_function func
) /*@nogc*/;
2131 gnutls_certificate_set_verify_function(gnutls_certificate_credentials_t
2133 gnutls_certificate_verify_function func
) /*@nogc*/;
2136 gnutls_certificate_server_set_request(gnutls_session_t session
,
2137 gnutls_certificate_request_t req
) @nogc;
2139 /* get data from the session
2141 const(gnutls_datum_t
)* gnutls_certificate_get_peers(gnutls_session_t
2144 const(gnutls_datum_t
)* gnutls_certificate_get_ours(gnutls_session_t
2147 int gnutls_certificate_get_peers_subkey_id(gnutls_session_t session
,
2148 gnutls_datum_t
* id
) @nogc;
2150 time_t
gnutls_certificate_activation_time_peers(gnutls_session_t session
) @nogc;
2151 time_t
gnutls_certificate_expiration_time_peers(gnutls_session_t session
) @nogc;
2153 int gnutls_certificate_client_get_request_status(gnutls_session_t session
) @nogc;
2154 int gnutls_certificate_verify_peers2(gnutls_session_t session
,
2155 uint *status
) @nogc;
2156 int gnutls_certificate_verify_peers3(gnutls_session_t session
,
2157 const(char)* hostname
,
2158 uint *status
) @nogc;
2161 gnutls_certificate_verify_peers(gnutls_session_t session
,
2162 gnutls_typed_vdata_st
* data
,
2164 uint *status
) @nogc;
2166 int gnutls_certificate_verification_status_print(uint status
,
2167 gnutls_certificate_type_t
2169 gnutls_datum_t
* out_
,
2172 int gnutls_pem_base64_encode(const(char)* msg
, const(gnutls_datum_t
)* data
,
2173 char *result
, usize
* result_size
) @nogc;
2174 int gnutls_pem_base64_decode(const(char)* header
,
2175 const(gnutls_datum_t
)* b64_data
,
2176 ubyte *result
, usize
* result_size
) @nogc;
2178 int gnutls_pem_base64_encode2(const(char)* msg
,
2179 const(gnutls_datum_t
)* data
,
2180 gnutls_datum_t
* result
) @nogc;
2181 int gnutls_pem_base64_decode2(const(char)* header
,
2182 const(gnutls_datum_t
)* b64_data
,
2183 gnutls_datum_t
* result
) @nogc;
2185 alias gnutls_pem_base64_encode_alloc
= gnutls_pem_base64_encode2
;
2186 alias gnutls_pem_base64_decode_alloc
= gnutls_pem_base64_decode2
;
2188 /* key_usage will be an OR of the following values:
2191 /* when the key is to be used for signing: */
2192 enum GNUTLS_KEY_DIGITAL_SIGNATURE
= 128;
2193 enum GNUTLS_KEY_NON_REPUDIATION
= 64;
2194 /* when the key is to be used for encryption: */
2195 enum GNUTLS_KEY_KEY_ENCIPHERMENT
= 32;
2196 enum GNUTLS_KEY_DATA_ENCIPHERMENT
= 16;
2197 enum GNUTLS_KEY_KEY_AGREEMENT
= 8;
2198 enum GNUTLS_KEY_KEY_CERT_SIGN
= 4;
2199 enum GNUTLS_KEY_CRL_SIGN
= 2;
2200 enum GNUTLS_KEY_ENCIPHER_ONLY
= 1;
2201 enum GNUTLS_KEY_DECIPHER_ONLY
= 32768;
2204 gnutls_certificate_set_params_function(gnutls_certificate_credentials_t
2205 res
, gnutls_params_function func
) /*@nogc*/;
2206 void gnutls_anon_set_params_function(gnutls_anon_server_credentials_t res
,
2207 gnutls_params_function func
) /*@nogc*/;
2208 void gnutls_psk_set_params_function(gnutls_psk_server_credentials_t res
,
2209 gnutls_params_function func
) /*@nogc*/;
2211 int gnutls_hex2bin(const(char)* hex_data
, usize hex_size
,
2212 void *bin_data
, usize
* bin_size
) @nogc;
2214 /* Trust on first use (or ssh like) functions */
2216 /* stores the provided information to a database
2218 //alias gnutls_tdb_store_func = int function (const(char)* db_name, const(char)* host, const(char)* service, time_t expiration, const(gnutls_datum_t)* pubkey) @nogc;
2219 //alias gnutls_tdb_store_commitment_func = int function (const(char)* db_name, const(char)* host, const(char)* service, time_t expiration, gnutls_digest_algorithm_t hash_algo, const(gnutls_datum_t)* hash) @nogc;
2221 /* searches for the provided host/service pair that match the
2222 * provided public key in the database. */
2223 //alias gnutls_tdb_verify_func = int function (const(char)* db_name, const(char)* host, const(char)* service, const(gnutls_datum_t)* pubkey) @nogc;
2226 struct gnutls_tdb_int
;
2227 alias gnutls_tdb_t
= gnutls_tdb_int
*;
2229 int gnutls_tdb_init(gnutls_tdb_t
* tdb
) @nogc;
2230 void gnutls_tdb_set_store_func(gnutls_tdb_t tdb
,
2231 gnutls_tdb_store_func store
) /*@nogc*/;
2232 void gnutls_tdb_set_store_commitment_func(gnutls_tdb_t tdb
,
2233 gnutls_tdb_store_commitment_func
2235 void gnutls_tdb_set_verify_func(gnutls_tdb_t tdb
,
2236 gnutls_tdb_verify_func verify
) /*@nogc*/;
2237 void gnutls_tdb_deinit(gnutls_tdb_t tdb
) @nogc;
2239 int gnutls_verify_stored_pubkey(const(char)* db_name
,
2242 const(char)* service
,
2243 gnutls_certificate_type_t cert_type
,
2244 const(gnutls_datum_t
)* cert
,
2247 int gnutls_store_commitment(const(char)* db_name
,
2250 const(char)* service
,
2251 gnutls_digest_algorithm_t hash_algo
,
2252 const(gnutls_datum_t
)* hash
,
2253 time_t expiration
, uint flags
) @nogc;
2255 int gnutls_store_pubkey(const(char)* db_name
,
2258 const(char)* service
,
2259 gnutls_certificate_type_t cert_type
,
2260 const(gnutls_datum_t
)* cert
,
2261 time_t expiration
, uint flags
) @nogc;
2263 /* Other helper functions */
2264 int gnutls_load_file(const(char)* filename
, gnutls_datum_t
* data
) @nogc;
2266 int gnutls_url_is_supported(const(char)* url
) @nogc;
2271 * gnutls_pin_flag_t:
2272 * @GNUTLS_PIN_USER: The PIN for the user.
2273 * @GNUTLS_PIN_SO: The PIN for the security officer (admin).
2274 * @GNUTLS_PIN_CONTEXT_SPECIFIC: The PIN is for a specific action and key like signing.
2275 * @GNUTLS_PIN_FINAL_TRY: This is the final try before blocking.
2276 * @GNUTLS_PIN_COUNT_LOW: Few tries remain before token blocks.
2277 * @GNUTLS_PIN_WRONG: Last given PIN was not correct.
2279 * Enumeration of different flags that are input to the PIN function.
2281 alias gnutls_pin_flag_t
= int;
2283 GNUTLS_PIN_USER
= (1 << 0),
2284 GNUTLS_PIN_SO
= (1 << 1),
2285 GNUTLS_PIN_FINAL_TRY
= (1 << 2),
2286 GNUTLS_PIN_COUNT_LOW
= (1 << 3),
2287 GNUTLS_PIN_CONTEXT_SPECIFIC
= (1 << 4),
2288 GNUTLS_PIN_WRONG
= (1 << 5)
2291 enum GNUTLS_PKCS11_PIN_USER
= GNUTLS_PIN_USER
;
2292 enum GNUTLS_PKCS11_PIN_SO
= GNUTLS_PIN_SO
;
2293 enum GNUTLS_PKCS11_PIN_FINAL_TRY
= GNUTLS_PIN_FINAL_TRY
;
2294 enum GNUTLS_PKCS11_PIN_COUNT_LOW
= GNUTLS_PIN_COUNT_LOW
;
2295 enum GNUTLS_PKCS11_PIN_CONTEXT_SPECIFIC
= GNUTLS_PIN_CONTEXT_SPECIFIC
;
2296 enum GNUTLS_PKCS11_PIN_WRONG
= GNUTLS_PIN_WRONG
;
2299 * gnutls_pin_callback_t:
2300 * @userdata: user-controlled data from gnutls_pkcs11_set_pin_function().
2301 * @attempt: pin-attempt counter, initially 0.
2302 * @token_url: URL of token.
2303 * @token_label: label of token.
2304 * @flags: a #gnutls_pin_flag_t flag.
2305 * @pin: buffer to hold PIN, of size @pin_max.
2306 * @pin_max: size of @pin buffer.
2308 * Callback function type for PKCS#11 or TPM PIN entry. It is set by
2309 * functions like gnutls_pkcs11_set_pin_function().
2311 * The callback should provides the PIN code to unlock the token with
2312 * label @token_label, specified by the URL @token_url.
2314 * The PIN code, as a NUL-terminated ASCII string, should be copied
2315 * into the @pin buffer (of maximum size @pin_max), and return 0 to
2316 * indicate success. Alternatively, the callback may return a
2317 * negative gnutls error code to indicate failure and cancel PIN entry
2318 * (in which case, the contents of the @pin parameter are ignored).
2320 * When a PIN is required, the callback will be invoked repeatedly
2321 * (and indefinitely) until either the returned PIN code is correct,
2322 * the callback returns failure, or the token refuses login (e.g. when
2323 * the token is locked due to too many incorrect PINs!). For the
2324 * first such invocation, the @attempt counter will have value zero;
2325 * it will increase by one for each subsequent attempt.
2327 * Returns: %GNUTLS_E_SUCCESS (0) on success or a negative error code on error.
2331 //alias gnutls_pin_callback_t = int function (void *userdata, int attempt, const(char)* token_url, const(char)* token_label, uint flags, char* pin, usize pin_max) @nogc;
2333 void gnutls_certificate_set_pin_function(gnutls_certificate_credentials_t
,
2334 gnutls_pin_callback_t fn
,
2335 void *userdata
) /*@nogc*/;
2337 /* Public string related functions */
2338 struct gnutls_buffer_st
{}
2339 alias gnutls_buffer_t
= gnutls_buffer_st
*;
2341 int gnutls_buffer_append_data(gnutls_buffer_t
, const(void)* data
, usize data_size
) @nogc;
2343 /* Public extensions related functions */
2345 alias gnutls_ext_priv_data_t
= void *;
2347 void gnutls_ext_set_data(gnutls_session_t session
, uint type
,
2348 gnutls_ext_priv_data_t
) @nogc;
2349 int gnutls_ext_get_data(gnutls_session_t session
, uint type
,
2350 gnutls_ext_priv_data_t
*) @nogc;
2352 //alias gnutls_ext_recv_func = int function (gnutls_session_t session, const(ubyte)* data, usize len) @nogc;
2353 //alias gnutls_ext_send_func = int function (gnutls_session_t session, gnutls_buffer_t extdata) @nogc;
2354 //alias gnutls_ext_deinit_data_func = void function (gnutls_ext_priv_data_t data) @nogc;
2355 //alias gnutls_ext_pack_func = int function (gnutls_ext_priv_data_t data, gnutls_buffer_t packed_data) @nogc;
2356 //alias gnutls_ext_unpack_func = int function (gnutls_buffer_t packed_data, gnutls_ext_priv_data_t *data) @nogc;
2359 * gnutls_ext_parse_type_t:
2360 * @GNUTLS_EXT_NONE: Never parsed
2361 * @GNUTLS_EXT_ANY: Any extension type.
2362 * @GNUTLS_EXT_APPLICATION: Application extension.
2363 * @GNUTLS_EXT_TLS: TLS-internal extension.
2364 * @GNUTLS_EXT_MANDATORY: Extension parsed even if resuming (or extensions are disabled).
2366 * Enumeration of different TLS extension types. This flag
2367 * indicates for an extension whether it is useful to application
2368 * level or TLS level only. This is (only) used to parse the
2369 * application level extensions before the "client_hello" callback
2372 alias gnutls_ext_parse_type_t
= int;
2375 GNUTLS_EXT_APPLICATION
= 1,
2377 GNUTLS_EXT_MANDATORY
= 3,
2381 /* Register a custom tls extension
2383 int gnutls_ext_register(const(char)* name
, int type
, gnutls_ext_parse_type_t parse_type
,
2384 gnutls_ext_recv_func recv_func
, gnutls_ext_send_func send_func
,
2385 gnutls_ext_deinit_data_func deinit_func
, gnutls_ext_pack_func pack_func
,
2386 gnutls_ext_unpack_func unpack_func
) /*@nogc*/;
2388 /* Public supplemental data related functions */
2390 //alias gnutls_supp_recv_func = int function (gnutls_session_t session, const(ubyte)* data, usize data_size) @nogc;
2391 //alias gnutls_supp_send_func = int function (gnutls_session_t session, gnutls_buffer_t buf) @nogc;
2393 int gnutls_supplemental_register(const(char)* name
,
2394 gnutls_supplemental_data_format_type_t type
,
2395 gnutls_supp_recv_func supp_recv_func
,
2396 gnutls_supp_send_func supp_send_func
) /*@nogc*/;
2398 void gnutls_supplemental_recv(gnutls_session_t session
, uint do_recv_supplemental
) @nogc;
2400 void gnutls_supplemental_send(gnutls_session_t session
, uint do_send_supplemental
) @nogc;
2402 /* FIPS140-2 related functions */
2403 int gnutls_fips140_mode_enabled() @nogc;
2405 /* Gnutls error codes. The mapping to a TLS alert is also shown in
2409 enum GNUTLS_E_SUCCESS
= 0;
2410 enum GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM
= -3;
2411 enum GNUTLS_E_UNKNOWN_CIPHER_TYPE
= -6;
2412 enum GNUTLS_E_LARGE_PACKET
= -7;
2413 enum GNUTLS_E_UNSUPPORTED_VERSION_PACKET
= -8; /* GNUTLS_A_PROTOCOL_VERSION */
2414 enum GNUTLS_E_UNEXPECTED_PACKET_LENGTH
= -9; /* GNUTLS_A_RECORD_OVERFLOW */
2415 enum GNUTLS_E_INVALID_SESSION
= -10;
2416 enum GNUTLS_E_FATAL_ALERT_RECEIVED
= -12;
2417 enum GNUTLS_E_UNEXPECTED_PACKET
= -15; /* GNUTLS_A_UNEXPECTED_MESSAGE */
2418 enum GNUTLS_E_WARNING_ALERT_RECEIVED
= -16;
2419 enum GNUTLS_E_ERROR_IN_FINISHED_PACKET
= -18;
2420 enum GNUTLS_E_UNEXPECTED_HANDSHAKE_PACKET
= -19;
2421 enum GNUTLS_E_UNKNOWN_CIPHER_SUITE
= -21; /* GNUTLS_A_HANDSHAKE_FAILURE */
2422 enum GNUTLS_E_UNWANTED_ALGORITHM
= -22;
2423 enum GNUTLS_E_MPI_SCAN_FAILED
= -23;
2424 enum GNUTLS_E_DECRYPTION_FAILED
= -24; /* GNUTLS_A_DECRYPTION_FAILED, GNUTLS_A_BAD_RECORD_MAC */
2425 enum GNUTLS_E_MEMORY_ERROR
= -25;
2426 enum GNUTLS_E_DECOMPRESSION_FAILED
= -26; /* GNUTLS_A_DECOMPRESSION_FAILURE */
2427 enum GNUTLS_E_COMPRESSION_FAILED
= -27;
2428 enum GNUTLS_E_AGAIN
= -28;
2429 enum GNUTLS_E_EXPIRED
= -29;
2430 enum GNUTLS_E_DB_ERROR
= -30;
2431 enum GNUTLS_E_SRP_PWD_ERROR
= -31;
2432 enum GNUTLS_E_INSUFFICIENT_CREDENTIALS
= -32;
2433 enum GNUTLS_E_INSUFICIENT_CREDENTIALS
= GNUTLS_E_INSUFFICIENT_CREDENTIALS
; /* for backwards compatibility only */
2434 enum GNUTLS_E_INSUFFICIENT_CRED
= GNUTLS_E_INSUFFICIENT_CREDENTIALS
;
2435 enum GNUTLS_E_INSUFICIENT_CRED
= GNUTLS_E_INSUFFICIENT_CREDENTIALS
; /* for backwards compatibility only */
2437 enum GNUTLS_E_HASH_FAILED
= -33;
2438 enum GNUTLS_E_BASE64_DECODING_ERROR
= -34;
2440 enum GNUTLS_E_MPI_PRINT_FAILED
= -35;
2441 enum GNUTLS_E_REHANDSHAKE
= -37; /* GNUTLS_A_NO_RENEGOTIATION */
2442 enum GNUTLS_E_GOT_APPLICATION_DATA
= -38;
2443 enum GNUTLS_E_RECORD_LIMIT_REACHED
= -39;
2444 enum GNUTLS_E_ENCRYPTION_FAILED
= -40;
2446 enum GNUTLS_E_PK_ENCRYPTION_FAILED
= -44;
2447 enum GNUTLS_E_PK_DECRYPTION_FAILED
= -45;
2448 enum GNUTLS_E_PK_SIGN_FAILED
= -46;
2449 enum GNUTLS_E_X509_UNSUPPORTED_CRITICAL_EXTENSION
= -47;
2450 enum GNUTLS_E_KEY_USAGE_VIOLATION
= -48;
2451 enum GNUTLS_E_NO_CERTIFICATE_FOUND
= -49; /* GNUTLS_A_BAD_CERTIFICATE */
2452 enum GNUTLS_E_INVALID_REQUEST
= -50;
2453 enum GNUTLS_E_SHORT_MEMORY_BUFFER
= -51;
2454 enum GNUTLS_E_INTERRUPTED
= -52;
2455 enum GNUTLS_E_PUSH_ERROR
= -53;
2456 enum GNUTLS_E_PULL_ERROR
= -54;
2457 enum GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER
= -55; /* GNUTLS_A_ILLEGAL_PARAMETER */
2458 enum GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE
= -56;
2459 enum GNUTLS_E_PKCS1_WRONG_PAD
= -57;
2460 enum GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION
= -58;
2461 enum GNUTLS_E_INTERNAL_ERROR
= -59;
2462 enum GNUTLS_E_DH_PRIME_UNACCEPTABLE
= -63;
2463 enum GNUTLS_E_FILE_ERROR
= -64;
2464 enum GNUTLS_E_TOO_MANY_EMPTY_PACKETS
= -78;
2465 enum GNUTLS_E_UNKNOWN_PK_ALGORITHM
= -80;
2466 enum GNUTLS_E_TOO_MANY_HANDSHAKE_PACKETS
= -81;
2468 /* returned if you need to generate temporary RSA
2469 * parameters. These are needed for export cipher suites.
2471 enum GNUTLS_E_NO_TEMPORARY_RSA_PARAMS
= -84;
2473 enum GNUTLS_E_NO_COMPRESSION_ALGORITHMS
= -86;
2474 enum GNUTLS_E_NO_CIPHER_SUITES
= -87;
2476 enum GNUTLS_E_OPENPGP_GETKEY_FAILED
= -88;
2477 enum GNUTLS_E_PK_SIG_VERIFY_FAILED
= -89;
2479 enum GNUTLS_E_ILLEGAL_SRP_USERNAME
= -90;
2480 enum GNUTLS_E_SRP_PWD_PARSING_ERROR
= -91;
2481 enum GNUTLS_E_NO_TEMPORARY_DH_PARAMS
= -93;
2483 /* For certificate and key stuff
2485 enum GNUTLS_E_ASN1_ELEMENT_NOT_FOUND
= -67;
2486 enum GNUTLS_E_ASN1_IDENTIFIER_NOT_FOUND
= -68;
2487 enum GNUTLS_E_ASN1_DER_ERROR
= -69;
2488 enum GNUTLS_E_ASN1_VALUE_NOT_FOUND
= -70;
2489 enum GNUTLS_E_ASN1_GENERIC_ERROR
= -71;
2490 enum GNUTLS_E_ASN1_VALUE_NOT_VALID
= -72;
2491 enum GNUTLS_E_ASN1_TAG_ERROR
= -73;
2492 enum GNUTLS_E_ASN1_TAG_IMPLICIT
= -74;
2493 enum GNUTLS_E_ASN1_TYPE_ANY_ERROR
= -75;
2494 enum GNUTLS_E_ASN1_SYNTAX_ERROR
= -76;
2495 enum GNUTLS_E_ASN1_DER_OVERFLOW
= -77;
2496 enum GNUTLS_E_OPENPGP_UID_REVOKED
= -79;
2497 enum GNUTLS_E_CERTIFICATE_ERROR
= -43;
2498 enum GNUTLS_E_X509_CERTIFICATE_ERROR
= GNUTLS_E_CERTIFICATE_ERROR
;
2499 enum GNUTLS_E_CERTIFICATE_KEY_MISMATCH
= -60;
2500 enum GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE
= -61; /* GNUTLS_A_UNSUPPORTED_CERTIFICATE */
2501 enum GNUTLS_E_X509_UNKNOWN_SAN
= -62;
2502 enum GNUTLS_E_OPENPGP_FINGERPRINT_UNSUPPORTED
= -94;
2503 enum GNUTLS_E_X509_UNSUPPORTED_ATTRIBUTE
= -95;
2504 enum GNUTLS_E_UNKNOWN_HASH_ALGORITHM
= -96;
2505 enum GNUTLS_E_UNKNOWN_PKCS_CONTENT_TYPE
= -97;
2506 enum GNUTLS_E_UNKNOWN_PKCS_BAG_TYPE
= -98;
2507 enum GNUTLS_E_INVALID_PASSWORD
= -99;
2508 enum GNUTLS_E_MAC_VERIFY_FAILED
= -100; /* for PKCS #12 MAC */
2509 enum GNUTLS_E_CONSTRAINT_ERROR
= -101;
2511 enum GNUTLS_E_WARNING_IA_IPHF_RECEIVED
= -102;
2512 enum GNUTLS_E_WARNING_IA_FPHF_RECEIVED
= -103;
2514 enum GNUTLS_E_IA_VERIFY_FAILED
= -104;
2515 enum GNUTLS_E_UNKNOWN_ALGORITHM
= -105;
2516 enum GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM
= -106;
2517 enum GNUTLS_E_SAFE_RENEGOTIATION_FAILED
= -107;
2518 enum GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED
= -108;
2519 enum GNUTLS_E_UNKNOWN_SRP_USERNAME
= -109;
2520 enum GNUTLS_E_PREMATURE_TERMINATION
= -110;
2522 enum GNUTLS_E_BASE64_ENCODING_ERROR
= -201;
2523 enum GNUTLS_E_INCOMPATIBLE_GCRYPT_LIBRARY
= -202; /* obsolete */
2524 enum GNUTLS_E_INCOMPATIBLE_CRYPTO_LIBRARY
= -202;
2525 enum GNUTLS_E_INCOMPATIBLE_LIBTASN1_LIBRARY
= -203;
2527 enum GNUTLS_E_OPENPGP_KEYRING_ERROR
= -204;
2528 enum GNUTLS_E_X509_UNSUPPORTED_OID
= -205;
2530 enum GNUTLS_E_RANDOM_FAILED
= -206;
2531 enum GNUTLS_E_BASE64_UNEXPECTED_HEADER_ERROR
= -207;
2533 enum GNUTLS_E_OPENPGP_SUBKEY_ERROR
= -208;
2535 enum GNUTLS_E_CRYPTO_ALREADY_REGISTERED
= GNUTLS_E_ALREADY_REGISTERED
;
2536 enum GNUTLS_E_ALREADY_REGISTERED
= -209;
2538 enum GNUTLS_E_HANDSHAKE_TOO_LARGE
= -210;
2540 enum GNUTLS_E_CRYPTODEV_IOCTL_ERROR
= -211;
2541 enum GNUTLS_E_CRYPTODEV_DEVICE_ERROR
= -212;
2543 enum GNUTLS_E_CHANNEL_BINDING_NOT_AVAILABLE
= -213;
2544 enum GNUTLS_E_BAD_COOKIE
= -214;
2545 enum GNUTLS_E_OPENPGP_PREFERRED_KEY_ERROR
= -215;
2546 enum GNUTLS_E_INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL
= -216;
2547 enum GNUTLS_E_INSUFFICIENT_SECURITY
= -217;
2549 enum GNUTLS_E_HEARTBEAT_PONG_RECEIVED
= -292;
2550 enum GNUTLS_E_HEARTBEAT_PING_RECEIVED
= -293;
2552 /* PKCS11 related */
2553 enum GNUTLS_E_PKCS11_ERROR
= -300;
2554 enum GNUTLS_E_PKCS11_LOAD_ERROR
= -301;
2555 enum GNUTLS_E_PARSING_ERROR
= -302;
2556 enum GNUTLS_E_PKCS11_PIN_ERROR
= -303;
2558 enum GNUTLS_E_PKCS11_SLOT_ERROR
= -305;
2559 enum GNUTLS_E_LOCKING_ERROR
= -306;
2560 enum GNUTLS_E_PKCS11_ATTRIBUTE_ERROR
= -307;
2561 enum GNUTLS_E_PKCS11_DEVICE_ERROR
= -308;
2562 enum GNUTLS_E_PKCS11_DATA_ERROR
= -309;
2563 enum GNUTLS_E_PKCS11_UNSUPPORTED_FEATURE_ERROR
= -310;
2564 enum GNUTLS_E_PKCS11_KEY_ERROR
= -311;
2565 enum GNUTLS_E_PKCS11_PIN_EXPIRED
= -312;
2566 enum GNUTLS_E_PKCS11_PIN_LOCKED
= -313;
2567 enum GNUTLS_E_PKCS11_SESSION_ERROR
= -314;
2568 enum GNUTLS_E_PKCS11_SIGNATURE_ERROR
= -315;
2569 enum GNUTLS_E_PKCS11_TOKEN_ERROR
= -316;
2570 enum GNUTLS_E_PKCS11_USER_ERROR
= -317;
2572 enum GNUTLS_E_CRYPTO_INIT_FAILED
= -318;
2573 enum GNUTLS_E_TIMEDOUT
= -319;
2574 enum GNUTLS_E_USER_ERROR
= -320;
2575 enum GNUTLS_E_ECC_NO_SUPPORTED_CURVES
= -321;
2576 enum GNUTLS_E_ECC_UNSUPPORTED_CURVE
= -322;
2577 enum GNUTLS_E_PKCS11_REQUESTED_OBJECT_NOT_AVAILBLE
= -323;
2578 enum GNUTLS_E_CERTIFICATE_LIST_UNSORTED
= -324;
2579 enum GNUTLS_E_ILLEGAL_PARAMETER
= -325;
2580 enum GNUTLS_E_NO_PRIORITIES_WERE_SET
= -326;
2581 enum GNUTLS_E_X509_UNSUPPORTED_EXTENSION
= -327;
2582 enum GNUTLS_E_SESSION_EOF
= -328;
2584 enum GNUTLS_E_TPM_ERROR
= -329;
2585 enum GNUTLS_E_TPM_KEY_PASSWORD_ERROR
= -330;
2586 enum GNUTLS_E_TPM_SRK_PASSWORD_ERROR
= -331;
2587 enum GNUTLS_E_TPM_SESSION_ERROR
= -332;
2588 enum GNUTLS_E_TPM_KEY_NOT_FOUND
= -333;
2589 enum GNUTLS_E_TPM_UNINITIALIZED
= -334;
2590 enum GNUTLS_E_TPM_NO_LIB
= -335;
2592 enum GNUTLS_E_NO_CERTIFICATE_STATUS
= -340;
2593 enum GNUTLS_E_OCSP_RESPONSE_ERROR
= -341;
2594 enum GNUTLS_E_RANDOM_DEVICE_ERROR
= -342;
2595 enum GNUTLS_E_AUTH_ERROR
= -343;
2596 enum GNUTLS_E_NO_APPLICATION_PROTOCOL
= -344;
2597 enum GNUTLS_E_SOCKETS_INIT_ERROR
= -345;
2598 enum GNUTLS_E_KEY_IMPORT_FAILED
= -346;
2599 enum GNUTLS_E_INAPPROPRIATE_FALLBACK
= -347; /*GNUTLS_A_INAPPROPRIATE_FALLBACK*/
2600 enum GNUTLS_E_CERTIFICATE_VERIFICATION_ERROR
= -348;
2602 enum GNUTLS_E_SELF_TEST_ERROR
= -400;
2603 enum GNUTLS_E_NO_SELF_TEST
= -401;
2604 enum GNUTLS_E_LIB_IN_ERROR_STATE
= -402;
2605 enum GNUTLS_E_PK_GENERATION_ERROR
= -403;
2606 enum GNUTLS_E_IDNA_ERROR
= -404;
2608 enum GNUTLS_E_NEED_FALLBACK
= -405;
2610 enum GNUTLS_E_UNIMPLEMENTED_FEATURE
= -1250;
2614 enum GNUTLS_E_APPLICATION_ERROR_MAX
= -65000;
2615 enum GNUTLS_E_APPLICATION_ERROR_MIN
= -65500;