UDIF: Universal Digital Identification Framework 1.0.0.0a (A1)
A quantum-secure cryptographic identification
server.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_SERVER_H
53#define UDIF_SERVER_H
54
55#include "udifcommon.h"
56#include "certificate.h"
57#include "commands.h"
58#include "logger.h"
59#include "udif.h"
60#include "topology.h"
61#include "collection.h"
62
73
74/*---------------------------------------------------------------------------
75 MACRO DEFINITIONS
76---------------------------------------------------------------------------*/
77
82#define UDIF_SERVER_MINIMUM_COMMAND_LENGTH 4U
83
91#define UDIF_SERVER_APPLICATION_STATE_SIZE (UDIF_STORAGE_DOMAINNAME_MAX + UDIF_STORAGE_HOSTNAME_MAX + \
92 UDIF_STORAGE_ADDRESS_MAX + UDIF_STORAGE_PATH_MAX + UDIF_STORAGE_USERNAME_MAX + UDIF_CERTIFICATE_ISSUER_SIZE + \
93 sizeof(uint16_t) + sizeof(uint8_t) + sizeof(uint8_t) + sizeof(uint16_t) + sizeof(bool) + sizeof(bool) + \
94 UDIF_ASYMMETRIC_SIGNING_KEY_SIZE)
95
96/*---------------------------------------------------------------------------
97 ENUMERATIONS
98---------------------------------------------------------------------------*/
99
112
113/*---------------------------------------------------------------------------
114 DATA STRUCTURES
115---------------------------------------------------------------------------*/
116
128{
129 char cmdprompt[UDIF_STORAGE_PROMPT_MAX];
130 char domain[UDIF_STORAGE_DOMAINNAME_MAX];
131 char hostname[UDIF_STORAGE_HOSTNAME_MAX];
133 char localip[UDIF_STORAGE_ADDRESS_MAX];
134 char logpath[UDIF_STORAGE_PATH_MAX];
135 char username[UDIF_STORAGE_USERNAME_MAX];
136 uint8_t* kchain;
137 uint8_t* sigkey;
138 const char* aplpath;
139 const char* banner;
140 const char* cfgname;
141 const char* prikeyname;
142 const char* promptdef;
143 const char* pubkeyname;
144 const char* srvname;
145 const char* topname;
146 const char* wtitle;
147 udif_child_certificate ads;
148 udif_root_certificate root;
152 uint16_t port;
153 udif_network_designations srvtype;
154 uint16_t timeout;
155 uint8_t retries;
156 bool joined;
157 bool loghost;
159
160/*---------------------------------------------------------------------------
161 FUNCTION PROTOTYPES
162---------------------------------------------------------------------------*/
163
174UDIF_EXPORT_API void udif_server_certificate_directory(const udif_server_application_state* state, char* dpath, size_t pathlen);
175
186UDIF_EXPORT_API void udif_server_certificate_path(const udif_server_application_state* state, char* fpath, size_t pathlen, const char* issuer);
187
199
211UDIF_EXPORT_API bool udif_server_child_certificate_from_issuer(udif_child_certificate* ccert, const udif_server_application_state* state, const char* issuer);
212
224UDIF_EXPORT_API bool udif_server_child_certificate_from_serial(udif_child_certificate* ccert, const udif_server_application_state* state, const uint8_t* serial);
225
237UDIF_EXPORT_API void udif_server_child_certificate_generate(udif_server_application_state* state, udif_child_certificate* ccert, uint64_t period, uint8_t* capability);
238
250UDIF_EXPORT_API bool udif_server_child_certificate_import(udif_child_certificate* lcert, udif_server_application_state* state, const char* fpath);
251
261UDIF_EXPORT_API void udif_server_child_certificate_path(const udif_server_application_state* state, char* fpath, size_t pathlen);
262
273UDIF_EXPORT_API void udif_server_child_certificate_path_from_issuer(const udif_server_application_state* state, char* fpath, size_t pathlen, const char* issuer);
274
285UDIF_EXPORT_API bool udif_server_child_certificate_print(const char* fpath, size_t pathlen);
286
296UDIF_EXPORT_API void udif_server_local_certificate_store(udif_server_application_state* state, const udif_child_certificate* ccert, const char* address);
297
306
315
324
333
342
355UDIF_EXPORT_API bool udif_server_log_write_message(udif_server_application_state* state, udif_application_messages msgtype, const char* message, size_t msglen);
356
366UDIF_EXPORT_API void udif_server_mfkcol_path(const udif_server_application_state* state, char* fpath, size_t pathlen);
367
378UDIF_EXPORT_API bool udif_server_mfkcol_from_file(qsc_collection_state* mfkcol, const udif_server_application_state* state);
379
388UDIF_EXPORT_API void udif_server_mfkcol_to_file(const qsc_collection_state* mfkcol, const udif_server_application_state* state);
389
398
409UDIF_EXPORT_API void udif_server_print_error(const udif_server_application_state* state, udif_application_messages appmsg, const char* message, udif_protocol_errors error);
410
419
431
442
453UDIF_EXPORT_API void udif_server_root_certificate_generate(udif_server_application_state* state, udif_root_certificate* rcert, uint64_t period);
454
466UDIF_EXPORT_API bool udif_server_root_certificate_load(const udif_server_application_state* state, udif_root_certificate* root, const udif_topology_list_state* tlist);
467
478UDIF_EXPORT_API bool udif_server_root_certificate_print(const char* fpath, size_t pathlen);
479
489UDIF_EXPORT_API void udif_server_root_certificate_store(udif_server_application_state* state, const udif_root_certificate* rcert);
490
499
511UDIF_EXPORT_API bool udif_server_set_console_timeout(udif_server_application_state* state, const char* snum, size_t numlen);
512
524UDIF_EXPORT_API bool udif_server_set_domain_name(udif_server_application_state* state, const char* name, size_t namelen);
525
537UDIF_EXPORT_API bool udif_server_set_host_name(udif_server_application_state* state, const char* name, size_t namelen);
538
550UDIF_EXPORT_API bool udif_server_set_ip_address(udif_server_application_state* state, const char* address, size_t addlen);
551
563UDIF_EXPORT_API bool udif_server_set_password_retries(udif_server_application_state* state, const char* snum, size_t numlen);
564
573
582
591
600UDIF_EXPORT_API void udif_server_state_initialize(udif_server_application_state* state, udif_network_designations srvtype);
601
612
621
632UDIF_EXPORT_API bool udif_server_topology_adc_fetch(const udif_server_application_state* state, udif_child_certificate* dcert);
633
644
653
662
672
682
691
702UDIF_EXPORT_API bool udif_server_topology_local_fetch(const udif_server_application_state* state, udif_child_certificate* ccert);
703
714
725UDIF_EXPORT_API bool udif_server_topology_root_fetch(const udif_server_application_state* state, udif_root_certificate* rcert);
726
735
746
755
756#endif
UDIF Certificate Handling Functions.
#define UDIF_CERTIFICATE_ISSUER_SIZE
The maximum certificate issuer string length. The last character must be a string terminator.
Definition certificate.h:138
The UDIF command enumerations.
udif_command_actions
The ARS command actions.
Definition commands.h:259
udif_console_modes
The ARS console modes.
Definition commands.h:342
udif_application_messages
The ARS application messages.
Definition commands.h:84
UDIF Logging Functions.
UDIF_EXPORT_API bool udif_server_child_certificate_print(const char *fpath, size_t pathlen)
Print the local child certificate to console.
Definition server.c:838
UDIF_EXPORT_API bool udif_server_state_store(udif_server_application_state *state)
Write the server state to file.
Definition server.c:2033
UDIF_EXPORT_API void udif_server_root_certificate_generate(udif_server_application_state *state, udif_root_certificate *rcert, uint64_t period)
Generate a new root certificate.
Definition server.c:1346
UDIF_EXPORT_API bool udif_server_root_certificate_print(const char *fpath, size_t pathlen)
Print a formatted root certificate to console.
Definition server.c:1431
UDIF_EXPORT_API void udif_server_topology_reset(udif_server_application_state *state)
Delete all nodes and certificates except for the root.
Definition server.c:2300
UDIF_EXPORT_API void udif_server_topology_remove_node(udif_server_application_state *state, const char *issuer)
Remove a node from the topology.
Definition server.c:2283
UDIF_EXPORT_API bool udif_server_set_password_retries(udif_server_application_state *state, const char *snum, size_t numlen)
Set the number of failed password retries.
Definition server.c:1773
UDIF_EXPORT_API void udif_server_child_certificate_path(const udif_server_application_state *state, char *fpath, size_t pathlen)
Get the full path to the child certificate.
Definition server.c:811
UDIF_EXPORT_API bool udif_server_set_ip_address(udif_server_application_state *state, const char *address, size_t addlen)
Set the IP address of the server.
Definition server.c:1732
UDIF_EXPORT_API void udif_server_mfkcol_to_file(const qsc_collection_state *mfkcol, const udif_server_application_state *state)
Convert an mfk collection to an encrypted file.
Definition server.c:1124
UDIF_EXPORT_API bool udif_server_topology_root_exists(const udif_server_application_state *state)
Check if the root certificate exists on file.
Definition server.c:2318
UDIF_EXPORT_API void udif_server_state_backup_restore(const udif_server_application_state *state)
Restore the state from backup.
Definition server.c:1819
UDIF_EXPORT_API bool udif_server_root_certificate_export(const udif_server_application_state *state, const char *dpath)
Export the root certificate to a directory.
Definition server.c:1262
UDIF_EXPORT_API bool udif_server_set_console_timeout(udif_server_application_state *state, const char *snum, size_t numlen)
Set the number of idle minutes before the user is logged out.
Definition server.c:1580
UDIF_EXPORT_API bool udif_server_log_write_message(udif_server_application_state *state, udif_application_messages msgtype, const char *message, size_t msglen)
Write a message to the log.
Definition server.c:1014
UDIF_EXPORT_API void udif_server_child_certificate_generate(udif_server_application_state *state, udif_child_certificate *ccert, uint64_t period, uint8_t *capability)
Generate a new child certificate.
Definition server.c:728
UDIF_EXPORT_API void udif_server_erase_signature_key(udif_server_application_state *state)
Erase the signature-scheme signing key.
Definition server.c:1809
UDIF_EXPORT_API void udif_server_print_error(const udif_server_application_state *state, udif_application_messages appmsg, const char *message, udif_protocol_errors error)
Print a network error to the console.
Definition server.c:1179
UDIF_EXPORT_API void udif_server_user_logout(udif_server_application_state *state)
Log out of the server.
Definition server.c:2700
UDIF_EXPORT_API bool udif_server_set_host_name(udif_server_application_state *state, const char *name, size_t namelen)
Rename the server host.
Definition server.c:1675
UDIF_EXPORT_API bool udif_server_set_domain_name(udif_server_application_state *state, const char *name, size_t namelen)
Rename the network domain.
Definition server.c:1617
UDIF_EXPORT_API void udif_server_local_certificate_store(udif_server_application_state *state, const udif_child_certificate *ccert, const char *address)
Store a child certificate.
Definition server.c:873
UDIF_EXPORT_API void udif_server_certificate_path(const udif_server_application_state *state, char *fpath, size_t pathlen, const char *issuer)
Get the full path to a certificate.
Definition server.c:637
UDIF_EXPORT_API bool udif_server_topology_root_fetch(const udif_server_application_state *state, udif_root_certificate *rcert)
Load the root certificate from state.
Definition server.c:2336
UDIF_EXPORT_API void udif_server_log_host(udif_server_application_state *state)
Enable logging on the server.
Definition server.c:942
UDIF_EXPORT_API bool udif_server_child_certificate_from_issuer(udif_child_certificate *ccert, const udif_server_application_state *state, const char *issuer)
Get the certificate instance from file using the issuer string.
Definition server.c:689
UDIF_EXPORT_API void udif_server_clear_config(udif_server_application_state *state)
Erase and reset the configuration file.
Definition server.c:905
UDIF_EXPORT_API void udif_server_clear_log(udif_server_application_state *state)
Erase the log file.
Definition server.c:916
UDIF_EXPORT_API void udif_server_set_command_prompt(udif_server_application_state *state)
Set the command prompt to the current state mode.
Definition server.c:1528
UDIF_EXPORT_API void udif_server_state_unload(udif_server_application_state *state)
Unload the server state from memory.
Definition server.c:2065
UDIF_EXPORT_API void udif_server_child_certificate_path_from_issuer(const udif_server_application_state *state, char *fpath, size_t pathlen, const char *issuer)
Get the certificate file path from the certificate issuer name.
Definition server.c:824
UDIF_EXPORT_API bool udif_server_root_certificate_load(const udif_server_application_state *state, udif_root_certificate *root, const udif_topology_list_state *tlist)
Load a root certificate using the issuer name.
Definition server.c:1373
UDIF_EXPORT_API void udif_server_topology_remove_certificate(udif_server_application_state *state, const char *issuer)
Delete the certificate.
Definition server.c:2259
UDIF_EXPORT_API void udif_server_erase_all(udif_server_application_state *state)
Erase all state, including log files, and reset configuration.
Definition server.c:930
UDIF_EXPORT_API void udif_server_state_backup_save(const udif_server_application_state *state)
Backup the state.
Definition server.c:1877
UDIF_EXPORT_API void udif_server_mfkcol_path(const udif_server_application_state *state, char *fpath, size_t pathlen)
Get the path to the mfk collection file.
Definition server.c:1044
udif_server_server_loop_status
The UDIF server loop status.
Definition server.h:107
@ udif_server_loop_status_paused
Definition server.h:110
@ udif_server_loop_status_started
Definition server.h:109
@ udif_server_loop_status_stopped
Definition server.h:108
UDIF_EXPORT_API void udif_server_certificate_directory(const udif_server_application_state *state, char *dpath, size_t pathlen)
Get the full delimited path to the certificate storage directory.
Definition server.c:617
UDIF_EXPORT_API void udif_server_log_print(udif_server_application_state *state)
Print the log file to the console.
Definition server.c:970
UDIF_EXPORT_API void udif_server_root_certificate_store(udif_server_application_state *state, const udif_root_certificate *rcert)
Store a root certificate to a file.
Definition server.c:1466
UDIF_EXPORT_API void udif_server_print_banner(const udif_server_application_state *state)
Print the server banner.
Definition server.c:1168
UDIF_EXPORT_API bool udif_server_topology_local_fetch(const udif_server_application_state *state, udif_child_certificate *ccert)
Load the local certificate from state.
Definition server.c:2172
UDIF_EXPORT_API bool udif_server_child_certificate_import(udif_child_certificate *lcert, udif_server_application_state *state, const char *fpath)
Import the local certificate signed by the root.
Definition server.c:755
UDIF_EXPORT_API bool udif_server_child_certificate_from_serial(udif_child_certificate *ccert, const udif_server_application_state *state, const uint8_t *serial)
Get the certificate instance from file using the serial number.
Definition server.c:706
UDIF_EXPORT_API bool udif_server_user_login(udif_server_application_state *state)
Start the user login dialogue.
Definition server.c:2416
UDIF_EXPORT_API bool udif_server_topology_load(udif_server_application_state *state)
Load the topology from an encrypted file to state.
Definition server.c:2107
UDIF_EXPORT_API bool udif_server_root_import_dialogue(udif_server_application_state *state)
Import the root certificate.
Definition server.c:1300
UDIF_EXPORT_API bool udif_server_topology_adc_fetch(const udif_server_application_state *state, udif_child_certificate *dcert)
Load the ADC certificate from state.
Definition server.c:2077
UDIF_EXPORT_API void udif_server_state_initialize(udif_server_application_state *state, udif_network_designations srvtype)
Initialize the internal state.
Definition server.c:1923
UDIF_EXPORT_API void udif_server_topology_print_list(udif_server_application_state *state)
Print the topological list to the console.
Definition server.c:2202
UDIF_EXPORT_API void udif_server_topology_purge_externals(udif_server_application_state *state)
Clear the topology list except for the root and local nodes.
Definition server.c:2234
UDIF_EXPORT_API void udif_server_topology_to_file(udif_server_application_state *state)
Copy the topology to an encrypted file.
Definition server.c:2366
UDIF_EXPORT_API bool udif_server_child_certificate_export(const udif_server_application_state *state, const char *dpath)
Export the local certificate to a file.
Definition server.c:651
UDIF_EXPORT_API void udif_server_print_configuration(const udif_server_application_state *state)
Print the server configuration.
Definition server.c:1194
UDIF_EXPORT_API bool udif_server_mfkcol_from_file(qsc_collection_state *mfkcol, const udif_server_application_state *state)
Convert an encrypted mfk collection file to a collection state.
Definition server.c:1058
The UDIF server state.
Definition server.h:128
char username[UDIF_STORAGE_USERNAME_MAX]
Definition server.h:135
uint8_t * kchain
Definition server.h:136
char logpath[UDIF_STORAGE_PATH_MAX]
Definition server.h:134
const char * aplpath
Definition server.h:138
const char * pubkeyname
Definition server.h:143
udif_topology_list_state tlist
Definition server.h:149
const char * srvname
Definition server.h:144
const char * promptdef
Definition server.h:142
uint8_t retries
Definition server.h:155
udif_console_modes mode
Definition server.h:151
const char * prikeyname
Definition server.h:141
udif_child_certificate ads
Definition server.h:147
bool loghost
Definition server.h:157
uint16_t timeout
Definition server.h:154
const char * banner
Definition server.h:139
uint8_t * sigkey
Definition server.h:137
uint16_t port
Definition server.h:152
udif_root_certificate root
Definition server.h:148
const char * topname
Definition server.h:145
bool joined
Definition server.h:156
udif_network_designations srvtype
Definition server.h:153
char hostname[UDIF_STORAGE_HOSTNAME_MAX]
Definition server.h:131
char localip[UDIF_STORAGE_ADDRESS_MAX]
Definition server.h:133
char issuer[UDIF_CERTIFICATE_ISSUER_SIZE]
Definition server.h:132
udif_command_actions action
Definition server.h:150
char cmdprompt[UDIF_STORAGE_PROMPT_MAX]
Definition server.h:129
const char * wtitle
Definition server.h:146
const char * cfgname
Definition server.h:140
char domain[UDIF_STORAGE_DOMAINNAME_MAX]
Definition server.h:130
The UDIF topology list structure.
Definition topology.h:197
The UDIF topology functions.
UDIF Common Definitions and Protocol Configuration.
UDIF common definitions and constants.
#define UDIF_EXPORT_API
The api export prefix.
Definition udifcommon.h:103