52#ifndef QSC_TLS_EXTENSIONS_H
53#define QSC_TLS_EXTENSIONS_H
61QSC_CPLUSPLUS_ENABLED_START
351 uint8_t* selected,
size_t selectedcap,
size_t* selectedlen);
368 const uint8_t* modes,
size_t modecount);
470 const uint8_t** binders,
size_t* binderlens,
size_t capacity,
size_t* count,
size_t* binderblockoffset);
529 size_t groupcapacity,
size_t* groupcount);
547 size_t schemecapacity,
size_t* schemecount);
566 const uint8_t** shares,
size_t* sharelens,
size_t capacity,
size_t* count);
584 const uint8_t** share,
size_t* sharelen);
650QSC_CPLUSPLUS_ENABLED_END
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 a bounded ordered ALPN protocol list and its negotiation policy.
Definition tlsstate.h:102
Tracks extension types observed while parsing one TLS handshake message.
Definition tlsextensions.h:95
uint64_t highmask
Definition tlsextensions.h:97
uint64_t psk_ke_mask
Definition tlsextensions.h:98
uint64_t lowmask
Definition tlsextensions.h:96
uint64_t tailmask
Definition tlsextensions.h:99
Non-owning view of a TLS pre-shared-key identity.
Definition tlsextensions.h:113
size_t identitylen
Definition tlsextensions.h:115
const uint8_t * identity
Definition tlsextensions.h:114
uint32_t obfuscatedticketage
Definition tlsextensions.h:116
TLS status code definitions and diagnostic string conversion.
qsc_tls_status
Definition tlserrors.h:65
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_key_share_server(uint8_t *output, size_t outlen, size_t *offset, qsc_tls_named_group group, const uint8_t *publicshare, size_t publicsharelen)
Encode the ServerHello key_share extension.
Definition tlsextensions.c:384
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_supported_versions_client(uint8_t *output, size_t outlen, size_t *offset)
Encode the ClientHello supported_versions extension.
Definition tlsextensions.c:145
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_key_share_client_hello(const uint8_t *input, size_t inplen, qsc_tls_named_group *groups, const uint8_t **shares, size_t *sharelens, size_t capacity, size_t *count)
Decode a ClientHello key_share extension body.
Definition tlsextensions.c:903
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_early_data_empty(uint8_t *output, size_t outlen, size_t *offset)
Encode an empty early_data extension.
Definition tlsextensions.c:1168
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_supported_groups(uint8_t *output, size_t outlen, size_t *offset, const qsc_tls_named_group *groups, size_t groupcount)
Encode the supported_groups extension.
Definition tlsextensions.c:213
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_pre_shared_key_server(const uint8_t *input, size_t inplen, uint16_t *selidentity)
Decode a ServerHello pre_shared_key extension body.
Definition tlsextensions.c:1470
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_pre_shared_key_server(uint8_t *output, size_t outlen, size_t *offset, uint16_t selidentity)
Encode a ServerHello pre_shared_key extension.
Definition tlsextensions.c:1329
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_key_share_client(uint8_t *output, size_t outlen, size_t *offset, qsc_tls_named_group group, const uint8_t *publicshare, size_t publicsharelen)
Encode the ClientHello key_share extension.
Definition tlsextensions.c:338
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_server_name(uint8_t *output, size_t outlen, size_t *offset, const char *hostname)
Encode the server_name extension.
Definition tlsextensions.c:446
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_early_data_max(const uint8_t *input, size_t inplen, uint32_t *maxearlydatasize)
Decode an early_data maximum-size extension body.
Definition tlsextensions.c:1219
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_supported_versions_server(uint8_t *output, size_t outlen, size_t *offset)
Encode the ServerHello supported_versions extension.
Definition tlsextensions.c:185
QSC_EXPORT_API bool qsc_tls_extensions_is_permitted(qsc_tls_handshake_type message, qsc_tls_extension_type extensiontype)
Test whether an extension is permitted in a handshake message.
Definition tlsextensions.c:80
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_pre_shared_key_offer(uint8_t *output, size_t outlen, size_t *offset, const qsc_tls_psk_identity_view *identities, size_t identitycount, size_t binderlen, size_t *binderoffset)
Encode a ClientHello pre_shared_key extension.
Definition tlsextensions.c:1245
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_key_share_hello_retry(uint8_t *output, size_t outlen, size_t *offset, qsc_tls_named_group group)
Encode the HelloRetryRequest key_share extension.
Definition tlsextensions.c:418
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_psk_key_exchange_modes(uint8_t *output, size_t outlen, size_t *offset, const uint8_t *modes, size_t modecount)
Encode the psk_key_exchange_modes extension.
Definition tlsextensions.c:685
QSC_EXPORT_API void qsc_tls_extensions_bitmap_initialize(qsc_tls_extension_bitmap *bitmap)
Reset a TLS extension appearance bitmap.
Definition tlsextensions.c:27
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_early_data_max(uint8_t *output, size_t outlen, size_t *offset, uint32_t maxearlydatasize)
Encode an early_data maximum-size extension.
Definition tlsextensions.c:1191
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_alpn(const uint8_t *input, size_t inplen, qsc_tls_alpn_protocols *alpn)
Decode the application_layer_protocol_negotiation extension body.
Definition tlsextensions.c:566
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_supported_versions_server(const uint8_t *input, size_t inplen, uint16_t *selectedversion)
Decode a ServerHello supported_versions extension body.
Definition tlsextensions.c:773
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_signature_algorithms_cert(uint8_t *output, size_t outlen, size_t *offset, const qsc_tls_signature_scheme *schemes, size_t schemecount)
Encode the signature_algorithms_cert extension.
Definition tlsextensions.c:296
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_signature_algorithms(uint8_t *output, size_t outlen, size_t *offset, const qsc_tls_signature_scheme *schemes, size_t schemecount)
Encode the signature_algorithms extension.
Definition tlsextensions.c:254
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_server_name(const uint8_t *input, size_t inplen, const char **hostname, size_t *hostnamelen)
Decode a server_name extension body.
Definition tlsextensions.c:1038
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_supported_groups(const uint8_t *input, size_t inplen, qsc_tls_named_group *groups, size_t groupcapacity, size_t *groupcount)
Decode a supported_groups extension body.
Definition tlsextensions.c:799
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_pre_shared_key_offer(const uint8_t *input, size_t inplen, qsc_tls_psk_identity_view *identities, const uint8_t **binders, size_t *binderlens, size_t capacity, size_t *count, size_t *binderblockoffset)
Decode a ClientHello pre_shared_key extension body.
Definition tlsextensions.c:1357
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_supported_versions_client(const uint8_t *input, size_t inplen, bool *acceptstls13)
Decode a ClientHello supported_versions extension body.
Definition tlsextensions.c:727
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_encode_alpn(uint8_t *output, size_t outlen, size_t *offset, const qsc_tls_alpn_protocols *alpn)
Encode the application_layer_protocol_negotiation extension.
Definition tlsextensions.c:516
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_key_share_hello_retry(const uint8_t *input, size_t inplen, qsc_tls_named_group *requestedgroup)
Decode a HelloRetryRequest key_share extension body.
Definition tlsextensions.c:1006
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_select_cipher_suite(const uint8_t *clientsuites, size_t clientsuiteslen, const qsc_tls_cipher_suite *serverpreference, size_t serverpreferencecount, qsc_tls_cipher_suite *selected)
Select a mutually supported cipher suite.
Definition tlsextensions.c:1098
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_select_alpn(const qsc_tls_alpn_protocols *clientalpn, const qsc_tls_alpn_protocols *serveralpn, uint8_t *selected, size_t selectedcap, size_t *selectedlen)
Select a mutually supported ALPN protocol.
Definition tlsextensions.c:641
QSC_EXPORT_API bool qsc_tls_extensions_bitmap_set(qsc_tls_extension_bitmap *bitmap, uint16_t extensiontype)
Mark an extension type as present in an appearance bitmap.
Definition tlsextensions.c:37
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_key_share_server_hello(const uint8_t *input, size_t inplen, qsc_tls_named_group *selectedgroup, const uint8_t **share, size_t *sharelen)
Decode a ServerHello key_share extension body.
Definition tlsextensions.c:971
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_select_key_share(const qsc_tls_named_group *groups, size_t groupcount, const qsc_tls_named_group *serverpreference, size_t serverpreferencecount, qsc_tls_named_group *selected)
Select a mutually supported key-share group.
Definition tlsextensions.c:1141
QSC_EXPORT_API qsc_tls_status qsc_tls_extensions_decode_signature_algorithms(const uint8_t *input, size_t inplen, qsc_tls_signature_scheme *schemes, size_t schemecapacity, size_t *schemecount)
Decode a signature_algorithms extension body.
Definition tlsextensions.c:851
Fixed upper bounds used by the TLS implementation.
TLS internal state container type definitions shared across the record and handshake layers.
Public TLS type definitions.
qsc_tls_extension_type
TLS extension type identifiers.
Definition tlstypes.h:141
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_handshake_type
TLS 1.3 handshake message type codes per RFC 8446 section B.3.
Definition tlstypes.h:194
qsc_tls_signature_scheme
TLS signature-scheme identifiers.
Definition tlstypes.h:179