QSC Post Quantum Cryptographic Library 1.3.0.0 (C1)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
tlsengine.h
Go to the documentation of this file.
1/* 2020-2026 Quantum Resistant Cryptographic Solutions Corporation
2 * All Rights Reserved.
3 *
4 * NOTICE:
5 * This software and all accompanying materials are the exclusive property of
6 * Quantum Resistant Cryptographic Solutions Corporation (QRCS). The intellectual
7 * and technical concepts contained herein are proprietary to QRCS and are
8 * protected under applicable Canadian, U.S., and international copyright,
9 * patent, and trade secret laws.
10 *
11 * CRYPTOGRAPHIC ALGORITHMS AND IMPLEMENTATIONS:
12 * - This software includes implementations of cryptographic primitives and
13 * algorithms that are standardized or in the public domain, such as AES
14 * and SHA-3, which are not proprietary to QRCS.
15 * - This software also includes cryptographic primitives, constructions, and
16 * algorithms designed by QRCS, including but not limited to RCS, SCB, CSX, QMAC, and
17 * related components, which are proprietary to QRCS.
18 * - All source code, implementations, protocol compositions, optimizations,
19 * parameter selections, and engineering work contained in this software are
20 * original works of QRCS and are protected under this license.
21 *
22 * LICENSE AND USE RESTRICTIONS:
23 * - This software is licensed under the Quantum Resistant Cryptographic Solutions
24 * Public Research and Evaluation License (QRCS-PREL), 2025-2026.
25 * - Permission is granted solely for non-commercial evaluation, academic research,
26 * cryptographic analysis, interoperability testing, and feasibility assessment.
27 * - Commercial use, production deployment, commercial redistribution, or
28 * integration into products or services is strictly prohibited without a
29 * separate written license agreement executed with QRCS.
30 * - Licensing and authorized distribution are solely at the discretion of QRCS.
31 *
32 * EXPERIMENTAL CRYPTOGRAPHY NOTICE:
33 * Portions of this software may include experimental, novel, or evolving
34 * cryptographic designs. Use of this software is entirely at the user's risk.
35 *
36 * DISCLAIMER:
37 * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
38 * IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS
39 * FOR A PARTICULAR PURPOSE, SECURITY, OR NON-INFRINGEMENT. QRCS DISCLAIMS ALL
40 * LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
41 * ARISING FROM THE USE OR MISUSE OF THIS SOFTWARE.
42 *
43 * FULL LICENSE:
44 * This software is subject to the Quantum Resistant Cryptographic Solutions
45 * Public Research and Evaluation License (QRCS-PREL), 2025-2026. The complete license terms
46 * are provided in the accompanying LICENSE file or at https://www.qrcscorp.ca.
47 *
48 * Written by: John G. Underhill
49 * Contact: contact@qrcscorp.ca
50 */
51
52#ifndef QSC_TLS_ENGINE_H
53#define QSC_TLS_ENGINE_H
54
55#include "qsccommon.h"
56#include "tlserrors.h"
57#include "tlstypes.h"
58#include "tlslimits.h"
59#include "tlsstate.h"
60#include "tlsclient.h"
61#include "tlsserver.h"
62#include "tlssession.h"
63
64QSC_CPLUSPLUS_ENABLED_START
65
88
104
133
148
162
173
194QSC_EXPORT_API qsc_tls_status qsc_tls_engine_handshake(qsc_tls_connection* connection, const uint8_t* input, size_t inlen, size_t* consumed, uint8_t* output, size_t outlen, size_t* written);
195
212QSC_EXPORT_API qsc_tls_status qsc_tls_engine_write_application_data(qsc_tls_connection* connection, const uint8_t* input, size_t inlen, uint8_t* output, size_t outlen, size_t* written);
213
233QSC_EXPORT_API qsc_tls_status qsc_tls_engine_read_application_data(qsc_tls_connection* connection, const uint8_t* input, size_t inlen, size_t* consumed,
234 uint8_t* output, size_t outlen, size_t* written);
235
257QSC_EXPORT_API qsc_tls_status qsc_tls_engine_read_application_data_ex(qsc_tls_connection* connection, const uint8_t* input, size_t inlen, size_t* consumed,
258 uint8_t* output, size_t outlen, size_t* written, uint8_t* responseoutput, size_t responseoutlen, size_t* responsewritten);
259
275QSC_EXPORT_API qsc_tls_status qsc_tls_engine_request_key_update(qsc_tls_connection* connection, bool requestpeerupdate, uint8_t* output, size_t outlen, size_t* written);
276
296QSC_EXPORT_API qsc_tls_status qsc_tls_engine_emit_session_ticket(qsc_tls_connection* connection, uint32_t lifetime_seconds, uint8_t* output,
297 size_t outlen, size_t* written, qsc_tls_session_ticket* ticketout);
298
316QSC_EXPORT_API qsc_tls_status qsc_tls_engine_consume_session_ticket(qsc_tls_connection* connection, const uint8_t* input, size_t inlen,
317 size_t* consumed, qsc_tls_session_ticket* ticketout);
318
333QSC_EXPORT_API qsc_tls_status qsc_tls_engine_close(qsc_tls_connection* connection, uint8_t* output, size_t outlen, size_t* written);
334
347
348QSC_CPLUSPLUS_ENABLED_END
349
350#endif
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
Stores the static client policy used to initialize a TLS client state.
Definition tlsclient.h:120
Stores the active TLS 1.3 client handshake and record state.
Definition tlsclient.h:139
Unified TLS engine connection context.
Definition tlsengine.h:120
uint8_t applicationbuffer[QSC_TLS_MAX_RECORD_SIZE]
Definition tlsengine.h:130
qsc_tls_role role
Definition tlsengine.h:127
uint8_t handshakebuffer[QSC_TLS_STREAM_BUFFER_MAX_SIZE]
Definition tlsengine.h:128
qsc_tls_server_state server
Definition tlsengine.h:124
size_t handshakebufferlen
Definition tlsengine.h:129
qsc_tls_client_state client
Definition tlsengine.h:123
size_t applicationbufferlen
Definition tlsengine.h:131
Immutable server configuration.
Definition tlsserver.h:73
Server handshake state container.
Definition tlsserver.h:101
Definition tlssession.h:85
TLS 1.3 client handshake state machine declarations.
QSC_EXPORT_API void qsc_tls_engine_dispose(qsc_tls_connection *connection)
Dispose of a TLS engine connection.
Definition tlsengine.c:112
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_read_application_data(qsc_tls_connection *connection, const uint8_t *input, size_t inlen, size_t *consumed, uint8_t *output, size_t outlen, size_t *written)
Decrypt inbound application records.
Definition tlsengine.c:219
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_write_application_data(qsc_tls_connection *connection, const uint8_t *input, size_t inlen, uint8_t *output, size_t outlen, size_t *written)
Encrypt and frame application data.
Definition tlsengine.c:176
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_emit_session_ticket(qsc_tls_connection *connection, uint32_t lifetime_seconds, uint8_t *output, size_t outlen, size_t *written, qsc_tls_session_ticket *ticketout)
Emit a TLS 1.3 NewSessionTicket record.
Definition tlsengine.c:498
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_consume_session_ticket(qsc_tls_connection *connection, const uint8_t *input, size_t inlen, size_t *consumed, qsc_tls_session_ticket *ticketout)
Consume a TLS 1.3 NewSessionTicket record.
Definition tlsengine.c:615
QSC_EXPORT_API bool qsc_tls_engine_is_handshake_complete(const qsc_tls_connection *connection)
Test whether the TLS handshake is complete.
Definition tlsengine.c:769
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_handshake(qsc_tls_connection *connection, const uint8_t *input, size_t inlen, size_t *consumed, uint8_t *output, size_t outlen, size_t *written)
Advance the TLS handshake state machine.
Definition tlsengine.c:131
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_read_application_data_ex(qsc_tls_connection *connection, const uint8_t *input, size_t inlen, size_t *consumed, uint8_t *output, size_t outlen, size_t *written, uint8_t *responseoutput, size_t responseoutlen, size_t *responsewritten)
Decrypt inbound records and process post-handshake messages.
Definition tlsengine.c:225
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_request_key_update(qsc_tls_connection *connection, bool requestpeerupdate, uint8_t *output, size_t outlen, size_t *written)
Initiate a TLS 1.3 KeyUpdate operation.
Definition tlsengine.c:395
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_initialize_client(qsc_tls_connection *connection, const qsc_tls_client_config *config)
Initialize a TLS engine connection as a client.
Definition tlsengine.c:70
qsc_tls_role
TLS engine endpoint role.
Definition tlsengine.h:100
@ qsc_tls_role_client
Definition tlsengine.h:101
@ qsc_tls_role_server
Definition tlsengine.h:102
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_close(qsc_tls_connection *connection, uint8_t *output, size_t outlen, size_t *written)
Build an encrypted close_notify alert record.
Definition tlsengine.c:730
QSC_EXPORT_API qsc_tls_status qsc_tls_engine_initialize_server(qsc_tls_connection *connection, const qsc_tls_server_config *config)
Initialize a TLS engine connection as a server.
Definition tlsengine.c:91
TLS status code definitions and diagnostic string conversion.
qsc_tls_status
Definition tlserrors.h:65
Fixed upper bounds used by the TLS implementation.
#define QSC_TLS_STREAM_BUFFER_MAX_SIZE
Maximum buffered inbound TLS stream size in bytes.
Definition tlslimits.h:78
#define QSC_TLS_MAX_RECORD_SIZE
Maximum accepted TLS record size in bytes.
Definition tlslimits.h:72
TLS 1.3 server handshake state machine.
TLS 1.3 session resumption ticket handling.
TLS internal state container type definitions shared across the record and handshake layers.
Public TLS type definitions.