UDIF: Universal Digital Identification Framework 1.1.0.0a (A1)
A quantum-secure cryptographic identification
registry.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 UDIFREGISTRY_H
53#define UDIFREGISTRY_H
54
55#include "udif.h"
56#include "object.h"
57
78
83#define UDIF_REGISTRY_DEFAULT_CAPACITY 1024U
84
89#define UDIF_REGISTRY_MAX_CAPACITY 1048576U
90
91
96#define UDIF_REGISTRY_COMMIT_STRUCTURE_SIZE (UDIF_SIGNED_HASH_SIZE + \
97 UDIF_SERIAL_NUMBER_SIZE + \
98 UDIF_CRYPTO_HASH_SIZE + \
99 sizeof(uint64_t) + \
100 sizeof(uint64_t))
101
118
128
133#define UDIF_REGISTRY_FLAG_ACTIVE 0x00000001UL
134
139#define UDIF_REGISTRY_FLAG_DESTROYED 0x00000002UL
140
145#define UDIF_REGISTRY_FLAG_TRANSFERRED 0x00000004UL
146
159
178
189
200
212
225
236
245UDIF_EXPORT_API bool udif_registry_object_is_active(const udif_registry_state* reg, const uint8_t* serial);
246
261
272
281
293
302
314UDIF_EXPORT_API bool udif_registry_find_object(const udif_registry_state* reg, const uint8_t* serial, size_t* index);
315
328UDIF_EXPORT_API udif_errors udif_registry_generate_proof(uint8_t* proof, size_t* prooflen, const udif_registry_state* reg, const uint8_t* serial);
329
340
352UDIF_EXPORT_API udif_errors udif_registry_get_digest_at(uint8_t* digest, const udif_registry_state* reg, size_t index);
353
365UDIF_EXPORT_API udif_errors udif_registry_initialize(udif_registry_state* reg, const uint8_t* ownerser, size_t capacity);
366
377
389
401
413
427UDIF_EXPORT_API bool udif_registry_verify_proof(const uint8_t* proof, size_t prooflen, const uint8_t* root, const uint8_t* objdigest);
428
435
445
455UDIF_EXPORT_API udif_errors udif_registry_commit_deserialize(udif_registry_commit* commit, const uint8_t* input, size_t inlen);
456
466UDIF_EXPORT_API udif_errors udif_registry_commit_serialize(uint8_t* output, size_t outlen, const udif_registry_commit* commit);
467
477UDIF_EXPORT_API udif_errors udif_registry_commit_sign(udif_registry_commit* commit, const uint8_t* sigkey, bool (*rng_generate)(uint8_t*, size_t));
478
487UDIF_EXPORT_API bool udif_registry_commit_verify(const udif_registry_commit* commit, const uint8_t* verkey);
488
489#endif
UDIF object operations.
UDIF_EXPORT_API udif_errors udif_registry_commit_serialize(uint8_t *output, size_t outlen, const udif_registry_commit *commit)
Serialize a signed registry commitment.
Definition registry.c:881
UDIF_EXPORT_API udif_errors udif_registry_initialize(udif_registry_state *reg, const uint8_t *ownerser, size_t capacity)
Initialize a registry.
Definition registry.c:604
UDIF_EXPORT_API bool udif_registry_object_is_active(const udif_registry_state *reg, const uint8_t *serial)
Test whether a registry leaf is active.
Definition registry.c:218
UDIF_EXPORT_API udif_errors udif_registry_update_object(udif_registry_state *reg, const udif_object *obj)
Update an object in the registry.
Definition registry.c:715
UDIF_EXPORT_API void udif_registry_clear(udif_registry_state *reg)
Clear registry.
Definition registry.c:344
UDIF_EXPORT_API udif_errors udif_registry_leaf_digest(uint8_t *digest, const udif_registry_leaf *leaf)
Compute a registry leaf digest.
Definition registry.c:130
UDIF_EXPORT_API udif_errors udif_registry_resize(udif_registry_state *reg, size_t newcapacity)
Resize registry.
Definition registry.c:682
UDIF_EXPORT_API udif_errors udif_registry_remove_object(udif_registry_state *reg, const uint8_t *serial)
Remove an object from the registry.
Definition registry.c:654
UDIF_EXPORT_API udif_errors udif_registry_leaf_encode(uint8_t *output, const udif_registry_leaf *leaf)
Encode a registry leaf in canonical UDIF order.
Definition registry.c:102
UDIF_EXPORT_API udif_errors udif_registry_add_leaf(udif_registry_state *reg, const udif_registry_leaf *leaf)
Add or update a canonical registry leaf.
Definition registry.c:157
UDIF_EXPORT_API udif_errors udif_registry_get_leaf(udif_registry_leaf *leaf, const udif_registry_state *reg, const uint8_t *serial)
Copy a registry leaf by object serial.
Definition registry.c:191
UDIF_EXPORT_API udif_errors udif_registry_compute_root(uint8_t *root, const udif_registry_state *reg)
Compute registry Merkle root.
Definition registry.c:353
UDIF_EXPORT_API bool udif_registry_is_full(const udif_registry_state *reg)
Check if registry is full.
Definition registry.c:638
UDIF_EXPORT_API udif_errors udif_registry_commit_digest(uint8_t *digest, const udif_registry_commit *commit)
Compute the canonical digest of a registry commitment.
Definition registry.c:815
UDIF_EXPORT_API udif_errors udif_registry_commit_sign(udif_registry_commit *commit, const uint8_t *sigkey, bool(*rng_generate)(uint8_t *, size_t))
Sign a registry commitment.
Definition registry.c:912
UDIF_EXPORT_API size_t udif_registry_get_count(const udif_registry_state *reg)
Get object count.
Definition registry.c:571
UDIF_EXPORT_API bool udif_registry_find_object(const udif_registry_state *reg, const uint8_t *serial, size_t *index)
Find object in registry.
Definition registry.c:430
UDIF_EXPORT_API void udif_registry_dispose(udif_registry_state *reg)
Dispose registry.
Definition registry.c:414
UDIF_EXPORT_API udif_errors udif_registry_generate_proof(uint8_t *proof, size_t *prooflen, const udif_registry_state *reg, const uint8_t *serial)
Generate membership proof.
Definition registry.c:460
UDIF_EXPORT_API size_t udif_registry_get_capacity(const udif_registry_state *reg)
Get registry capacity.
Definition registry.c:555
UDIF_EXPORT_API udif_errors udif_registry_commit_deserialize(udif_registry_commit *commit, const uint8_t *input, size_t inlen)
Deserialize a signed registry commitment.
Definition registry.c:844
UDIF_EXPORT_API void udif_registry_commit_clear(udif_registry_commit *commit)
Clear a registry commitment record.
Definition registry.c:807
UDIF_EXPORT_API udif_errors udif_registry_transfer_object(udif_registry_state *origin, udif_registry_state *dest, const udif_transfer_record *transfer)
Move an object leaf from one owner registry to another.
Definition registry.c:239
UDIF_EXPORT_API udif_errors udif_registry_add_object(udif_registry_state *reg, const udif_object *obj)
Add an object to the registry.
Definition registry.c:295
UDIF_EXPORT_API udif_errors udif_registry_get_digest_at(uint8_t *digest, const udif_registry_state *reg, size_t index)
Get registry leaf digest at index.
Definition registry.c:587
UDIF_EXPORT_API bool udif_registry_commit_verify(const udif_registry_commit *commit, const uint8_t *verkey)
Verify a registry commitment signature.
Definition registry.c:947
UDIF_EXPORT_API bool udif_registry_verify_proof(const uint8_t *proof, size_t prooflen, const uint8_t *root, const uint8_t *objdigest)
Verify membership proof.
Definition registry.c:752
Merkle proof node structure.
Definition registry.h:124
uint8_t hash[UDIF_CRYPTO_HASH_SIZE]
Definition registry.h:125
bool isleft
Definition registry.h:126
UDIF object container.
Definition object.h:147
Signed canonical registry root commitment.
Definition registry.h:111
uint8_t ownerser[UDIF_SERIAL_NUMBER_SIZE]
Definition registry.h:113
uint64_t timestamp
Definition registry.h:116
uint8_t signature[UDIF_SIGNED_HASH_SIZE]
Definition registry.h:112
uint64_t epoch
Definition registry.h:115
uint8_t regroot[UDIF_CRYPTO_HASH_SIZE]
Definition registry.h:114
Canonical UDIF registry leaf.
Definition registry.h:152
uint8_t objserial[UDIF_OBJECT_SERIAL_SIZE]
Definition registry.h:155
uint64_t timestamp
Definition registry.h:156
uint8_t objdigest[UDIF_CRYPTO_HASH_SIZE]
Definition registry.h:153
uint32_t flags
Definition registry.h:157
uint8_t ownerdigest[UDIF_CRYPTO_HASH_SIZE]
Definition registry.h:154
User Agent object registry.
Definition registry.h:169
uint8_t ownerser[UDIF_SERIAL_NUMBER_SIZE]
Definition registry.h:170
qsc_keccak_state mstate
Definition registry.h:172
size_t objcount
Definition registry.h:174
uint8_t ownerdigest[UDIF_CRYPTO_HASH_SIZE]
Definition registry.h:171
size_t capacity
Definition registry.h:175
udif_registry_leaf * leaves
Definition registry.h:173
bool initialized
Definition registry.h:176
Object transfer record.
Definition object.h:166
UDIF Common Definitions and Protocol Configuration.
#define UDIF_SERIAL_NUMBER_SIZE
The certificate serial number field length.
Definition udif.h:546
#define UDIF_SIGNED_HASH_SIZE
The combined size of a signature and hash.
Definition udif.h:568
#define UDIF_OBJECT_SERIAL_SIZE
The object serial number field length in bytes.
Definition udif.h:525
#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:1210
#define UDIF_EXPORT_API
The api export prefix.
Definition udifcommon.h:101