2 * Copyright (C) 2000-2012 Free Software Foundation, Inc.
4 * Author: Nikos Mavrogiannopoulos
6 * This file is part of GnuTLS.
8 * The GnuTLS is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; either version 3 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>
43 #include <sys/types.h>
47 # include <sys/socket.h>
49 # include <ws2tcpip.h>
52 #include <u64.h> /* gnulib for uint64_t */
55 # include <nettle/memxor.h>
57 # include <gl/memxor.h>
58 # define memxor gl_memxor
62 # ifndef _GNUTLS_GCC_VERSION
63 # define _GNUTLS_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
65 # if _GNUTLS_GCC_VERSION >= 30100
66 # define likely(x) __builtin_expect((x), 1)
67 # define unlikely(x) __builtin_expect((x), 0)
76 /* some systems had problems with long long int, thus,
84 #include <gnutls/gnutls.h>
85 #include <gnutls/dtls.h>
86 #include <gnutls/abstract.h>
90 * They are not needed any more. You can simply enable
91 * the gnutls_log callback to get error descriptions.
96 #define HANDSHAKE_DEBUG // Prints some information on handshake
97 #define COMPRESSION_DEBUG
101 /* The size of a handshake message should not
102 * be larger than this value.
104 #define MAX_HANDSHAKE_PACKET_SIZE 48*1024
106 #define TLS_MAX_SESSION_ID_SIZE 32
108 /* The maximum digest size of hash algorithms.
110 #define MAX_HASH_SIZE 64
111 #define MAX_CIPHER_BLOCK_SIZE 16
112 #define MAX_CIPHER_KEY_SIZE 32
114 #define MAX_USERNAME_SIZE 128
115 #define MAX_SERVER_NAME_SIZE 128
117 #define SESSION_TICKET_KEY_NAME_SIZE 16
118 #define SESSION_TICKET_KEY_SIZE 16
119 #define SESSION_TICKET_IV_SIZE 16
120 #define SESSION_TICKET_MAC_SECRET_SIZE 32
122 #define AEAD_EXPLICIT_DATA_SIZE 8
123 #define AEAD_IMPLICIT_DATA_SIZE 4
125 #define GNUTLS_MASTER_SIZE 48
126 #define GNUTLS_RANDOM_SIZE 32
129 #define DTLS_RECORD_WINDOW_SIZE 64
132 /* we can receive up to MAX_EXT_TYPES extensions.
134 #define MAX_EXT_TYPES 32
137 * gnutls_ext_parse_type_t:
138 * @GNUTLS_EXT_NONE: Never parsed
139 * @GNUTLS_EXT_ANY: Any extension type.
140 * @GNUTLS_EXT_APPLICATION: Application extension.
141 * @GNUTLS_EXT_TLS: TLS-internal extension.
142 * @GNUTLS_EXT_MANDATORY: Extension parsed even if resuming (or extensions are disabled).
144 * Enumeration of different TLS extension types. This flag
145 * indicates for an extension whether it is useful to application
146 * level or TLS level only. This is (only) used to parse the
147 * application level extensions before the "client_hello" callback
153 GNUTLS_EXT_APPLICATION
= 1,
155 GNUTLS_EXT_MANDATORY
= 3,
157 } gnutls_ext_parse_type_t
;
160 /* expire time for resuming sessions */
161 #define DEFAULT_EXPIRE_TIME 3600
163 typedef enum transport_t
169 /* the maximum size of encrypted packets */
170 #define IS_DTLS(session) (session->internals.transport == GNUTLS_DGRAM)
172 #define DEFAULT_MAX_RECORD_SIZE 16384
173 #define TLS_RECORD_HEADER_SIZE 5
174 #define DTLS_RECORD_HEADER_SIZE (TLS_RECORD_HEADER_SIZE+8)
175 #define RECORD_HEADER_SIZE(session) (IS_DTLS(session) ? DTLS_RECORD_HEADER_SIZE : TLS_RECORD_HEADER_SIZE)
176 #define MAX_RECORD_HEADER_SIZE DTLS_RECORD_HEADER_SIZE
178 #define MAX_RECORD_SEND_SIZE(session) (IS_DTLS(session)?((size_t)gnutls_dtls_get_data_mtu(session)):(size_t)session->security_parameters.max_record_send_size)
179 #define MAX_RECORD_RECV_SIZE(session) ((size_t)session->security_parameters.max_record_recv_size)
180 #define MAX_PAD_SIZE 255
181 #define EXTRA_COMP_SIZE 2048
182 #define MAX_RECORD_OVERHEAD (MAX_CIPHER_BLOCK_SIZE/*iv*/+MAX_PAD_SIZE+EXTRA_COMP_SIZE+MAX_HASH_SIZE/*MAC*/)
183 #define MAX_RECV_SIZE(session) (MAX_RECORD_OVERHEAD+MAX_RECORD_RECV_SIZE(session)+RECORD_HEADER_SIZE(session))
185 #define TLS_HANDSHAKE_HEADER_SIZE 4
186 #define DTLS_HANDSHAKE_HEADER_SIZE (TLS_HANDSHAKE_HEADER_SIZE+8)
187 #define HANDSHAKE_HEADER_SIZE(session) (IS_DTLS(session) ? DTLS_HANDSHAKE_HEADER_SIZE : TLS_HANDSHAKE_HEADER_SIZE)
188 #define MAX_HANDSHAKE_HEADER_SIZE DTLS_HANDSHAKE_HEADER_SIZE
190 /* This is the maximum handshake message size we send without
191 fragmentation. This currently ignores record layer overhead. */
192 #define DTLS_DEFAULT_MTU 1200
194 /* the maximum size of the DTLS cookie */
195 #define DTLS_MAX_COOKIE_SIZE 32
197 /* The maximum number of HELLO_VERIFY_REQUEST messages the client
198 processes before aborting. */
199 #define MAX_HANDSHAKE_HELLO_VERIFY_REQUESTS 5
201 /* defaults for verification functions
203 #define DEFAULT_MAX_VERIFY_DEPTH 16
204 #define DEFAULT_MAX_VERIFY_BITS 16*1024
206 #include <gnutls_mem.h>
208 #define MEMSUB(x,y) ((ssize_t)((ptrdiff_t)x-(ptrdiff_t)y))
210 #define DECR_LEN(len, x) do { len-=x; if (len<0) {gnutls_assert(); return GNUTLS_E_UNEXPECTED_PACKET_LENGTH;} } while (0)
211 #define DECR_LENGTH_RET(len, x, RET) do { len-=x; if (len<0) {gnutls_assert(); return RET;} } while (0)
212 #define DECR_LENGTH_COM(len, x, COM) do { len-=x; if (len<0) {gnutls_assert(); COM;} } while (0)
214 #define GNUTLS_POINTER_TO_INT(_) ((int) GNUTLS_POINTER_TO_INT_CAST (_))
215 #define GNUTLS_INT_TO_POINTER(_) ((void*) GNUTLS_POINTER_TO_INT_CAST (_))
222 #include <gnutls_mpi.h>
224 typedef enum handshake_state_t
225 { STATE0
= 0, STATE1
, STATE2
,
226 STATE3
, STATE4
, STATE5
, STATE6
, STATE7
, STATE8
,
227 STATE9
, STATE10
, STATE11
, STATE12
, STATE13
, STATE14
,
228 STATE15
, STATE16
, STATE17
,
229 STATE20
= 20, STATE21
, STATE22
,
230 STATE30
= 30, STATE31
, STATE40
= 40, STATE41
, STATE50
= 50,
231 STATE60
= 60, STATE61
, STATE62
, STATE70
, STATE71
234 typedef enum heartbeat_state_t
241 typedef enum recv_state_t
244 RECV_STATE_DTLS_RETRANSMIT
,
247 #include <gnutls_str.h>
249 /* This is the maximum number of algorithms (ciphers or macs etc).
250 * keep it synced with GNUTLS_MAX_ALGORITHM_NUM in gnutls.h
252 #define MAX_ALGOS GNUTLS_MAX_ALGORITHM_NUM
254 typedef enum extensions_t
256 GNUTLS_EXTENSION_SERVER_NAME
= 0,
257 GNUTLS_EXTENSION_MAX_RECORD_SIZE
= 1,
258 GNUTLS_EXTENSION_STATUS_REQUEST
= 5,
259 GNUTLS_EXTENSION_CERT_TYPE
= 9,
260 GNUTLS_EXTENSION_SUPPORTED_ECC
= 10,
261 GNUTLS_EXTENSION_SUPPORTED_ECC_PF
= 11,
262 GNUTLS_EXTENSION_SRP
= 12,
263 GNUTLS_EXTENSION_SIGNATURE_ALGORITHMS
= 13,
264 GNUTLS_EXTENSION_SRTP
= 14,
265 GNUTLS_EXTENSION_HEARTBEAT
= 15,
266 GNUTLS_EXTENSION_SESSION_TICKET
= 35,
267 GNUTLS_EXTENSION_SAFE_RENEGOTIATION
= 65281 /* aka: 0xff01 */
271 { CIPHER_STREAM
, CIPHER_BLOCK
} cipher_type_t
;
273 #define RESUME_TRUE 1
274 #define RESUME_FALSE 0
276 /* Record Protocol */
277 typedef enum content_type_t
279 GNUTLS_CHANGE_CIPHER_SPEC
= 20, GNUTLS_ALERT
,
280 GNUTLS_HANDSHAKE
, GNUTLS_APPLICATION_DATA
,
285 #define GNUTLS_PK_ANY (gnutls_pk_algorithm_t)-1
286 #define GNUTLS_PK_NONE (gnutls_pk_algorithm_t)-2
288 /* Message buffers (mbuffers) structures */
290 /* this is actually the maximum number of distinct handshake
291 * messages that can arrive in a single flight
293 #define MAX_HANDSHAKE_MSGS 6
296 /* Handshake layer type and sequence of message */
297 gnutls_handshake_description_t htype
;
303 /* indicate whether that message is complete.
304 * complete means start_offset == 0 and end_offset == length
306 uint32_t start_offset
;
309 uint8_t header
[MAX_HANDSHAKE_HEADER_SIZE
];
312 gnutls_buffer_st data
;
313 } handshake_buffer_st
;
315 typedef struct mbuffer_st
317 /* when used in mbuffer_head_st */
318 struct mbuffer_st
*next
;
319 struct mbuffer_st
*prev
;
321 /* msg->size - mark = number of bytes left to process in this
322 message. Mark should only be non-zero when this buffer is the
323 head of the queue. */
331 /* used during fill in, to separate header from data
333 unsigned int user_mark
;
335 /* Filled in by record layer on recv:
336 * type, record_sequence
339 /* record layer content type */
342 /* record layer sequence */
343 uint64 record_sequence
;
345 /* Filled in by handshake layer on send:
346 * type, epoch, htype, handshake_sequence
349 /* Record layer epoch of message */
352 /* Handshake layer type and sequence of message */
353 gnutls_handshake_description_t htype
;
354 uint16_t handshake_sequence
;
357 typedef struct mbuffer_head_st
366 /* Store & Retrieve functions defines:
369 typedef struct auth_cred_st
371 gnutls_credentials_type_t algorithm
;
373 /* the type of credentials depends on algorithm
376 struct auth_cred_st
*next
;
382 gnutls_pk_params_st ecdh_params
;
404 /* this is used to hold the peers authentication data
406 /* auth_info_t structures SHOULD NOT contain malloced
407 * elements. Check gnutls_session_pack.c, and gnutls_auth.c.
408 * Remember that this should be calloced!
411 gnutls_credentials_type_t auth_info_type
;
412 int auth_info_size
; /* needed in order to store to db for restoring
416 auth_cred_st
*cred
; /* used to specify keys/certificates etc */
419 /* some ciphersuites use this
420 * to provide client authentication.
421 * 1 if client auth was requested
422 * by the peer, 0 otherwise
423 *** In case of a server this
424 * holds 1 if we should wait
425 * for a client certificate verify
428 typedef struct gnutls_key_st gnutls_key_st
;
432 gnutls_pin_callback_t cb
;
436 struct record_state_st
;
437 typedef struct record_state_st record_state_st
;
439 struct record_parameters_st
;
440 typedef struct record_parameters_st record_parameters_st
;
444 #include <gnutls_hash_int.h>
445 #include <gnutls_cipher_int.h>
446 #include <gnutls_compress.h>
450 uint8_t hash_algorithm
;
451 uint8_t sign_algorithm
; /* pk algorithm actually */
454 /* This structure holds parameters got from TLS extension
455 * mechanism. (some extensions may hold parameters in auth_info_t
456 * structures also - see SRP).
459 #define MAX_SIGNATURE_ALGORITHMS 16
460 #define MAX_SIGN_ALGO_SIZE (2 + MAX_SIGNATURE_ALGORITHMS * 2)
462 #define MAX_VERIFY_DATA_SIZE 36 /* in SSL 3.0, 12 in TLS 1.0 */
464 /* auth_info_t structures now MAY contain malloced
468 /* This structure and auth_info_t, are stored in the resume database,
469 * and are restored, in case of resume.
470 * Holds all the required parameters to resume the current
474 /* if you add anything in Security_Parameters struct, then
475 * also modify CPY_COMMON in gnutls_constate.c.
478 /* Note that the security parameters structure is set up after the
479 * handshake has finished. The only value you may depend on while
480 * the handshake is in progress is the cipher suite value.
484 unsigned int entity
; /* GNUTLS_SERVER or GNUTLS_CLIENT */
485 gnutls_kx_algorithm_t kx_algorithm
;
487 /* The epoch used to read and write */
489 uint16_t epoch_write
;
491 /* The epoch that the next handshake will initialize. */
494 /* The epoch at index 0 of record_parameters. */
497 /* this is the ciphersuite we are going to use
498 * moved here from internals in order to be restored
501 uint8_t cipher_suite
[2];
502 gnutls_compression_method_t compression_method
;
503 uint8_t master_secret
[GNUTLS_MASTER_SIZE
];
504 uint8_t client_random
[GNUTLS_RANDOM_SIZE
];
505 uint8_t server_random
[GNUTLS_RANDOM_SIZE
];
506 uint8_t session_id
[TLS_MAX_SESSION_ID_SIZE
];
507 uint8_t session_id_size
;
510 /* The send size is the one requested by the programmer.
511 * The recv size is the one negotiated with the peer.
513 uint16_t max_record_send_size
;
514 uint16_t max_record_recv_size
;
515 /* holds the negotiated certificate type */
516 gnutls_certificate_type_t cert_type
;
517 gnutls_ecc_curve_t ecc_curve
; /* holds the first supported ECC curve requested by client */
518 gnutls_protocol_t version
; /* moved here */
520 /* Holds the signature algorithm used in this session - If any */
521 gnutls_sign_algorithm_t sign_algo
;
523 /* FIXME: The following are not saved in the session storage
524 * for session resumption.
527 /* Used by extensions that enable supplemental data: Which ones
528 * do that? Do they belong in security parameters?
530 int do_recv_supplemental
, do_send_supplemental
;
531 } security_parameters_st
;
533 struct record_state_st
535 gnutls_datum_t mac_secret
;
538 auth_cipher_hd_st cipher_state
;
539 comp_hd_st compression_state
;
540 uint64 sequence_number
;
543 /* These are used to resolve relative epochs. These values are just
544 outside the 16 bit range to prevent off-by-one errors. An absolute
545 epoch may be referred to by its numeric id in the range
547 #define EPOCH_READ_CURRENT 70000
548 #define EPOCH_WRITE_CURRENT 70001
549 #define EPOCH_NEXT 70002
551 struct record_parameters_st
556 gnutls_cipher_algorithm_t cipher_algorithm
;
557 gnutls_mac_algorithm_t mac_algorithm
;
558 gnutls_compression_method_t compression_algorithm
;
561 uint64_t record_sw
[DTLS_RECORD_WINDOW_SIZE
];
562 unsigned int record_sw_size
;
564 record_state_st read
;
565 record_state_st write
;
567 /* Whether this state is in use, i.e., if there is
568 a pending handshake message waiting to be encrypted
569 under this epoch's parameters.
576 unsigned int priority
[MAX_ALGOS
];
577 unsigned int algorithms
;
586 } safe_renegotiation_t
;
588 /* For the external api */
589 struct gnutls_priority_st
594 priority_st compression
;
595 priority_st protocol
;
596 priority_st cert_type
;
597 priority_st sign_algo
;
598 priority_st supported_ecc
;
600 /* to disable record padding */
601 unsigned int no_extensions
:1;
602 unsigned int no_padding
:1;
603 unsigned int allow_large_records
:1;
604 safe_renegotiation_t sr
;
605 unsigned int ssl3_record_version
:1;
606 unsigned int server_precedence
:1;
607 unsigned int allow_key_usage_violation
:1;
608 unsigned int allow_weak_keys
:1;
609 /* Whether stateless compression will be used */
610 unsigned int stateless_compression
:1;
611 unsigned int additional_verify_flags
;
614 #define ENABLE_COMPAT(x) \
615 (x)->no_padding = 1; \
616 (x)->allow_large_records = 1; \
617 (x)->allow_key_usage_violation = 1; \
618 (x)->allow_weak_keys = 1
620 /* DH and RSA parameters types.
622 typedef struct gnutls_dh_params_int
624 /* [0] is the prime, [1] is the generator.
627 int q_bits
; /* length of q in bits. If zero then length is unknown.
633 gnutls_dh_params_t dh_params
;
635 gnutls_rsa_params_t rsa_params
;
637 } internal_params_st
;
639 /* DTLS session state
643 /* HelloVerifyRequest DOS prevention cookie */
644 uint8_t cookie
[DTLS_MAX_COOKIE_SIZE
];
647 /* For DTLS handshake fragmentation and reassembly. */
648 uint16_t hsk_write_seq
;
649 /* the sequence number of the expected packet */
650 unsigned int hsk_read_seq
;
653 /* a flight transmission is in process */
654 unsigned int flight_init
:1;
655 /* whether this is the last flight in the protocol */
656 unsigned int last_flight
:1;
658 /* the retransmission timeout in milliseconds */
659 unsigned int retrans_timeout_ms
;
660 /* the connection timeout in milliseconds */
661 unsigned int total_timeout_ms
;
663 unsigned int hsk_hello_verify_requests
;
665 /* non blocking stuff variables */
666 unsigned int blocking
:1;
667 /* starting time of current handshake */
668 struct timespec handshake_start_time
;
670 /* The actual retrans_timeout for the next message (e.g. doubled or so)
672 unsigned int actual_retrans_timeout_ms
;
674 /* timers to handle async handshake after gnutls_handshake()
675 * has terminated. Required to handle retransmissions.
679 /* last retransmission triggered by record layer */
680 struct timespec last_retransmit
;
681 unsigned int packets_dropped
;
689 } extension_priv_data_t
;
693 /* holds all the parsed data received by the record layer */
694 mbuffer_head_st record_buffer
;
696 int handshake_hash_buffer_prev_len
; /* keeps the length of handshake_hash_buffer, excluding
697 * the last received message */
698 gnutls_buffer_st handshake_hash_buffer
; /* used to keep the last received handshake
700 unsigned int resumable
:1; /* TRUE or FALSE - if we can resume that session */
701 unsigned int ticket_sent
:1; /* whether a session ticket was sent */
702 handshake_state_t handshake_final_state
;
703 handshake_state_t handshake_state
; /* holds
704 * a number which indicates where
705 * the handshake procedure has been
706 * interrupted. If it is 0 then
707 * no interruption has happened.
710 int invalid_connection
:1; /* true or FALSE - if this session is valid */
712 int may_not_read
:1; /* if it's 0 then we can read/write, otherwise it's forbiden to read/write
715 int read_eof
:1; /* non-zero if we have received a closure alert. */
717 int last_alert
; /* last alert received */
719 /* The last handshake messages sent or received.
721 int last_handshake_in
;
722 int last_handshake_out
;
725 struct gnutls_priority_st priorities
;
727 /* resumed session */
728 unsigned int resumed
:1; /* RESUME_TRUE or FALSE - if we are resuming a session */
729 unsigned int resumption_requested
:1; /* non-zero if resumption was requested by client */
730 security_parameters_st resumed_security_parameters
;
732 /* These buffers are used in the handshake
733 * protocol only. freed using _gnutls_handshake_io_buffer_clear();
735 mbuffer_head_st handshake_send_buffer
;
736 handshake_buffer_st handshake_recv_buffer
[MAX_HANDSHAKE_MSGS
];
737 int handshake_recv_buffer_size
;
739 /* this buffer holds a record packet -mostly used for
742 mbuffer_head_st record_recv_buffer
; /* buffer holding the unparsed record that is currently
744 mbuffer_head_st record_send_buffer
; /* holds cached data
745 * for the gnutls_io_write_buffered()
748 size_t record_send_buffer_user_size
; /* holds the
749 * size of the user specified data to
753 int expire_time
; /* after expire_time seconds this session will expire */
754 struct mod_auth_st_int
*auth_struct
; /* used in handshake packets and KX algorithms */
756 /* this is the highest version available
757 * to the peer. (advertized version).
758 * This is obtained by the Handshake Client Hello
759 * message. (some implementations read the Record version)
761 uint8_t adv_version_major
;
762 uint8_t adv_version_minor
;
764 /* if this is non zero a certificate request message
765 * will be sent to the client. - only if the ciphersuite
770 /* bits to use for DHE and DHA
771 * use _gnutls_dh_get_prime_bits() and gnutls_dh_set_prime_bits()
774 uint16_t dh_prime_bits
;
776 size_t max_handshake_data_buffer_size
;
778 /* PUSH & PULL functions.
780 gnutls_pull_timeout_func pull_timeout_func
;
781 gnutls_pull_func pull_func
;
782 gnutls_push_func push_func
;
783 gnutls_vec_push_func vec_push_func
;
784 gnutls_errno_func errno_func
;
785 /* Holds the first argument of PUSH and PULL
788 gnutls_transport_ptr_t transport_recv_ptr
;
789 gnutls_transport_ptr_t transport_send_ptr
;
791 /* STORE & RETRIEVE functions. Only used if other
792 * backend than gdbm is used.
794 gnutls_db_store_func db_store_func
;
795 gnutls_db_retr_func db_retrieve_func
;
796 gnutls_db_remove_func db_remove_func
;
799 /* post client hello callback (server side only)
801 gnutls_handshake_post_client_hello_func user_hello_func
;
803 /* holds the selected certificate and key.
804 * use _gnutls_selected_certs_deinit() and _gnutls_selected_certs_set()
807 gnutls_pcert_st
*selected_cert_list
;
808 int selected_cert_list_length
;
809 struct gnutls_privkey_st
*selected_key
;
810 int selected_need_free
:1;
812 /* holds the extensions we sent to the peer
813 * (in case of a client)
815 uint16_t extensions_sent
[MAX_EXT_TYPES
];
816 uint16_t extensions_sent_size
;
818 /* is 0 if we are to send the whole PGP key, or non zero
819 * if the fingerprint is to be sent.
823 /* This holds the default version that our first
824 * record packet will have. */
825 uint8_t default_record_version
[2];
829 int enable_private
; /* non zero to
830 * enable cipher suites
831 * which have 0xFF status.
834 /* Holds 0 if the last called function was interrupted while
835 * receiving, and non zero otherwise.
839 /* This callback will be used (if set) to receive an
840 * openpgp key. (if the peer sends a fingerprint)
842 gnutls_openpgp_recv_key_func openpgp_recv_key_func
;
844 /* If non zero the server will not advertise the CA's he
845 * trusts (do not send an RDN sequence).
847 int ignore_rdn_sequence
;
849 /* This is used to set an arbitary version in the RSA
850 * PMS secret. Can be used by clients to test whether the
851 * server checks that version. (** only used in gnutls-cli-debug)
853 uint8_t rsa_pms_version
[2];
855 /* Here we cache the DH or RSA parameters got from the
856 * credentials structure, or from a callback. That is to
857 * minimize external calls.
859 internal_params_st params
;
861 /* To avoid using global variables, and especially on Windows where
862 * the application may use a different errno variable than GnuTLS,
863 * it is possible to use gnutls_transport_set_errno to set a
864 * session-specific errno variable in the user-replaceable push/pull
865 * functions. This value is used by the send/recv functions. (The
866 * strange name of this variable is because 'errno' is typically
871 /* Function used to perform public-key signing operation during
872 handshake. Used by gnutls_sig.c:_gnutls_tls_sign(), see also
873 gnutls_sign_callback_set(). */
874 gnutls_sign_func sign_func
;
875 void *sign_func_userdata
;
877 /* minimum bits to allow for SRP
878 * use gnutls_srp_set_prime_bits() to adjust it.
880 uint16_t srp_prime_bits
;
882 /* A handshake process has been completed */
883 unsigned int initial_negotiation_completed
:1;
888 extension_priv_data_t priv
;
890 } extension_int_data
[MAX_EXT_TYPES
];
895 extension_priv_data_t priv
;
897 } resumed_extension_int_data
[MAX_EXT_TYPES
];
898 /* The type of transport protocol; stream or datagram */
899 transport_t transport
;
901 /* DTLS session state */
904 /* if set it means that the master key was set using
905 * gnutls_session_set_master() rather than being negotiated. */
906 unsigned int premaster_set
:1;
908 unsigned int cb_tls_unique_len
;
909 unsigned char cb_tls_unique
[MAX_VERIFY_DATA_SIZE
];
911 time_t handshake_endtime
; /* end time in seconds */
912 unsigned int handshake_timeout_ms
; /* timeout in milliseconds */
914 gnutls_buffer_st hb_local_data
;
915 gnutls_buffer_st hb_remote_data
;
916 struct timespec hb_ping_start
; /* timestamp: when first HeartBeat ping was sent*/
917 struct timespec hb_ping_sent
; /* timestamp: when last HeartBeat ping was sent*/
918 unsigned int hb_actual_retrans_timeout_ms
; /* current timeout, in milliseconds*/
919 unsigned int hb_retrans_timeout_ms
; /* the default timeout, in milliseconds*/
920 unsigned int hb_total_timeout_ms
; /* the total timeout, in milliseconds*/
922 heartbeat_state_t hb_state
; /* for ping */
924 recv_state_t recv_state
; /* state of the receive function */
926 /* If you add anything here, check _gnutls_handshake_internal_state_clear().
930 /* Maximum number of epochs we keep around. */
931 #define MAX_EPOCH_INDEX 16
933 struct gnutls_session_int
935 security_parameters_st security_parameters
;
936 record_parameters_st
*record_parameters
[MAX_EPOCH_INDEX
];
937 internals_st internals
;
944 void _gnutls_free_auth_info (gnutls_session_t session
);
946 /* These two macros return the advertised TLS version of
949 #define _gnutls_get_adv_version_major( session) \
950 session->internals.adv_version_major
952 #define _gnutls_get_adv_version_minor( session) \
953 session->internals.adv_version_minor
955 #define set_adv_version( session, major, minor) \
956 session->internals.adv_version_major = major; \
957 session->internals.adv_version_minor = minor
959 void _gnutls_set_adv_version (gnutls_session_t
, gnutls_protocol_t
);
960 gnutls_protocol_t
_gnutls_get_adv_version (gnutls_session_t
);
962 int _gnutls_is_secure_mem_null (const void *);
964 inline static gnutls_protocol_t
965 _gnutls_protocol_get_version (gnutls_session_t session
)
967 return session
->security_parameters
.version
;
970 #define gnutls_protocol_get_version _gnutls_protocol_get_version
973 _gnutls_set_current_version (gnutls_session_t session
,
974 gnutls_protocol_t version
)
976 session
->security_parameters
.version
= version
;
980 #endif /* GNUTLS_INT_H */