1/* -*- c -*-
2 * Copyright (C) 2000-2016 Free Software Foundation, Inc.
3 * Copyright (C) 2015-2016 Red Hat, Inc.
4 *
5 * Author: Nikos Mavrogiannopoulos
6 *
7 * This file is part of GnuTLS.
8 *
9 * The GnuTLS is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public License
11 * as published by the Free Software Foundation; either version 2.1 of
12 * the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>
21 *
22 */
23
24/* This file contains the types and prototypes for all the
25 * high level functionality of the gnutls main library.
26 *
27 * If the optional C++ binding was built, it is available in
28 * gnutls/gnutlsxx.h.
29 *
30 * The openssl compatibility layer (which is under the GNU GPL
31 * license) is in gnutls/openssl.h.
32 *
33 * The low level cipher functionality is in gnutls/crypto.h.
34 */
35
36
37#ifndef GNUTLS_H
38#define GNUTLS_H
39
40/* Get size_t. */
41#include <stddef.h>
42/* Get ssize_t. */
43#ifndef HAVE_SSIZE_T
44#define HAVE_SSIZE_T
45/* *INDENT-OFF* */
46#include <sys/types.h>
47/* *INDENT-ON* */
48#endif
49/* Get time_t. */
50#include <time.h>
51
52/* *INDENT-OFF* */
53#ifdef __cplusplus
54extern "C" {
55#endif
56/* *INDENT-ON* */
57
58#define GNUTLS_VERSION "3.5.18"
59
60#define GNUTLS_VERSION_MAJOR 3
61#define GNUTLS_VERSION_MINOR 5
62#define GNUTLS_VERSION_PATCH 18
63
64#define GNUTLS_VERSION_NUMBER 0x030512
65
66#define GNUTLS_CIPHER_RIJNDAEL_128_CBC GNUTLS_CIPHER_AES_128_CBC
67#define GNUTLS_CIPHER_RIJNDAEL_256_CBC GNUTLS_CIPHER_AES_256_CBC
68#define GNUTLS_CIPHER_RIJNDAEL_CBC GNUTLS_CIPHER_AES_128_CBC
69#define GNUTLS_CIPHER_ARCFOUR GNUTLS_CIPHER_ARCFOUR_128
70
71#if !defined(GNUTLS_INTERNAL_BUILD) && defined(_WIN32)
72# define _SYM_EXPORT __declspec(dllimport)
73#else
74# define _SYM_EXPORT
75#endif
76
77#ifdef __GNUC__
78# define __GNUTLS_CONST__ __attribute__((const))
79# define __GNUTLS_PURE__ __attribute__((pure))
80#else
81# define __GNUTLS_CONST__
82# define __GNUTLS_PURE__
83#endif
84
85
86/* Use the following definition globally in your program to disable
87 * implicit initialization of gnutls. */
88#define GNUTLS_SKIP_GLOBAL_INIT int _gnutls_global_init_skip(void); \
89 int _gnutls_global_init_skip(void) {return 1;}
90
91/**
92 * gnutls_cipher_algorithm_t:
93 * @GNUTLS_CIPHER_UNKNOWN: Value to identify an unknown/unsupported algorithm.
94 * @GNUTLS_CIPHER_NULL: The NULL (identity) encryption algorithm.
95 * @GNUTLS_CIPHER_ARCFOUR_128: ARCFOUR stream cipher with 128-bit keys.
96 * @GNUTLS_CIPHER_3DES_CBC: 3DES in CBC mode.
97 * @GNUTLS_CIPHER_AES_128_CBC: AES in CBC mode with 128-bit keys.
98 * @GNUTLS_CIPHER_AES_192_CBC: AES in CBC mode with 192-bit keys.
99 * @GNUTLS_CIPHER_AES_256_CBC: AES in CBC mode with 256-bit keys.
100 * @GNUTLS_CIPHER_ARCFOUR_40: ARCFOUR stream cipher with 40-bit keys.
101 * @GNUTLS_CIPHER_CAMELLIA_128_CBC: Camellia in CBC mode with 128-bit keys.
102 * @GNUTLS_CIPHER_CAMELLIA_192_CBC: Camellia in CBC mode with 192-bit keys.
103 * @GNUTLS_CIPHER_CAMELLIA_256_CBC: Camellia in CBC mode with 256-bit keys.
104 * @GNUTLS_CIPHER_RC2_40_CBC: RC2 in CBC mode with 40-bit keys.
105 * @GNUTLS_CIPHER_DES_CBC: DES in CBC mode (56-bit keys).
106 * @GNUTLS_CIPHER_AES_128_GCM: AES in GCM mode with 128-bit keys.
107 * @GNUTLS_CIPHER_AES_256_GCM: AES in GCM mode with 256-bit keys.
108 * @GNUTLS_CIPHER_AES_128_CCM: AES in CCM mode with 128-bit keys.
109 * @GNUTLS_CIPHER_AES_256_CCM: AES in CCM mode with 256-bit keys.
110 * @GNUTLS_CIPHER_AES_128_CCM_8: AES in CCM mode with 64-bit tag and 128-bit keys.
111 * @GNUTLS_CIPHER_AES_256_CCM_8: AES in CCM mode with 64-bit tag and 256-bit keys.
112 * @GNUTLS_CIPHER_CAMELLIA_128_GCM: CAMELLIA in GCM mode with 128-bit keys.
113 * @GNUTLS_CIPHER_CAMELLIA_256_GCM: CAMELLIA in GCM mode with 256-bit keys.
114 * @GNUTLS_CIPHER_SALSA20_256: Salsa20 with 256-bit keys.
115 * @GNUTLS_CIPHER_ESTREAM_SALSA20_256: Estream's Salsa20 variant with 256-bit keys.
116 * @GNUTLS_CIPHER_CHACHA20_POLY1305: The Chacha20 cipher with the Poly1305 authenticator (AEAD).
117 * @GNUTLS_CIPHER_IDEA_PGP_CFB: IDEA in CFB mode (placeholder - unsupported).
118 * @GNUTLS_CIPHER_3DES_PGP_CFB: 3DES in CFB mode (placeholder - unsupported).
119 * @GNUTLS_CIPHER_CAST5_PGP_CFB: CAST5 in CFB mode (placeholder - unsupported).
120 * @GNUTLS_CIPHER_BLOWFISH_PGP_CFB: Blowfish in CFB mode (placeholder - unsupported).
121 * @GNUTLS_CIPHER_SAFER_SK128_PGP_CFB: Safer-SK in CFB mode with 128-bit keys (placeholder - unsupported).
122 * @GNUTLS_CIPHER_AES128_PGP_CFB: AES in CFB mode with 128-bit keys (placeholder - unsupported).
123 * @GNUTLS_CIPHER_AES192_PGP_CFB: AES in CFB mode with 192-bit keys (placeholder - unsupported).
124 * @GNUTLS_CIPHER_AES256_PGP_CFB: AES in CFB mode with 256-bit keys (placeholder - unsupported).
125 * @GNUTLS_CIPHER_TWOFISH_PGP_CFB: Twofish in CFB mode (placeholder - unsupported).
126 *
127 * Enumeration of different symmetric encryption algorithms.
128 */
129typedef enum gnutls_cipher_algorithm {
130 GNUTLS_CIPHER_UNKNOWN = 0,
131 GNUTLS_CIPHER_NULL = 1,
132 GNUTLS_CIPHER_ARCFOUR_128 = 2,
133 GNUTLS_CIPHER_3DES_CBC = 3,
134 GNUTLS_CIPHER_AES_128_CBC = 4,
135 GNUTLS_CIPHER_AES_256_CBC = 5,
136 GNUTLS_CIPHER_ARCFOUR_40 = 6,
137 GNUTLS_CIPHER_CAMELLIA_128_CBC = 7,
138 GNUTLS_CIPHER_CAMELLIA_256_CBC = 8,
139 GNUTLS_CIPHER_AES_192_CBC = 9,
140 GNUTLS_CIPHER_AES_128_GCM = 10,
141 GNUTLS_CIPHER_AES_256_GCM = 11,
142 GNUTLS_CIPHER_CAMELLIA_192_CBC = 12,
143 GNUTLS_CIPHER_SALSA20_256 = 13,
144 GNUTLS_CIPHER_ESTREAM_SALSA20_256 = 14,
145 GNUTLS_CIPHER_CAMELLIA_128_GCM = 15,
146 GNUTLS_CIPHER_CAMELLIA_256_GCM = 16,
147 GNUTLS_CIPHER_RC2_40_CBC = 17,
148 GNUTLS_CIPHER_DES_CBC = 18,
149 GNUTLS_CIPHER_AES_128_CCM = 19,
150 GNUTLS_CIPHER_AES_256_CCM = 20,
151 GNUTLS_CIPHER_AES_128_CCM_8 = 21,
152 GNUTLS_CIPHER_AES_256_CCM_8 = 22,
153 GNUTLS_CIPHER_CHACHA20_POLY1305 = 23,
154
155 /* used only for PGP internals. Ignored in TLS/SSL
156 */
157 GNUTLS_CIPHER_IDEA_PGP_CFB = 200,
158 GNUTLS_CIPHER_3DES_PGP_CFB = 201,
159 GNUTLS_CIPHER_CAST5_PGP_CFB = 202,
160 GNUTLS_CIPHER_BLOWFISH_PGP_CFB = 203,
161 GNUTLS_CIPHER_SAFER_SK128_PGP_CFB = 204,
162 GNUTLS_CIPHER_AES128_PGP_CFB = 205,
163 GNUTLS_CIPHER_AES192_PGP_CFB = 206,
164 GNUTLS_CIPHER_AES256_PGP_CFB = 207,
165 GNUTLS_CIPHER_TWOFISH_PGP_CFB = 208
166} gnutls_cipher_algorithm_t;
167
168/**
169 * gnutls_kx_algorithm_t:
170 * @GNUTLS_KX_UNKNOWN: Unknown key-exchange algorithm.
171 * @GNUTLS_KX_RSA: RSA key-exchange algorithm.
172 * @GNUTLS_KX_DHE_DSS: DHE-DSS key-exchange algorithm.
173 * @GNUTLS_KX_DHE_RSA: DHE-RSA key-exchange algorithm.
174 * @GNUTLS_KX_ECDHE_RSA: ECDHE-RSA key-exchange algorithm.
175 * @GNUTLS_KX_ECDHE_ECDSA: ECDHE-ECDSA key-exchange algorithm.
176 * @GNUTLS_KX_ANON_DH: Anon-DH key-exchange algorithm.
177 * @GNUTLS_KX_ANON_ECDH: Anon-ECDH key-exchange algorithm.
178 * @GNUTLS_KX_SRP: SRP key-exchange algorithm.
179 * @GNUTLS_KX_RSA_EXPORT: RSA-EXPORT key-exchange algorithm (defunc).
180 * @GNUTLS_KX_SRP_RSA: SRP-RSA key-exchange algorithm.
181 * @GNUTLS_KX_SRP_DSS: SRP-DSS key-exchange algorithm.
182 * @GNUTLS_KX_PSK: PSK key-exchange algorithm.
183 * @GNUTLS_KX_DHE_PSK: DHE-PSK key-exchange algorithm.
184 * @GNUTLS_KX_ECDHE_PSK: ECDHE-PSK key-exchange algorithm.
185 * @GNUTLS_KX_RSA_PSK: RSA-PSK key-exchange algorithm.
186 *
187 * Enumeration of different key exchange algorithms.
188 */
189typedef enum {
190 GNUTLS_KX_UNKNOWN = 0,
191 GNUTLS_KX_RSA = 1,
192 GNUTLS_KX_DHE_DSS = 2,
193 GNUTLS_KX_DHE_RSA = 3,
194 GNUTLS_KX_ANON_DH = 4,
195 GNUTLS_KX_SRP = 5,
196 GNUTLS_KX_RSA_EXPORT = 6,
197 GNUTLS_KX_SRP_RSA = 7,
198 GNUTLS_KX_SRP_DSS = 8,
199 GNUTLS_KX_PSK = 9,
200 GNUTLS_KX_DHE_PSK = 10,
201 GNUTLS_KX_ANON_ECDH = 11,
202 GNUTLS_KX_ECDHE_RSA = 12,
203 GNUTLS_KX_ECDHE_ECDSA = 13,
204 GNUTLS_KX_ECDHE_PSK = 14,
205 GNUTLS_KX_RSA_PSK = 15
206} gnutls_kx_algorithm_t;
207
208/**
209 * gnutls_params_type_t:
210 * @GNUTLS_PARAMS_RSA_EXPORT: Session RSA-EXPORT parameters (defunc).
211 * @GNUTLS_PARAMS_DH: Session Diffie-Hellman parameters.
212 * @GNUTLS_PARAMS_ECDH: Session Elliptic-Curve Diffie-Hellman parameters.
213 *
214 * Enumeration of different TLS session parameter types.
215 */
216typedef enum {
217 GNUTLS_PARAMS_RSA_EXPORT = 1,
218 GNUTLS_PARAMS_DH = 2,
219 GNUTLS_PARAMS_ECDH = 3
220} gnutls_params_type_t;
221
222/**
223 * gnutls_credentials_type_t:
224 * @GNUTLS_CRD_CERTIFICATE: Certificate credential.
225 * @GNUTLS_CRD_ANON: Anonymous credential.
226 * @GNUTLS_CRD_SRP: SRP credential.
227 * @GNUTLS_CRD_PSK: PSK credential.
228 * @GNUTLS_CRD_IA: IA credential.
229 *
230 * Enumeration of different credential types.
231 */
232typedef enum {
233 GNUTLS_CRD_CERTIFICATE = 1,
234 GNUTLS_CRD_ANON,
235 GNUTLS_CRD_SRP,
236 GNUTLS_CRD_PSK,
237 GNUTLS_CRD_IA
238} gnutls_credentials_type_t;
239
240#define GNUTLS_MAC_SHA GNUTLS_MAC_SHA1
241#define GNUTLS_DIG_SHA GNUTLS_DIG_SHA1
242
243/**
244 * gnutls_mac_algorithm_t:
245 * @GNUTLS_MAC_UNKNOWN: Unknown MAC algorithm.
246 * @GNUTLS_MAC_NULL: NULL MAC algorithm (empty output).
247 * @GNUTLS_MAC_MD5: HMAC-MD5 algorithm.
248 * @GNUTLS_MAC_SHA1: HMAC-SHA-1 algorithm.
249 * @GNUTLS_MAC_RMD160: HMAC-RMD160 algorithm.
250 * @GNUTLS_MAC_MD2: HMAC-MD2 algorithm.
251 * @GNUTLS_MAC_SHA256: HMAC-SHA-256 algorithm.
252 * @GNUTLS_MAC_SHA384: HMAC-SHA-384 algorithm.
253 * @GNUTLS_MAC_SHA512: HMAC-SHA-512 algorithm.
254 * @GNUTLS_MAC_SHA224: HMAC-SHA-224 algorithm.
255 * @GNUTLS_MAC_AEAD: MAC implicit through AEAD cipher.
256 * @GNUTLS_MAC_UMAC_96: The UMAC-96 MAC algorithm.
257 * @GNUTLS_MAC_UMAC_128: The UMAC-128 MAC algorithm.
258 *
259 * Enumeration of different Message Authentication Code (MAC)
260 * algorithms.
261 */
262typedef enum {
263 GNUTLS_MAC_UNKNOWN = 0,
264 GNUTLS_MAC_NULL = 1,
265 GNUTLS_MAC_MD5 = 2,
266 GNUTLS_MAC_SHA1 = 3,
267 GNUTLS_MAC_RMD160 = 4,
268 GNUTLS_MAC_MD2 = 5,
269 GNUTLS_MAC_SHA256 = 6,
270 GNUTLS_MAC_SHA384 = 7,
271 GNUTLS_MAC_SHA512 = 8,
272 GNUTLS_MAC_SHA224 = 9,
273 GNUTLS_MAC_SHA3_224 = 10, /* reserved: no implementation */
274 GNUTLS_MAC_SHA3_256 = 11, /* reserved: no implementation */
275 GNUTLS_MAC_SHA3_384 = 12, /* reserved: no implementation */
276 GNUTLS_MAC_SHA3_512 = 13, /* reserved: no implementation */
277 /* If you add anything here, make sure you align with
278 gnutls_digest_algorithm_t. */
279 GNUTLS_MAC_AEAD = 200, /* indicates that MAC is on the cipher */
280 GNUTLS_MAC_UMAC_96 = 201,
281 GNUTLS_MAC_UMAC_128 = 202
282} gnutls_mac_algorithm_t;
283
284/**
285 * gnutls_digest_algorithm_t:
286 * @GNUTLS_DIG_UNKNOWN: Unknown hash algorithm.
287 * @GNUTLS_DIG_NULL: NULL hash algorithm (empty output).
288 * @GNUTLS_DIG_MD5: MD5 algorithm.
289 * @GNUTLS_DIG_SHA1: SHA-1 algorithm.
290 * @GNUTLS_DIG_RMD160: RMD160 algorithm.
291 * @GNUTLS_DIG_MD2: MD2 algorithm.
292 * @GNUTLS_DIG_SHA256: SHA-256 algorithm.
293 * @GNUTLS_DIG_SHA384: SHA-384 algorithm.
294 * @GNUTLS_DIG_SHA512: SHA-512 algorithm.
295 * @GNUTLS_DIG_SHA224: SHA-224 algorithm.
296 * @GNUTLS_DIG_SHA3_224: SHA3-224 algorithm.
297 * @GNUTLS_DIG_SHA3_256: SHA3-256 algorithm.
298 * @GNUTLS_DIG_SHA3_384: SHA3-384 algorithm.
299 * @GNUTLS_DIG_SHA3_512: SHA3-512 algorithm.
300 *
301 * Enumeration of different digest (hash) algorithms.
302 */
303typedef enum {
304 GNUTLS_DIG_UNKNOWN = GNUTLS_MAC_UNKNOWN,
305 GNUTLS_DIG_NULL = GNUTLS_MAC_NULL,
306 GNUTLS_DIG_MD5 = GNUTLS_MAC_MD5,
307 GNUTLS_DIG_SHA1 = GNUTLS_MAC_SHA1,
308 GNUTLS_DIG_RMD160 = GNUTLS_MAC_RMD160,
309 GNUTLS_DIG_MD2 = GNUTLS_MAC_MD2,
310 GNUTLS_DIG_SHA256 = GNUTLS_MAC_SHA256,
311 GNUTLS_DIG_SHA384 = GNUTLS_MAC_SHA384,
312 GNUTLS_DIG_SHA512 = GNUTLS_MAC_SHA512,
313 GNUTLS_DIG_SHA224 = GNUTLS_MAC_SHA224,
314 GNUTLS_DIG_SHA3_224 = GNUTLS_MAC_SHA3_224,
315 GNUTLS_DIG_SHA3_256 = GNUTLS_MAC_SHA3_256,
316 GNUTLS_DIG_SHA3_384 = GNUTLS_MAC_SHA3_384,
317 GNUTLS_DIG_SHA3_512 = GNUTLS_MAC_SHA3_512
318 /* If you add anything here, make sure you align with
319 gnutls_mac_algorithm_t. */
320} gnutls_digest_algorithm_t;
321
322 /* exported for other gnutls headers. This is the maximum number of
323 * algorithms (ciphers, kx or macs).
324 */
325#define GNUTLS_MAX_ALGORITHM_NUM 64
326#define GNUTLS_MAX_SESSION_ID_SIZE 32
327
328
329/**
330 * gnutls_compression_method_t:
331 * @GNUTLS_COMP_UNKNOWN: Unknown compression method.
332 * @GNUTLS_COMP_NULL: The NULL compression method (no compression).
333 * @GNUTLS_COMP_DEFLATE: The DEFLATE compression method from zlib.
334 * @GNUTLS_COMP_ZLIB: Same as %GNUTLS_COMP_DEFLATE.
335 *
336 * Enumeration of different TLS compression methods.
337 */
338typedef enum {
339 GNUTLS_COMP_UNKNOWN = 0,
340 GNUTLS_COMP_NULL = 1,
341 GNUTLS_COMP_DEFLATE = 2,
342 GNUTLS_COMP_ZLIB = GNUTLS_COMP_DEFLATE
343} gnutls_compression_method_t;
344
345
346/**
347 * gnutls_init_flags_t:
348 *
349 * @GNUTLS_SERVER: Connection end is a server.
350 * @GNUTLS_CLIENT: Connection end is a client.
351 * @GNUTLS_DATAGRAM: Connection is datagram oriented (DTLS). Since 3.0.0.
352 * @GNUTLS_NONBLOCK: Connection should not block. Since 3.0.0.
353 * @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 (since 3.4.2).
354 * @GNUTLS_NO_EXTENSIONS: Do not enable any TLS extensions by default (since 3.1.2).
355 * @GNUTLS_NO_REPLAY_PROTECTION: Disable any replay protection in DTLS. This must only be used if replay protection is achieved using other means. Since 3.2.2.
356 * @GNUTLS_ALLOW_ID_CHANGE: Allow the peer to replace its certificate, or change its ID during a rehandshake. This change is often used in attacks and thus prohibited by default. Since 3.5.0.
357 * @GNUTLS_ENABLE_FALSE_START: Enable the TLS false start on client side if the negotiated ciphersuites allow it. This will enable sending data prior to the handshake being complete, and may introduce a risk of crypto failure when combined with certain key exchanged; for that GnuTLS may not enable that option in ciphersuites that are known to be not safe for false start. Since 3.5.0.
358 * @GNUTLS_FORCE_CLIENT_CERT: When in client side and only a single cert is specified, send that certificate irrespective of the issuers expected by the server. Since 3.5.0.
359 * @GNUTLS_NO_TICKETS: Flag to indicate that the session should not use resumption with session tickets.
360 *
361 * Enumeration of different flags for gnutls_init() function. All the flags
362 * can be combined except @GNUTLS_SERVER and @GNUTLS_CLIENT which are mutually
363 * exclusive.
364 */
365typedef enum {
366 GNUTLS_SERVER = 1,
367 GNUTLS_CLIENT = (1<<1),
368 GNUTLS_DATAGRAM = (1<<2),
369 GNUTLS_NONBLOCK = (1<<3),
370 GNUTLS_NO_EXTENSIONS = (1<<4),
371 GNUTLS_NO_REPLAY_PROTECTION = (1<<5),
372 GNUTLS_NO_SIGNAL = (1<<6),
373 GNUTLS_ALLOW_ID_CHANGE = (1<<7),
374 GNUTLS_ENABLE_FALSE_START = (1<<8),
375 GNUTLS_FORCE_CLIENT_CERT = (1<<9),
376 GNUTLS_NO_TICKETS = (1<<10)
377} gnutls_init_flags_t;
378
379/* compatibility defines (previous versions of gnutls
380 * used defines instead of enumerated values). */
381#define GNUTLS_SERVER (1)
382#define GNUTLS_CLIENT (1<<1)
383#define GNUTLS_DATAGRAM (1<<2)
384#define GNUTLS_NONBLOCK (1<<3)
385#define GNUTLS_NO_EXTENSIONS (1<<4)
386#define GNUTLS_NO_REPLAY_PROTECTION (1<<5)
387#define GNUTLS_NO_SIGNAL (1<<6)
388#define GNUTLS_ALLOW_ID_CHANGE (1<<7)
389#define GNUTLS_ENABLE_FALSE_START (1<<8)
390#define GNUTLS_FORCE_CLIENT_CERT (1<<9)
391#define GNUTLS_NO_TICKETS (1<<10)
392
393/**
394 * gnutls_alert_level_t:
395 * @GNUTLS_AL_WARNING: Alert of warning severity.
396 * @GNUTLS_AL_FATAL: Alert of fatal severity.
397 *
398 * Enumeration of different TLS alert severities.
399 */
400typedef enum {
401 GNUTLS_AL_WARNING = 1,
402 GNUTLS_AL_FATAL
403} gnutls_alert_level_t;
404
405/**
406 * gnutls_alert_description_t:
407 * @GNUTLS_A_CLOSE_NOTIFY: Close notify.
408 * @GNUTLS_A_UNEXPECTED_MESSAGE: Unexpected message.
409 * @GNUTLS_A_BAD_RECORD_MAC: Bad record MAC.
410 * @GNUTLS_A_DECRYPTION_FAILED: Decryption failed.
411 * @GNUTLS_A_RECORD_OVERFLOW: Record overflow.
412 * @GNUTLS_A_DECOMPRESSION_FAILURE: Decompression failed.
413 * @GNUTLS_A_HANDSHAKE_FAILURE: Handshake failed.
414 * @GNUTLS_A_SSL3_NO_CERTIFICATE: No certificate.
415 * @GNUTLS_A_BAD_CERTIFICATE: Certificate is bad.
416 * @GNUTLS_A_UNSUPPORTED_CERTIFICATE: Certificate is not supported.
417 * @GNUTLS_A_CERTIFICATE_REVOKED: Certificate was revoked.
418 * @GNUTLS_A_CERTIFICATE_EXPIRED: Certificate is expired.
419 * @GNUTLS_A_CERTIFICATE_UNKNOWN: Unknown certificate.
420 * @GNUTLS_A_ILLEGAL_PARAMETER: Illegal parameter.
421 * @GNUTLS_A_UNKNOWN_CA: CA is unknown.
422 * @GNUTLS_A_ACCESS_DENIED: Access was denied.
423 * @GNUTLS_A_DECODE_ERROR: Decode error.
424 * @GNUTLS_A_DECRYPT_ERROR: Decrypt error.
425 * @GNUTLS_A_EXPORT_RESTRICTION: Export restriction.
426 * @GNUTLS_A_PROTOCOL_VERSION: Error in protocol version.
427 * @GNUTLS_A_INSUFFICIENT_SECURITY: Insufficient security.
428 * @GNUTLS_A_USER_CANCELED: User canceled.
429 * @GNUTLS_A_INTERNAL_ERROR: Internal error.
430 * @GNUTLS_A_INAPPROPRIATE_FALLBACK: Inappropriate fallback,
431 * @GNUTLS_A_NO_RENEGOTIATION: No renegotiation is allowed.
432 * @GNUTLS_A_CERTIFICATE_UNOBTAINABLE: Could not retrieve the
433 * specified certificate.
434 * @GNUTLS_A_UNSUPPORTED_EXTENSION: An unsupported extension was
435 * sent.
436 * @GNUTLS_A_UNRECOGNIZED_NAME: The server name sent was not
437 * recognized.
438 * @GNUTLS_A_UNKNOWN_PSK_IDENTITY: The SRP/PSK username is missing
439 * or not known.
440 * @GNUTLS_A_NO_APPLICATION_PROTOCOL: The ALPN protocol requested is
441 * not supported by the peer.
442 *
443 * Enumeration of different TLS alerts.
444 */
445typedef enum {
446 GNUTLS_A_CLOSE_NOTIFY,
447 GNUTLS_A_UNEXPECTED_MESSAGE = 10,
448 GNUTLS_A_BAD_RECORD_MAC = 20,
449 GNUTLS_A_DECRYPTION_FAILED,
450 GNUTLS_A_RECORD_OVERFLOW,
451 GNUTLS_A_DECOMPRESSION_FAILURE = 30,
452 GNUTLS_A_HANDSHAKE_FAILURE = 40,
453 GNUTLS_A_SSL3_NO_CERTIFICATE = 41,
454 GNUTLS_A_BAD_CERTIFICATE = 42,
455 GNUTLS_A_UNSUPPORTED_CERTIFICATE,
456 GNUTLS_A_CERTIFICATE_REVOKED,
457 GNUTLS_A_CERTIFICATE_EXPIRED,
458 GNUTLS_A_CERTIFICATE_UNKNOWN,
459 GNUTLS_A_ILLEGAL_PARAMETER,
460 GNUTLS_A_UNKNOWN_CA,
461 GNUTLS_A_ACCESS_DENIED,
462 GNUTLS_A_DECODE_ERROR = 50,
463 GNUTLS_A_DECRYPT_ERROR,
464 GNUTLS_A_EXPORT_RESTRICTION = 60,
465 GNUTLS_A_PROTOCOL_VERSION = 70,
466 GNUTLS_A_INSUFFICIENT_SECURITY,
467 GNUTLS_A_INTERNAL_ERROR = 80,
468 GNUTLS_A_INAPPROPRIATE_FALLBACK = 86,
469 GNUTLS_A_USER_CANCELED = 90,
470 GNUTLS_A_NO_RENEGOTIATION = 100,
471 GNUTLS_A_UNSUPPORTED_EXTENSION = 110,
472 GNUTLS_A_CERTIFICATE_UNOBTAINABLE = 111,
473 GNUTLS_A_UNRECOGNIZED_NAME = 112,
474 GNUTLS_A_UNKNOWN_PSK_IDENTITY = 115,
475 GNUTLS_A_NO_APPLICATION_PROTOCOL = 120
476} gnutls_alert_description_t;
477
478/**
479 * gnutls_handshake_description_t:
480 * @GNUTLS_HANDSHAKE_HELLO_REQUEST: Hello request.
481 * @GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST: DTLS Hello verify request.
482 * @GNUTLS_HANDSHAKE_CLIENT_HELLO: Client hello.
483 * @GNUTLS_HANDSHAKE_SERVER_HELLO: Server hello.
484 * @GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: New session ticket.
485 * @GNUTLS_HANDSHAKE_CERTIFICATE_PKT: Certificate packet.
486 * @GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: Server key exchange.
487 * @GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: Certificate request.
488 * @GNUTLS_HANDSHAKE_SERVER_HELLO_DONE: Server hello done.
489 * @GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY: Certificate verify.
490 * @GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE: Client key exchange.
491 * @GNUTLS_HANDSHAKE_FINISHED: Finished.
492 * @GNUTLS_HANDSHAKE_CERTIFICATE_STATUS: Certificate status (OCSP).
493 * @GNUTLS_HANDSHAKE_SUPPLEMENTAL: Supplemental.
494 * @GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC: Change Cipher Spec.
495 * @GNUTLS_HANDSHAKE_CLIENT_HELLO_V2: SSLv2 Client Hello.
496 *
497 * Enumeration of different TLS handshake packets.
498 */
499typedef enum {
500 GNUTLS_HANDSHAKE_HELLO_REQUEST = 0,
501 GNUTLS_HANDSHAKE_CLIENT_HELLO = 1,
502 GNUTLS_HANDSHAKE_SERVER_HELLO = 2,
503 GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST = 3,
504 GNUTLS_HANDSHAKE_NEW_SESSION_TICKET = 4,
505 GNUTLS_HANDSHAKE_CERTIFICATE_PKT = 11,
506 GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE = 12,
507 GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST = 13,
508 GNUTLS_HANDSHAKE_SERVER_HELLO_DONE = 14,
509 GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY = 15,
510 GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE = 16,
511 GNUTLS_HANDSHAKE_FINISHED = 20,
512 GNUTLS_HANDSHAKE_CERTIFICATE_STATUS = 22,
513 GNUTLS_HANDSHAKE_SUPPLEMENTAL = 23,
514 GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC = 254,
515 GNUTLS_HANDSHAKE_CLIENT_HELLO_V2 = 1024
516} gnutls_handshake_description_t;
517
518#define GNUTLS_HANDSHAKE_ANY ((unsigned int)-1)
519
520const char
521 *gnutls_handshake_description_get_name(gnutls_handshake_description_t
522 type);
523
524/**
525 * gnutls_certificate_status_t:
526 * @GNUTLS_CERT_INVALID: The certificate is not signed by one of the
527 * known authorities or the signature is invalid (deprecated by the flags
528 * %GNUTLS_CERT_SIGNATURE_FAILURE and %GNUTLS_CERT_SIGNER_NOT_FOUND).
529 * @GNUTLS_CERT_SIGNATURE_FAILURE: The signature verification failed.
530 * @GNUTLS_CERT_REVOKED: Certificate is revoked by its authority. In X.509 this will be
531 * set only if CRLs are checked.
532 * @GNUTLS_CERT_SIGNER_NOT_FOUND: The certificate's issuer is not known.
533 * This is the case if the issuer is not included in the trusted certificate list.
534 * @GNUTLS_CERT_SIGNER_NOT_CA: The certificate's signer was not a CA. This
535 * may happen if this was a version 1 certificate, which is common with
536 * some CAs, or a version 3 certificate without the basic constrains extension.
537 * @GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE: The certificate's signer constraints were
538 * violated.
539 * @GNUTLS_CERT_INSECURE_ALGORITHM: The certificate was signed using an insecure
540 * algorithm such as MD2 or MD5. These algorithms have been broken and
541 * should not be trusted.
542 * @GNUTLS_CERT_NOT_ACTIVATED: The certificate is not yet activated.
543 * @GNUTLS_CERT_EXPIRED: The certificate has expired.
544 * @GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED: The revocation data are old and have been superseded.
545 * @GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE: The revocation data have a future issue date.
546 * @GNUTLS_CERT_UNEXPECTED_OWNER: The owner is not the expected one.
547 * @GNUTLS_CERT_MISMATCH: The certificate presented isn't the expected one (TOFU)
548 * @GNUTLS_CERT_PURPOSE_MISMATCH: The certificate or an intermediate does not match the intended purpose (extended key usage).
549 * @GNUTLS_CERT_MISSING_OCSP_STATUS: The certificate requires the server to send the certifiate status, but no status was received.
550 * @GNUTLS_CERT_INVALID_OCSP_STATUS: The received OCSP status response is invalid.
551 *
552 * Enumeration of certificate status codes. Note that the status
553 * bits may have different meanings in OpenPGP keys and X.509
554 * certificate verification.
555 */
556typedef enum {
557 GNUTLS_CERT_INVALID = 1 << 1,
558 GNUTLS_CERT_REVOKED = 1 << 5,
559 GNUTLS_CERT_SIGNER_NOT_FOUND = 1 << 6,
560 GNUTLS_CERT_SIGNER_NOT_CA = 1 << 7,
561 GNUTLS_CERT_INSECURE_ALGORITHM = 1 << 8,
562 GNUTLS_CERT_NOT_ACTIVATED = 1 << 9,
563 GNUTLS_CERT_EXPIRED = 1 << 10,
564 GNUTLS_CERT_SIGNATURE_FAILURE = 1 << 11,
565 GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED = 1 << 12,
566 GNUTLS_CERT_UNEXPECTED_OWNER = 1 << 14,
567 GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE = 1 << 15,
568 GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE = 1 << 16,
569 GNUTLS_CERT_MISMATCH = 1 << 17,
570 GNUTLS_CERT_PURPOSE_MISMATCH = 1 << 18,
571 GNUTLS_CERT_MISSING_OCSP_STATUS = 1 << 19,
572 GNUTLS_CERT_INVALID_OCSP_STATUS = 1 << 20
573} gnutls_certificate_status_t;
574
575/**
576 * gnutls_certificate_request_t:
577 * @GNUTLS_CERT_IGNORE: Ignore certificate.
578 * @GNUTLS_CERT_REQUEST: Request certificate.
579 * @GNUTLS_CERT_REQUIRE: Require certificate.
580 *
581 * Enumeration of certificate request types.
582 */
583typedef enum {
584 GNUTLS_CERT_IGNORE = 0,
585 GNUTLS_CERT_REQUEST = 1,
586 GNUTLS_CERT_REQUIRE = 2
587} gnutls_certificate_request_t;
588
589/**
590 * gnutls_openpgp_crt_status_t:
591 * @GNUTLS_OPENPGP_CERT: Send entire certificate.
592 * @GNUTLS_OPENPGP_CERT_FINGERPRINT: Send only certificate fingerprint.
593 *
594 * Enumeration of ways to send OpenPGP certificate.
595 */
596typedef enum {
597 GNUTLS_OPENPGP_CERT = 0,
598 GNUTLS_OPENPGP_CERT_FINGERPRINT = 1
599} gnutls_openpgp_crt_status_t;
600
601/**
602 * gnutls_close_request_t:
603 * @GNUTLS_SHUT_RDWR: Disallow further receives/sends.
604 * @GNUTLS_SHUT_WR: Disallow further sends.
605 *
606 * Enumeration of how TLS session should be terminated. See gnutls_bye().
607 */
608typedef enum {
609 GNUTLS_SHUT_RDWR = 0,
610 GNUTLS_SHUT_WR = 1
611} gnutls_close_request_t;
612
613/**
614 * gnutls_protocol_t:
615 * @GNUTLS_SSL3: SSL version 3.0.
616 * @GNUTLS_TLS1_0: TLS version 1.0.
617 * @GNUTLS_TLS1: Same as %GNUTLS_TLS1_0.
618 * @GNUTLS_TLS1_1: TLS version 1.1.
619 * @GNUTLS_TLS1_2: TLS version 1.2.
620 * @GNUTLS_DTLS1_0: DTLS version 1.0.
621 * @GNUTLS_DTLS1_2: DTLS version 1.2.
622 * @GNUTLS_DTLS0_9: DTLS version 0.9 (Cisco AnyConnect / OpenSSL 0.9.8e).
623 * @GNUTLS_VERSION_MAX: Maps to the highest supported TLS version.
624 * @GNUTLS_VERSION_UNKNOWN: Unknown SSL/TLS version.
625 *
626 * Enumeration of different SSL/TLS protocol versions.
627 */
628typedef enum {
629 GNUTLS_SSL3 = 1,
630 GNUTLS_TLS1_0 = 2,
631 GNUTLS_TLS1 = GNUTLS_TLS1_0,
632 GNUTLS_TLS1_1 = 3,
633 GNUTLS_TLS1_2 = 4,
634
635 GNUTLS_DTLS0_9 = 200,
636 GNUTLS_DTLS1_0 = 201, /* 201 */
637 GNUTLS_DTLS1_2 = 202,
638 GNUTLS_DTLS_VERSION_MIN = GNUTLS_DTLS0_9,
639 GNUTLS_DTLS_VERSION_MAX = GNUTLS_DTLS1_2,
640 GNUTLS_TLS_VERSION_MAX = GNUTLS_TLS1_2,
641 GNUTLS_VERSION_UNKNOWN = 0xff /* change it to 0xffff */
642} gnutls_protocol_t;
643
644/**
645 * gnutls_certificate_type_t:
646 * @GNUTLS_CRT_UNKNOWN: Unknown certificate type.
647 * @GNUTLS_CRT_X509: X.509 Certificate.
648 * @GNUTLS_CRT_OPENPGP: OpenPGP certificate.
649 * @GNUTLS_CRT_RAW: Raw public key (SubjectPublicKey)
650 *
651 * Enumeration of different certificate types.
652 */
653typedef enum {
654 GNUTLS_CRT_UNKNOWN = 0,
655 GNUTLS_CRT_X509 = 1,
656 GNUTLS_CRT_OPENPGP = 2,
657 GNUTLS_CRT_RAW = 3
658} gnutls_certificate_type_t;
659
660/**
661 * gnutls_x509_crt_fmt_t:
662 * @GNUTLS_X509_FMT_DER: X.509 certificate in DER format (binary).
663 * @GNUTLS_X509_FMT_PEM: X.509 certificate in PEM format (text).
664 *
665 * Enumeration of different certificate encoding formats.
666 */
667typedef enum {
668 GNUTLS_X509_FMT_DER = 0,
669 GNUTLS_X509_FMT_PEM = 1
670} gnutls_x509_crt_fmt_t;
671
672/**
673 * gnutls_certificate_print_formats_t:
674 * @GNUTLS_CRT_PRINT_FULL: Full information about certificate.
675 * @GNUTLS_CRT_PRINT_FULL_NUMBERS: Full information about certificate and include easy to parse public key parameters.
676 * @GNUTLS_CRT_PRINT_COMPACT: Information about certificate name in one line, plus identification of the public key.
677 * @GNUTLS_CRT_PRINT_ONELINE: Information about certificate in one line.
678 * @GNUTLS_CRT_PRINT_UNSIGNED_FULL: All info for an unsigned certificate.
679 *
680 * Enumeration of different certificate printing variants.
681 */
682typedef enum gnutls_certificate_print_formats {
683 GNUTLS_CRT_PRINT_FULL = 0,
684 GNUTLS_CRT_PRINT_ONELINE = 1,
685 GNUTLS_CRT_PRINT_UNSIGNED_FULL = 2,
686 GNUTLS_CRT_PRINT_COMPACT = 3,
687 GNUTLS_CRT_PRINT_FULL_NUMBERS = 4
688} gnutls_certificate_print_formats_t;
689
690#define GNUTLS_PK_ECC GNUTLS_PK_ECDSA
691#define GNUTLS_PK_EC GNUTLS_PK_ECDSA
692
693/**
694 * gnutls_pk_algorithm_t:
695 * @GNUTLS_PK_UNKNOWN: Unknown public-key algorithm.
696 * @GNUTLS_PK_RSA: RSA public-key algorithm.
697 * @GNUTLS_PK_DSA: DSA public-key algorithm.
698 * @GNUTLS_PK_DH: Diffie-Hellman algorithm. Used to generate parameters.
699 * @GNUTLS_PK_ECDSA: Elliptic curve algorithm. These parameters are compatible with the ECDSA and ECDH algorithm.
700 * @GNUTLS_PK_ECDHX: Elliptic curve algorithm, restricted to ECDH as per rfc7748.
701 *
702 * Enumeration of different public-key algorithms.
703 */
704typedef enum {
705 GNUTLS_PK_UNKNOWN = 0,
706 GNUTLS_PK_RSA = 1,
707 GNUTLS_PK_DSA = 2,
708 GNUTLS_PK_DH = 3,
709 GNUTLS_PK_ECDSA = 4,
710 GNUTLS_PK_ECDHX = 5
711} gnutls_pk_algorithm_t;
712
713
714const char *gnutls_pk_algorithm_get_name(gnutls_pk_algorithm_t algorithm);
715
716/**
717 * gnutls_sign_algorithm_t:
718 * @GNUTLS_SIGN_UNKNOWN: Unknown signature algorithm.
719 * @GNUTLS_SIGN_RSA_SHA1: Digital signature algorithm RSA with SHA-1
720 * @GNUTLS_SIGN_RSA_SHA: Same as %GNUTLS_SIGN_RSA_SHA1.
721 * @GNUTLS_SIGN_DSA_SHA1: Digital signature algorithm DSA with SHA-1
722 * @GNUTLS_SIGN_DSA_SHA224: Digital signature algorithm DSA with SHA-224
723 * @GNUTLS_SIGN_DSA_SHA256: Digital signature algorithm DSA with SHA-256
724 * @GNUTLS_SIGN_DSA_SHA384: Digital signature algorithm DSA with SHA-384
725 * @GNUTLS_SIGN_DSA_SHA512: Digital signature algorithm DSA with SHA-512
726 * @GNUTLS_SIGN_DSA_SHA: Same as %GNUTLS_SIGN_DSA_SHA1.
727 * @GNUTLS_SIGN_RSA_MD5: Digital signature algorithm RSA with MD5.
728 * @GNUTLS_SIGN_RSA_MD2: Digital signature algorithm RSA with MD2.
729 * @GNUTLS_SIGN_RSA_RMD160: Digital signature algorithm RSA with RMD-160.
730 * @GNUTLS_SIGN_RSA_SHA256: Digital signature algorithm RSA with SHA-256.
731 * @GNUTLS_SIGN_RSA_SHA384: Digital signature algorithm RSA with SHA-384.
732 * @GNUTLS_SIGN_RSA_SHA512: Digital signature algorithm RSA with SHA-512.
733 * @GNUTLS_SIGN_RSA_SHA224: Digital signature algorithm RSA with SHA-224.
734 * @GNUTLS_SIGN_ECDSA_SHA1: ECDSA with SHA1.
735 * @GNUTLS_SIGN_ECDSA_SHA224: Digital signature algorithm ECDSA with SHA-224.
736 * @GNUTLS_SIGN_ECDSA_SHA256: Digital signature algorithm ECDSA with SHA-256.
737 * @GNUTLS_SIGN_ECDSA_SHA384: Digital signature algorithm ECDSA with SHA-384.
738 * @GNUTLS_SIGN_ECDSA_SHA512: Digital signature algorithm ECDSA with SHA-512.
739 * @GNUTLS_SIGN_ECDSA_SHA3_224: Digital signature algorithm ECDSA with SHA3-224.
740 * @GNUTLS_SIGN_ECDSA_SHA3_256: Digital signature algorithm ECDSA with SHA3-256.
741 * @GNUTLS_SIGN_ECDSA_SHA3_384: Digital signature algorithm ECDSA with SHA3-384.
742 * @GNUTLS_SIGN_ECDSA_SHA3_512: Digital signature algorithm ECDSA with SHA3-512.
743 * @GNUTLS_SIGN_DSA_SHA3_224: Digital signature algorithm DSA with SHA3-224.
744 * @GNUTLS_SIGN_DSA_SHA3_256: Digital signature algorithm DSA with SHA3-256.
745 * @GNUTLS_SIGN_DSA_SHA3_384: Digital signature algorithm DSA with SHA3-384.
746 * @GNUTLS_SIGN_DSA_SHA3_512: Digital signature algorithm DSA with SHA3-512.
747 * @GNUTLS_SIGN_RSA_SHA3_224: Digital signature algorithm RSA with SHA3-224.
748 * @GNUTLS_SIGN_RSA_SHA3_256: Digital signature algorithm RSA with SHA3-256.
749 * @GNUTLS_SIGN_RSA_SHA3_384: Digital signature algorithm RSA with SHA3-384.
750 * @GNUTLS_SIGN_RSA_SHA3_512: Digital signature algorithm RSA with SHA3-512.
751 *
752 * Enumeration of different digital signature algorithms.
753 */
754typedef enum {
755 GNUTLS_SIGN_UNKNOWN = 0,
756 GNUTLS_SIGN_RSA_SHA1 = 1,
757 GNUTLS_SIGN_RSA_SHA = GNUTLS_SIGN_RSA_SHA1,
758 GNUTLS_SIGN_DSA_SHA1 = 2,
759 GNUTLS_SIGN_DSA_SHA = GNUTLS_SIGN_DSA_SHA1,
760 GNUTLS_SIGN_RSA_MD5 = 3,
761 GNUTLS_SIGN_RSA_MD2 = 4,
762 GNUTLS_SIGN_RSA_RMD160 = 5,
763 GNUTLS_SIGN_RSA_SHA256 = 6,
764 GNUTLS_SIGN_RSA_SHA384 = 7,
765 GNUTLS_SIGN_RSA_SHA512 = 8,
766 GNUTLS_SIGN_RSA_SHA224 = 9,
767 GNUTLS_SIGN_DSA_SHA224 = 10,
768 GNUTLS_SIGN_DSA_SHA256 = 11,
769 GNUTLS_SIGN_ECDSA_SHA1 = 12,
770 GNUTLS_SIGN_ECDSA_SHA224 = 13,
771 GNUTLS_SIGN_ECDSA_SHA256 = 14,
772 GNUTLS_SIGN_ECDSA_SHA384 = 15,
773 GNUTLS_SIGN_ECDSA_SHA512 = 16,
774 GNUTLS_SIGN_DSA_SHA384 = 17,
775 GNUTLS_SIGN_DSA_SHA512 = 18,
776 GNUTLS_SIGN_ECDSA_SHA3_224 = 20,
777 GNUTLS_SIGN_ECDSA_SHA3_256 = 21,
778 GNUTLS_SIGN_ECDSA_SHA3_384 = 22,
779 GNUTLS_SIGN_ECDSA_SHA3_512 = 23,
780
781 GNUTLS_SIGN_DSA_SHA3_224 = 24,
782 GNUTLS_SIGN_DSA_SHA3_256 = 25,
783 GNUTLS_SIGN_DSA_SHA3_384 = 26,
784 GNUTLS_SIGN_DSA_SHA3_512 = 27,
785 GNUTLS_SIGN_RSA_SHA3_224 = 28,
786 GNUTLS_SIGN_RSA_SHA3_256 = 29,
787 GNUTLS_SIGN_RSA_SHA3_384 = 30,
788 GNUTLS_SIGN_RSA_SHA3_512 = 31
789} gnutls_sign_algorithm_t;
790
791/**
792 * gnutls_ecc_curve_t:
793 * @GNUTLS_ECC_CURVE_INVALID: Cannot be known
794 * @GNUTLS_ECC_CURVE_SECP192R1: the SECP192R1 curve
795 * @GNUTLS_ECC_CURVE_SECP224R1: the SECP224R1 curve
796 * @GNUTLS_ECC_CURVE_SECP256R1: the SECP256R1 curve
797 * @GNUTLS_ECC_CURVE_SECP384R1: the SECP384R1 curve
798 * @GNUTLS_ECC_CURVE_SECP521R1: the SECP521R1 curve
799 * @GNUTLS_ECC_CURVE_X25519: the X25519 curve (ECDH only)
800 *
801 * Enumeration of ECC curves.
802 */
803typedef enum {
804 GNUTLS_ECC_CURVE_INVALID = 0,
805 GNUTLS_ECC_CURVE_SECP224R1,
806 GNUTLS_ECC_CURVE_SECP256R1,
807 GNUTLS_ECC_CURVE_SECP384R1,
808 GNUTLS_ECC_CURVE_SECP521R1,
809 GNUTLS_ECC_CURVE_SECP192R1,
810 GNUTLS_ECC_CURVE_X25519
811} gnutls_ecc_curve_t;
812
813/* macros to allow specifying a specific curve in gnutls_privkey_generate()
814 * and gnutls_x509_privkey_generate() */
815#define GNUTLS_CURVE_TO_BITS(curve) (unsigned int)(((unsigned int)1<<31)|((unsigned int)(curve)))
816#define GNUTLS_BITS_TO_CURVE(bits) (((unsigned int)(bits)) & 0x7FFFFFFF)
817#define GNUTLS_BITS_ARE_CURVE(bits) (((unsigned int)(bits)) & 0x80000000)
818
819/**
820 * gnutls_sec_param_t:
821 * @GNUTLS_SEC_PARAM_UNKNOWN: Cannot be known
822 * @GNUTLS_SEC_PARAM_INSECURE: Less than 42 bits of security
823 * @GNUTLS_SEC_PARAM_EXPORT: 42 bits of security
824 * @GNUTLS_SEC_PARAM_VERY_WEAK: 64 bits of security
825 * @GNUTLS_SEC_PARAM_WEAK: 72 bits of security
826 * @GNUTLS_SEC_PARAM_LOW: 80 bits of security
827 * @GNUTLS_SEC_PARAM_LEGACY: 96 bits of security
828 * @GNUTLS_SEC_PARAM_MEDIUM: 112 bits of security (used to be %GNUTLS_SEC_PARAM_NORMAL)
829 * @GNUTLS_SEC_PARAM_HIGH: 128 bits of security
830 * @GNUTLS_SEC_PARAM_ULTRA: 192 bits of security
831 * @GNUTLS_SEC_PARAM_FUTURE: 256 bits of security
832 *
833 * Enumeration of security parameters for passive attacks.
834 */
835typedef enum {
836 GNUTLS_SEC_PARAM_UNKNOWN = 0,
837 GNUTLS_SEC_PARAM_INSECURE = 5,
838 GNUTLS_SEC_PARAM_EXPORT = 10,
839 GNUTLS_SEC_PARAM_VERY_WEAK = 15,
840 GNUTLS_SEC_PARAM_WEAK = 20,
841 GNUTLS_SEC_PARAM_LOW = 25,
842 GNUTLS_SEC_PARAM_LEGACY = 30,
843 GNUTLS_SEC_PARAM_MEDIUM = 35,
844 GNUTLS_SEC_PARAM_HIGH = 40,
845 GNUTLS_SEC_PARAM_ULTRA = 45,
846 GNUTLS_SEC_PARAM_FUTURE = 50
847} gnutls_sec_param_t;
848
849/* old name */
850#define GNUTLS_SEC_PARAM_NORMAL GNUTLS_SEC_PARAM_MEDIUM
851
852/**
853 * gnutls_channel_binding_t:
854 * @GNUTLS_CB_TLS_UNIQUE: "tls-unique" (RFC 5929) channel binding
855 *
856 * Enumeration of support channel binding types.
857 */
858typedef enum {
859 GNUTLS_CB_TLS_UNIQUE
860} gnutls_channel_binding_t;
861
862
863/* If you want to change this, then also change the define in
864 * gnutls_int.h, and recompile.
865 */
866typedef void *gnutls_transport_ptr_t;
867
868struct gnutls_session_int;
869typedef struct gnutls_session_int *gnutls_session_t;
870
871struct gnutls_dh_params_int;
872typedef struct gnutls_dh_params_int *gnutls_dh_params_t;
873
874 /* XXX ugly. */
875struct gnutls_x509_privkey_int;
876typedef struct gnutls_x509_privkey_int *gnutls_rsa_params_t;
877
878struct gnutls_priority_st;
879typedef struct gnutls_priority_st *gnutls_priority_t;
880
881typedef struct {
882 unsigned char *data;
883 unsigned int size;
884} gnutls_datum_t;
885
886
887typedef struct gnutls_params_st {
888 gnutls_params_type_t type;
889 union params {
890 gnutls_dh_params_t dh;
891 gnutls_rsa_params_t rsa_export;
892 } params;
893 int deinit;
894} gnutls_params_st;
895
896typedef int gnutls_params_function(gnutls_session_t, gnutls_params_type_t,
897 gnutls_params_st *);
898
899/* internal functions */
900
901int gnutls_init(gnutls_session_t * session, unsigned int flags);
902void gnutls_deinit(gnutls_session_t session);
903#define _gnutls_deinit(x) gnutls_deinit(x)
904
905int gnutls_bye(gnutls_session_t session, gnutls_close_request_t how);
906
907int gnutls_handshake(gnutls_session_t session);
908
909#define GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT ((unsigned int)-1)
910#define GNUTLS_INDEFINITE_TIMEOUT ((unsigned int)-2)
911void gnutls_handshake_set_timeout(gnutls_session_t session,
912 unsigned int ms);
913int gnutls_rehandshake(gnutls_session_t session);
914
915gnutls_alert_description_t gnutls_alert_get(gnutls_session_t session);
916int gnutls_alert_send(gnutls_session_t session,
917 gnutls_alert_level_t level,
918 gnutls_alert_description_t desc);
919int gnutls_alert_send_appropriate(gnutls_session_t session, int err);
920const char *gnutls_alert_get_name(gnutls_alert_description_t alert);
921const char *gnutls_alert_get_strname(gnutls_alert_description_t alert);
922
923gnutls_sec_param_t gnutls_pk_bits_to_sec_param(gnutls_pk_algorithm_t algo,
924 unsigned int bits);
925const char *gnutls_sec_param_get_name(gnutls_sec_param_t param);
926unsigned int gnutls_sec_param_to_pk_bits(gnutls_pk_algorithm_t algo,
927 gnutls_sec_param_t param);
928unsigned int
929 gnutls_sec_param_to_symmetric_bits(gnutls_sec_param_t param) __GNUTLS_CONST__;
930
931/* Elliptic curves */
932const char *
933 gnutls_ecc_curve_get_name(gnutls_ecc_curve_t curve) __GNUTLS_CONST__;
934const char *
935 gnutls_ecc_curve_get_oid(gnutls_ecc_curve_t curve) __GNUTLS_CONST__;
936
937int
938 gnutls_ecc_curve_get_size(gnutls_ecc_curve_t curve) __GNUTLS_CONST__;
939gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session);
940
941/* get information on the current session */
942gnutls_cipher_algorithm_t gnutls_cipher_get(gnutls_session_t session);
943gnutls_kx_algorithm_t gnutls_kx_get(gnutls_session_t session);
944gnutls_mac_algorithm_t gnutls_mac_get(gnutls_session_t session);
945gnutls_compression_method_t
946gnutls_compression_get(gnutls_session_t session);
947gnutls_certificate_type_t
948gnutls_certificate_type_get(gnutls_session_t session);
949
950int gnutls_sign_algorithm_get(gnutls_session_t session);
951int gnutls_sign_algorithm_get_client(gnutls_session_t session);
952
953int gnutls_sign_algorithm_get_requested(gnutls_session_t session,
954 size_t indx,
955 gnutls_sign_algorithm_t * algo);
956
957/* the name of the specified algorithms */
958const char *
959 gnutls_cipher_get_name(gnutls_cipher_algorithm_t algorithm) __GNUTLS_CONST__;
960const char *
961 gnutls_mac_get_name(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__;
962
963const char *
964 gnutls_digest_get_name(gnutls_digest_algorithm_t algorithm) __GNUTLS_CONST__;
965const char *
966 gnutls_digest_get_oid(gnutls_digest_algorithm_t algorithm) __GNUTLS_CONST__;
967
968const char *
969gnutls_compression_get_name(gnutls_compression_method_t
970 algorithm) __GNUTLS_CONST__;
971const char *
972 gnutls_kx_get_name(gnutls_kx_algorithm_t algorithm) __GNUTLS_CONST__;
973const char *
974 gnutls_certificate_type_get_name(gnutls_certificate_type_t
975 type) __GNUTLS_CONST__;
976const char *
977 gnutls_pk_get_name(gnutls_pk_algorithm_t algorithm) __GNUTLS_CONST__;
978const char *
979 gnutls_pk_get_oid(gnutls_pk_algorithm_t algorithm) __GNUTLS_CONST__;
980
981const char *
982 gnutls_sign_get_name(gnutls_sign_algorithm_t algorithm) __GNUTLS_CONST__;
983const char *
984 gnutls_sign_get_oid(gnutls_sign_algorithm_t algorithm) __GNUTLS_CONST__;
985
986size_t
987 gnutls_cipher_get_key_size(gnutls_cipher_algorithm_t algorithm) __GNUTLS_CONST__;
988size_t
989 gnutls_mac_get_key_size(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__;
990
991int gnutls_sign_is_secure(gnutls_sign_algorithm_t algorithm) __GNUTLS_CONST__;
992
993gnutls_digest_algorithm_t
994 gnutls_sign_get_hash_algorithm(gnutls_sign_algorithm_t sign) __GNUTLS_CONST__;
995gnutls_pk_algorithm_t
996 gnutls_sign_get_pk_algorithm(gnutls_sign_algorithm_t sign) __GNUTLS_CONST__;
997gnutls_sign_algorithm_t
998 gnutls_pk_to_sign(gnutls_pk_algorithm_t pk,
999 gnutls_digest_algorithm_t hash) __GNUTLS_CONST__;
1000
1001#define gnutls_sign_algorithm_get_name gnutls_sign_get_name
1002
1003gnutls_mac_algorithm_t gnutls_mac_get_id(const char *name) __GNUTLS_CONST__;
1004gnutls_digest_algorithm_t gnutls_digest_get_id(const char *name) __GNUTLS_CONST__;
1005
1006gnutls_compression_method_t
1007 gnutls_compression_get_id(const char *name) __GNUTLS_CONST__;
1008gnutls_cipher_algorithm_t
1009 gnutls_cipher_get_id(const char *name) __GNUTLS_CONST__;
1010
1011gnutls_kx_algorithm_t
1012 gnutls_kx_get_id(const char *name) __GNUTLS_CONST__;
1013gnutls_protocol_t
1014 gnutls_protocol_get_id(const char *name) __GNUTLS_CONST__;
1015gnutls_certificate_type_t
1016 gnutls_certificate_type_get_id(const char *name) __GNUTLS_CONST__;
1017gnutls_pk_algorithm_t
1018 gnutls_pk_get_id(const char *name) __GNUTLS_CONST__;
1019gnutls_sign_algorithm_t
1020 gnutls_sign_get_id(const char *name) __GNUTLS_CONST__;
1021gnutls_ecc_curve_t gnutls_ecc_curve_get_id(const char *name) __GNUTLS_CONST__;
1022gnutls_pk_algorithm_t gnutls_ecc_curve_get_pk(gnutls_ecc_curve_t curve) __GNUTLS_CONST__;
1023
1024gnutls_digest_algorithm_t
1025 gnutls_oid_to_digest(const char *oid) __GNUTLS_CONST__;
1026gnutls_mac_algorithm_t
1027 gnutls_oid_to_mac(const char *oid) __GNUTLS_CONST__;
1028gnutls_pk_algorithm_t
1029 gnutls_oid_to_pk(const char *oid) __GNUTLS_CONST__;
1030gnutls_sign_algorithm_t
1031 gnutls_oid_to_sign(const char *oid) __GNUTLS_CONST__;
1032gnutls_ecc_curve_t
1033 gnutls_oid_to_ecc_curve(const char *oid) __GNUTLS_CONST__;
1034
1035 /* list supported algorithms */
1036const gnutls_ecc_curve_t *
1037 gnutls_ecc_curve_list(void) __GNUTLS_PURE__;
1038const gnutls_cipher_algorithm_t *
1039 gnutls_cipher_list(void) __GNUTLS_PURE__;
1040const gnutls_mac_algorithm_t *
1041 gnutls_mac_list(void) __GNUTLS_PURE__;
1042const gnutls_digest_algorithm_t *
1043 gnutls_digest_list(void) __GNUTLS_PURE__;
1044const gnutls_compression_method_t *
1045 gnutls_compression_list(void) __GNUTLS_PURE__;
1046const gnutls_protocol_t *
1047 gnutls_protocol_list(void) __GNUTLS_PURE__;
1048const gnutls_certificate_type_t *
1049 gnutls_certificate_type_list(void) __GNUTLS_PURE__;
1050const gnutls_kx_algorithm_t *
1051 gnutls_kx_list(void) __GNUTLS_PURE__;
1052const gnutls_pk_algorithm_t *
1053 gnutls_pk_list(void) __GNUTLS_PURE__;
1054const gnutls_sign_algorithm_t *
1055 gnutls_sign_list(void) __GNUTLS_PURE__;
1056const char *
1057 gnutls_cipher_suite_info(size_t idx,
1058 unsigned char *cs_id,
1059 gnutls_kx_algorithm_t * kx,
1060 gnutls_cipher_algorithm_t * cipher,
1061 gnutls_mac_algorithm_t * mac,
1062 gnutls_protocol_t * min_version);
1063
1064 /* error functions */
1065int gnutls_error_is_fatal(int error) __GNUTLS_CONST__;
1066int gnutls_error_to_alert(int err, int *level);
1067
1068void gnutls_perror(int error);
1069const char * gnutls_strerror(int error) __GNUTLS_CONST__;
1070const char * gnutls_strerror_name(int error) __GNUTLS_CONST__;
1071
1072/* Semi-internal functions.
1073 */
1074void gnutls_handshake_set_private_extensions(gnutls_session_t session,
1075 int allow);
1076int gnutls_handshake_set_random(gnutls_session_t session,
1077 const gnutls_datum_t * random);
1078
1079gnutls_handshake_description_t
1080gnutls_handshake_get_last_out(gnutls_session_t session);
1081gnutls_handshake_description_t
1082gnutls_handshake_get_last_in(gnutls_session_t session);
1083
1084/* Record layer functions.
1085 */
1086#define GNUTLS_HEARTBEAT_WAIT 1
1087int gnutls_heartbeat_ping(gnutls_session_t session, size_t data_size,
1088 unsigned int max_tries, unsigned int flags);
1089int gnutls_heartbeat_pong(gnutls_session_t session, unsigned int flags);
1090
1091void gnutls_record_set_timeout(gnutls_session_t session, unsigned int ms);
1092void gnutls_record_disable_padding(gnutls_session_t session);
1093
1094void gnutls_record_cork(gnutls_session_t session);
1095#define GNUTLS_RECORD_WAIT 1
1096int gnutls_record_uncork(gnutls_session_t session, unsigned int flags);
1097size_t gnutls_record_discard_queued(gnutls_session_t session);
1098
1099int
1100gnutls_record_get_state(gnutls_session_t session,
1101 unsigned read,
1102 gnutls_datum_t *mac_key,
1103 gnutls_datum_t *IV,
1104 gnutls_datum_t *cipher_key,
1105 unsigned char seq_number[8]);
1106
1107int
1108gnutls_record_set_state(gnutls_session_t session,
1109 unsigned read,
1110 unsigned char seq_number[8]);
1111
1112typedef struct {
1113 size_t low;
1114 size_t high;
1115} gnutls_range_st;
1116
1117int gnutls_range_split(gnutls_session_t session,
1118 const gnutls_range_st * orig,
1119 gnutls_range_st * small_range,
1120 gnutls_range_st * rem_range);
1121
1122ssize_t gnutls_record_send(gnutls_session_t session, const void *data,
1123 size_t data_size);
1124ssize_t gnutls_record_send_range(gnutls_session_t session,
1125 const void *data, size_t data_size,
1126 const gnutls_range_st * range);
1127ssize_t gnutls_record_recv(gnutls_session_t session, void *data,
1128 size_t data_size);
1129
1130typedef struct mbuffer_st *gnutls_packet_t;
1131
1132ssize_t
1133gnutls_record_recv_packet(gnutls_session_t session,
1134 gnutls_packet_t *packet);
1135
1136void gnutls_packet_get(gnutls_packet_t packet, gnutls_datum_t *data, unsigned char *sequence);
1137void gnutls_packet_deinit(gnutls_packet_t packet);
1138
1139#define gnutls_read gnutls_record_recv
1140#define gnutls_write gnutls_record_send
1141ssize_t gnutls_record_recv_seq(gnutls_session_t session, void *data,
1142 size_t data_size, unsigned char *seq);
1143
1144size_t gnutls_record_overhead_size(gnutls_session_t session);
1145
1146size_t
1147 gnutls_est_record_overhead_size(gnutls_protocol_t version,
1148 gnutls_cipher_algorithm_t cipher,
1149 gnutls_mac_algorithm_t mac,
1150 gnutls_compression_method_t comp,
1151 unsigned int flags) __GNUTLS_CONST__;
1152
1153void gnutls_session_enable_compatibility_mode(gnutls_session_t session);
1154#define gnutls_record_set_max_empty_records(session, x)
1155
1156int gnutls_record_can_use_length_hiding(gnutls_session_t session);
1157
1158int gnutls_record_get_direction(gnutls_session_t session);
1159
1160size_t gnutls_record_get_max_size(gnutls_session_t session);
1161ssize_t gnutls_record_set_max_size(gnutls_session_t session, size_t size);
1162
1163size_t gnutls_record_check_pending(gnutls_session_t session);
1164size_t gnutls_record_check_corked(gnutls_session_t session);
1165
1166void gnutls_session_force_valid(gnutls_session_t session);
1167
1168int gnutls_prf(gnutls_session_t session,
1169 size_t label_size, const char *label,
1170 int server_random_first,
1171 size_t extra_size, const char *extra,
1172 size_t outsize, char *out);
1173int gnutls_prf_rfc5705(gnutls_session_t session,
1174 size_t label_size, const char *label,
1175 size_t context_size, const char *context,
1176 size_t outsize, char *out);
1177
1178int gnutls_prf_raw(gnutls_session_t session,
1179 size_t label_size, const char *label,
1180 size_t seed_size, const char *seed,
1181 size_t outsize, char *out);
1182
1183/**
1184 * gnutls_server_name_type_t:
1185 * @GNUTLS_NAME_DNS: Domain Name System name type.
1186 *
1187 * Enumeration of different server name types.
1188 */
1189typedef enum {
1190 GNUTLS_NAME_DNS = 1
1191} gnutls_server_name_type_t;
1192
1193int gnutls_server_name_set(gnutls_session_t session,
1194 gnutls_server_name_type_t type,
1195 const void *name, size_t name_length);
1196
1197int gnutls_server_name_get(gnutls_session_t session,
1198 void *data, size_t * data_length,
1199 unsigned int *type, unsigned int indx);
1200
1201unsigned int gnutls_heartbeat_get_timeout(gnutls_session_t session);
1202void gnutls_heartbeat_set_timeouts(gnutls_session_t session,
1203 unsigned int retrans_timeout,
1204 unsigned int total_timeout);
1205
1206#define GNUTLS_HB_PEER_ALLOWED_TO_SEND (1)
1207#define GNUTLS_HB_PEER_NOT_ALLOWED_TO_SEND (1<<1)
1208
1209 /* Heartbeat */
1210void gnutls_heartbeat_enable(gnutls_session_t session, unsigned int type);
1211
1212#define GNUTLS_HB_LOCAL_ALLOWED_TO_SEND (1<<2)
1213int gnutls_heartbeat_allowed(gnutls_session_t session, unsigned int type);
1214
1215 /* Safe renegotiation */
1216unsigned gnutls_safe_renegotiation_status(gnutls_session_t session);
1217unsigned gnutls_session_ext_master_secret_status(gnutls_session_t session);
1218unsigned gnutls_session_etm_status(gnutls_session_t session);
1219
1220/**
1221 * gnutls_session_flags_t:
1222 * @GNUTLS_SFLAGS_SAFE_RENEGOTIATION: Safe renegotiation (RFC5746) was used
1223 * @GNUTLS_SFLAGS_EXT_MASTER_SECRET: The extended master secret (RFC7627) extension was used
1224 * @GNUTLS_SFLAGS_ETM: The encrypt then MAC (RFC7366) extension was used
1225 * @GNUTLS_SFLAGS_HB_LOCAL_SEND: The heartbeat negotiation allows the local side to send heartbeat messages
1226 * @GNUTLS_SFLAGS_HB_PEER_SEND: The heartbeat negotiation allows the peer to send heartbeat messages
1227 * @GNUTLS_SFLAGS_FALSE_START: The appdata set with gnutls_handshake_set_appdata() were sent during handshake (false start)
1228 *
1229 * Enumeration of different session parameters.
1230 */
1231typedef enum {
1232 GNUTLS_SFLAGS_SAFE_RENEGOTIATION = 1,
1233 GNUTLS_SFLAGS_EXT_MASTER_SECRET = 1<<1,
1234 GNUTLS_SFLAGS_ETM = 1<<2,
1235 GNUTLS_SFLAGS_HB_LOCAL_SEND = 1<<3,
1236 GNUTLS_SFLAGS_HB_PEER_SEND = 1<<4,
1237 GNUTLS_SFLAGS_FALSE_START = 1<<5
1238} gnutls_session_flags_t;
1239
1240unsigned gnutls_session_get_flags(gnutls_session_t session);
1241
1242/**
1243 * gnutls_supplemental_data_format_type_t:
1244 * @GNUTLS_SUPPLEMENTAL_UNKNOWN: Unknown data format
1245 *
1246 * Enumeration of different supplemental data types (RFC 4680).
1247 */
1248typedef enum {
1249 GNUTLS_SUPPLEMENTAL_UNKNOWN = 0,
1250} gnutls_supplemental_data_format_type_t;
1251
1252const char
1253*gnutls_supplemental_get_name(gnutls_supplemental_data_format_type_t type);
1254
1255 /* SessionTicket, RFC 5077. */
1256int gnutls_session_ticket_key_generate(gnutls_datum_t * key);
1257int gnutls_session_ticket_enable_client(gnutls_session_t session);
1258int gnutls_session_ticket_enable_server(gnutls_session_t session,
1259 const gnutls_datum_t * key);
1260
1261 /* SRTP, RFC 5764 */
1262
1263/**
1264 * gnutls_srtp_profile_t:
1265 * @GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80: 128 bit AES with a 80 bit HMAC-SHA1
1266 * @GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32: 128 bit AES with a 32 bit HMAC-SHA1
1267 * @GNUTLS_SRTP_NULL_HMAC_SHA1_80: NULL cipher with a 80 bit HMAC-SHA1
1268 * @GNUTLS_SRTP_NULL_HMAC_SHA1_32: NULL cipher with a 32 bit HMAC-SHA1
1269 *
1270 * Enumeration of different SRTP protection profiles.
1271 */
1272typedef enum {
1273 GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80 = 0x0001,
1274 GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32 = 0x0002,
1275 GNUTLS_SRTP_NULL_HMAC_SHA1_80 = 0x0005,
1276 GNUTLS_SRTP_NULL_HMAC_SHA1_32 = 0x0006
1277} gnutls_srtp_profile_t;
1278
1279int gnutls_srtp_set_profile(gnutls_session_t session,
1280 gnutls_srtp_profile_t profile);
1281int gnutls_srtp_set_profile_direct(gnutls_session_t session,
1282 const char *profiles,
1283 const char **err_pos);
1284int gnutls_srtp_get_selected_profile(gnutls_session_t session,
1285 gnutls_srtp_profile_t * profile);
1286
1287const char *gnutls_srtp_get_profile_name(gnutls_srtp_profile_t profile);
1288int gnutls_srtp_get_profile_id(const char *name,
1289 gnutls_srtp_profile_t * profile);
1290int gnutls_srtp_get_keys(gnutls_session_t session,
1291 void *key_material,
1292 unsigned int key_material_size,
1293 gnutls_datum_t * client_key,
1294 gnutls_datum_t * client_salt,
1295 gnutls_datum_t * server_key,
1296 gnutls_datum_t * server_salt);
1297
1298int gnutls_srtp_set_mki(gnutls_session_t session,
1299 const gnutls_datum_t * mki);
1300int gnutls_srtp_get_mki(gnutls_session_t session, gnutls_datum_t * mki);
1301
1302/* ALPN TLS extension */
1303
1304/**
1305 * gnutls_alpn_flags_t:
1306 * @GNUTLS_ALPN_MANDATORY: Require ALPN negotiation. The connection will be
1307 * aborted if no matching ALPN protocol is found.
1308 * @GNUTLS_ALPN_SERVER_PRECEDENCE: The choices set by the server
1309 * will take precedence over the client's.
1310 *
1311 * Enumeration of different ALPN flags. These are used by gnutls_alpn_set_protocols().
1312 */
1313typedef enum {
1314 GNUTLS_ALPN_MANDATORY = 1,
1315 GNUTLS_ALPN_SERVER_PRECEDENCE = (1<<1)
1316} gnutls_alpn_flags_t;
1317
1318#define GNUTLS_ALPN_MAND GNUTLS_ALPN_MANDATORY
1319int gnutls_alpn_get_selected_protocol(gnutls_session_t session,
1320 gnutls_datum_t * protocol);
1321int gnutls_alpn_set_protocols(gnutls_session_t session,
1322 const gnutls_datum_t * protocols,
1323 unsigned protocols_size, unsigned flags);
1324
1325int gnutls_key_generate(gnutls_datum_t * key, unsigned int key_size);
1326
1327/* if you just want some defaults, use the following.
1328 */
1329
1330int gnutls_priority_init(gnutls_priority_t * priority_cache,
1331 const char *priorities, const char **err_pos);
1332void gnutls_priority_deinit(gnutls_priority_t priority_cache);
1333int gnutls_priority_get_cipher_suite_index(gnutls_priority_t pcache,
1334 unsigned int idx,
1335 unsigned int *sidx);
1336
1337#define GNUTLS_PRIORITY_LIST_INIT_KEYWORDS 1
1338#define GNUTLS_PRIORITY_LIST_SPECIAL 2
1339const char *
1340gnutls_priority_string_list(unsigned iter, unsigned int flags);
1341
1342int gnutls_priority_set(gnutls_session_t session,
1343 gnutls_priority_t priority);
1344int gnutls_priority_set_direct(gnutls_session_t session,
1345 const char *priorities,
1346 const char **err_pos);
1347
1348int gnutls_priority_certificate_type_list(gnutls_priority_t pcache,
1349 const unsigned int **list);
1350int gnutls_priority_sign_list(gnutls_priority_t pcache,
1351 const unsigned int **list);
1352int gnutls_priority_protocol_list(gnutls_priority_t pcache,
1353 const unsigned int **list);
1354int gnutls_priority_compression_list(gnutls_priority_t pcache,
1355 const unsigned int **list);
1356int gnutls_priority_ecc_curve_list(gnutls_priority_t pcache,
1357 const unsigned int **list);
1358
1359int gnutls_priority_kx_list(gnutls_priority_t pcache,
1360 const unsigned int **list);
1361int gnutls_priority_cipher_list(gnutls_priority_t pcache,
1362 const unsigned int **list);
1363int gnutls_priority_mac_list(gnutls_priority_t pcache,
1364 const unsigned int **list);
1365
1366 /* for compatibility
1367 */
1368int gnutls_set_default_priority(gnutls_session_t session);
1369
1370/* Returns the name of a cipher suite */
1371const char *
1372 gnutls_cipher_suite_get_name(gnutls_kx_algorithm_t kx_algorithm,
1373 gnutls_cipher_algorithm_t cipher_algorithm,
1374 gnutls_mac_algorithm_t mac_algorithm) __GNUTLS_CONST__;
1375
1376/* get the currently used protocol version */
1377gnutls_protocol_t gnutls_protocol_get_version(gnutls_session_t session);
1378
1379const char *
1380 gnutls_protocol_get_name(gnutls_protocol_t version) __GNUTLS_CONST__;
1381
1382
1383/* get/set session
1384 */
1385int gnutls_session_set_data(gnutls_session_t session,
1386 const void *session_data,
1387 size_t session_data_size);
1388int gnutls_session_get_data(gnutls_session_t session, void *session_data,
1389 size_t * session_data_size);
1390int gnutls_session_get_data2(gnutls_session_t session,
1391 gnutls_datum_t * data);
1392void gnutls_session_get_random(gnutls_session_t session,
1393 gnutls_datum_t * client,
1394 gnutls_datum_t * server);
1395
1396void gnutls_session_get_master_secret(gnutls_session_t session,
1397 gnutls_datum_t * secret);
1398
1399char *gnutls_session_get_desc(gnutls_session_t session);
1400
1401typedef int gnutls_certificate_verify_function(gnutls_session_t);
1402void gnutls_session_set_verify_function(gnutls_session_t session, gnutls_certificate_verify_function * func);
1403
1404/**
1405 * gnutls_vdata_types_t:
1406 * @GNUTLS_DT_UNKNOWN: Unknown data type.
1407 * @GNUTLS_DT_DNS_HOSTNAME: The data contain a null-terminated DNS hostname; the hostname will be
1408 * matched using the RFC6125 rules.
1409 * @GNUTLS_DT_RFC822NAME: The data contain a null-terminated email address; the email will be
1410 * matched against the RFC822Name field of the certificate, or the EMAIL DN component if the
1411 * former isn't available. Prior to matching the email address will be converted to ACE
1412 * (ASCII-compatible-encoding).
1413 * @GNUTLS_DT_KEY_PURPOSE_OID: The data contain a null-terminated key purpose OID. It will be matched
1414 * against the certificate's Extended Key Usage extension.
1415 *
1416 * Enumeration of different typed-data options. They are used as input to certificate
1417 * verification functions to provide information about the name and purpose of the
1418 * certificate. Only a single option of a type can be provided to the relevant functions.
1419 */
1420typedef enum {
1421 GNUTLS_DT_UNKNOWN = 0,
1422 GNUTLS_DT_DNS_HOSTNAME = 1,
1423 GNUTLS_DT_KEY_PURPOSE_OID = 2,
1424 GNUTLS_DT_RFC822NAME = 3
1425} gnutls_vdata_types_t;
1426
1427typedef struct {
1428 gnutls_vdata_types_t type;
1429 unsigned char *data;
1430 unsigned int size;
1431} gnutls_typed_vdata_st;
1432
1433void gnutls_session_set_verify_cert(gnutls_session_t session,
1434 const char *hostname, unsigned flags);
1435
1436void
1437gnutls_session_set_verify_cert2(gnutls_session_t session,
1438 gnutls_typed_vdata_st * data,
1439 unsigned elements, unsigned flags);
1440
1441unsigned int gnutls_session_get_verify_cert_status(gnutls_session_t);
1442
1443int gnutls_session_set_premaster(gnutls_session_t session,
1444 unsigned int entity,
1445 gnutls_protocol_t version,
1446 gnutls_kx_algorithm_t kx,
1447 gnutls_cipher_algorithm_t cipher,
1448 gnutls_mac_algorithm_t mac,
1449 gnutls_compression_method_t comp,
1450 const gnutls_datum_t * master,
1451 const gnutls_datum_t * session_id);
1452
1453/* returns the session ID */
1454#define GNUTLS_MAX_SESSION_ID 32
1455int gnutls_session_get_id(gnutls_session_t session, void *session_id,
1456 size_t * session_id_size);
1457int gnutls_session_get_id2(gnutls_session_t session,
1458 gnutls_datum_t * session_id);
1459
1460int gnutls_session_set_id(gnutls_session_t session,
1461 const gnutls_datum_t * sid);
1462
1463int gnutls_session_channel_binding(gnutls_session_t session,
1464 gnutls_channel_binding_t cbtype,
1465 gnutls_datum_t * cb);
1466
1467/* checks if this session is a resumed one
1468 */
1469int gnutls_session_is_resumed(gnutls_session_t session);
1470int gnutls_session_resumption_requested(gnutls_session_t session);
1471
1472typedef int (*gnutls_db_store_func) (void *, gnutls_datum_t key,
1473 gnutls_datum_t data);
1474typedef int (*gnutls_db_remove_func) (void *, gnutls_datum_t key);
1475typedef gnutls_datum_t(*gnutls_db_retr_func) (void *, gnutls_datum_t key);
1476
1477void gnutls_db_set_cache_expiration(gnutls_session_t session, int seconds);
1478unsigned gnutls_db_get_default_cache_expiration(void);
1479
1480void gnutls_db_remove_session(gnutls_session_t session);
1481void gnutls_db_set_retrieve_function(gnutls_session_t session,
1482 gnutls_db_retr_func retr_func);
1483void gnutls_db_set_remove_function(gnutls_session_t session,
1484 gnutls_db_remove_func rem_func);
1485void gnutls_db_set_store_function(gnutls_session_t session,
1486 gnutls_db_store_func store_func);
1487void gnutls_db_set_ptr(gnutls_session_t session, void *ptr);
1488void *gnutls_db_get_ptr(gnutls_session_t session);
1489int gnutls_db_check_entry(gnutls_session_t session,
1490 gnutls_datum_t session_entry);
1491time_t gnutls_db_check_entry_time(gnutls_datum_t * entry);
1492
1493 /**
1494 * gnutls_handshake_hook_func:
1495 * @session: the current session
1496 * @htype: the type of the handshake message (%gnutls_handshake_description_t)
1497 * @post: non zero if this is a post-process/generation call and zero otherwise
1498 * @incoming: non zero if this is an incoming message and zero if this is an outgoing message
1499 * @msg: the (const) data of the handshake message without the handshake headers.
1500 *
1501 * Function prototype for handshake hooks. It is set using
1502 * gnutls_handshake_set_hook_function().
1503 *
1504 * Returns: Non zero on error.
1505 */
1506#define GNUTLS_HOOK_POST (1)
1507#define GNUTLS_HOOK_PRE (0)
1508#define GNUTLS_HOOK_BOTH (-1)
1509
1510typedef int (*gnutls_handshake_hook_func) (gnutls_session_t,
1511 unsigned int htype,
1512 unsigned post,
1513 unsigned int incoming,
1514 const gnutls_datum_t *msg);
1515void gnutls_handshake_set_hook_function(gnutls_session_t session,
1516 unsigned int htype, int post,
1517 gnutls_handshake_hook_func func);
1518
1519#define gnutls_handshake_post_client_hello_func gnutls_handshake_simple_hook_func
1520typedef int (*gnutls_handshake_simple_hook_func) (gnutls_session_t);
1521void
1522gnutls_handshake_set_post_client_hello_function(gnutls_session_t session,
1523 gnutls_handshake_simple_hook_func func);
1524
1525void gnutls_handshake_set_max_packet_length(gnutls_session_t session,
1526 size_t max);
1527
1528/* returns libgnutls version (call it with a NULL argument)
1529 */
1530const char * gnutls_check_version(const char *req_version) __GNUTLS_CONST__;
1531
1532/* A macro which will allow optimizing out calls to gnutls_check_version()
1533 * when the version being compiled with is sufficient.
1534 * Used as:
1535 * if (gnutls_check_version_numerc(3,3,16)) {
1536 */
1537#define gnutls_check_version_numeric(a,b,c) \
1538 ((GNUTLS_VERSION_MAJOR >= (a)) && \
1539 ((GNUTLS_VERSION_NUMBER >= ( ((a) << 16) + ((b) << 8) + (c) )) || \
1540 gnutls_check_version(#a "." #b "." #c)))
1541
1542/* Functions for setting/clearing credentials
1543 */
1544void gnutls_credentials_clear(gnutls_session_t session);
1545
1546/* cred is a structure defined by the kx algorithm
1547 */
1548int gnutls_credentials_set(gnutls_session_t session,
1549 gnutls_credentials_type_t type, void *cred);
1550int gnutls_credentials_get(gnutls_session_t session,
1551 gnutls_credentials_type_t type, void **cred);
1552#define gnutls_cred_set gnutls_credentials_set
1553
1554/* x.509 types */
1555
1556struct gnutls_pubkey_st;
1557typedef struct gnutls_pubkey_st *gnutls_pubkey_t;
1558
1559struct gnutls_privkey_st;
1560typedef struct gnutls_privkey_st *gnutls_privkey_t;
1561
1562struct gnutls_x509_privkey_int;
1563typedef struct gnutls_x509_privkey_int *gnutls_x509_privkey_t;
1564
1565struct gnutls_x509_crl_int;
1566typedef struct gnutls_x509_crl_int *gnutls_x509_crl_t;
1567
1568struct gnutls_x509_crt_int;
1569typedef struct gnutls_x509_crt_int *gnutls_x509_crt_t;
1570
1571struct gnutls_x509_crq_int;
1572typedef struct gnutls_x509_crq_int *gnutls_x509_crq_t;
1573
1574struct gnutls_openpgp_keyring_int;
1575typedef struct gnutls_openpgp_keyring_int *gnutls_openpgp_keyring_t;
1576
1577
1578/* Credential structures - used in gnutls_credentials_set(); */
1579
1580struct gnutls_certificate_credentials_st;
1581typedef struct gnutls_certificate_credentials_st
1582*gnutls_certificate_credentials_t;
1583typedef gnutls_certificate_credentials_t
1584 gnutls_certificate_server_credentials;
1585typedef gnutls_certificate_credentials_t
1586 gnutls_certificate_client_credentials;
1587
1588typedef struct gnutls_anon_server_credentials_st
1589*gnutls_anon_server_credentials_t;
1590typedef struct gnutls_anon_client_credentials_st
1591*gnutls_anon_client_credentials_t;
1592
1593void gnutls_anon_free_server_credentials(gnutls_anon_server_credentials_t
1594 sc);
1595int
1596gnutls_anon_allocate_server_credentials(gnutls_anon_server_credentials_t
1597 * sc);
1598
1599void gnutls_anon_set_server_dh_params(gnutls_anon_server_credentials_t res,
1600 gnutls_dh_params_t dh_params);
1601
1602int
1603gnutls_anon_set_server_known_dh_params(gnutls_anon_server_credentials_t res,
1604 gnutls_sec_param_t sec_param);
1605
1606void
1607gnutls_anon_set_server_params_function(gnutls_anon_server_credentials_t
1608 res, gnutls_params_function * func);
1609
1610void
1611gnutls_anon_free_client_credentials(gnutls_anon_client_credentials_t sc);
1612int
1613gnutls_anon_allocate_client_credentials(gnutls_anon_client_credentials_t
1614 * sc);
1615
1616/* CERTFILE is an x509 certificate in PEM form.
1617 * KEYFILE is a pkcs-1 private key in PEM form (for RSA keys).
1618 */
1619void
1620gnutls_certificate_free_credentials(gnutls_certificate_credentials_t sc);
1621int
1622gnutls_certificate_allocate_credentials(gnutls_certificate_credentials_t
1623 * res);
1624
1625int
1626gnutls_certificate_get_issuer(gnutls_certificate_credentials_t sc,
1627 gnutls_x509_crt_t cert,
1628 gnutls_x509_crt_t * issuer,
1629 unsigned int flags);
1630
1631int gnutls_certificate_get_crt_raw(gnutls_certificate_credentials_t sc,
1632 unsigned idx1, unsigned idx2,
1633 gnutls_datum_t * cert);
1634
1635int
1636gnutls_certificate_get_x509_crt(gnutls_certificate_credentials_t res,
1637 unsigned index,
1638 gnutls_x509_crt_t **crt_list,
1639 unsigned *crt_list_size);
1640
1641int
1642gnutls_certificate_get_x509_key(gnutls_certificate_credentials_t res,
1643 unsigned index,
1644 gnutls_x509_privkey_t *key);
1645
1646void gnutls_certificate_free_keys(gnutls_certificate_credentials_t sc);
1647void gnutls_certificate_free_cas(gnutls_certificate_credentials_t sc);
1648void gnutls_certificate_free_ca_names(gnutls_certificate_credentials_t sc);
1649void gnutls_certificate_free_crls(gnutls_certificate_credentials_t sc);
1650
1651void gnutls_certificate_set_dh_params(gnutls_certificate_credentials_t res,
1652 gnutls_dh_params_t dh_params);
1653
1654int gnutls_certificate_set_known_dh_params(gnutls_certificate_credentials_t res,
1655 gnutls_sec_param_t sec_param);
1656void gnutls_certificate_set_verify_flags(gnutls_certificate_credentials_t
1657 res, unsigned int flags);
1658unsigned int
1659gnutls_certificate_get_verify_flags(gnutls_certificate_credentials_t res);
1660
1661/**
1662 * gnutls_certificate_flags:
1663 * @GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH: Skip the key and certificate matching check.
1664 * @GNUTLS_CERTIFICATE_API_V2: If set the gnutls_certificate_set_*key* functions will return an index of the added key pair instead of zero.
1665 *
1666 * Enumeration of different certificate credentials flags.
1667 */
1668typedef enum gnutls_certificate_flags {
1669 GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH = 1,
1670 GNUTLS_CERTIFICATE_API_V2 = (1<<1)
1671} gnutls_certificate_flags;
1672
1673void gnutls_certificate_set_flags(gnutls_certificate_credentials_t,
1674 unsigned flags);
1675
1676void gnutls_certificate_set_verify_limits(gnutls_certificate_credentials_t
1677 res, unsigned int max_bits,
1678 unsigned int max_depth);
1679
1680unsigned int
1681gnutls_certificate_get_verify_flags(gnutls_certificate_credentials_t);
1682
1683int
1684gnutls_certificate_set_x509_system_trust(gnutls_certificate_credentials_t
1685 cred);
1686
1687int
1688gnutls_certificate_set_x509_trust_file(gnutls_certificate_credentials_t
1689 cred, const char *cafile,
1690 gnutls_x509_crt_fmt_t type);
1691int
1692gnutls_certificate_set_x509_trust_dir(gnutls_certificate_credentials_t cred,
1693 const char *ca_dir,
1694 gnutls_x509_crt_fmt_t type);
1695
1696int gnutls_certificate_set_x509_trust_mem(gnutls_certificate_credentials_t
1697 res, const gnutls_datum_t * ca,
1698 gnutls_x509_crt_fmt_t type);
1699
1700int
1701gnutls_certificate_set_x509_crl_file(gnutls_certificate_credentials_t
1702 res, const char *crlfile,
1703 gnutls_x509_crt_fmt_t type);
1704int gnutls_certificate_set_x509_crl_mem(gnutls_certificate_credentials_t
1705 res, const gnutls_datum_t * CRL,
1706 gnutls_x509_crt_fmt_t type);
1707
1708int
1709gnutls_certificate_set_x509_key_file(gnutls_certificate_credentials_t
1710 res, const char *certfile,
1711 const char *keyfile,
1712 gnutls_x509_crt_fmt_t type);
1713
1714int
1715gnutls_certificate_set_x509_key_file2(gnutls_certificate_credentials_t
1716 res, const char *certfile,
1717 const char *keyfile,
1718 gnutls_x509_crt_fmt_t type,
1719 const char *pass,
1720 unsigned int flags);
1721
1722int gnutls_certificate_set_x509_key_mem(gnutls_certificate_credentials_t
1723 res, const gnutls_datum_t * cert,
1724 const gnutls_datum_t * key,
1725 gnutls_x509_crt_fmt_t type);
1726
1727int gnutls_certificate_set_x509_key_mem2(gnutls_certificate_credentials_t
1728 res, const gnutls_datum_t * cert,
1729 const gnutls_datum_t * key,
1730 gnutls_x509_crt_fmt_t type,
1731 const char *pass,
1732 unsigned int flags);
1733
1734void gnutls_certificate_send_x509_rdn_sequence(gnutls_session_t session,
1735 int status);
1736
1737int
1738gnutls_certificate_set_x509_simple_pkcs12_file
1739(gnutls_certificate_credentials_t res, const char *pkcs12file,
1740 gnutls_x509_crt_fmt_t type, const char *password);
1741int
1742gnutls_certificate_set_x509_simple_pkcs12_mem
1743(gnutls_certificate_credentials_t res, const gnutls_datum_t * p12blob,
1744 gnutls_x509_crt_fmt_t type, const char *password);
1745
1746/* New functions to allow setting already parsed X.509 stuff.
1747 */
1748
1749int gnutls_certificate_set_x509_key(gnutls_certificate_credentials_t res,
1750 gnutls_x509_crt_t * cert_list,
1751 int cert_list_size,
1752 gnutls_x509_privkey_t key);
1753int gnutls_certificate_set_x509_trust(gnutls_certificate_credentials_t res,
1754 gnutls_x509_crt_t * ca_list,
1755 int ca_list_size);
1756int gnutls_certificate_set_x509_crl(gnutls_certificate_credentials_t res,
1757 gnutls_x509_crl_t * crl_list,
1758 int crl_list_size);
1759
1760int gnutls_certificate_get_x509_key(gnutls_certificate_credentials_t res,
1761 unsigned index,
1762 gnutls_x509_privkey_t *key);
1763int gnutls_certificate_get_x509_crt(gnutls_certificate_credentials_t res,
1764 unsigned index,
1765 gnutls_x509_crt_t **crt_list,
1766 unsigned *crt_list_size);
1767
1768 /* OCSP status request extension, RFC 6066 */
1769typedef int (*gnutls_status_request_ocsp_func)
1770 (gnutls_session_t session, void *ptr, gnutls_datum_t * ocsp_response);
1771
1772void
1773gnutls_certificate_set_ocsp_status_request_function
1774(gnutls_certificate_credentials_t res,
1775gnutls_status_request_ocsp_func ocsp_func, void *ptr);
1776
1777int
1778gnutls_certificate_set_ocsp_status_request_function2
1779(gnutls_certificate_credentials_t res, unsigned idx,
1780gnutls_status_request_ocsp_func ocsp_func, void *ptr);
1781
1782int
1783gnutls_certificate_set_ocsp_status_request_file
1784(gnutls_certificate_credentials_t res, const char *response_file,
1785 unsigned idx);
1786
1787int gnutls_ocsp_status_request_enable_client(gnutls_session_t session,
1788 gnutls_datum_t * responder_id,
1789 size_t responder_id_size,
1790 gnutls_datum_t *
1791 request_extensions);
1792
1793int gnutls_ocsp_status_request_get(gnutls_session_t session,
1794 gnutls_datum_t * response);
1795
1796#define GNUTLS_OCSP_SR_IS_AVAIL 1
1797int gnutls_ocsp_status_request_is_checked(gnutls_session_t session,
1798 unsigned int flags);
1799
1800/* global state functions
1801 */
1802int gnutls_global_init(void);
1803void gnutls_global_deinit(void);
1804
1805 /**
1806 * gnutls_time_func:
1807 * @t: where to store time.
1808 *
1809 * Function prototype for time()-like function. Set with
1810 * gnutls_global_set_time_function().
1811 *
1812 * Returns: Number of seconds since the epoch, or (time_t)-1 on errors.
1813 */
1814typedef time_t(*gnutls_time_func) (time_t * t);
1815
1816typedef int (*mutex_init_func) (void **mutex);
1817typedef int (*mutex_lock_func) (void **mutex);
1818typedef int (*mutex_unlock_func) (void **mutex);
1819typedef int (*mutex_deinit_func) (void **mutex);
1820
1821void gnutls_global_set_mutex(mutex_init_func init,
1822 mutex_deinit_func deinit,
1823 mutex_lock_func lock,
1824 mutex_unlock_func unlock);
1825
1826typedef void *(*gnutls_alloc_function) (size_t);
1827typedef void *(*gnutls_calloc_function) (size_t, size_t);
1828typedef int (*gnutls_is_secure_function) (const void *);
1829typedef void (*gnutls_free_function) (void *);
1830typedef void *(*gnutls_realloc_function) (void *, size_t);
1831
1832void gnutls_global_set_time_function(gnutls_time_func time_func);
1833
1834/* For use in callbacks */
1835extern _SYM_EXPORT gnutls_alloc_function gnutls_malloc;
1836extern _SYM_EXPORT gnutls_realloc_function gnutls_realloc;
1837extern _SYM_EXPORT gnutls_calloc_function gnutls_calloc;
1838extern _SYM_EXPORT gnutls_free_function gnutls_free;
1839
1840#ifdef GNUTLS_INTERNAL_BUILD
1841#define gnutls_free(a) gnutls_free((void *) (a)), a=NULL
1842#endif
1843
1844extern _SYM_EXPORT char *(*gnutls_strdup) (const char *);
1845
1846/* a variant of memset that doesn't get optimized out */
1847void gnutls_memset(void *data, int c, size_t size);
1848
1849/* constant time memcmp */
1850int gnutls_memcmp(const void *s1, const void *s2, size_t n);
1851
1852typedef void (*gnutls_log_func) (int, const char *);
1853typedef void (*gnutls_audit_log_func) (gnutls_session_t, const char *);
1854void gnutls_global_set_log_function(gnutls_log_func log_func);
1855void gnutls_global_set_audit_log_function(gnutls_audit_log_func log_func);
1856void gnutls_global_set_log_level(int level);
1857
1858/* Diffie-Hellman parameter handling.
1859 */
1860int gnutls_dh_params_init(gnutls_dh_params_t * dh_params);
1861void gnutls_dh_params_deinit(gnutls_dh_params_t dh_params);
1862int gnutls_dh_params_import_raw(gnutls_dh_params_t dh_params,
1863 const gnutls_datum_t * prime,
1864 const gnutls_datum_t * generator);
1865int gnutls_dh_params_import_dsa(gnutls_dh_params_t dh_params, gnutls_x509_privkey_t key);
1866int gnutls_dh_params_import_raw2(gnutls_dh_params_t dh_params,
1867 const gnutls_datum_t * prime,
1868 const gnutls_datum_t * generator,
1869 unsigned key_bits);
1870int gnutls_dh_params_import_pkcs3(gnutls_dh_params_t params,
1871 const gnutls_datum_t * pkcs3_params,
1872 gnutls_x509_crt_fmt_t format);
1873int gnutls_dh_params_generate2(gnutls_dh_params_t params,
1874 unsigned int bits);
1875int gnutls_dh_params_export_pkcs3(gnutls_dh_params_t params,
1876 gnutls_x509_crt_fmt_t format,
1877 unsigned char *params_data,
1878 size_t * params_data_size);
1879int gnutls_dh_params_export2_pkcs3(gnutls_dh_params_t params,
1880 gnutls_x509_crt_fmt_t format,
1881 gnutls_datum_t * out);
1882int gnutls_dh_params_export_raw(gnutls_dh_params_t params,
1883 gnutls_datum_t * prime,
1884 gnutls_datum_t * generator,
1885 unsigned int *bits);
1886int gnutls_dh_params_cpy(gnutls_dh_params_t dst, gnutls_dh_params_t src);
1887
1888
1889
1890/* Session stuff
1891 */
1892typedef struct {
1893 void *iov_base;
1894 size_t iov_len;
1895} giovec_t;
1896
1897typedef ssize_t(*gnutls_pull_func) (gnutls_transport_ptr_t, void *,
1898 size_t);
1899typedef ssize_t(*gnutls_push_func) (gnutls_transport_ptr_t, const void *,
1900 size_t);
1901
1902int gnutls_system_recv_timeout(gnutls_transport_ptr_t ptr, unsigned int ms);
1903typedef int (*gnutls_pull_timeout_func) (gnutls_transport_ptr_t,
1904 unsigned int ms);
1905
1906typedef ssize_t(*gnutls_vec_push_func) (gnutls_transport_ptr_t,
1907 const giovec_t * iov, int iovcnt);
1908
1909typedef int (*gnutls_errno_func) (gnutls_transport_ptr_t);
1910
1911#if 0
1912 /* This will be defined as macro. */
1913 void gnutls_transport_set_int (gnutls_session_t session, int r);
1914#endif
1915
1916void gnutls_transport_set_int2(gnutls_session_t session, int r, int s);
1917#define gnutls_transport_set_int(s, i) gnutls_transport_set_int2(s, i, i)
1918
1919void gnutls_transport_get_int2(gnutls_session_t session, int *r, int *s);
1920int gnutls_transport_get_int(gnutls_session_t session);
1921
1922void gnutls_transport_set_ptr(gnutls_session_t session,
1923 gnutls_transport_ptr_t ptr);
1924void gnutls_transport_set_ptr2(gnutls_session_t session,
1925 gnutls_transport_ptr_t recv_ptr,
1926 gnutls_transport_ptr_t send_ptr);
1927
1928gnutls_transport_ptr_t gnutls_transport_get_ptr(gnutls_session_t session);
1929void gnutls_transport_get_ptr2(gnutls_session_t session,
1930 gnutls_transport_ptr_t * recv_ptr,
1931 gnutls_transport_ptr_t * send_ptr);
1932
1933void gnutls_transport_set_vec_push_function(gnutls_session_t session,
1934 gnutls_vec_push_func vec_func);
1935void gnutls_transport_set_push_function(gnutls_session_t session,
1936 gnutls_push_func push_func);
1937void gnutls_transport_set_pull_function(gnutls_session_t session,
1938 gnutls_pull_func pull_func);
1939
1940void gnutls_transport_set_pull_timeout_function(gnutls_session_t session,
1941 gnutls_pull_timeout_func
1942 func);
1943
1944void gnutls_transport_set_errno_function(gnutls_session_t session,
1945 gnutls_errno_func errno_func);
1946
1947void gnutls_transport_set_errno(gnutls_session_t session, int err);
1948
1949/* session specific
1950 */
1951void gnutls_session_set_ptr(gnutls_session_t session, void *ptr);
1952void *gnutls_session_get_ptr(gnutls_session_t session);
1953
1954void gnutls_openpgp_send_cert(gnutls_session_t session,
1955 gnutls_openpgp_crt_status_t status);
1956
1957/* This function returns the hash of the given data.
1958 */
1959int gnutls_fingerprint(gnutls_digest_algorithm_t algo,
1960 const gnutls_datum_t * data, void *result,
1961 size_t * result_size);
1962
1963 /**
1964 * gnutls_random_art_t:
1965 * @GNUTLS_RANDOM_ART_OPENSSH: OpenSSH-style random art.
1966 *
1967 * Enumeration of different random art types.
1968 */
1969typedef enum gnutls_random_art {
1970 GNUTLS_RANDOM_ART_OPENSSH = 1
1971} gnutls_random_art_t;
1972
1973int gnutls_random_art(gnutls_random_art_t type,
1974 const char *key_type, unsigned int key_size,
1975 void *fpr, size_t fpr_size, gnutls_datum_t * art);
1976
1977/* IDNA */
1978#define GNUTLS_IDNA_FORCE_2008 (1<<1)
1979int gnutls_idna_map(const char * input, unsigned ilen, gnutls_datum_t *out, unsigned flags);
1980int gnutls_idna_reverse_map(const char *input, unsigned ilen, gnutls_datum_t *out, unsigned flags);
1981
1982/* SRP
1983 */
1984
1985typedef struct gnutls_srp_server_credentials_st
1986*gnutls_srp_server_credentials_t;
1987typedef struct gnutls_srp_client_credentials_st
1988*gnutls_srp_client_credentials_t;
1989
1990void
1991gnutls_srp_free_client_credentials(gnutls_srp_client_credentials_t sc);
1992int
1993gnutls_srp_allocate_client_credentials(gnutls_srp_client_credentials_t *
1994 sc);
1995int gnutls_srp_set_client_credentials(gnutls_srp_client_credentials_t res,
1996 const char *username,
1997 const char *password);
1998
1999void
2000gnutls_srp_free_server_credentials(gnutls_srp_server_credentials_t sc);
2001int
2002gnutls_srp_allocate_server_credentials(gnutls_srp_server_credentials_t *
2003 sc);
2004int gnutls_srp_set_server_credentials_file(gnutls_srp_server_credentials_t
2005 res, const char *password_file,
2006 const char *password_conf_file);
2007
2008const char *gnutls_srp_server_get_username(gnutls_session_t session);
2009
2010void gnutls_srp_set_prime_bits(gnutls_session_t session,
2011 unsigned int bits);
2012
2013int gnutls_srp_verifier(const char *username,
2014 const char *password,
2015 const gnutls_datum_t * salt,
2016 const gnutls_datum_t * generator,
2017 const gnutls_datum_t * prime,
2018 gnutls_datum_t * res);
2019
2020/* The static parameters defined in draft-ietf-tls-srp-05
2021 * Those should be used as input to gnutls_srp_verifier().
2022 */
2023extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_4096_group_prime;
2024extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_4096_group_generator;
2025
2026extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_3072_group_prime;
2027extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_3072_group_generator;
2028
2029extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_2048_group_prime;
2030extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_2048_group_generator;
2031
2032extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_1536_group_prime;
2033extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_1536_group_generator;
2034
2035extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_1024_group_prime;
2036extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_1024_group_generator;
2037
2038/* The static parameters defined in rfc7919
2039 */
2040
2041extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_8192_group_prime;
2042extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_8192_group_generator;
2043extern _SYM_EXPORT const unsigned int gnutls_ffdhe_8192_key_bits;
2044
2045extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_4096_group_prime;
2046extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_4096_group_generator;
2047extern _SYM_EXPORT const unsigned int gnutls_ffdhe_4096_key_bits;
2048
2049extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_3072_group_prime;
2050extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_3072_group_generator;
2051extern _SYM_EXPORT const unsigned int gnutls_ffdhe_3072_key_bits;
2052
2053extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_2048_group_prime;
2054extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_2048_group_generator;
2055extern _SYM_EXPORT const unsigned int gnutls_ffdhe_2048_key_bits;
2056
2057typedef int gnutls_srp_server_credentials_function(gnutls_session_t,
2058 const char *username,
2059 gnutls_datum_t * salt,
2060 gnutls_datum_t *
2061 verifier,
2062 gnutls_datum_t *
2063 generator,
2064 gnutls_datum_t * prime);
2065void
2066gnutls_srp_set_server_credentials_function(gnutls_srp_server_credentials_t
2067 cred,
2068 gnutls_srp_server_credentials_function
2069 * func);
2070
2071typedef int gnutls_srp_client_credentials_function(gnutls_session_t,
2072 char **, char **);
2073void
2074gnutls_srp_set_client_credentials_function(gnutls_srp_client_credentials_t
2075 cred,
2076 gnutls_srp_client_credentials_function
2077 * func);
2078
2079int gnutls_srp_base64_encode(const gnutls_datum_t * data, char *result,
2080 size_t * result_size);
2081int gnutls_srp_base64_encode2(const gnutls_datum_t * data,
2082 gnutls_datum_t * result);
2083
2084int gnutls_srp_base64_decode(const gnutls_datum_t * b64_data, char *result,
2085 size_t * result_size);
2086int gnutls_srp_base64_decode2(const gnutls_datum_t * b64_data,
2087 gnutls_datum_t * result);
2088
2089#define gnutls_srp_base64_encode_alloc gnutls_srp_base64_encode2
2090#define gnutls_srp_base64_decode_alloc gnutls_srp_base64_decode2
2091
2092void
2093gnutls_srp_set_server_fake_salt_seed(gnutls_srp_server_credentials_t
2094 sc,
2095 const gnutls_datum_t * seed,
2096 unsigned int salt_length);
2097
2098/* PSK stuff */
2099typedef struct gnutls_psk_server_credentials_st
2100*gnutls_psk_server_credentials_t;
2101typedef struct gnutls_psk_client_credentials_st
2102*gnutls_psk_client_credentials_t;
2103
2104/**
2105 * gnutls_psk_key_flags:
2106 * @GNUTLS_PSK_KEY_RAW: PSK-key in raw format.
2107 * @GNUTLS_PSK_KEY_HEX: PSK-key in hex format.
2108 *
2109 * Enumeration of different PSK key flags.
2110 */
2111typedef enum gnutls_psk_key_flags {
2112 GNUTLS_PSK_KEY_RAW = 0,
2113 GNUTLS_PSK_KEY_HEX
2114} gnutls_psk_key_flags;
2115
2116void
2117gnutls_psk_free_client_credentials(gnutls_psk_client_credentials_t sc);
2118int
2119gnutls_psk_allocate_client_credentials(gnutls_psk_client_credentials_t *
2120 sc);
2121int gnutls_psk_set_client_credentials(gnutls_psk_client_credentials_t res,
2122 const char *username,
2123 const gnutls_datum_t * key,
2124 gnutls_psk_key_flags flags);
2125
2126void
2127gnutls_psk_free_server_credentials(gnutls_psk_server_credentials_t sc);
2128int
2129gnutls_psk_allocate_server_credentials(gnutls_psk_server_credentials_t *
2130 sc);
2131int gnutls_psk_set_server_credentials_file(gnutls_psk_server_credentials_t
2132 res, const char *password_file);
2133
2134int
2135gnutls_psk_set_server_credentials_hint(gnutls_psk_server_credentials_t
2136 res, const char *hint);
2137
2138const char *gnutls_psk_server_get_username(gnutls_session_t session);
2139const char *gnutls_psk_client_get_hint(gnutls_session_t session);
2140
2141typedef int gnutls_psk_server_credentials_function(gnutls_session_t,
2142 const char *username,
2143 gnutls_datum_t * key);
2144void
2145gnutls_psk_set_server_credentials_function(gnutls_psk_server_credentials_t
2146 cred,
2147 gnutls_psk_server_credentials_function
2148 * func);
2149
2150typedef int gnutls_psk_client_credentials_function(gnutls_session_t,
2151 char **username,
2152 gnutls_datum_t * key);
2153void
2154gnutls_psk_set_client_credentials_function(gnutls_psk_client_credentials_t
2155 cred,
2156 gnutls_psk_client_credentials_function
2157 * func);
2158
2159int gnutls_hex_encode(const gnutls_datum_t * data, char *result,
2160 size_t * result_size);
2161int gnutls_hex_decode(const gnutls_datum_t * hex_data, void *result,
2162 size_t * result_size);
2163
2164int gnutls_hex_encode2(const gnutls_datum_t * data, gnutls_datum_t *result);
2165int gnutls_hex_decode2(const gnutls_datum_t * data, gnutls_datum_t *result);
2166
2167void
2168gnutls_psk_set_server_dh_params(gnutls_psk_server_credentials_t res,
2169 gnutls_dh_params_t dh_params);
2170
2171int
2172gnutls_psk_set_server_known_dh_params(gnutls_psk_server_credentials_t res,
2173 gnutls_sec_param_t sec_param);
2174
2175void
2176gnutls_psk_set_server_params_function(gnutls_psk_server_credentials_t
2177 res, gnutls_params_function * func);
2178
2179/**
2180 * gnutls_x509_subject_alt_name_t:
2181 * @GNUTLS_SAN_DNSNAME: DNS-name SAN.
2182 * @GNUTLS_SAN_RFC822NAME: E-mail address SAN.
2183 * @GNUTLS_SAN_URI: URI SAN.
2184 * @GNUTLS_SAN_IPADDRESS: IP address SAN.
2185 * @GNUTLS_SAN_OTHERNAME: OtherName SAN.
2186 * @GNUTLS_SAN_DN: DN SAN.
2187 * @GNUTLS_SAN_OTHERNAME_XMPP: Virtual SAN, used by certain functions for convenience.
2188 * @GNUTLS_SAN_OTHERNAME_KRB5PRINCIPAL: Virtual SAN, used by certain functions for convenience.
2189 *
2190 * Enumeration of different subject alternative names types.
2191 */
2192typedef enum gnutls_x509_subject_alt_name_t {
2193 GNUTLS_SAN_DNSNAME = 1,
2194 GNUTLS_SAN_RFC822NAME = 2,
2195 GNUTLS_SAN_URI = 3,
2196 GNUTLS_SAN_IPADDRESS = 4,
2197 GNUTLS_SAN_OTHERNAME = 5,
2198 GNUTLS_SAN_DN = 6,
2199 GNUTLS_SAN_MAX = GNUTLS_SAN_DN,
2200 /* The following are "virtual" subject alternative name types, in
2201 that they are represented by an otherName value and an OID.
2202 Used by gnutls_x509_crt_get_subject_alt_othername_oid. */
2203 GNUTLS_SAN_OTHERNAME_XMPP = 1000,
2204 GNUTLS_SAN_OTHERNAME_KRB5PRINCIPAL
2205} gnutls_x509_subject_alt_name_t;
2206
2207struct gnutls_openpgp_crt_int;
2208typedef struct gnutls_openpgp_crt_int *gnutls_openpgp_crt_t;
2209
2210struct gnutls_openpgp_privkey_int;
2211typedef struct gnutls_openpgp_privkey_int *gnutls_openpgp_privkey_t;
2212
2213struct gnutls_pkcs11_privkey_st;
2214typedef struct gnutls_pkcs11_privkey_st *gnutls_pkcs11_privkey_t;
2215
2216/**
2217 * gnutls_privkey_type_t:
2218 * @GNUTLS_PRIVKEY_X509: X.509 private key, #gnutls_x509_privkey_t.
2219 * @GNUTLS_PRIVKEY_OPENPGP: OpenPGP private key, #gnutls_openpgp_privkey_t.
2220 * @GNUTLS_PRIVKEY_PKCS11: PKCS11 private key, #gnutls_pkcs11_privkey_t.
2221 * @GNUTLS_PRIVKEY_EXT: External private key, operating using callbacks.
2222 *
2223 * Enumeration of different private key types.
2224 */
2225typedef enum {
2226 GNUTLS_PRIVKEY_X509,
2227 GNUTLS_PRIVKEY_OPENPGP,
2228 GNUTLS_PRIVKEY_PKCS11,
2229 GNUTLS_PRIVKEY_EXT
2230} gnutls_privkey_type_t;
2231
2232typedef struct gnutls_retr2_st {
2233 gnutls_certificate_type_t cert_type;
2234 gnutls_privkey_type_t key_type;
2235
2236 union {
2237 gnutls_x509_crt_t *x509;
2238 gnutls_openpgp_crt_t pgp;
2239 } cert;
2240 unsigned int ncerts; /* one for pgp keys */
2241
2242 union {
2243 gnutls_x509_privkey_t x509;
2244 gnutls_openpgp_privkey_t pgp;
2245 gnutls_pkcs11_privkey_t pkcs11;
2246 } key;
2247
2248 unsigned int deinit_all; /* if non zero all keys will be deinited */
2249} gnutls_retr2_st;
2250
2251
2252 /* Functions that allow auth_info_t structures handling
2253 */
2254
2255gnutls_credentials_type_t gnutls_auth_get_type(gnutls_session_t session);
2256gnutls_credentials_type_t
2257gnutls_auth_server_get_type(gnutls_session_t session);
2258gnutls_credentials_type_t
2259gnutls_auth_client_get_type(gnutls_session_t session);
2260
2261 /* DH */
2262
2263void gnutls_dh_set_prime_bits(gnutls_session_t session, unsigned int bits);
2264int gnutls_dh_get_secret_bits(gnutls_session_t session);
2265int gnutls_dh_get_peers_public_bits(gnutls_session_t session);
2266int gnutls_dh_get_prime_bits(gnutls_session_t session);
2267
2268int gnutls_dh_get_group(gnutls_session_t session, gnutls_datum_t * raw_gen,
2269 gnutls_datum_t * raw_prime);
2270int gnutls_dh_get_pubkey(gnutls_session_t session,
2271 gnutls_datum_t * raw_key);
2272
2273 /* X509PKI */
2274
2275
2276 /* These are set on the credentials structure.
2277 */
2278
2279 /* use gnutls_certificate_set_retrieve_function2() in abstract.h
2280 * instead. It's much more efficient.
2281 */
2282
2283typedef int gnutls_certificate_retrieve_function(gnutls_session_t,
2284 const
2285 gnutls_datum_t *
2286 req_ca_rdn,
2287 int nreqs,
2288 const
2289 gnutls_pk_algorithm_t
2290 * pk_algos,
2291 int
2292 pk_algos_length,
2293 gnutls_retr2_st *);
2294
2295
2296void
2297gnutls_certificate_set_retrieve_function(gnutls_certificate_credentials_t
2298 cred,
2299 gnutls_certificate_retrieve_function
2300 * func);
2301
2302void
2303gnutls_certificate_set_verify_function(gnutls_certificate_credentials_t
2304 cred,
2305 gnutls_certificate_verify_function
2306 * func);
2307
2308void
2309gnutls_certificate_server_set_request(gnutls_session_t session,
2310 gnutls_certificate_request_t req);
2311
2312 /* get data from the session
2313 */
2314const gnutls_datum_t *gnutls_certificate_get_peers(gnutls_session_t
2315 session, unsigned int
2316 *list_size);
2317const gnutls_datum_t *gnutls_certificate_get_ours(gnutls_session_t
2318 session);
2319
2320int gnutls_certificate_get_peers_subkey_id(gnutls_session_t session,
2321 gnutls_datum_t * id);
2322
2323time_t gnutls_certificate_activation_time_peers(gnutls_session_t session);
2324time_t gnutls_certificate_expiration_time_peers(gnutls_session_t session);
2325
2326int gnutls_certificate_client_get_request_status(gnutls_session_t session);
2327int gnutls_certificate_verify_peers2(gnutls_session_t session,
2328 unsigned int *status);
2329int gnutls_certificate_verify_peers3(gnutls_session_t session,
2330 const char *hostname,
2331 unsigned int *status);
2332
2333int
2334gnutls_certificate_verify_peers(gnutls_session_t session,
2335 gnutls_typed_vdata_st * data,
2336 unsigned int elements,
2337 unsigned int *status);
2338
2339int gnutls_certificate_verification_status_print(unsigned int status,
2340 gnutls_certificate_type_t
2341 type,
2342 gnutls_datum_t * out,
2343 unsigned int flags);
2344
2345int gnutls_pem_base64_encode(const char *msg, const gnutls_datum_t * data,
2346 char *result, size_t * result_size);
2347int gnutls_pem_base64_decode(const char *header,
2348 const gnutls_datum_t * b64_data,
2349 unsigned char *result, size_t * result_size);
2350
2351int gnutls_pem_base64_encode2(const char *msg,
2352 const gnutls_datum_t * data,
2353 gnutls_datum_t * result);
2354int gnutls_pem_base64_decode2(const char *header,
2355 const gnutls_datum_t * b64_data,
2356 gnutls_datum_t * result);
2357
2358#define gnutls_pem_base64_encode_alloc gnutls_pem_base64_encode2
2359#define gnutls_pem_base64_decode_alloc gnutls_pem_base64_decode2
2360
2361 /* key_usage will be an OR of the following values:
2362 */
2363
2364 /* when the key is to be used for signing: */
2365#define GNUTLS_KEY_DIGITAL_SIGNATURE 128
2366#define GNUTLS_KEY_NON_REPUDIATION 64
2367 /* when the key is to be used for encryption: */
2368#define GNUTLS_KEY_KEY_ENCIPHERMENT 32
2369#define GNUTLS_KEY_DATA_ENCIPHERMENT 16
2370#define GNUTLS_KEY_KEY_AGREEMENT 8
2371#define GNUTLS_KEY_KEY_CERT_SIGN 4
2372#define GNUTLS_KEY_CRL_SIGN 2
2373#define GNUTLS_KEY_ENCIPHER_ONLY 1
2374#define GNUTLS_KEY_DECIPHER_ONLY 32768
2375
2376void
2377gnutls_certificate_set_params_function(gnutls_certificate_credentials_t
2378 res, gnutls_params_function * func);
2379void gnutls_anon_set_params_function(gnutls_anon_server_credentials_t res,
2380 gnutls_params_function * func);
2381void gnutls_psk_set_params_function(gnutls_psk_server_credentials_t res,
2382 gnutls_params_function * func);
2383
2384int gnutls_hex2bin(const char *hex_data, size_t hex_size,
2385 void *bin_data, size_t * bin_size);
2386
2387 /* Trust on first use (or ssh like) functions */
2388
2389 /* stores the provided information to a database
2390 */
2391typedef int (*gnutls_tdb_store_func) (const char *db_name,
2392 const char *host,
2393 const char *service,
2394 time_t expiration,
2395 const gnutls_datum_t * pubkey);
2396
2397typedef int (*gnutls_tdb_store_commitment_func) (const char *db_name,
2398 const char *host,
2399 const char *service,
2400 time_t expiration,
2401 gnutls_digest_algorithm_t
2402 hash_algo,
2403 const gnutls_datum_t *
2404 hash);
2405
2406 /* searches for the provided host/service pair that match the
2407 * provided public key in the database. */
2408typedef int (*gnutls_tdb_verify_func) (const char *db_name,
2409 const char *host,
2410 const char *service,
2411 const gnutls_datum_t * pubkey);
2412
2413
2414struct gnutls_tdb_int;
2415typedef struct gnutls_tdb_int *gnutls_tdb_t;
2416
2417int gnutls_tdb_init(gnutls_tdb_t * tdb);
2418void gnutls_tdb_set_store_func(gnutls_tdb_t tdb,
2419 gnutls_tdb_store_func store);
2420void gnutls_tdb_set_store_commitment_func(gnutls_tdb_t tdb,
2421 gnutls_tdb_store_commitment_func
2422 cstore);
2423void gnutls_tdb_set_verify_func(gnutls_tdb_t tdb,
2424 gnutls_tdb_verify_func verify);
2425void gnutls_tdb_deinit(gnutls_tdb_t tdb);
2426
2427int gnutls_verify_stored_pubkey(const char *db_name,
2428 gnutls_tdb_t tdb,
2429 const char *host,
2430 const char *service,
2431 gnutls_certificate_type_t cert_type,
2432 const gnutls_datum_t * cert,
2433 unsigned int flags);
2434
2435#define GNUTLS_SCOMMIT_FLAG_ALLOW_BROKEN 1
2436int gnutls_store_commitment(const char *db_name,
2437 gnutls_tdb_t tdb,
2438 const char *host,
2439 const char *service,
2440 gnutls_digest_algorithm_t hash_algo,
2441 const gnutls_datum_t * hash,
2442 time_t expiration, unsigned int flags);
2443
2444int gnutls_store_pubkey(const char *db_name,
2445 gnutls_tdb_t tdb,
2446 const char *host,
2447 const char *service,
2448 gnutls_certificate_type_t cert_type,
2449 const gnutls_datum_t * cert,
2450 time_t expiration, unsigned int flags);
2451
2452 /* Other helper functions */
2453int gnutls_load_file(const char *filename, gnutls_datum_t * data);
2454
2455unsigned gnutls_url_is_supported(const char *url);
2456
2457 /* PIN callback */
2458
2459/**
2460 * gnutls_pin_flag_t:
2461 * @GNUTLS_PIN_USER: The PIN for the user.
2462 * @GNUTLS_PIN_SO: The PIN for the security officer (admin).
2463 * @GNUTLS_PIN_CONTEXT_SPECIFIC: The PIN is for a specific action and key like signing.
2464 * @GNUTLS_PIN_FINAL_TRY: This is the final try before blocking.
2465 * @GNUTLS_PIN_COUNT_LOW: Few tries remain before token blocks.
2466 * @GNUTLS_PIN_WRONG: Last given PIN was not correct.
2467 *
2468 * Enumeration of different flags that are input to the PIN function.
2469 */
2470typedef enum {
2471 GNUTLS_PIN_USER = (1 << 0),
2472 GNUTLS_PIN_SO = (1 << 1),
2473 GNUTLS_PIN_FINAL_TRY = (1 << 2),
2474 GNUTLS_PIN_COUNT_LOW = (1 << 3),
2475 GNUTLS_PIN_CONTEXT_SPECIFIC = (1 << 4),
2476 GNUTLS_PIN_WRONG = (1 << 5)
2477} gnutls_pin_flag_t;
2478
2479#define GNUTLS_PKCS11_PIN_USER GNUTLS_PIN_USER
2480#define GNUTLS_PKCS11_PIN_SO GNUTLS_PIN_SO
2481#define GNUTLS_PKCS11_PIN_FINAL_TRY GNUTLS_PIN_FINAL_TRY
2482#define GNUTLS_PKCS11_PIN_COUNT_LOW GNUTLS_PIN_COUNT_LOW
2483#define GNUTLS_PKCS11_PIN_CONTEXT_SPECIFIC GNUTLS_PIN_CONTEXT_SPECIFIC
2484#define GNUTLS_PKCS11_PIN_WRONG GNUTLS_PIN_WRONG
2485
2486/**
2487 * gnutls_pin_callback_t:
2488 * @userdata: user-controlled data from gnutls_pkcs11_set_pin_function().
2489 * @attempt: pin-attempt counter, initially 0.
2490 * @token_url: URL of token.
2491 * @token_label: label of token.
2492 * @flags: a #gnutls_pin_flag_t flag.
2493 * @pin: buffer to hold PIN, of size @pin_max.
2494 * @pin_max: size of @pin buffer.
2495 *
2496 * Callback function type for PKCS#11 or TPM PIN entry. It is set by
2497 * functions like gnutls_pkcs11_set_pin_function().
2498 *
2499 * The callback should provides the PIN code to unlock the token with
2500 * label @token_label, specified by the URL @token_url.
2501 *
2502 * The PIN code, as a NUL-terminated ASCII string, should be copied
2503 * into the @pin buffer (of maximum size @pin_max), and return 0 to
2504 * indicate success. Alternatively, the callback may return a
2505 * negative gnutls error code to indicate failure and cancel PIN entry
2506 * (in which case, the contents of the @pin parameter are ignored).
2507 *
2508 * When a PIN is required, the callback will be invoked repeatedly
2509 * (and indefinitely) until either the returned PIN code is correct,
2510 * the callback returns failure, or the token refuses login (e.g. when
2511 * the token is locked due to too many incorrect PINs!). For the
2512 * first such invocation, the @attempt counter will have value zero;
2513 * it will increase by one for each subsequent attempt.
2514 *
2515 * Returns: %GNUTLS_E_SUCCESS (0) on success or a negative error code on error.
2516 *
2517 * Since: 2.12.0
2518 **/
2519typedef int (*gnutls_pin_callback_t) (void *userdata, int attempt,
2520 const char *token_url,
2521 const char *token_label,
2522 unsigned int flags,
2523 char *pin, size_t pin_max);
2524
2525void gnutls_certificate_set_pin_function(gnutls_certificate_credentials_t,
2526 gnutls_pin_callback_t fn,
2527 void *userdata);
2528
2529/* Public string related functions */
2530typedef struct gnutls_buffer_st *gnutls_buffer_t;
2531
2532int gnutls_buffer_append_data(gnutls_buffer_t, const void *data, size_t data_size);
2533
2534#define GNUTLS_UTF8_IGNORE_ERRS 1
2535int gnutls_utf8_password_normalize(const unsigned char *password, unsigned password_len,
2536 gnutls_datum_t *out, unsigned flags);
2537
2538/* Public extensions related functions */
2539
2540typedef void *gnutls_ext_priv_data_t;
2541
2542void gnutls_ext_set_data(gnutls_session_t session, unsigned type,
2543 gnutls_ext_priv_data_t);
2544int gnutls_ext_get_data(gnutls_session_t session, unsigned type,
2545 gnutls_ext_priv_data_t *);
2546
2547typedef int (*gnutls_ext_recv_func) (gnutls_session_t session,
2548 const unsigned char *data,
2549 size_t len);
2550
2551typedef int (*gnutls_ext_send_func) (gnutls_session_t session,
2552 gnutls_buffer_t extdata);
2553
2554typedef void (*gnutls_ext_deinit_data_func) (gnutls_ext_priv_data_t data);
2555
2556typedef int (*gnutls_ext_pack_func) (gnutls_ext_priv_data_t data,
2557 gnutls_buffer_t packed_data);
2558
2559typedef int (*gnutls_ext_unpack_func) (gnutls_buffer_t packed_data,
2560 gnutls_ext_priv_data_t *data);
2561
2562
2563/**
2564 * gnutls_ext_parse_type_t:
2565 * @GNUTLS_EXT_NONE: Never parsed
2566 * @GNUTLS_EXT_ANY: Any extension type (internal use only).
2567 * @GNUTLS_EXT_APPLICATION: Application extension.
2568 * @GNUTLS_EXT_TLS: TLS-internal extension.
2569 * @GNUTLS_EXT_MANDATORY: Extension parsed even if resuming (or extensions are disabled).
2570 *
2571 * Enumeration of different TLS extension types. This type is
2572 * to indicate whether an extension is useful to application
2573 * level or TLS level only. This is used to parse the
2574 * application level extensions before the "client_hello" callback
2575 * is called.
2576 */
2577typedef enum {
2578 GNUTLS_EXT_ANY = 0,
2579 GNUTLS_EXT_APPLICATION = 1,
2580 GNUTLS_EXT_TLS = 2,
2581 GNUTLS_EXT_MANDATORY = 3,
2582 GNUTLS_EXT_NONE = 4
2583} gnutls_ext_parse_type_t;
2584
2585/**
2586 * gnutls_ext_flags_t:
2587 * @GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL: If specified the extension registered will override the internal; this does not work with extensions existing prior to 3.5.12.
2588 *
2589 * Enumeration of different TLS extension registration flags.
2590 */
2591typedef enum {
2592 GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL = 1
2593} gnutls_ext_flags_t;
2594
2595/* Register a custom tls extension
2596 */
2597int gnutls_ext_register(const char *name, int type, gnutls_ext_parse_type_t parse_type,
2598 gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func,
2599 gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func,
2600 gnutls_ext_unpack_func unpack_func);
2601
2602int gnutls_session_ext_register(gnutls_session_t, const char *name, int type, gnutls_ext_parse_type_t parse_type,
2603 gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func,
2604 gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func,
2605 gnutls_ext_unpack_func unpack_func, unsigned flags);
2606
2607const char *gnutls_ext_get_name(unsigned int ext);
2608
2609/* Public supplemental data related functions */
2610
2611typedef int (*gnutls_supp_recv_func) (gnutls_session_t session,
2612 const unsigned char * data, size_t data_size);
2613typedef int (*gnutls_supp_send_func) (gnutls_session_t session,
2614 gnutls_buffer_t buf);
2615
2616int gnutls_supplemental_register(const char *name,
2617 gnutls_supplemental_data_format_type_t type,
2618 gnutls_supp_recv_func supp_recv_func,
2619 gnutls_supp_send_func supp_send_func);
2620
2621int gnutls_session_supplemental_register(gnutls_session_t session, const char *name,
2622 gnutls_supplemental_data_format_type_t type,
2623 gnutls_supp_recv_func supp_recv_func,
2624 gnutls_supp_send_func supp_send_func,
2625 unsigned int flags);
2626
2627void gnutls_supplemental_recv(gnutls_session_t session, unsigned do_recv_supplemental);
2628
2629void gnutls_supplemental_send(gnutls_session_t session, unsigned do_send_supplemental);
2630
2631/* FIPS140-2 related functions */
2632unsigned gnutls_fips140_mode_enabled(void);
2633
2634 /* Gnutls error codes. The mapping to a TLS alert is also shown in
2635 * comments.
2636 */
2637
2638#define GNUTLS_E_SUCCESS 0
2639#define GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM -3
2640#define GNUTLS_E_UNKNOWN_CIPHER_TYPE -6
2641#define GNUTLS_E_LARGE_PACKET -7
2642#define GNUTLS_E_UNSUPPORTED_VERSION_PACKET -8 /* GNUTLS_A_PROTOCOL_VERSION */
2643#define GNUTLS_E_UNEXPECTED_PACKET_LENGTH -9 /* GNUTLS_A_RECORD_OVERFLOW */
2644#define GNUTLS_E_INVALID_SESSION -10
2645#define GNUTLS_E_FATAL_ALERT_RECEIVED -12
2646#define GNUTLS_E_UNEXPECTED_PACKET -15 /* GNUTLS_A_UNEXPECTED_MESSAGE */
2647#define GNUTLS_E_WARNING_ALERT_RECEIVED -16
2648#define GNUTLS_E_ERROR_IN_FINISHED_PACKET -18
2649#define GNUTLS_E_UNEXPECTED_HANDSHAKE_PACKET -19
2650#define GNUTLS_E_UNKNOWN_CIPHER_SUITE -21 /* GNUTLS_A_HANDSHAKE_FAILURE */
2651#define GNUTLS_E_UNWANTED_ALGORITHM -22
2652#define GNUTLS_E_MPI_SCAN_FAILED -23
2653#define GNUTLS_E_DECRYPTION_FAILED -24 /* GNUTLS_A_DECRYPTION_FAILED, GNUTLS_A_BAD_RECORD_MAC */
2654#define GNUTLS_E_MEMORY_ERROR -25
2655#define GNUTLS_E_DECOMPRESSION_FAILED -26 /* GNUTLS_A_DECOMPRESSION_FAILURE */
2656#define GNUTLS_E_COMPRESSION_FAILED -27
2657#define GNUTLS_E_AGAIN -28
2658#define GNUTLS_E_EXPIRED -29
2659#define GNUTLS_E_DB_ERROR -30
2660#define GNUTLS_E_SRP_PWD_ERROR -31
2661#define GNUTLS_E_INSUFFICIENT_CREDENTIALS -32
2662#define GNUTLS_E_INSUFICIENT_CREDENTIALS GNUTLS_E_INSUFFICIENT_CREDENTIALS /* for backwards compatibility only */
2663#define GNUTLS_E_INSUFFICIENT_CRED GNUTLS_E_INSUFFICIENT_CREDENTIALS
2664#define GNUTLS_E_INSUFICIENT_CRED GNUTLS_E_INSUFFICIENT_CREDENTIALS /* for backwards compatibility only */
2665
2666#define GNUTLS_E_HASH_FAILED -33
2667#define GNUTLS_E_BASE64_DECODING_ERROR -34
2668
2669#define GNUTLS_E_MPI_PRINT_FAILED -35
2670#define GNUTLS_E_REHANDSHAKE -37 /* GNUTLS_A_NO_RENEGOTIATION */
2671#define GNUTLS_E_GOT_APPLICATION_DATA -38
2672#define GNUTLS_E_RECORD_LIMIT_REACHED -39
2673#define GNUTLS_E_ENCRYPTION_FAILED -40
2674
2675#define GNUTLS_E_PK_ENCRYPTION_FAILED -44
2676#define GNUTLS_E_PK_DECRYPTION_FAILED -45
2677#define GNUTLS_E_PK_SIGN_FAILED -46
2678#define GNUTLS_E_X509_UNSUPPORTED_CRITICAL_EXTENSION -47
2679#define GNUTLS_E_KEY_USAGE_VIOLATION -48
2680#define GNUTLS_E_NO_CERTIFICATE_FOUND -49 /* GNUTLS_A_BAD_CERTIFICATE */
2681#define GNUTLS_E_INVALID_REQUEST -50
2682#define GNUTLS_E_SHORT_MEMORY_BUFFER -51
2683#define GNUTLS_E_INTERRUPTED -52
2684#define GNUTLS_E_PUSH_ERROR -53
2685#define GNUTLS_E_PULL_ERROR -54
2686#define GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER -55 /* GNUTLS_A_ILLEGAL_PARAMETER */
2687#define GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE -56
2688#define GNUTLS_E_PKCS1_WRONG_PAD -57
2689#define GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION -58
2690#define GNUTLS_E_INTERNAL_ERROR -59
2691#define GNUTLS_E_DH_PRIME_UNACCEPTABLE -63
2692#define GNUTLS_E_FILE_ERROR -64
2693#define GNUTLS_E_TOO_MANY_EMPTY_PACKETS -78
2694#define GNUTLS_E_UNKNOWN_PK_ALGORITHM -80
2695#define GNUTLS_E_TOO_MANY_HANDSHAKE_PACKETS -81
2696
2697 /* returned if you need to generate temporary RSA
2698 * parameters. These are needed for export cipher suites.
2699 */
2700#define GNUTLS_E_NO_TEMPORARY_RSA_PARAMS -84
2701
2702#define GNUTLS_E_NO_COMPRESSION_ALGORITHMS -86
2703#define GNUTLS_E_NO_CIPHER_SUITES -87
2704
2705#define GNUTLS_E_OPENPGP_GETKEY_FAILED -88
2706#define GNUTLS_E_PK_SIG_VERIFY_FAILED -89
2707
2708#define GNUTLS_E_ILLEGAL_SRP_USERNAME -90
2709#define GNUTLS_E_SRP_PWD_PARSING_ERROR -91
2710#define GNUTLS_E_NO_TEMPORARY_DH_PARAMS -93
2711
2712 /* For certificate and key stuff
2713 */
2714#define GNUTLS_E_ASN1_ELEMENT_NOT_FOUND -67
2715#define GNUTLS_E_ASN1_IDENTIFIER_NOT_FOUND -68
2716#define GNUTLS_E_ASN1_DER_ERROR -69
2717#define GNUTLS_E_ASN1_VALUE_NOT_FOUND -70
2718#define GNUTLS_E_ASN1_GENERIC_ERROR -71
2719#define GNUTLS_E_ASN1_VALUE_NOT_VALID -72
2720#define GNUTLS_E_ASN1_TAG_ERROR -73
2721#define GNUTLS_E_ASN1_TAG_IMPLICIT -74
2722#define GNUTLS_E_ASN1_TYPE_ANY_ERROR -75
2723#define GNUTLS_E_ASN1_SYNTAX_ERROR -76
2724#define GNUTLS_E_ASN1_DER_OVERFLOW -77
2725#define GNUTLS_E_OPENPGP_UID_REVOKED -79
2726#define GNUTLS_E_CERTIFICATE_ERROR -43
2727#define GNUTLS_E_X509_CERTIFICATE_ERROR GNUTLS_E_CERTIFICATE_ERROR
2728#define GNUTLS_E_CERTIFICATE_KEY_MISMATCH -60
2729#define GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE -61 /* GNUTLS_A_UNSUPPORTED_CERTIFICATE */
2730#define GNUTLS_E_X509_UNKNOWN_SAN -62
2731#define GNUTLS_E_OPENPGP_FINGERPRINT_UNSUPPORTED -94
2732#define GNUTLS_E_X509_UNSUPPORTED_ATTRIBUTE -95
2733#define GNUTLS_E_UNKNOWN_HASH_ALGORITHM -96
2734#define GNUTLS_E_UNKNOWN_PKCS_CONTENT_TYPE -97
2735#define GNUTLS_E_UNKNOWN_PKCS_BAG_TYPE -98
2736#define GNUTLS_E_INVALID_PASSWORD -99
2737#define GNUTLS_E_MAC_VERIFY_FAILED -100 /* for PKCS #12 MAC */
2738#define GNUTLS_E_CONSTRAINT_ERROR -101
2739
2740#define GNUTLS_E_WARNING_IA_IPHF_RECEIVED -102
2741#define GNUTLS_E_WARNING_IA_FPHF_RECEIVED -103
2742
2743#define GNUTLS_E_IA_VERIFY_FAILED -104
2744#define GNUTLS_E_UNKNOWN_ALGORITHM -105
2745#define GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM -106
2746#define GNUTLS_E_SAFE_RENEGOTIATION_FAILED -107
2747#define GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED -108
2748#define GNUTLS_E_UNKNOWN_SRP_USERNAME -109
2749#define GNUTLS_E_PREMATURE_TERMINATION -110
2750
2751#define GNUTLS_E_MALFORMED_CIDR -111
2752
2753#define GNUTLS_E_BASE64_ENCODING_ERROR -201
2754#define GNUTLS_E_INCOMPATIBLE_GCRYPT_LIBRARY -202 /* obsolete */
2755#define GNUTLS_E_INCOMPATIBLE_CRYPTO_LIBRARY -202
2756#define GNUTLS_E_INCOMPATIBLE_LIBTASN1_LIBRARY -203
2757
2758#define GNUTLS_E_OPENPGP_KEYRING_ERROR -204
2759#define GNUTLS_E_X509_UNSUPPORTED_OID -205
2760
2761#define GNUTLS_E_RANDOM_FAILED -206
2762#define GNUTLS_E_BASE64_UNEXPECTED_HEADER_ERROR -207
2763
2764#define GNUTLS_E_OPENPGP_SUBKEY_ERROR -208
2765
2766#define GNUTLS_E_CRYPTO_ALREADY_REGISTERED GNUTLS_E_ALREADY_REGISTERED
2767#define GNUTLS_E_ALREADY_REGISTERED -209
2768
2769#define GNUTLS_E_HANDSHAKE_TOO_LARGE -210
2770
2771#define GNUTLS_E_CRYPTODEV_IOCTL_ERROR -211
2772#define GNUTLS_E_CRYPTODEV_DEVICE_ERROR -212
2773
2774#define GNUTLS_E_CHANNEL_BINDING_NOT_AVAILABLE -213
2775#define GNUTLS_E_BAD_COOKIE -214
2776#define GNUTLS_E_OPENPGP_PREFERRED_KEY_ERROR -215
2777#define GNUTLS_E_INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL -216
2778#define GNUTLS_E_INSUFFICIENT_SECURITY -217
2779
2780#define GNUTLS_E_HEARTBEAT_PONG_RECEIVED -292
2781#define GNUTLS_E_HEARTBEAT_PING_RECEIVED -293
2782
2783#define GNUTLS_E_UNRECOGNIZED_NAME -294
2784
2785/* PKCS11 related */
2786#define GNUTLS_E_PKCS11_ERROR -300
2787#define GNUTLS_E_PKCS11_LOAD_ERROR -301
2788#define GNUTLS_E_PARSING_ERROR -302
2789#define GNUTLS_E_PKCS11_PIN_ERROR -303
2790
2791#define GNUTLS_E_PKCS11_SLOT_ERROR -305
2792#define GNUTLS_E_LOCKING_ERROR -306
2793#define GNUTLS_E_PKCS11_ATTRIBUTE_ERROR -307
2794#define GNUTLS_E_PKCS11_DEVICE_ERROR -308
2795#define GNUTLS_E_PKCS11_DATA_ERROR -309
2796#define GNUTLS_E_PKCS11_UNSUPPORTED_FEATURE_ERROR -310
2797#define GNUTLS_E_PKCS11_KEY_ERROR -311
2798#define GNUTLS_E_PKCS11_PIN_EXPIRED -312
2799#define GNUTLS_E_PKCS11_PIN_LOCKED -313
2800#define GNUTLS_E_PKCS11_SESSION_ERROR -314
2801#define GNUTLS_E_PKCS11_SIGNATURE_ERROR -315
2802#define GNUTLS_E_PKCS11_TOKEN_ERROR -316
2803#define GNUTLS_E_PKCS11_USER_ERROR -317
2804
2805#define GNUTLS_E_CRYPTO_INIT_FAILED -318
2806#define GNUTLS_E_TIMEDOUT -319
2807#define GNUTLS_E_USER_ERROR -320
2808#define GNUTLS_E_ECC_NO_SUPPORTED_CURVES -321
2809#define GNUTLS_E_ECC_UNSUPPORTED_CURVE -322
2810#define GNUTLS_E_PKCS11_REQUESTED_OBJECT_NOT_AVAILBLE -323
2811#define GNUTLS_E_CERTIFICATE_LIST_UNSORTED -324
2812#define GNUTLS_E_ILLEGAL_PARAMETER -325
2813#define GNUTLS_E_NO_PRIORITIES_WERE_SET -326
2814#define GNUTLS_E_X509_UNSUPPORTED_EXTENSION -327
2815#define GNUTLS_E_SESSION_EOF -328
2816
2817#define GNUTLS_E_TPM_ERROR -329
2818#define GNUTLS_E_TPM_KEY_PASSWORD_ERROR -330
2819#define GNUTLS_E_TPM_SRK_PASSWORD_ERROR -331
2820#define GNUTLS_E_TPM_SESSION_ERROR -332
2821#define GNUTLS_E_TPM_KEY_NOT_FOUND -333
2822#define GNUTLS_E_TPM_UNINITIALIZED -334
2823#define GNUTLS_E_TPM_NO_LIB -335
2824
2825#define GNUTLS_E_NO_CERTIFICATE_STATUS -340
2826#define GNUTLS_E_OCSP_RESPONSE_ERROR -341
2827#define GNUTLS_E_RANDOM_DEVICE_ERROR -342
2828#define GNUTLS_E_AUTH_ERROR -343
2829#define GNUTLS_E_NO_APPLICATION_PROTOCOL -344
2830#define GNUTLS_E_SOCKETS_INIT_ERROR -345
2831#define GNUTLS_E_KEY_IMPORT_FAILED -346
2832#define GNUTLS_E_INAPPROPRIATE_FALLBACK -347 /*GNUTLS_A_INAPPROPRIATE_FALLBACK*/
2833#define GNUTLS_E_CERTIFICATE_VERIFICATION_ERROR -348
2834#define GNUTLS_E_PRIVKEY_VERIFICATION_ERROR -349
2835#define GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH -350 /*GNUTLS_A_DECODE_ERROR*/
2836#define GNUTLS_E_ASN1_EMBEDDED_NULL_IN_STRING -351
2837
2838#define GNUTLS_E_SELF_TEST_ERROR -400
2839#define GNUTLS_E_NO_SELF_TEST -401
2840#define GNUTLS_E_LIB_IN_ERROR_STATE -402
2841#define GNUTLS_E_PK_GENERATION_ERROR -403
2842#define GNUTLS_E_IDNA_ERROR -404
2843
2844#define GNUTLS_E_NEED_FALLBACK -405
2845#define GNUTLS_E_SESSION_USER_ID_CHANGED -406
2846#define GNUTLS_E_HANDSHAKE_DURING_FALSE_START -407
2847#define GNUTLS_E_UNAVAILABLE_DURING_HANDSHAKE -408
2848#define GNUTLS_E_PK_INVALID_PUBKEY -409
2849#define GNUTLS_E_PK_INVALID_PRIVKEY -410
2850#define GNUTLS_E_NOT_YET_ACTIVATED -411
2851#define GNUTLS_E_INVALID_UTF8_STRING -412
2852#define GNUTLS_E_NO_EMBEDDED_DATA -413
2853#define GNUTLS_E_INVALID_UTF8_EMAIL -414
2854#define GNUTLS_E_INVALID_PASSWORD_STRING -415
2855
2856#define GNUTLS_E_UNIMPLEMENTED_FEATURE -1250
2857
2858
2859
2860#define GNUTLS_E_APPLICATION_ERROR_MAX -65000
2861#define GNUTLS_E_APPLICATION_ERROR_MIN -65500
2862
2863/* *INDENT-OFF* */
2864#ifdef __cplusplus
2865}
2866#endif
2867/* *INDENT-ON* */
2868
2869#include <gnutls/compat.h>
2870
2871#endif /* GNUTLS_H */
2872