if (session->security_parameters.entity == GNUTLS_CLIENT)
{
- if (session->internals.cert_type_priority.algorithms > 0)
+ if (session->internals.priorities.cert_type.algorithms > 0)
{
- len = session->internals.cert_type_priority.algorithms;
+ len = session->internals.priorities.cert_type.algorithms;
if (len == 1 &&
- session->internals.cert_type_priority.priority[0] ==
+ session->internals.priorities.cert_type.priority[0] ==
GNUTLS_CRT_X509)
{
/* We don't use this extension if X.509 certificates
for (i = 0; i < len; i++)
{
data[i + 1] = _gnutls_cert_type2num (session->internals.
- cert_type_priority.
+ priorities.cert_type.
priority[i]);
}
return len + 1;
gnutls_mac_algorithm_t algorithm)
{ /* actually returns the priority */
unsigned int i;
- for (i = 0; i < session->internals.mac_algorithm_priority.algorithms; i++)
+ for (i = 0; i < session->internals.priorities.mac.algorithms; i++)
{
- if (session->internals.mac_algorithm_priority.priority[i] == algorithm)
+ if (session->internals.priorities.mac.priority[i] == algorithm)
return i;
}
return -1;
{ /* actually returns the priority */
unsigned int i;
for (i = 0;
- i < session->internals.compression_method_priority.algorithms; i++)
+ i < session->internals.priorities.compression.algorithms; i++)
{
- if (session->internals.
- compression_method_priority.priority[i] == algorithm)
+ if (session->internals.priorities.
+ compression.priority[i] == algorithm)
return i;
}
return -1;
{
unsigned int i;
for (i = 0;
- i < session->internals.cipher_algorithm_priority.algorithms; i++)
+ i < session->internals.priorities.cipher.algorithms; i++)
{
- if (session->internals.
- cipher_algorithm_priority.priority[i] == algorithm)
+ if (session->internals.priorities.
+ cipher.priority[i] == algorithm)
return i;
}
return -1;
gnutls_kx_algorithm_t algorithm)
{
unsigned int i;
- for (i = 0; i < session->internals.kx_algorithm_priority.algorithms; i++)
+ for (i = 0; i < session->internals.priorities.kx.algorithms; i++)
{
- if (session->internals.kx_algorithm_priority.priority[i] == algorithm)
+ if (session->internals.priorities.kx.priority[i] == algorithm)
return i;
}
return -1;
{ /* actually returns the priority */
unsigned int i;
- if (session->internals.protocol_priority.priority == NULL)
+ if (session->internals.priorities.protocol.priority == NULL)
{
gnutls_assert ();
return -1;
}
- for (i = 0; i < session->internals.protocol_priority.algorithms; i++)
+ for (i = 0; i < session->internals.priorities.protocol.algorithms; i++)
{
- if (session->internals.protocol_priority.priority[i] == version)
+ if (session->internals.priorities.protocol.priority[i] == version)
return i;
}
return -1;
{ /* returns the lowest version supported */
unsigned int i, min = 0xff;
- if (session->internals.protocol_priority.priority == NULL)
+ if (session->internals.priorities.protocol.priority == NULL)
{
return GNUTLS_VERSION_UNKNOWN;
}
else
- for (i = 0; i < session->internals.protocol_priority.algorithms; i++)
+ for (i = 0; i < session->internals.priorities.protocol.algorithms; i++)
{
- if (session->internals.protocol_priority.priority[i] < min)
- min = session->internals.protocol_priority.priority[i];
+ if (session->internals.priorities.protocol.priority[i] < min)
+ min = session->internals.priorities.protocol.priority[i];
}
if (min == 0xff)
{ /* returns the maximum version supported */
unsigned int i, max = 0x00;
- if (session->internals.protocol_priority.priority == NULL)
+ if (session->internals.priorities.protocol.priority == NULL)
{
return GNUTLS_VERSION_UNKNOWN;
}
else
- for (i = 0; i < session->internals.protocol_priority.algorithms; i++)
+ for (i = 0; i < session->internals.priorities.protocol.algorithms; i++)
{
- if (session->internals.protocol_priority.priority[i] > max)
- max = session->internals.protocol_priority.priority[i];
+ if (session->internals.priorities.protocol.priority[i] > max)
+ max = session->internals.priorities.protocol.priority[i];
}
if (max == 0x00)
/* returns the TLS numbers of the compression methods we support
*/
-#define SUPPORTED_COMPRESSION_METHODS session->internals.compression_method_priority.algorithms
+#define SUPPORTED_COMPRESSION_METHODS session->internals.priorities.compression.algorithms
int
_gnutls_supported_compression_methods (gnutls_session_t session,
uint8_t ** comp)
for (i = j = 0; i < SUPPORTED_COMPRESSION_METHODS; i++)
{
- int tmp = _gnutls_compression_get_num (session->internals.
- compression_method_priority.
- priority[i]);
+ int tmp = _gnutls_compression_get_num (session->internals.priorities.
+ compression.priority[i]);
/* remove private compression algorithms, if requested.
*/
uint64 write_sequence_number;
} conn_stat_st;
-
typedef struct
{
unsigned int priority[MAX_ALGOS];
unsigned int algorithms;
} priority_st;
+/* For the external api */
+typedef struct gnutls_priority_st
+{
+ priority_st cipher;
+ priority_st mac;
+ priority_st kx;
+ priority_st compression;
+ priority_st protocol;
+ priority_st cert_type;
+
+ /* to disable record padding */
+ int no_padding;
+} *gnutls_priority_t;
+
+
/* DH and RSA parameters types.
*/
typedef struct gnutls_dh_params_int
/* this is the compression method we are going to use */
gnutls_compression_method_t compression_method;
+
/* priorities */
- priority_st cipher_algorithm_priority;
- priority_st mac_algorithm_priority;
- priority_st kx_algorithm_priority;
- priority_st compression_method_priority;
- priority_st protocol_priority;
- priority_st cert_type_priority;
+ struct gnutls_priority_st priorities;
/* resumed session */
resumable_session_t resumed; /* RESUME_TRUE or FALSE - if we are resuming a session */
/* sockets internals */
int lowat;
- /* to disable record padding */
- int no_padding;
-
/* These buffers are used in the handshake
* protocol only. freed using _gnutls_handshake_io_buffer_clear();
*/
num++;
if (num > MAX_ALGOS)
num = MAX_ALGOS;
- session->internals.cipher_algorithm_priority.algorithms = num;
+ session->internals.priorities.cipher.algorithms = num;
for (i = 0; i < num; i++)
{
- session->internals.cipher_algorithm_priority.priority[i] = list[i];
+ session->internals.priorities.cipher.priority[i] = list[i];
}
return 0;
num++;
if (num > MAX_ALGOS)
num = MAX_ALGOS;
- session->internals.kx_algorithm_priority.algorithms = num;
+ session->internals.priorities.kx.algorithms = num;
for (i = 0; i < num; i++)
{
- session->internals.kx_algorithm_priority.priority[i] = list[i];
+ session->internals.priorities.kx.priority[i] = list[i];
}
return 0;
num++;
if (num > MAX_ALGOS)
num = MAX_ALGOS;
- session->internals.mac_algorithm_priority.algorithms = num;
+ session->internals.priorities.mac.algorithms = num;
for (i = 0; i < num; i++)
{
- session->internals.mac_algorithm_priority.priority[i] = list[i];
+ session->internals.priorities.mac.priority[i] = list[i];
}
return 0;
num++;
if (num > MAX_ALGOS)
num = MAX_ALGOS;
- session->internals.compression_method_priority.algorithms = num;
+ session->internals.priorities.compression.algorithms = num;
for (i = 0; i < num; i++)
{
- session->internals.compression_method_priority.priority[i] = list[i];
+ session->internals.priorities.compression.priority[i] = list[i];
}
return 0;
}
num++;
if (num > MAX_ALGOS)
num = MAX_ALGOS;
- session->internals.protocol_priority.algorithms = num;
+ session->internals.priorities.protocol.algorithms = num;
for (i = 0; i < num; i++)
{
- session->internals.protocol_priority.priority[i] = list[i];
+ session->internals.priorities.protocol.priority[i] = list[i];
}
/* set the current version to the first in the chain.
num++;
if (num > MAX_ALGOS)
num = MAX_ALGOS;
- session->internals.cert_type_priority.algorithms = num;
+ session->internals.priorities.cert_type.algorithms = num;
for (i = 0; i < num; i++)
{
- session->internals.cert_type_priority.priority[i] = list[i];
+ session->internals.priorities.cert_type.priority[i] = list[i];
}
return 0;
if ((algo =
gnutls_mac_get_id (&broken_list[i][1])) != GNUTLS_MAC_UNKNOWN)
- fn(&session->internals.mac_algorithm_priority, algo);
+ fn(&session->internals.priorities.mac, algo);
else if ((algo = gnutls_cipher_get_id (&broken_list[i][1])) !=
GNUTLS_CIPHER_UNKNOWN)
- fn (&session->internals.cipher_algorithm_priority, algo);
+ fn (&session->internals.priorities.cipher, algo);
else if ((algo = gnutls_kx_get_id (&broken_list[i][1])) !=
GNUTLS_KX_UNKNOWN)
- fn(&session->internals.kx_algorithm_priority, algo);
+ fn(&session->internals.priorities.kx, algo);
else if (strncasecmp (&broken_list[i][1], "VERS-", 5) == 0)
{
if ((algo =
gnutls_protocol_get_id (&broken_list[i][6])) !=
GNUTLS_VERSION_UNKNOWN)
- fn(&session->internals.protocol_priority, algo);
+ fn(&session->internals.priorities.protocol, algo);
} /* now check if the element is something like -ALGO */
else if (strncasecmp (&broken_list[i][1], "COMP-", 5) == 0)
{
if ((algo =
gnutls_compression_get_id (&broken_list[i][6])) !=
GNUTLS_COMP_UNKNOWN)
- fn(&session->internals.compression_method_priority, algo);
+ fn(&session->internals.priorities.compression, algo);
} /* now check if the element is something like -ALGO */
else if (strncasecmp (&broken_list[i][1], "CTYPE-", 6) == 0)
{
if ((algo =
gnutls_certificate_type_get_id (&broken_list[i][7])) !=
GNUTLS_CRT_UNKNOWN)
- fn(&session->internals.cert_type_priority, algo);
+ fn(&session->internals.priorities.cert_type, algo);
} /* now check if the element is something like -ALGO */
else
goto error;
void
gnutls_record_disable_padding (gnutls_session_t session)
{
- session->internals.no_padding = 1;
+ session->internals.priorities.no_padding = 1;
}
/**
cipher_size =
_gnutls_encrypt (session, headers, RECORD_HEADER_SIZE, data,
- data2send_size, cipher, cipher_size, type, (session->internals.no_padding==0)?1:0);
+ data2send_size, cipher, cipher_size, type, (session->internals.priorities.no_padding==0)?1:0);
if (cipher_size <= 0)
{
gnutls_assert ();
}
- if (session->internals.cert_type_priority.algorithms == 0
+ if (session->internals.priorities.cert_type.algorithms == 0
&& cert_type == DEFAULT_CERT_TYPE)
return 0;
- for (i = 0; i < session->internals.cert_type_priority.algorithms; i++)
+ for (i = 0; i < session->internals.priorities.cert_type.algorithms; i++)
{
- if (session->internals.cert_type_priority.priority[i] == cert_type)
+ if (session->internals.priorities.cert_type.priority[i] == cert_type)
{
return 0; /* ok */
}