QSC Post Quantum Cryptographic Library 1.3.0.0 (C1)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
tlscert.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_CERT_H
53#define QSC_TLS_CERT_H
54
55#include "qsccommon.h"
56#include "tlstypes.h"
57#include "tlserrors.h"
58#include "x509types.h"
59#include "x509time.h"
60#include "x509store.h"
61#include "x509verify.h"
62
63QSC_CPLUSPLUS_ENABLED_START
64
75
80{
81 const uint8_t* data;
82 size_t datalen;
84
94
105typedef bool (*qsc_tls_certificate_chain_validate_callback)(const qsc_tls_certificate_view* chain, size_t chainlength,
106 const qsc_tls_certificate_validation_context* context, void* state);
107
111#define QSC_TLS_CERTIFICATE_FINGERPRINT_SIZE 32U
112
126typedef bool (*qsc_tls_certificate_verify_callback)(qsc_tls_signature_scheme scheme, const uint8_t* input, size_t inputlen,
127 const uint8_t* signature, size_t signaturelen, const qsc_tls_certificate_view* signer, void* state);
128
141typedef bool (*qsc_tls_certificate_sign_callback)(qsc_tls_signature_scheme scheme, const uint8_t* input, size_t inputlen,
142 uint8_t* signature, size_t* signaturelen, void* state);
143
153
164{
165 char subject[QSC_X509_NAME_ATTRIBUTE_STRING_MAX];
166 char issuer[QSC_X509_NAME_ATTRIBUTE_STRING_MAX];
167 char commonname[QSC_X509_NAME_ATTRIBUTE_STRING_MAX];
168 char dnsname[QSC_X509_NAME_ATTRIBUTE_STRING_MAX];
169 qsc_x509_verify_status verifystatus;
175
194
204
221
239QSC_EXPORT_API qsc_tls_status qsc_tls_certificate_decode_message(const uint8_t* input, size_t inlen, const uint8_t** requestcontext, size_t* requestcontextlen,
240 qsc_tls_certificate_view* chain, size_t chaincapacity, size_t* chainlength);
241
260QSC_EXPORT_API qsc_tls_status qsc_tls_certificate_encode_message(const uint8_t* requestcontext, size_t requestcontextlen, const qsc_tls_certificate_view* chain,
261 size_t chainlength, uint8_t* output, size_t outlen, size_t* offset);
262
272
281
294 const qsc_x509_certificate* intermediates, size_t intermediatecount, const qsc_x509_time* validationtime,
295 uint8_t* verifybuffer, size_t verifybufferlen);
296
311
321
338QSC_EXPORT_API qsc_tls_status qsc_tls_certificate_request_decode(const uint8_t* input, size_t inlen, const uint8_t** requestcontext, size_t* requestcontextlen,
339 const uint8_t** extensionsblock, size_t* extensionsblocklen);
340
358QSC_EXPORT_API qsc_tls_status qsc_tls_certificate_request_encode(const uint8_t* requestcontext, size_t requestcontextlen, const uint8_t* extensionsblock,
359 size_t extensionsblocklen, uint8_t* output, size_t outlen, size_t* offset);
360
369
378
389QSC_EXPORT_API bool qsc_tls_x509_validate_chain(const qsc_tls_certificate_view* chain, size_t chainlength,
390 const qsc_tls_certificate_validation_context* context, void* state);
391
406 size_t inputlen, const uint8_t* signature, size_t signaturelen, const qsc_tls_certificate_view* signer, void* state);
407
408QSC_CPLUSPLUS_ENABLED_END
409
410#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
Certificate validation and signature verification callback set.
Definition tlscert.h:148
qsc_tls_certificate_chain_validate_callback validatechain
Definition tlscert.h:149
void * state
Definition tlscert.h:151
qsc_tls_certificate_verify_callback verifycertificateverify
Definition tlscert.h:150
Certificate validation context supplied to chain validators.
Definition tlscert.h:89
bool clientauth
Definition tlscert.h:91
const char * hostname
Definition tlscert.h:90
bool requirepeercertificate
Definition tlscert.h:92
A non-owning view over a single encoded certificate.
Definition tlscert.h:80
size_t datalen
Definition tlscert.h:82
const uint8_t * data
Definition tlscert.h:81
Bounded client-certificate identity information supplied to an mTLS authorization callback.
Definition tlscert.h:187
qsc_tls_peer_certificate_summary summary
Definition tlscert.h:188
size_t certificatefingerprintlen
Definition tlscert.h:190
qsc_x509_verify_status verifystatus
Definition tlscert.h:191
uint8_t certificatefingerprint[QSC_TLS_CERTIFICATE_FINGERPRINT_SIZE]
Definition tlscert.h:189
bool chainvalid
Definition tlscert.h:192
Fixed peer-certificate identity summary retained by the built-in QSC X.509 TLS bridge.
Definition tlscert.h:164
bool populated
Definition tlscert.h:170
bool hostnamevalid
Definition tlscert.h:173
char dnsname[QSC_X509_NAME_ATTRIBUTE_STRING_MAX]
Definition tlscert.h:168
char commonname[QSC_X509_NAME_ATTRIBUTE_STRING_MAX]
Definition tlscert.h:167
bool hostnamechecked
Definition tlscert.h:172
qsc_x509_verify_status verifystatus
Definition tlscert.h:169
char subject[QSC_X509_NAME_ATTRIBUTE_STRING_MAX]
Definition tlscert.h:165
char issuer[QSC_X509_NAME_ATTRIBUTE_STRING_MAX]
Definition tlscert.h:166
bool chainvalid
Definition tlscert.h:171
Context for the built-in bridge between TLS and the QSC X.509 layer.
Definition tlscert.h:209
const qsc_x509_time * validationtime
Definition tlscert.h:213
const qsc_x509_certificate * intermediates
Definition tlscert.h:211
size_t verifybufferlen
Definition tlscert.h:215
qsc_x509_verify_status lastverifystatus
Definition tlscert.h:218
bool rejectunsupportedcriticalextensions
Definition tlscert.h:217
size_t intermediatecount
Definition tlscert.h:212
const qsc_x509_store * truststore
Definition tlscert.h:210
qsc_tls_alert_description lastalert
Definition tlscert.h:219
uint8_t * verifybuffer
Definition tlscert.h:214
qsc_tls_peer_certificate_summary peersummary
Definition tlscert.h:216
QSC_EXPORT_API void qsc_tls_certificate_interface_initialize(qsc_tls_certificate_interface *iface, qsc_tls_certificate_chain_validate_callback validatechain, qsc_tls_certificate_verify_callback verifycertificateverify, void *state)
Initialize a certificate callback interface.
Definition tlscert.c:370
QSC_EXPORT_API bool qsc_tls_x509_verify_certificate_verify(qsc_tls_signature_scheme scheme, const uint8_t *input, size_t inputlen, const uint8_t *signature, size_t signaturelen, const qsc_tls_certificate_view *signer, void *state)
Verify a TLS CertificateVerify signature using the QSC X.509 bridge.
Definition tlscert.c:637
QSC_EXPORT_API qsc_tls_alert_description qsc_tls_x509_alert_from_verify_status(qsc_x509_verify_status status)
Map a QSC X.509 verification result to a TLS alert description.
Definition tlscert.c:398
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
bool(* qsc_tls_certificate_verify_callback)(qsc_tls_signature_scheme scheme, const uint8_t *input, size_t inputlen, const uint8_t *signature, size_t signaturelen, const qsc_tls_certificate_view *signer, void *state)
Verify the TLS CertificateVerify signature.
Definition tlscert.h:126
#define QSC_TLS_CERTIFICATE_FINGERPRINT_SIZE
Size in bytes of the retained peer certificate fingerprint.
Definition tlscert.h:111
QSC_EXPORT_API bool qsc_tls_x509_validate_chain(const qsc_tls_certificate_view *chain, size_t chainlength, const qsc_tls_certificate_validation_context *context, void *state)
Validate a peer certificate chain using the QSC X.509 bridge.
Definition tlscert.c:687
QSC_EXPORT_API qsc_tls_status qsc_tls_x509_context_initialize(qsc_tls_qsc_x509_context *context, const qsc_x509_store *truststore, const qsc_x509_certificate *intermediates, size_t intermediatecount, const qsc_x509_time *validationtime, uint8_t *verifybuffer, size_t verifybufferlen)
Initialize a QSC X.509 bridge context.
Definition tlscert.c:604
QSC_EXPORT_API qsc_x509_signature_algorithm qsc_tls_x509_signature_algorithm_from_tls(qsc_tls_signature_scheme scheme)
Map a TLS signature scheme to a QSC X.509 signature algorithm identifier.
Definition tlscert.c:632
QSC_EXPORT_API bool qsc_tls_certificate_interface_is_valid(const qsc_tls_certificate_interface *iface)
Determine whether a certificate callback interface is complete.
Definition tlscert.c:382
QSC_EXPORT_API qsc_tls_alert_description qsc_tls_certificate_interface_get_last_alert(const qsc_tls_certificate_interface *iface, bool verifyphase)
Query the most recent alert reason from a certificate interface.
Definition tlscert.c:477
QSC_EXPORT_API qsc_tls_status qsc_tls_certificate_request_encode(const uint8_t *requestcontext, size_t requestcontextlen, const uint8_t *extensionsblock, size_t extensionsblocklen, uint8_t *output, size_t outlen, size_t *offset)
Encode a TLS CertificateRequest message.
Definition tlscert.c:566
bool(* qsc_tls_certificate_chain_validate_callback)(const qsc_tls_certificate_view *chain, size_t chainlength, const qsc_tls_certificate_validation_context *context, void *state)
Validate a peer certificate chain.
Definition tlscert.h:105
QSC_EXPORT_API qsc_tls_status qsc_tls_certificate_interface_initialize_qsc_x509(qsc_tls_certificate_interface *iface, qsc_tls_qsc_x509_context *context)
Initialize a certificate callback interface using the QSC X.509 bridge.
Definition tlscert.c:505
QSC_EXPORT_API qsc_tls_status qsc_tls_certificate_request_decode(const uint8_t *input, size_t inlen, const uint8_t **requestcontext, size_t *requestcontextlen, const uint8_t **extensionsblock, size_t *extensionsblocklen)
Decode a TLS CertificateRequest message.
Definition tlscert.c:523
QSC_EXPORT_API qsc_tls_status qsc_tls_certificate_decode_message(const uint8_t *input, size_t inlen, const uint8_t **requestcontext, size_t *requestcontextlen, qsc_tls_certificate_view *chain, size_t chaincapacity, size_t *chainlength)
Decode a TLS Certificate message.
Definition tlscert.c:272
QSC_EXPORT_API qsc_tls_status qsc_tls_certificate_encode_message(const uint8_t *requestcontext, size_t requestcontextlen, const qsc_tls_certificate_view *chain, size_t chainlength, uint8_t *output, size_t outlen, size_t *offset)
Encode a TLS Certificate message.
Definition tlscert.c:191
bool(* qsc_tls_certificate_sign_callback)(qsc_tls_signature_scheme scheme, const uint8_t *input, size_t inputlen, uint8_t *signature, size_t *signaturelen, void *state)
Produce a TLS 1.3 CertificateVerify signature.
Definition tlscert.h:141
TLS status code definitions and diagnostic string conversion.
qsc_tls_status
Definition tlserrors.h:65
Public TLS type definitions.
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
X.509 trust-anchor store and certificate chain construction interface.
X.509 time decoding, parsing, comparison, and validity helpers.
qsc_asn1_time qsc_x509_time
Alias for the normalized ASN.1 time representation used by X.509 helpers.
Definition x509time.h:85
X.509 certificate and certification-path verification interface.