QSC Post Quantum Cryptographic Library 1.3.0.0 (C1)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
tlssocket.h
Go to the documentation of this file.
1/* 2020-2026 Quantum Resistant Cryptographic Solutions Corporation
2 * All Rights Reserved.
3 *
4 * Written by: John G. Underhill
5 * Contact: contact@qrcscorp.ca
6 */
7
8#ifndef QSC_TLS_SOCKET_H
9#define QSC_TLS_SOCKET_H
10
11#include "qsccommon.h"
12#include "async.h"
13#include "tlsengine.h"
14#include "tlssignerdefault.h"
15#include "tlsio.h"
16#include "socketbase.h"
17#include "socketclient.h"
18#include "socketserver.h"
19#include "x509wrap.h"
20#include "x509types.h"
21
22QSC_CPLUSPLUS_ENABLED_START
23
83
88#define QSC_TLS_SOCKET_CIPHER_SUITE_MAX 8U
89
94#define QSC_TLS_SOCKET_GROUP_MAX 16U
95
100#define QSC_TLS_SOCKET_SIGNATURE_SCHEME_MAX 16U
101
106#define QSC_TLS_SOCKET_SERVER_IDENTITY_MAX QSC_TLS_MAX_SERVER_IDENTITIES
107
112#define QSC_TLS_SOCKET_ALPN_PROTOCOL_MAX QSC_TLS_MAX_ALPN_PROTOCOLS
113
118#define QSC_TLS_SOCKET_ALPN_SIZE_MAX QSC_TLS_MAX_ALPN_SIZE
119
124#define QSC_TLS_SOCKET_SERVER_BUFFER_SIZE 16384U
125
130#define QSC_TLS_SOCKET_SERVER_CONNECTIONS_MAX 64U
131
136#define QSC_TLS_SOCKET_FRAME_HEADER_SIZE 4U
137
142#define QSC_TLS_SOCKET_FRAME_SIZE_MAX 16777216U
143
148#define QSC_TLS_SOCKET_TICKET_LIFETIME_MAX 604800U
149
162
187
207
225
250
264
274typedef void (*qsc_tls_socket_log_callback)(qsc_tls_socket_log_level level, qsc_tls_socket_event event, const qsc_tls_socket_result* result, const char* message, void* state);
275
288{
289 char subject[QSC_X509_NAME_ATTRIBUTE_STRING_MAX];
290 char issuer[QSC_X509_NAME_ATTRIBUTE_STRING_MAX];
291 char common_name[QSC_X509_NAME_ATTRIBUTE_STRING_MAX];
292 char dns_name[QSC_X509_NAME_ATTRIBUTE_STRING_MAX];
297 qsc_x509w_status x509_status;
298 qsc_x509_verify_status verify_status;
308
347
375
391
393
403
411
420typedef void (*qsc_tls_socket_server_receive_callback)(qsc_tls_socket_connection* connection, const uint8_t* message, size_t msglen, void* state);
421
429
438
464
471
480
487
494
501
508
517
526
540
553
562
575
586
597
608
619
630
640
651QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_load_server_identity_files(qsc_tls_socket_context* context, const char* certificatechainpath, const char* privatekeypath, qsc_tls_signature_scheme verifyscheme);
652
665 const char* certificatechainpath, const char* privatekeypath, qsc_tls_signature_scheme verifyscheme);
666
676
686QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_client_auth(qsc_tls_socket_context* context, bool requestclientauth, bool requireclientauth);
687
704 qsc_tls_client_authorization_callback callback, void* state, bool required);
705
715
726QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_alpn_protocols(qsc_tls_socket_context* context, const char* const* protocols, size_t protocolcount, bool required);
727
736
747
757
766
776
783
790
797
808QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_client_connect_host(qsc_tls_socket_connection* connection, const qsc_tls_socket_context* context, const char* hostname, const char* service);
809
822QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_client_connect_host_ex(qsc_tls_socket_connection* connection, const qsc_tls_socket_context* context, const char* hostname, const char* service, const qsc_tls_session_ticket* ticket, bool enableearlydata);
823
836
849
860QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_send(qsc_tls_socket_connection* connection, const uint8_t* input, size_t inlen, size_t* written);
861
872QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_receive(qsc_tls_socket_connection* connection, uint8_t* output, size_t outlen, size_t* read);
873
882
892
903
913
924
933
943
954QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_get_selected_alpn(const qsc_tls_socket_connection* connection, char* protocol, size_t protocolcap, size_t* protocollen);
955
965
972
987QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_send_frame(qsc_tls_socket_connection* connection, const uint8_t* input, size_t inlen);
988
1004QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_receive_frame(qsc_tls_socket_connection* connection, uint8_t* output, size_t outlen, size_t* read);
1005
1014
1023
1032
1041
1050
1057
1069QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_listener_set_options(qsc_tls_socket_listener* listener, bool reuseaddress, bool nodelay, uint32_t recvtimeoutms, uint32_t sendtimeoutms);
1070
1080
1093
1103
1110
1117
1130
1144
1155
1165
1178
1191
1202
1209
1210QSC_CPLUSPLUS_ENABLED_END
1211
1212#endif
Asynchronous Thread and Mutex Management Functions.
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
#define QSC_EXPORT_API
API export macro for Microsoft compilers when importing from a DLL.
Definition qsccommon.h:645
#define QSC_SOCKET_ADDRESS_MAX_SIZE
Definition socket.h:69
Socket function definitions.
qsc_socket_exceptions
Socket code enumeration names.
Definition socketbase.h:115
The socket client function definitions.
qsc_socket_address_families
The socket address family type.
Definition socketflags.h:80
The socket server function definitions.
The IPv4 address structure.
Definition ipinfo.h:161
The IPv6 address structure.
Definition ipinfo.h:330
The socket instance structure.
Definition socket.h:133
Stores a bounded ordered ALPN protocol list and its negotiation policy.
Definition tlsstate.h:102
Unified TLS engine connection context.
Definition tlsengine.h:120
Stores the non-owning association between a TLS engine and a socket.
Definition tlsio.h:97
Definition tlssession.h:85
State bound to qsc_tls_certificate_sign_callback when using the default signer.
Definition tlssignerdefault.h:96
A live TLS socket connection containing the socket, TLS engine, I/O adapter, and connection state.
Definition tlssocket.h:353
qsc_tls_socket_log_callback logcallback
Definition tlssocket.h:365
char peername[QSC_SOCKET_ADDRESS_MAX_SIZE]
Definition tlssocket.h:367
bool owns_socket
Definition tlssocket.h:371
qsc_tls_role role
Definition tlssocket.h:357
bool haslastticket
Definition tlssocket.h:372
qsc_tls_signer_default_context signcontext
Definition tlssocket.h:364
qsc_tls_session_ticket lastticket
Definition tlssocket.h:363
qsc_tls_connection engine
Definition tlssocket.h:355
qsc_tls_socket_peer_info peerinfo
Definition tlssocket.h:360
void * logstate
Definition tlssocket.h:366
qsc_tls_socket_options socketoptions
Definition tlssocket.h:361
qsc_tls_socket_result lastresult
Definition tlssocket.h:359
qsc_socket socket
Definition tlssocket.h:354
uint16_t peerport
Definition tlssocket.h:368
bool connected
Definition tlssocket.h:369
qsc_tls_io_connection io
Definition tlssocket.h:356
bool cancelrequested
Definition tlssocket.h:373
qsc_tls_socket_ticket_policy ticketpolicy
Definition tlssocket.h:362
bool handshaked
Definition tlssocket.h:370
qsc_socket_address_families family
Definition tlssocket.h:358
A reusable TLS socket policy, trust, identity, and logging context.
Definition tlssocket.h:314
qsc_tls_socket_log_callback logcallback
Definition tlssocket.h:328
qsc_tls_signature_scheme sigschemes[QSC_TLS_SOCKET_SIGNATURE_SCHEME_MAX]
Definition tlssocket.h:332
qsc_tls_named_group groups[QSC_TLS_SOCKET_GROUP_MAX]
Definition tlssocket.h:331
qsc_tls_client_authorization_callback clientauthcallback
Definition tlssocket.h:338
char snihostnames[QSC_TLS_SOCKET_SERVER_IDENTITY_MAX][QSC_TLS_MAX_HOSTNAME_SIZE+1U]
Definition tlssocket.h:320
bool hasidentity
Definition tlssocket.h:336
bool requiresni
Definition tlssocket.h:322
qsc_tls_alpn_protocols alpn
Definition tlssocket.h:326
void * clientauthstate
Definition tlssocket.h:339
qsc_x509w_profile certificateprofile
Definition tlssocket.h:323
qsc_tls_cipher_suite ciphersuites[QSC_TLS_SOCKET_CIPHER_SUITE_MAX]
Definition tlssocket.h:330
bool hassessionticket
Definition tlssocket.h:344
qsc_x509w_tls_local_certificate snilocalcerts[QSC_TLS_SOCKET_SERVER_IDENTITY_MAX]
Definition tlssocket.h:319
void * logstate
Definition tlssocket.h:329
bool requestclientauth
Definition tlssocket.h:342
qsc_tls_socket_options socketoptions
Definition tlssocket.h:324
size_t ciphersuitecount
Definition tlssocket.h:333
bool hastruststore
Definition tlssocket.h:337
bool requireclientauthorization
Definition tlssocket.h:340
bool allowunverified
Definition tlssocket.h:343
qsc_tls_session_ticket sessionticket
Definition tlssocket.h:327
bool requireclientauth
Definition tlssocket.h:341
size_t sigschemecount
Definition tlssocket.h:335
qsc_x509w_trust_store truststore
Definition tlssocket.h:315
qsc_tls_socket_ticket_policy ticketpolicy
Definition tlssocket.h:325
size_t sniidentitycount
Definition tlssocket.h:321
qsc_x509w_server_identity identity
Definition tlssocket.h:316
qsc_x509w_tls_bridge bridge
Definition tlssocket.h:317
qsc_x509w_tls_local_certificate localcert
Definition tlssocket.h:318
bool initialized
Definition tlssocket.h:345
size_t groupcount
Definition tlssocket.h:334
A TLS socket listener that owns a listening socket and references a TLS socket context.
Definition tlssocket.h:381
const qsc_tls_socket_context * context
Definition tlssocket.h:383
bool listening
Definition tlssocket.h:389
int32_t backlog
Definition tlssocket.h:386
uint16_t port
Definition tlssocket.h:385
qsc_tls_socket_options socketoptions
Definition tlssocket.h:387
qsc_socket socket
Definition tlssocket.h:382
bool initialized
Definition tlssocket.h:388
qsc_socket_address_families family
Definition tlssocket.h:384
The socket and timeout configuration used by TLS socket contexts, listeners, and connections.
Definition tlssocket.h:193
size_t send_buffer_size
Definition tlssocket.h:200
bool dual_stack
Definition tlssocket.h:204
bool no_delay
Definition tlssocket.h:202
bool reuse_address
Definition tlssocket.h:201
uint32_t receive_timeout_ms
Definition tlssocket.h:196
uint32_t connect_timeout_ms
Definition tlssocket.h:194
uint32_t handshake_timeout_ms
Definition tlssocket.h:195
size_t receive_buffer_size
Definition tlssocket.h:199
bool keep_alive
Definition tlssocket.h:203
bool blocking
Definition tlssocket.h:205
uint32_t send_timeout_ms
Definition tlssocket.h:197
uint32_t idle_timeout_ms
Definition tlssocket.h:198
The peer identity and negotiated-parameter summary exposed by the TLS socket wrapper.
Definition tlssocket.h:288
qsc_tls_named_group named_group
Definition tlssocket.h:295
bool psk_accepted
Definition tlssocket.h:303
bool hostname_checked
Definition tlssocket.h:301
char common_name[QSC_X509_NAME_ATTRIBUTE_STRING_MAX]
Definition tlssocket.h:291
bool authenticated
Definition tlssocket.h:299
qsc_x509w_status x509_status
Definition tlssocket.h:297
bool hostname_matched
Definition tlssocket.h:300
bool chain_valid
Definition tlssocket.h:302
qsc_tls_cipher_suite cipher_suite
Definition tlssocket.h:294
qsc_x509_verify_status verify_status
Definition tlssocket.h:298
bool early_data_accepted
Definition tlssocket.h:304
bool alpn_selected
Definition tlssocket.h:305
qsc_tls_socket_result result
Definition tlssocket.h:293
char selected_alpn[QSC_TLS_SOCKET_ALPN_SIZE_MAX+1U]
Definition tlssocket.h:306
char subject[QSC_X509_NAME_ATTRIBUTE_STRING_MAX]
Definition tlssocket.h:289
char dns_name[QSC_X509_NAME_ATTRIBUTE_STRING_MAX]
Definition tlssocket.h:292
char issuer[QSC_X509_NAME_ATTRIBUTE_STRING_MAX]
Definition tlssocket.h:290
qsc_tls_signature_scheme signature_scheme
Definition tlssocket.h:296
A structured result containing wrapper, TLS, socket, X.509, verification, and alert status values.
Definition tlssocket.h:256
qsc_x509w_status x509status
Definition tlssocket.h:260
qsc_tls_alert_description alert
Definition tlssocket.h:262
qsc_tls_status tlsstatus
Definition tlssocket.h:258
qsc_x509_verify_status verifystatus
Definition tlssocket.h:261
qsc_tls_socket_status status
Definition tlssocket.h:257
qsc_socket_exceptions socketstatus
Definition tlssocket.h:259
The fixed-pool worker state used by the concurrent TLS socket server.
Definition tlssocket.h:399
size_t index
Definition tlssocket.h:401
struct qsc_tls_socket_server * server
Definition tlssocket.h:400
A blocking or concurrent TLS socket server using a fixed connection pool.
Definition tlssocket.h:444
qsc_thread workerthreads[QSC_TLS_SOCKET_SERVER_CONNECTIONS_MAX]
Definition tlssocket.h:455
bool concurrent
Definition tlssocket.h:461
qsc_mutex poolmutex
Definition tlssocket.h:458
qsc_tls_socket_connection connections[QSC_TLS_SOCKET_SERVER_CONNECTIONS_MAX]
Definition tlssocket.h:453
qsc_tls_socket_server_disconnect_callback ondisconnect
Definition tlssocket.h:448
volatile bool started[QSC_TLS_SOCKET_SERVER_CONNECTIONS_MAX]
Definition tlssocket.h:457
volatile bool running
Definition tlssocket.h:460
qsc_tls_socket_listener listener
Definition tlssocket.h:445
void * logstate
Definition tlssocket.h:452
qsc_tls_socket_log_callback onlog
Definition tlssocket.h:450
qsc_tls_socket_server_connect_callback onconnect
Definition tlssocket.h:446
void * callbackstate
Definition tlssocket.h:451
qsc_tls_socket_server_error_callback onerror
Definition tlssocket.h:449
qsc_tls_socket_server_worker_state workerstates[QSC_TLS_SOCKET_SERVER_CONNECTIONS_MAX]
Definition tlssocket.h:454
volatile bool active[QSC_TLS_SOCKET_SERVER_CONNECTIONS_MAX]
Definition tlssocket.h:456
size_t maxclients
Definition tlssocket.h:459
qsc_tls_socket_server_receive_callback onreceive
Definition tlssocket.h:447
bool initialized
Definition tlssocket.h:462
The session ticket policy used by TLS socket client and server operations.
Definition tlssocket.h:218
uint32_t renewal_interval_seconds
Definition tlssocket.h:223
uint32_t lifetime_seconds
Definition tlssocket.h:222
bool enabled
Definition tlssocket.h:219
bool auto_send_server_ticket
Definition tlssocket.h:221
bool allow_early_data
Definition tlssocket.h:220
bool(* qsc_tls_client_authorization_callback)(const qsc_tls_client_authorization_info *info, void *state)
Authorize a cryptographically valid mTLS client certificate.
Definition tlscert.h:203
TLS 1.3 record engine, connection wrapper, handshake driver, application data transport,...
qsc_tls_role
TLS engine endpoint role.
Definition tlsengine.h:100
qsc_tls_status
Definition tlserrors.h:65
Blocking socket adapter around qsc_tls_connection.
#define QSC_TLS_MAX_HOSTNAME_SIZE
Maximum hostname length accepted by the TLS layer.
Definition tlslimits.h:121
Default TLS CertificateVerify signer/verifier backed by QSC signature primitives.
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_client_connect_host_ex(qsc_tls_socket_connection *connection, const qsc_tls_socket_context *context, const char *hostname, const char *service, const qsc_tls_session_ticket *ticket, bool enableearlydata)
Connect to a remote host with an explicit session ticket and early-data preference.
Definition tlssocket.c:1996
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_default_server_policy(qsc_tls_socket_context *context)
Configure the context with the default TLS 1.3 server interoperability policy.
Definition tlssocket.c:1393
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_server_set_callbacks(qsc_tls_socket_server *server, qsc_tls_socket_server_connect_callback onconnect, qsc_tls_socket_server_receive_callback onreceive, qsc_tls_socket_server_disconnect_callback ondisconnect, qsc_tls_socket_server_error_callback onerror, void *state)
Set the application callbacks for a TLS socket server.
Definition tlssocket.c:2814
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_listener_set_options(qsc_tls_socket_listener *listener, bool reuseaddress, bool nodelay, uint32_t recvtimeoutms, uint32_t sendtimeoutms)
Set basic listener socket options.
Definition tlssocket.c:2580
QSC_EXPORT_API qsc_tls_cipher_suite qsc_tls_socket_negotiated_cipher_suite(const qsc_tls_socket_connection *connection)
Get the negotiated TLS cipher suite.
Definition tlssocket.c:2496
QSC_EXPORT_API void qsc_tls_socket_server_stop(qsc_tls_socket_server *server)
Stop a running TLS socket server.
Definition tlssocket.c:3040
qsc_tls_socket_status
The TLS socket wrapper status codes.
Definition tlssocket.h:231
@ qsc_tls_socket_status_tls_initialize_failed
Definition tlssocket.h:240
@ qsc_tls_socket_status_socket_start_failed
Definition tlssocket.h:235
@ qsc_tls_socket_status_socket_accept_failed
Definition tlssocket.h:239
@ qsc_tls_socket_status_not_initialized
Definition tlssocket.h:234
@ qsc_tls_socket_status_policy_rejected
Definition tlssocket.h:245
@ qsc_tls_socket_status_private_key_invalid
Definition tlssocket.h:244
@ qsc_tls_socket_status_certificate_verify_failed
Definition tlssocket.h:243
@ qsc_tls_socket_status_closed
Definition tlssocket.h:247
@ qsc_tls_socket_status_io_failed
Definition tlssocket.h:246
@ qsc_tls_socket_status_tls_handshake_failed
Definition tlssocket.h:241
@ qsc_tls_socket_status_socket_bind_failed
Definition tlssocket.h:237
@ qsc_tls_socket_status_invalid_input
Definition tlssocket.h:233
@ qsc_tls_socket_status_socket_connect_failed
Definition tlssocket.h:236
@ qsc_tls_socket_status_internal_error
Definition tlssocket.h:248
@ qsc_tls_socket_status_certificate_load_failed
Definition tlssocket.h:242
@ qsc_tls_socket_status_socket_listen_failed
Definition tlssocket.h:238
@ qsc_tls_socket_status_success
Definition tlssocket.h:232
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_listener_set_socket_options(qsc_tls_socket_listener *listener, const qsc_tls_socket_options *options)
Set the full listener socket option structure.
Definition tlssocket.c:2603
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_default_client_policy(qsc_tls_socket_context *context)
Configure the context with the default TLS 1.3 client interoperability policy.
Definition tlssocket.c:1361
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_server_start(qsc_tls_socket_server *server)
Start the server in blocking sequential mode.
Definition tlssocket.c:2877
QSC_EXPORT_API void qsc_tls_socket_context_clear_session_ticket(qsc_tls_socket_context *context)
Clear the client session ticket stored in the context.
Definition tlssocket.c:1946
QSC_EXPORT_API bool qsc_tls_socket_is_connected(const qsc_tls_socket_connection *connection)
Test whether a TLS socket connection owns a connected socket.
Definition tlssocket.c:2464
QSC_EXPORT_API void qsc_tls_socket_result_clear(qsc_tls_socket_result *result)
Clear a TLS socket structured result.
Definition tlssocket.c:1118
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_send(qsc_tls_socket_connection *connection, const uint8_t *input, size_t inlen, size_t *written)
Send application data over a completed TLS socket connection.
Definition tlssocket.c:2011
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_client_auth(qsc_tls_socket_context *context, bool requestclientauth, bool requireclientauth)
Configure server-side client certificate authentication policy.
Definition tlssocket.c:1692
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_connection_set_log_callback(qsc_tls_socket_connection *connection, qsc_tls_socket_log_callback callback, void *state)
Set the connection-level structured logging callback.
Definition tlssocket.c:2251
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_mlkem_hybrid_policy(qsc_tls_socket_context *context)
Configure the context with an explicit ML-KEM hybrid interoperability policy.
Definition tlssocket.c:1425
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_connection_get_session_ticket(const qsc_tls_socket_connection *connection, qsc_tls_session_ticket *ticketout)
Retrieve the most recent session ticket associated with a connection.
Definition tlssocket.c:2344
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_session_ticket_policy(qsc_tls_socket_context *context, const qsc_tls_socket_ticket_policy *policy)
Set the context-level session ticket policy.
Definition tlssocket.c:1867
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_listener_accept(qsc_tls_socket_listener *listener, qsc_tls_socket_connection *connection)
Accept an inbound socket and complete a TLS server handshake.
Definition tlssocket.c:2696
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_cipher_suites(qsc_tls_socket_context *context, const qsc_tls_cipher_suite *suites, size_t suitecount)
Set the ordered cipher suite preference list for the context.
Definition tlssocket.c:1302
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_add_server_identity_files(qsc_tls_socket_context *context, const char *hostname, const char *certificatechainpath, const char *privatekeypath, qsc_tls_signature_scheme verifyscheme)
Load an additional SNI-selectable server identity from certificate-chain and private-key files.
Definition tlssocket.c:1626
QSC_EXPORT_API void qsc_tls_socket_server_initialize(qsc_tls_socket_server *server)
Initialize a TLS socket server structure.
Definition tlssocket.c:2779
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_receive_frame(qsc_tls_socket_connection *connection, uint8_t *output, size_t outlen, size_t *read)
Receive a length-prefixed framed application message.
Definition tlssocket.c:2413
QSC_EXPORT_API void qsc_tls_socket_listener_initialize(qsc_tls_socket_listener *listener)
Initialize a TLS socket listener structure.
Definition tlssocket.c:2565
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_listener_bind(qsc_tls_socket_listener *listener, const qsc_tls_socket_context *context, const char *address, uint16_t port, qsc_socket_address_families family)
Bind a TLS listener to a local address and port.
Definition tlssocket.c:2633
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_load_server_identity_files(qsc_tls_socket_context *context, const char *certificatechainpath, const char *privatekeypath, qsc_tls_signature_scheme verifyscheme)
Load a server certificate chain and private key into the context.
Definition tlssocket.c:1595
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_session_ticket(qsc_tls_socket_context *context, const qsc_tls_session_ticket *ticket)
Set the client session ticket used for resumption attempts.
Definition tlssocket.c:1905
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_signature_schemes(qsc_tls_socket_context *context, const qsc_tls_signature_scheme *schemes, size_t schemecount)
Set the ordered signature scheme preference list for the context.
Definition tlssocket.c:1341
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_server_set_max_clients(qsc_tls_socket_server *server, size_t maxclients)
Set the maximum number of concurrent client connections accepted by the server.
Definition tlssocket.c:2853
QSC_EXPORT_API void qsc_tls_socket_server_dispose(qsc_tls_socket_server *server)
Dispose of a TLS socket server and clear owned connection state.
Definition tlssocket.c:3106
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_client_connect_ipv4(qsc_tls_socket_connection *connection, const qsc_tls_socket_context *context, const qsc_ipinfo_ipv4_address *address, uint16_t port, const char *hostname)
Connect to an IPv4 address and complete a TLS client handshake.
Definition tlssocket.c:2001
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_key_update(qsc_tls_socket_connection *connection, bool requestpeerupdate)
Request a TLS 1.3 KeyUpdate operation on a completed connection.
Definition tlssocket.c:2116
QSC_EXPORT_API const char * qsc_tls_socket_status_string(qsc_tls_socket_status status)
Return a constant string for a TLS socket wrapper status value.
Definition tlssocket.c:1134
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_connection_set_socket_options(qsc_tls_socket_connection *connection, const qsc_tls_socket_options *options)
Apply socket options to an initialized or connected TLS socket connection.
Definition tlssocket.c:2221
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_named_groups(qsc_tls_socket_context *context, const qsc_tls_named_group *groups, size_t groupcount)
Set the ordered named group preference list for the context.
Definition tlssocket.c:1322
void(* qsc_tls_socket_server_receive_callback)(qsc_tls_socket_connection *connection, const uint8_t *message, size_t msglen, void *state)
The TLS socket server receive callback prototype.
Definition tlssocket.h:420
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_server_send_session_ticket(qsc_tls_socket_connection *connection, uint32_t lifetime_seconds, qsc_tls_session_ticket *ticketout)
Send a TLS server session ticket over a completed server connection.
Definition tlssocket.c:2160
qsc_tls_socket_log_level
The TLS socket wrapper structured logging severity levels.
Definition tlssocket.h:155
@ qsc_tls_socket_log_level_error
Definition tlssocket.h:157
@ qsc_tls_socket_log_level_none
Definition tlssocket.h:156
@ qsc_tls_socket_log_level_info
Definition tlssocket.h:159
@ qsc_tls_socket_log_level_warning
Definition tlssocket.h:158
@ qsc_tls_socket_log_level_debug
Definition tlssocket.h:160
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_server_configure(qsc_tls_socket_server *server, const qsc_tls_socket_context *context, const char *address, uint16_t port, qsc_socket_address_families family)
Configure a TLS socket server listener and context.
Definition tlssocket.c:2793
QSC_EXPORT_API void qsc_tls_socket_options_initialize_default(qsc_tls_socket_options *options)
Initialize socket options to the wrapper default values.
Definition tlssocket.c:1230
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_send_frame(qsc_tls_socket_connection *connection, const uint8_t *input, size_t inlen)
Send a length-prefixed framed application message.
Definition tlssocket.c:2386
QSC_EXPORT_API void qsc_tls_socket_connection_dispose(qsc_tls_socket_connection *connection)
Dispose of a TLS socket connection and clear owned sensitive state.
Definition tlssocket.c:1972
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_strict_policy(qsc_tls_socket_context *context)
Configure the context with the strict TLS policy.
Definition tlssocket.c:1487
QSC_EXPORT_API void qsc_tls_socket_listener_close(qsc_tls_socket_listener *listener)
Close a TLS socket listener.
Definition tlssocket.c:2767
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_shutdown(qsc_tls_socket_connection *connection)
Send a TLS close_notify alert and close the TLS socket connection.
Definition tlssocket.c:2093
QSC_EXPORT_API void qsc_tls_socket_ticket_policy_initialize_default(qsc_tls_socket_ticket_policy *policy)
Initialize a session ticket policy to the wrapper default values.
Definition tlssocket.c:1250
void(* qsc_tls_socket_log_callback)(qsc_tls_socket_log_level level, qsc_tls_socket_event event, const qsc_tls_socket_result *result, const char *message, void *state)
The TLS socket structured logging callback prototype.
Definition tlssocket.h:274
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_receive(qsc_tls_socket_connection *connection, uint8_t *output, size_t outlen, size_t *read)
Receive application data from a completed TLS socket connection.
Definition tlssocket.c:2052
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_client_connect_host(qsc_tls_socket_connection *connection, const qsc_tls_socket_context *context, const char *hostname, const char *service)
Connect to a remote host and complete a TLS client handshake.
Definition tlssocket.c:1991
QSC_EXPORT_API void qsc_tls_socket_context_initialize(qsc_tls_socket_context *context)
Initialize a reusable TLS socket context.
Definition tlssocket.c:1265
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_socket_options(qsc_tls_socket_context *context, const qsc_tls_socket_options *options)
Set the default socket options for the context.
Definition tlssocket.c:1729
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_clear_alpn_protocols(qsc_tls_socket_context *context)
Clear the ordered ALPN protocol list from the context.
Definition tlssocket.c:1832
#define QSC_TLS_SOCKET_SERVER_IDENTITY_MAX
The maximum number of SNI-selectable server identities stored in a TLS socket context.
Definition tlssocket.h:106
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_get_selected_alpn(const qsc_tls_socket_connection *connection, char *protocol, size_t protocolcap, size_t *protocollen)
Retrieve the selected ALPN protocol for a TLS socket connection.
Definition tlssocket.c:2305
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_development_policy(qsc_tls_socket_context *context)
Configure the context with the development TLS policy.
Definition tlssocket.c:1505
#define QSC_TLS_SOCKET_SERVER_CONNECTIONS_MAX
The maximum number of fixed connection slots available to the concurrent server mode.
Definition tlssocket.h:130
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_client_authorization(qsc_tls_socket_context *context, qsc_tls_client_authorization_callback callback, void *state, bool required)
Configure the server-side mTLS application authorization callback.
Definition tlssocket.c:1710
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_alpn_protocols(qsc_tls_socket_context *context, const char *const *protocols, size_t protocolcount, bool required)
Set the ordered ALPN protocol list for the context.
Definition tlssocket.c:1815
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_load_trust_anchor_bundle_file(qsc_tls_socket_context *context, const char *path, bool selfsigned)
Load a trust anchor bundle file into the context trust store.
Definition tlssocket.c:1547
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_connection_cancel(qsc_tls_socket_connection *connection)
Request cancellation of a TLS socket connection.
Definition tlssocket.c:2269
QSC_EXPORT_API bool qsc_tls_socket_session_ticket_is_valid(const qsc_tls_session_ticket *ticket)
Test whether a session ticket is structurally acceptable for resumption.
Definition tlssocket.c:1898
#define QSC_TLS_SOCKET_GROUP_MAX
The maximum number of named groups stored in a TLS socket context preference list.
Definition tlssocket.h:94
void(* qsc_tls_socket_server_error_callback)(qsc_tls_socket_connection *connection, qsc_tls_socket_status status, void *state)
The TLS socket server error callback prototype.
Definition tlssocket.h:437
#define QSC_TLS_SOCKET_SIGNATURE_SCHEME_MAX
The maximum number of signature schemes stored in a TLS socket context preference list.
Definition tlssocket.h:100
qsc_tls_socket_event
The TLS socket wrapper structured logging event identifiers.
Definition tlssocket.h:168
@ qsc_tls_socket_event_send
Definition tlssocket.h:176
@ qsc_tls_socket_event_error
Definition tlssocket.h:185
@ qsc_tls_socket_event_accept
Definition tlssocket.h:173
@ qsc_tls_socket_event_key_update
Definition tlssocket.h:181
@ qsc_tls_socket_event_none
Definition tlssocket.h:169
@ qsc_tls_socket_event_connect
Definition tlssocket.h:172
@ qsc_tls_socket_event_worker_stop
Definition tlssocket.h:184
@ qsc_tls_socket_event_socket_options
Definition tlssocket.h:171
@ qsc_tls_socket_event_receive
Definition tlssocket.h:177
@ qsc_tls_socket_event_ticket
Definition tlssocket.h:180
@ qsc_tls_socket_event_handshake_complete
Definition tlssocket.h:175
@ qsc_tls_socket_event_frame_send
Definition tlssocket.h:178
@ qsc_tls_socket_event_frame_receive
Definition tlssocket.h:179
@ qsc_tls_socket_event_context_configured
Definition tlssocket.h:170
@ qsc_tls_socket_event_worker_start
Definition tlssocket.h:183
@ qsc_tls_socket_event_shutdown
Definition tlssocket.h:182
@ qsc_tls_socket_event_handshake_start
Definition tlssocket.h:174
QSC_EXPORT_API void qsc_tls_socket_connection_initialize(qsc_tls_socket_connection *connection)
Initialize a TLS socket connection structure.
Definition tlssocket.c:1957
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_load_crl_file(qsc_tls_socket_context *context, const char *path)
Load a certificate revocation list file into the context trust store.
Definition tlssocket.c:1571
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_get_peer_info(const qsc_tls_socket_connection *connection, qsc_tls_socket_peer_info *peerinfo)
Retrieve the peer information summary for a TLS socket connection.
Definition tlssocket.c:2287
void(* qsc_tls_socket_server_disconnect_callback)(qsc_tls_socket_connection *connection, void *state)
The TLS socket server disconnect callback prototype.
Definition tlssocket.h:428
QSC_EXPORT_API qsc_tls_signature_scheme qsc_tls_socket_negotiated_signature_scheme(const qsc_tls_socket_connection *connection)
Get the negotiated TLS signature scheme.
Definition tlssocket.c:2542
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_load_trust_anchor_file(qsc_tls_socket_context *context, const char *path, bool selfsigned)
Load a trust anchor certificate file into the context trust store.
Definition tlssocket.c:1523
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_log_callback(qsc_tls_socket_context *context, qsc_tls_socket_log_callback callback, void *state)
Set the context-level structured logging callback.
Definition tlssocket.c:1849
QSC_EXPORT_API qsc_tls_named_group qsc_tls_socket_negotiated_group(const qsc_tls_socket_connection *connection)
Get the negotiated TLS named group.
Definition tlssocket.c:2519
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_server_set_log_callback(qsc_tls_socket_server *server, qsc_tls_socket_log_callback callback, void *state)
Set the server-level structured logging callback.
Definition tlssocket.c:2835
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_client_connect_ipv6(qsc_tls_socket_connection *connection, const qsc_tls_socket_context *context, const qsc_ipinfo_ipv6_address *address, uint16_t port, const char *hostname)
Connect to an IPv6 address and complete a TLS client handshake.
Definition tlssocket.c:2006
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_sni_required(qsc_tls_socket_context *context, bool required)
Configure whether server handshakes require a recognized SNI hostname.
Definition tlssocket.c:1675
QSC_EXPORT_API void qsc_tls_socket_connection_clear_session_ticket(qsc_tls_socket_connection *connection)
Clear the most recent session ticket retained by a connection.
Definition tlssocket.c:2375
QSC_EXPORT_API bool qsc_tls_socket_is_handshake_complete(const qsc_tls_socket_connection *connection)
Test whether the TLS handshake has completed.
Definition tlssocket.c:2480
#define QSC_TLS_SOCKET_ALPN_SIZE_MAX
The maximum ALPN protocol identifier length stored in a TLS socket context.
Definition tlssocket.h:118
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_server_start_concurrent(qsc_tls_socket_server *server)
Start the server in bounded concurrent mode.
Definition tlssocket.c:2964
QSC_EXPORT_API void qsc_tls_socket_context_dispose(qsc_tls_socket_context *context)
Dispose of a TLS socket context and clear owned sensitive state.
Definition tlssocket.c:1289
#define QSC_TLS_SOCKET_CIPHER_SUITE_MAX
The maximum number of cipher suites stored in a TLS socket context preference list.
Definition tlssocket.h:88
QSC_EXPORT_API qsc_tls_socket_status qsc_tls_socket_context_set_experimental_pqc_policy(qsc_tls_socket_context *context)
Configure the context with the experimental ML-KEM and ML-DSA policy.
Definition tlssocket.c:1456
void(* qsc_tls_socket_server_connect_callback)(qsc_tls_socket_connection *connection, void *state)
The TLS socket server connect callback prototype.
Definition tlssocket.h:410
qsc_tls_cipher_suite
TLS 1.3 cipher-suite identifiers.
Definition tlstypes.h:129
qsc_tls_named_group
TLS named-group identifiers for classical, ML-KEM, and hybrid key exchange groups.
Definition tlstypes.h:159
qsc_tls_alert_description
TLS alert description codes carried in Alert protocol messages.
Definition tlstypes.h:94
qsc_tls_signature_scheme
TLS signature-scheme identifiers.
Definition tlstypes.h:179
High-level offline X.509 wrapper for certificate loading, validation, deployment configuration,...