2005-06-19 04:20:27 +00:00
/*
Unix SMB / CIFS implementation .
transport layer security handling code
Copyright ( C ) Andrew Tridgell 2005
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-10 02:07:03 +00:00
the Free Software Foundation ; either version 3 of the License , or
2005-06-19 04:20:27 +00:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 02:07:03 +00:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-06-19 04:20:27 +00:00
*/
2005-11-09 08:13:41 +00:00
# ifndef _TLS_H_
# define _TLS_H_
2006-05-23 04:41:09 +00:00
# include "lib/socket/socket.h"
2007-12-03 00:28:22 +01:00
struct loadparm_context ;
2015-03-18 21:42:19 +01:00
void tls_cert_generate ( TALLOC_CTX * mem_ctx ,
const char * hostname ,
const char * keyfile , const char * certfile ,
const char * cafile ) ;
2010-02-03 14:36:10 +01:00
struct tstream_context ;
struct tstream_tls_params ;
2024-02-06 11:48:41 +01:00
struct tstream_tls_sync ;
2010-02-03 14:36:10 +01:00
2015-12-23 16:17:04 +01:00
enum tls_verify_peer_state {
TLS_VERIFY_PEER_NO_CHECK = 0 ,
# define TLS_VERIFY_PEER_NO_CHECK_STRING "no_check"
TLS_VERIFY_PEER_CA_ONLY = 10 ,
# define TLS_VERIFY_PEER_CA_ONLY_STRING "ca_only"
TLS_VERIFY_PEER_CA_AND_NAME_IF_AVAILABLE = 20 ,
# define TLS_VERIFY_PEER_CA_AND_NAME_IF_AVAILABLE_STRING \
" ca_and_name_if_available "
TLS_VERIFY_PEER_CA_AND_NAME = 30 ,
# define TLS_VERIFY_PEER_CA_AND_NAME_STRING "ca_and_name"
TLS_VERIFY_PEER_AS_STRICT_AS_POSSIBLE = 9999 ,
# define TLS_VERIFY_PEER_AS_STRICT_AS_POSSIBLE_STRING \
" as_strict_as_possible "
} ;
const char * tls_verify_peer_string ( enum tls_verify_peer_state verify_peer ) ;
2010-02-03 14:36:10 +01:00
NTSTATUS tstream_tls_params_client ( TALLOC_CTX * mem_ctx ,
2024-02-09 11:31:30 +01:00
bool system_cas ,
const char * const * ca_dirs ,
2010-02-03 14:36:10 +01:00
const char * ca_file ,
const char * crl_file ,
2015-07-20 11:22:46 +12:00
const char * tls_priority ,
2015-12-23 16:17:04 +01:00
enum tls_verify_peer_state verify_peer ,
const char * peer_name ,
2010-02-03 14:36:10 +01:00
struct tstream_tls_params * * _tlsp ) ;
2024-02-13 16:36:27 +01:00
NTSTATUS tstream_tls_params_client_lpcfg ( TALLOC_CTX * mem_ctx ,
struct loadparm_context * lp_ctx ,
const char * peer_name ,
struct tstream_tls_params * * tlsp ) ;
2010-02-03 14:36:10 +01:00
NTSTATUS tstream_tls_params_server ( TALLOC_CTX * mem_ctx ,
const char * dns_host_name ,
2010-10-07 11:16:48 +02:00
bool enabled ,
2010-02-03 14:36:10 +01:00
const char * key_file ,
const char * cert_file ,
const char * ca_file ,
const char * crl_file ,
const char * dhp_file ,
2015-07-20 11:22:46 +12:00
const char * tls_priority ,
2010-02-03 14:36:10 +01:00
struct tstream_tls_params * * _params ) ;
bool tstream_tls_params_enabled ( struct tstream_tls_params * params ) ;
2024-11-07 10:48:52 +01:00
const char * tstream_tls_params_peer_name (
const struct tstream_tls_params * params ) ;
2010-02-03 14:36:10 +01:00
2023-09-28 12:34:35 +02:00
const DATA_BLOB * tstream_tls_channel_bindings ( struct tstream_context * tls_tstream ) ;
2010-02-03 14:36:10 +01:00
struct tevent_req * _tstream_tls_connect_send ( TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct tstream_context * plain_stream ,
struct tstream_tls_params * tls_params ,
const char * location ) ;
2015-06-19 12:26:55 +02:00
# define tstream_tls_connect_send(mem_ctx, ev, plain_stream, tls_params) \
2010-02-03 14:36:10 +01:00
_tstream_tls_connect_send ( mem_ctx , ev , plain_stream , tls_params , __location__ )
int tstream_tls_connect_recv ( struct tevent_req * req ,
int * perrno ,
TALLOC_CTX * mem_ctx ,
struct tstream_context * * tls_stream ) ;
struct tevent_req * _tstream_tls_accept_send ( TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct tstream_context * plain_stream ,
struct tstream_tls_params * tls_params ,
const char * location ) ;
# define tstream_tls_accept_send(mem_ctx, ev, plain_stream, tls_params) \
_tstream_tls_accept_send ( mem_ctx , ev , plain_stream , tls_params , __location__ )
int tstream_tls_accept_recv ( struct tevent_req * req ,
int * perrno ,
TALLOC_CTX * mem_ctx ,
struct tstream_context * * tls_stream ) ;
2024-02-06 11:48:41 +01:00
ssize_t tstream_tls_sync_read ( struct tstream_tls_sync * tlsss ,
void * buf , size_t len ) ;
ssize_t tstream_tls_sync_write ( struct tstream_tls_sync * tlsss ,
const void * buf , size_t len ) ;
size_t tstream_tls_sync_pending ( struct tstream_tls_sync * tlsss ) ;
NTSTATUS tstream_tls_sync_setup ( struct tstream_tls_params * _tls_params ,
void * io_private ,
ssize_t ( * io_send_fn ) ( void * io_private ,
const uint8_t * buf ,
size_t len ) ,
ssize_t ( * io_recv_fn ) ( void * io_private ,
uint8_t * buf ,
size_t len ) ,
TALLOC_CTX * mem_ctx ,
struct tstream_tls_sync * * _tlsss ) ;
const DATA_BLOB * tstream_tls_sync_channel_bindings ( struct tstream_tls_sync * tlsss ) ;
2010-02-03 14:36:10 +01:00
# endif /* _TLS_H_ */