1 /*
2  * Copyright (C) 2000-2012 Free Software Foundation, Inc.
3  *
4  * Author: Nikos Mavrogiannopoulos
5  *
6  * This file is part of GnuTLS.
7  *
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 2.1 of
11  * the License, or (at your option) any later version.
12  *
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.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this program.  If not, see <https://www.gnu.org/licenses/>
20  *
21  */
22 
23 #ifndef GNUTLS_LIB_STATE_H
24 #define GNUTLS_LIB_STATE_H
25 
26 #include "gnutls_int.h"
27 
28 void _gnutls_session_client_cert_type_set(gnutls_session_t session,
29 					 gnutls_certificate_type_t);
30 void _gnutls_session_server_cert_type_set(gnutls_session_t session,
31 					 gnutls_certificate_type_t);
32 
33 inline static const gnutls_group_entry_st *
get_group(gnutls_session_t session)34 get_group(gnutls_session_t session)
35 {
36 	return session->security_parameters.grp;
37 }
38 
39 int _gnutls_session_is_ecc(gnutls_session_t session);
40 
41 inline static void
_gnutls_session_group_set(gnutls_session_t session,const gnutls_group_entry_st * e)42 _gnutls_session_group_set(gnutls_session_t session,
43 			  const gnutls_group_entry_st *e)
44 {
45 	_gnutls_handshake_log("HSK[%p]: Selected group %s (%d)\n",
46 			      session, e->name, e->id);
47 	session->security_parameters.grp = e;
48 }
49 
50 inline static
set_default_version(gnutls_session_t session,const version_entry_st * ver)51 void set_default_version(gnutls_session_t session, const version_entry_st *ver)
52 {
53 	if (ver->tls13_sem) {
54 		session->internals.default_record_version[0] = 3;
55 		session->internals.default_record_version[1] = 1;
56 	} else {
57 		session->internals.default_record_version[0] = ver->major;
58 		session->internals.default_record_version[1] = ver->minor;
59 	}
60 }
61 
62 void
63 _gnutls_record_set_default_version(gnutls_session_t session,
64 				   unsigned char major,
65 				   unsigned char minor);
66 
67 void
68 _gnutls_hello_set_default_version(gnutls_session_t session,
69 				   unsigned char major,
70 				   unsigned char minor);
71 
72 #include <auth.h>
73 
74 #define CHECK_AUTH_TYPE(auth, ret) if (gnutls_auth_get_type(session) != auth) { \
75 	gnutls_assert(); \
76 	return ret; \
77 	}
78 
79 
80 int _gnutls_session_cert_type_supported(gnutls_session_t session,
81 				    gnutls_certificate_type_t cert_type,
82 				    bool check_credentials,
83 				    gnutls_ctype_target_t target);
84 int _gnutls_dh_set_secret_bits(gnutls_session_t session, unsigned bits);
85 
86 int _gnutls_dh_set_peer_public(gnutls_session_t session, bigint_t public);
87 int _gnutls_dh_save_group(gnutls_session_t session, bigint_t gen,
88 			 bigint_t prime);
89 
_gnutls_dh_get_min_prime_bits(gnutls_session_t session)90 static inline int _gnutls_dh_get_min_prime_bits(gnutls_session_t session)
91 {
92 	if (session->internals.dh_prime_bits != 0)
93 		return session->internals.dh_prime_bits;
94 	else
95 		return gnutls_sec_param_to_pk_bits(GNUTLS_PK_DH,
96 						   session->internals.
97 						   priorities->level);
98 }
99 
100 void _gnutls_handshake_internal_state_clear(gnutls_session_t);
101 
102 int _gnutls_session_is_resumable(gnutls_session_t session);
103 
104 int _gnutls_session_is_psk(gnutls_session_t session);
105 
106 int _gnutls_openpgp_send_fingerprint(gnutls_session_t session);
107 
108 void reset_binders(gnutls_session_t session);
109 
110 inline static int
_gnutls_PRF(gnutls_session_t session,const uint8_t * secret,unsigned int secret_size,const char * label,int label_size,const uint8_t * seed,int seed_size,int total_bytes,void * ret)111 _gnutls_PRF(gnutls_session_t session,
112 	    const uint8_t * secret, unsigned int secret_size,
113 	    const char *label, int label_size, const uint8_t * seed,
114 	    int seed_size, int total_bytes, void *ret)
115 {
116 	return _gnutls_prf_raw(session->security_parameters.prf->id,
117 			       secret_size, secret,
118 			       label_size, label,
119 			       seed_size, seed,
120 			       total_bytes, ret);
121 }
122 
123 #define DEFAULT_CERT_TYPE GNUTLS_CRT_X509
124 
125 #endif /* GNUTLS_LIB_STATE_H */
126