]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Moved functions unrelated to record layer to gnutls_state.c
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 3 Feb 2002 12:38:09 +0000 (12:38 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 3 Feb 2002 12:38:09 +0000 (12:38 +0000)
lib/gnutls_record.c
lib/gnutls_record.h
lib/gnutls_state.c
lib/gnutls_state.h

index e018be37ba35787ccbf3a9ff6a44f58514d51137..f5328dbc48b126b7589b83e32e1fba5aa1278754 100644 (file)
@@ -98,162 +98,6 @@ GNUTLS_TRANSPORT_PTR gnutls_transport_get_ptr(GNUTLS_STATE state) {
        return state->gnutls_internals.transport_ptr;
 }
 
-#define _gnutls_free(x) if(x!=NULL) gnutls_free(x)
-/**
-  * gnutls_init - This function initializes the state to null (null encryption etc...).
-  * @con_end: is used to indicate if this state is to be used for server or 
-  * client. Can be one of GNUTLS_CLIENT and GNUTLS_SERVER. 
-  * @state: is a pointer to a &GNUTLS_STATE structure.
-  *
-  * This function initializes the current state to null. Every state
-  * must be initialized before use, so internal structures can be allocated.
-  * This function allocates structures which can only be free'd
-  * by calling gnutls_deinit(). Returns zero on success.
-  **/
-int gnutls_init(GNUTLS_STATE * state, GNUTLS_ConnectionEnd con_end)
-{
-int default_protocol_list[] = { GNUTLS_TLS1, 0 };
-
-       *state = gnutls_calloc(1, sizeof(struct GNUTLS_STATE_INT));
-       if (*state==NULL) return GNUTLS_E_MEMORY_ERROR;
-       
-       (*state)->security_parameters.entity = con_end;
-
-       /* the default certificate type for TLS */
-       (*state)->security_parameters.cert_type = GNUTLS_CRT_X509;
-
-/* Set the defaults for initial handshake */
-       (*state)->security_parameters.read_bulk_cipher_algorithm = 
-       (*state)->security_parameters.write_bulk_cipher_algorithm = GNUTLS_CIPHER_NULL;
-
-       (*state)->security_parameters.read_mac_algorithm = 
-       (*state)->security_parameters.write_mac_algorithm = GNUTLS_MAC_NULL;
-
-       (*state)->security_parameters.read_compression_algorithm = GNUTLS_COMP_NULL;
-       (*state)->security_parameters.write_compression_algorithm = GNUTLS_COMP_NULL;
-
-       (*state)->gnutls_internals.resumable = RESUME_TRUE;
-
-       gnutls_protocol_set_priority( *state, default_protocol_list); /* default */
-       
-       (*state)->gnutls_key = gnutls_calloc(1, sizeof(struct GNUTLS_KEY_INT));
-       if ( (*state)->gnutls_key == NULL) {
-               gnutls_free( *state);
-               return GNUTLS_E_MEMORY_ERROR;
-       }
-
-       (*state)->gnutls_internals.resumed = RESUME_FALSE;
-
-       (*state)->gnutls_internals.expire_time = DEFAULT_EXPIRE_TIME; /* one hour default */
-
-       gnutls_dh_set_bits( (*state), MIN_BITS);
-
-       gnutls_transport_set_lowat((*state), DEFAULT_LOWAT); /* the default for tcp */
-
-       gnutls_handshake_set_max_packet_length( (*state), MAX_HANDSHAKE_PACKET_SIZE);
-
-       /* Allocate a minimum size for recv_data 
-        * This is allocated in order to avoid small messages, makeing
-        * the receive procedure slow.
-        */
-       (*state)->gnutls_internals.record_recv_buffer.data = gnutls_malloc(INITIAL_RECV_BUFFER_SIZE);
-       
-       /* set the default maximum record size for TLS
-        */
-       (*state)->security_parameters.max_record_size = DEFAULT_MAX_RECORD_SIZE;
-       (*state)->gnutls_internals.proposed_record_size = DEFAULT_MAX_RECORD_SIZE;
-
-       /* by default no selected certificate */
-       (*state)->gnutls_internals.selected_cert_index = -1;
-       
-       /* everything else not initialized here is initialized
-        * as NULL or 0. This is why calloc is used.
-        */
-
-       return 0;
-}
-
-/**
-  * gnutls_deinit - This function clears all buffers associated with the &state
-  * @state: is a &GNUTLS_STATE structure.
-  *
-  * This function clears all buffers associated with the &state.
-  **/
-void gnutls_deinit(GNUTLS_STATE state)
-{
-       /* if the session has failed abnormally it has to be removed from the db */
-       if ( state->gnutls_internals.resumable==RESUME_FALSE) {
-               _gnutls_db_remove_session( state, state->security_parameters.session_id, state->security_parameters.session_id_size);
-       }
-
-       /* remove auth info firstly */
-       _gnutls_free_auth_info(state );
-
-#ifdef HAVE_LIBGDBM
-       /* close the database - resuming sessions */
-       if ( state->gnutls_internals.db_reader != NULL)
-               gdbm_close(state->gnutls_internals.db_reader);
-#endif
-
-       _gnutls_handshake_io_buffer_clear( state);
-
-       gnutls_sfree_datum(&state->connection_state.read_mac_secret);
-       gnutls_sfree_datum(&state->connection_state.write_mac_secret);
-
-       _gnutls_free(state->gnutls_internals.application_data_buffer.data);
-       _gnutls_free(state->gnutls_internals.handshake_data_buffer.data);
-       _gnutls_free(state->gnutls_internals.handshake_hash_buffer.data);
-       _gnutls_free(state->gnutls_internals.record_recv_buffer.data);
-       _gnutls_free(state->gnutls_internals.record_send_buffer.data);
-
-       gnutls_clear_creds( state);
-
-       if (state->connection_state.read_cipher_state != NULL)
-               gnutls_cipher_deinit(state->connection_state.read_cipher_state);
-       if (state->connection_state.write_cipher_state != NULL)
-               gnutls_cipher_deinit(state->connection_state.write_cipher_state);
-
-       gnutls_sfree_datum( &state->cipher_specs.server_write_mac_secret);
-       gnutls_sfree_datum( &state->cipher_specs.client_write_mac_secret);
-       gnutls_sfree_datum( &state->cipher_specs.server_write_IV);
-       gnutls_sfree_datum( &state->cipher_specs.client_write_IV);
-       gnutls_sfree_datum( &state->cipher_specs.server_write_key);
-       gnutls_sfree_datum( &state->cipher_specs.client_write_key);
-
-       if (state->gnutls_key != NULL) {
-               _gnutls_mpi_release(&state->gnutls_key->KEY);
-               _gnutls_mpi_release(&state->gnutls_key->client_Y);
-               _gnutls_mpi_release(&state->gnutls_key->client_p);
-               _gnutls_mpi_release(&state->gnutls_key->client_g);
-
-               _gnutls_mpi_release(&state->gnutls_key->u);
-               _gnutls_mpi_release(&state->gnutls_key->a);
-               _gnutls_mpi_release(&state->gnutls_key->x);
-               _gnutls_mpi_release(&state->gnutls_key->A);
-               _gnutls_mpi_release(&state->gnutls_key->B);
-               _gnutls_mpi_release(&state->gnutls_key->b);
-
-               _gnutls_mpi_release(&state->gnutls_key->dh_secret);
-               _gnutls_free(state->gnutls_key);
-
-               state->gnutls_key = NULL;
-       }
-
-       /* free priorities */
-       _gnutls_free(state->gnutls_internals.MACAlgorithmPriority.algorithm_priority);
-       _gnutls_free(state->gnutls_internals.ProtocolPriority.algorithm_priority);
-       _gnutls_free(state->gnutls_internals.KXAlgorithmPriority.algorithm_priority);
-       _gnutls_free(state->gnutls_internals.BulkCipherAlgorithmPriority.algorithm_priority);
-       _gnutls_free(state->gnutls_internals.CompressionMethodPriority.algorithm_priority);
-
-       _gnutls_free(state->gnutls_internals.db_name);
-
-       memset( state, 0, sizeof(struct GNUTLS_STATE_INT));
-       gnutls_free(state);
-
-       return;
-}
-
 inline
 static void _gnutls_cal_PRF_A( MACAlgorithm algorithm, void *secret, int secret_size, void *seed, int seed_size, void* result)
 {
index a9bf8ea64dec506c3e27a497e4e04a823572f1e7..ea0872cdfb322e864f818e18285d2b798a8b8223 100644 (file)
@@ -1,3 +1,4 @@
 ssize_t gnutls_send_int( GNUTLS_STATE state, ContentType type, HandshakeType htype, const void* data, size_t sizeofdata);
 ssize_t gnutls_recv_int( GNUTLS_STATE state, ContentType type, HandshakeType, char* data, size_t sizeofdata);
 ssize_t _gnutls_send_change_cipher_spec( GNUTLS_STATE state, int again);
+void gnutls_transport_set_lowat(GNUTLS_STATE state, int num);
index 8e21420813af61cc35a3ea5ff3a4ff9610edfc8c..e59b1cc303ac978a978a560ce22147e0e4c0b178 100644 (file)
 #include <gnutls_int.h>
 #include <gnutls_errors.h>
 #include <gnutls_auth_int.h>
+#include <gnutls_priority.h>
+#include <gnutls_num.h>
+#include "gnutls_datum.h"
+#include "gnutls_db.h"
+#include <gnutls_record.h>
+#include <gnutls_handshake.h>
+#include <gnutls_dh.h>
+#include <gnutls_buffers.h>
+#include <gnutls_state.h>
 
 #define CHECK_AUTH(auth, ret) if (gnutls_auth_get_type(state) != auth) { \
        gnutls_assert(); \
@@ -82,3 +91,168 @@ GNUTLS_MACAlgorithm gnutls_mac_get( GNUTLS_STATE state) {
 GNUTLS_CompressionMethod gnutls_compression_get( GNUTLS_STATE state) {
        return state->security_parameters.read_compression_algorithm;
 }
+
+int _gnutls_state_cert_type_supported( GNUTLS_STATE state, CertificateType cert_type) {
+int i;
+
+       if (state->gnutls_internals.cert_type_priority.algorithms==0 && cert_type ==
+               DEFAULT_CERT_TYPE) return 0;
+
+       for (i=0;i<state->gnutls_internals.cert_type_priority.algorithms;i++) {
+               if (state->gnutls_internals.cert_type_priority.algorithm_priority[i]
+                       == cert_type) {
+                               return 0; /* ok */      
+               }
+       }
+
+       return GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE;
+}
+
+#define _gnutls_free(x) if(x!=NULL) gnutls_free(x)
+/**
+  * gnutls_init - This function initializes the state to null (null encryption etc...).
+  * @con_end: is used to indicate if this state is to be used for server or 
+  * client. Can be one of GNUTLS_CLIENT and GNUTLS_SERVER. 
+  * @state: is a pointer to a &GNUTLS_STATE structure.
+  *
+  * This function initializes the current state to null. Every state
+  * must be initialized before use, so internal structures can be allocated.
+  * This function allocates structures which can only be free'd
+  * by calling gnutls_deinit(). Returns zero on success.
+  **/
+int gnutls_init(GNUTLS_STATE * state, GNUTLS_ConnectionEnd con_end)
+{
+int default_protocol_list[] = { GNUTLS_TLS1, 0 };
+
+       *state = gnutls_calloc(1, sizeof(struct GNUTLS_STATE_INT));
+       if (*state==NULL) return GNUTLS_E_MEMORY_ERROR;
+       
+       (*state)->security_parameters.entity = con_end;
+
+       /* the default certificate type for TLS */
+       (*state)->security_parameters.cert_type = DEFAULT_CERT_TYPE;
+
+/* Set the defaults for initial handshake */
+       (*state)->security_parameters.read_bulk_cipher_algorithm = 
+       (*state)->security_parameters.write_bulk_cipher_algorithm = GNUTLS_CIPHER_NULL;
+
+       (*state)->security_parameters.read_mac_algorithm = 
+       (*state)->security_parameters.write_mac_algorithm = GNUTLS_MAC_NULL;
+
+       (*state)->security_parameters.read_compression_algorithm = GNUTLS_COMP_NULL;
+       (*state)->security_parameters.write_compression_algorithm = GNUTLS_COMP_NULL;
+
+       (*state)->gnutls_internals.resumable = RESUME_TRUE;
+
+       gnutls_protocol_set_priority( *state, default_protocol_list); /* default */
+       
+       (*state)->gnutls_key = gnutls_calloc(1, sizeof(struct GNUTLS_KEY_INT));
+       if ( (*state)->gnutls_key == NULL) {
+               gnutls_free( *state);
+               return GNUTLS_E_MEMORY_ERROR;
+       }
+
+       (*state)->gnutls_internals.resumed = RESUME_FALSE;
+
+       (*state)->gnutls_internals.expire_time = DEFAULT_EXPIRE_TIME; /* one hour default */
+
+       gnutls_dh_set_bits( (*state), MIN_BITS);
+
+       gnutls_transport_set_lowat((*state), DEFAULT_LOWAT); /* the default for tcp */
+
+       gnutls_handshake_set_max_packet_length( (*state), MAX_HANDSHAKE_PACKET_SIZE);
+
+       /* Allocate a minimum size for recv_data 
+        * This is allocated in order to avoid small messages, makeing
+        * the receive procedure slow.
+        */
+       (*state)->gnutls_internals.record_recv_buffer.data = gnutls_malloc(INITIAL_RECV_BUFFER_SIZE);
+       
+       /* set the default maximum record size for TLS
+        */
+       (*state)->security_parameters.max_record_size = DEFAULT_MAX_RECORD_SIZE;
+       (*state)->gnutls_internals.proposed_record_size = DEFAULT_MAX_RECORD_SIZE;
+
+       /* by default no selected certificate */
+       (*state)->gnutls_internals.selected_cert_index = -1;
+       
+       /* everything else not initialized here is initialized
+        * as NULL or 0. This is why calloc is used.
+        */
+
+       return 0;
+}
+
+/**
+  * gnutls_deinit - This function clears all buffers associated with the &state
+  * @state: is a &GNUTLS_STATE structure.
+  *
+  * This function clears all buffers associated with the &state.
+  **/
+void gnutls_deinit(GNUTLS_STATE state)
+{
+       /* if the session has failed abnormally it has to be removed from the db */
+       if ( state->gnutls_internals.resumable==RESUME_FALSE) {
+               _gnutls_db_remove_session( state, state->security_parameters.session_id, state->security_parameters.session_id_size);
+       }
+
+       /* remove auth info firstly */
+       _gnutls_free_auth_info(state );
+
+#ifdef HAVE_LIBGDBM
+       /* close the database - resuming sessions */
+       if ( state->gnutls_internals.db_reader != NULL)
+               gdbm_close(state->gnutls_internals.db_reader);
+#endif
+
+       _gnutls_handshake_io_buffer_clear( state);
+
+       gnutls_sfree_datum(&state->connection_state.read_mac_secret);
+       gnutls_sfree_datum(&state->connection_state.write_mac_secret);
+
+       _gnutls_free(state->gnutls_internals.application_data_buffer.data);
+       _gnutls_free(state->gnutls_internals.handshake_data_buffer.data);
+       _gnutls_free(state->gnutls_internals.handshake_hash_buffer.data);
+       _gnutls_free(state->gnutls_internals.record_recv_buffer.data);
+       _gnutls_free(state->gnutls_internals.record_send_buffer.data);
+
+       gnutls_clear_creds( state);
+
+       if (state->connection_state.read_cipher_state != NULL)
+               gnutls_cipher_deinit(state->connection_state.read_cipher_state);
+       if (state->connection_state.write_cipher_state != NULL)
+               gnutls_cipher_deinit(state->connection_state.write_cipher_state);
+
+       gnutls_sfree_datum( &state->cipher_specs.server_write_mac_secret);
+       gnutls_sfree_datum( &state->cipher_specs.client_write_mac_secret);
+       gnutls_sfree_datum( &state->cipher_specs.server_write_IV);
+       gnutls_sfree_datum( &state->cipher_specs.client_write_IV);
+       gnutls_sfree_datum( &state->cipher_specs.server_write_key);
+       gnutls_sfree_datum( &state->cipher_specs.client_write_key);
+
+       if (state->gnutls_key != NULL) {
+               _gnutls_mpi_release(&state->gnutls_key->KEY);
+               _gnutls_mpi_release(&state->gnutls_key->client_Y);
+               _gnutls_mpi_release(&state->gnutls_key->client_p);
+               _gnutls_mpi_release(&state->gnutls_key->client_g);
+
+               _gnutls_mpi_release(&state->gnutls_key->u);
+               _gnutls_mpi_release(&state->gnutls_key->a);
+               _gnutls_mpi_release(&state->gnutls_key->x);
+               _gnutls_mpi_release(&state->gnutls_key->A);
+               _gnutls_mpi_release(&state->gnutls_key->B);
+               _gnutls_mpi_release(&state->gnutls_key->b);
+
+               _gnutls_mpi_release(&state->gnutls_key->dh_secret);
+               _gnutls_free(state->gnutls_key);
+
+               state->gnutls_key = NULL;
+       }
+
+       _gnutls_free(state->gnutls_internals.db_name);
+
+       memset( state, 0, sizeof(struct GNUTLS_STATE_INT));
+       gnutls_free(state);
+
+       return;
+}
index 2e03f2504d0e9363418c19f4215e69726ecccf20..e112c8bd355e483f4e8a8a4a517828bd49b7c8c7 100644 (file)
@@ -13,3 +13,7 @@ CertificateType gnutls_cert_type_get( GNUTLS_STATE state);
        }
 
 #endif
+
+int _gnutls_state_cert_type_supported( GNUTLS_STATE, CertificateType);
+
+#define DEFAULT_CERT_TYPE GNUTLS_CRT_X509