added some support for session resuming (in client)
[gnutls:gnutls.git] / lib / gnutls.h
1 /*
2  *      Copyright (C) 2000 Nikos Mavroyanopoulos
3  *
4  * This file is part of GNUTLS.
5  *
6  * GNUTLS is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * GNUTLS is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  */
20
21 enum ContentType { GNUTLS_APPLICATION_DATA=23 };
22 typedef enum ContentType ContentType;
23 #define GNUTLS_AES GNUTLS_RIJNDAEL
24 enum BulkCipherAlgorithm { GNUTLS_NULL, GNUTLS_ARCFOUR=1, GNUTLS_3DES = 4, GNUTLS_RIJNDAEL };
25 typedef enum BulkCipherAlgorithm BulkCipherAlgorithm;
26 enum KXAlgorithm { GNUTLS_KX_RSA, GNUTLS_KX_DHE_DSS, GNUTLS_KX_DHE_RSA, GNUTLS_KX_DH_DSS, GNUTLS_KX_DH_RSA, GNUTLS_KX_ANON_DH };
27 typedef enum KXAlgorithm KXAlgorithm;
28 enum MACAlgorithm { GNUTLS_MAC_NULL, GNUTLS_MAC_MD5, GNUTLS_MAC_SHA };
29 typedef enum MACAlgorithm MACAlgorithm;
30 enum CompressionMethod { GNUTLS_COMPRESSION_NULL, GNUTLS_ZLIB=224 };
31 typedef enum CompressionMethod CompressionMethod;
32 enum ConnectionEnd { GNUTLS_SERVER, GNUTLS_CLIENT };
33 typedef enum ConnectionEnd ConnectionEnd;
34
35 typedef struct {
36         unsigned char local;
37         unsigned char  major;
38         unsigned char  minor;
39 } GNUTLS_Version;
40 extern GNUTLS_Version GNUTLS_TLS1;
41 extern GNUTLS_Version GNUTLS_SSL3;
42
43
44 struct GNUTLS_STATE_INT;
45 typedef struct GNUTLS_STATE_INT* GNUTLS_STATE;
46
47 int gnutls_init(GNUTLS_STATE * state, ConnectionEnd con_end);
48 int gnutls_deinit(GNUTLS_STATE * state);
49 ssize_t gnutls_send_int(int cd, GNUTLS_STATE state, ContentType type, void* data, size_t sizeofdata);
50 ssize_t gnutls_recv_int(int cd, GNUTLS_STATE state, ContentType type, char* data, size_t sizeofdata);
51 int gnutls_close(int cd, GNUTLS_STATE state);
52 int gnutls_handshake(int cd, GNUTLS_STATE state);
53
54 int gnutls_is_fatal_error( int error);
55 void gnutls_perror( int error);
56
57 #define gnutls_send( x, y, z, w) gnutls_send_int( x, y, GNUTLS_APPLICATION_DATA, z, w)
58 #define gnutls_recv( x, y, z, w) gnutls_recv_int( x, y, GNUTLS_APPLICATION_DATA, z, w)
59
60 /* functions to set priority of cipher suites */
61 void gnutls_set_cipher_priority( GNUTLS_STATE state, int num, ...);
62 void gnutls_set_kx_priority( GNUTLS_STATE state, int num, ...);
63 void gnutls_set_mac_priority( GNUTLS_STATE state, int num, ...);
64 void gnutls_set_compression_priority( GNUTLS_STATE state, int num, ...);
65
66 /* set our version - local is 0x00 for TLS 1.0 and SSL3 */
67 void gnutls_set_current_version(GNUTLS_STATE state, GNUTLS_Version version); 
68
69 /* get/set session */
70 int gnutls_set_current_session( GNUTLS_STATE state, void* session, int session_size);
71 int gnutls_get_current_session( GNUTLS_STATE state, void* session, int *session_size);
72
73 /* these are deprecated must be replaced by gnutls_errors.h */
74 #define GNUTLS_E_MAC_FAILED -1
75 #define GNUTLS_E_UNKNOWN_CIPHER -2
76 #define GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM -3
77 #define GNUTLS_E_UNKNOWN_MAC_ALGORITHM -4
78 #define GNUTLS_E_UNKNOWN_ERROR -5
79 #define GNUTLS_E_UNKNOWN_CIPHER_TYPE -6
80 #define GNUTLS_E_LARGE_PACKET -7
81 #define GNUTLS_E_UNSUPPORTED_VERSION_PACKET -8
82 #define GNUTLS_E_UNEXPECTED_PACKET_LENGTH -9
83 #define GNUTLS_E_INVALID_SESSION -10
84 #define GNUTLS_E_UNABLE_SEND_DATA -11
85 #define GNUTLS_E_FATAL_ALERT_RECEIVED -12
86 #define GNUTLS_E_RECEIVED_BAD_MESSAGE -13
87 #define GNUTLS_E_RECEIVED_MORE_DATA -14
88 #define GNUTLS_E_UNEXPECTED_PACKET -15
89 #define GNUTLS_E_WARNING_ALERT_RECEIVED -16
90 #define GNUTLS_E_CLOSURE_ALERT_RECEIVED -17