UDIF: Universal Digital Identification Framework 1.0.0.0a (A1)
A quantum-secure cryptographic identification
transport.h
Go to the documentation of this file.
1/* 2025-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 UDIF_TRANSPORT_H
53#define UDIF_TRANSPORT_H
54
55#include "udif.h"
56#include "certificate.h"
57
66
67static const char UDIF_TRANSPORT_CUSTOM[] = "UDIF:HS-MAC:V1";
68
69/* === Session Management === */
70
79{
80 qsc_rcs_state txcpr;
81 qsc_rcs_state rxcpr;
82 uint64_t txseq;
83 uint64_t rxseq;
84 uint64_t epoch;
85 uint64_t last_ratchet;
86 uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE];
87 uint8_t remote_serial[UDIF_CERTIFICATE_SERIAL_SIZE];
91 bool initiator;
92 /* Handshake state (only used during handshake, cleared after) */
93 struct {
94 uint8_t local_kem_sk[UDIF_KEM_PRIVATEKEY_SIZE];
95 uint8_t kem_ss[UDIF_KEM_SECRET_SIZE];
96 uint8_t nonce_local[32U];
97 uint8_t nonce_remote[32U];
98 uint8_t transcript[4096U];
101 } handshake;
103
109
121UDIF_EXPORT_API udif_errors udif_session_handshake_init(udif_session_state* session, udif_network_packet* packet, const udif_child_certificate* local_cert, const uint8_t local_privkey[UDIF_ASYMMETRIC_SIGNING_KEY_SIZE],
122 const uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE], const uint8_t remote_serial[UDIF_CERTIFICATE_SERIAL_SIZE], bool (*rng_generate)(uint8_t*, size_t));
123
136UDIF_EXPORT_API udif_errors udif_session_handshake_resp(udif_session_state* session, udif_network_packet* packet, const udif_network_packet* init_packet,
137 const udif_child_certificate* local_cert, const uint8_t local_privkey[UDIF_ASYMMETRIC_SIGNING_KEY_SIZE], const uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE],
138 const udif_child_certificate* remote_cert, bool (*rng_generate)(uint8_t*, size_t));
139
149 const udif_network_packet* resp_packet, const udif_child_certificate* remote_cert);
150
158UDIF_EXPORT_API udif_errors udif_session_handshake_finish(udif_session_state* session, udif_network_packet* packet, const udif_network_packet* confirm_packet);
159
160/* === Data Encryption === */
161
170UDIF_EXPORT_API udif_errors udif_session_encrypt(udif_session_state* session, udif_network_packet* packet, const uint8_t* plaintext, size_t plntextlen);
171
180UDIF_EXPORT_API udif_errors udif_session_decrypt(udif_session_state* session, uint8_t* plaintext, size_t* plntextlen, const udif_network_packet* packet);
181
182/* === Forward Secrecy === */
183
192UDIF_EXPORT_API udif_errors udif_session_ratchet(udif_session_state* session, udif_network_packet* packetout, const udif_network_packet* packetin, bool (*rng_generate)(uint8_t*, size_t));
193
200UDIF_EXPORT_API bool udif_session_needs_ratchet(const udif_session_state* session, uint64_t currtime);
201
202/* === Session State === */
203
209
215
222
231UDIF_EXPORT_API udif_errors udif_session_get_statistics(const udif_session_state* session, uint64_t* txseq, uint64_t* rxseq, uint64_t* epoch);
232
233/* === Packet Operations === */
234
242UDIF_EXPORT_API udif_errors udif_packet_serialize(uint8_t* stream, size_t* streamlen, const udif_network_packet* packet);
243
251UDIF_EXPORT_API udif_errors udif_packet_deserialize(udif_network_packet* packet, const uint8_t* stream, size_t streamlen);
252
260UDIF_EXPORT_API udif_errors udif_packet_validate(const udif_session_state* session, const udif_network_packet* packet, uint8_t expected_flag);
261
267UDIF_EXPORT_API void udif_packet_set_time(udif_network_packet* packet, uint64_t currtime);
268
275UDIF_EXPORT_API bool udif_packet_is_fresh(const udif_network_packet* packet, uint64_t currtime);
276
281UDIF_EXPORT_API void udif_packet_clear(udif_network_packet* packet);
282
283#endif
Secure session state.
Definition transport.h:79
uint64_t txseq
Definition transport.h:82
uint8_t session_id[UDIF_CRYPTO_HASH_SIZE]
Definition transport.h:88
bool established
Definition transport.h:90
uint8_t nonce_remote[32U]
Definition transport.h:97
uint8_t remote_serial[UDIF_CERTIFICATE_SERIAL_SIZE]
Definition transport.h:87
uint8_t local_kem_sk[UDIF_KEM_PRIVATEKEY_SIZE]
Definition transport.h:94
uint8_t nonce_local[32U]
Definition transport.h:96
uint8_t ratchet_state[UDIF_CRYPTO_HASH_SIZE]
Definition transport.h:89
uint64_t epoch
Definition transport.h:84
qsc_rcs_state txcpr
Definition transport.h:80
size_t transcript_len
Definition transport.h:99
uint64_t rxseq
Definition transport.h:83
uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE]
Definition transport.h:86
uint64_t last_ratchet
Definition transport.h:85
bool initiator
Definition transport.h:91
uint8_t transcript[4096U]
Definition transport.h:98
uint8_t kem_ss[UDIF_KEM_SECRET_SIZE]
Definition transport.h:95
qsc_rcs_state rxcpr
Definition transport.h:81
bool in_progress
Definition transport.h:100
UDIF_EXPORT_API bool udif_packet_is_fresh(const udif_network_packet *packet, uint64_t currtime)
Check if packet is fresh.
Definition transport.c:1009
UDIF_EXPORT_API udif_errors udif_session_handshake_confirm(udif_session_state *session, udif_network_packet *packet, const udif_network_packet *resp_packet, const udif_child_certificate *remote_cert)
Initiator confirms handshake.
Definition transport.c:280
UDIF_EXPORT_API udif_errors udif_packet_validate(const udif_session_state *session, const udif_network_packet *packet, uint8_t expected_flag)
Validate packet.
Definition transport.c:970
UDIF_EXPORT_API void udif_session_clear(udif_session_state *session)
Clear session state.
Definition transport.c:870
UDIF_EXPORT_API udif_errors udif_packet_deserialize(udif_network_packet *packet, const uint8_t *stream, size_t streamlen)
Deserialize packet from byte stream.
Definition transport.c:919
UDIF_EXPORT_API void udif_session_dispose(udif_session_state *session)
Dispose session resources.
Definition transport.c:856
UDIF_EXPORT_API bool udif_session_is_established(const udif_session_state *session)
Check if session is established.
Definition transport.c:1047
UDIF_EXPORT_API udif_errors udif_packet_serialize(uint8_t *stream, size_t *streamlen, const udif_network_packet *packet)
Serialize packet to byte stream.
Definition transport.c:878
UDIF_EXPORT_API void udif_packet_clear(udif_network_packet *packet)
Clear packet state.
Definition transport.c:1032
UDIF_EXPORT_API udif_errors udif_session_encrypt(udif_session_state *session, udif_network_packet *packet, const uint8_t *plaintext, size_t plntextlen)
Encrypt a data packet.
Definition transport.c:543
UDIF_EXPORT_API bool udif_session_needs_ratchet(const udif_session_state *session, uint64_t currtime)
Check if ratchet is needed.
Definition transport.c:835
UDIF_EXPORT_API void udif_packet_set_time(udif_network_packet *packet, uint64_t currtime)
Set packet timestamp.
Definition transport.c:1001
UDIF_EXPORT_API void udif_session_initialize(udif_session_state *session)
Initialize a session state.
Definition transport.c:22
UDIF_EXPORT_API udif_errors udif_session_handshake_resp(udif_session_state *session, udif_network_packet *packet, const udif_network_packet *init_packet, const udif_child_certificate *local_cert, const uint8_t local_privkey[UDIF_ASYMMETRIC_SIGNING_KEY_SIZE], const uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE], const udif_child_certificate *remote_cert, bool(*rng_generate)(uint8_t *, size_t))
Responder handles handshake init.
Definition transport.c:126
UDIF_EXPORT_API udif_errors udif_session_handshake_init(udif_session_state *session, udif_network_packet *packet, const udif_child_certificate *local_cert, const uint8_t local_privkey[UDIF_ASYMMETRIC_SIGNING_KEY_SIZE], const uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE], const uint8_t remote_serial[UDIF_CERTIFICATE_SERIAL_SIZE], bool(*rng_generate)(uint8_t *, size_t))
Initiator starts handshake.
Definition transport.c:39
UDIF_EXPORT_API udif_errors udif_session_ratchet(udif_session_state *session, udif_network_packet *packetout, const udif_network_packet *packetin, bool(*rng_generate)(uint8_t *, size_t))
Perform asymmetric ratchet.
Definition transport.c:665
UDIF_EXPORT_API udif_errors udif_session_get_statistics(const udif_session_state *session, uint64_t *txseq, uint64_t *rxseq, uint64_t *epoch)
Get session statistics.
Definition transport.c:1063
UDIF_EXPORT_API udif_errors udif_session_handshake_finish(udif_session_state *session, udif_network_packet *packet, const udif_network_packet *confirm_packet)
Responder finishes handshake.
Definition transport.c:434
UDIF_EXPORT_API udif_errors udif_session_decrypt(udif_session_state *session, uint8_t *plaintext, size_t *plntextlen, const udif_network_packet *packet)
Decrypt a data packet.
Definition transport.c:589
UDIF Common Definitions and Protocol Configuration.
#define UDIF_ASYMMETRIC_SIGNING_KEY_SIZE
The byte size of the asymmetric signature signing-key array.
Definition udif.h:258
#define UDIF_CRYPTO_HASH_SIZE
The size of the certificate hash in bytes.
Definition udif.h:439
udif_errors
UDIF error codes.
Definition udif.h:628
#define UDIF_EXPORT_API
The api export prefix.
Definition udifcommon.h:103