UDIF: Universal Digital Identification Framework 1.0.0.0a (A1)
A quantum-secure cryptographic identification
object.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_OBJECT_H
53#define UDIF_OBJECT_H
54
55#include "udif.h"
56
79
84#define UDIF_OBJECT_FLAG_DESTROYED 0x01U
85
89#define UDIF_OBJECT_FLAG_SIZE 4U
90
94#define UDIF_OBJECT_TYPE_SIZE 4U
95
99#define UDIF_OBJECT_ENCODED_SIZE (UDIF_SIGNED_HASH_SIZE + \
100 UDIF_SERIAL_NUMBER_SIZE + \
101 UDIF_CRYPTO_HASH_SIZE + \
102 UDIF_SERIAL_NUMBER_SIZE + \
103 UDIF_SERIAL_NUMBER_SIZE + \
104 UDIF_VALID_TIME_STRUCTURE_SIZE + \
105 UDIF_OBJECT_FLAG_SIZE + \
106 UDIF_OBJECT_TYPE_SIZE)
107
111#define UDIF_OBJECT_SIGNING_SIZE (UDIF_SERIAL_NUMBER_SIZE + \
112 UDIF_CRYPTO_HASH_SIZE + \
113 UDIF_SERIAL_NUMBER_SIZE + \
114 UDIF_SERIAL_NUMBER_SIZE + \
115 UDIF_VALID_TIME_STRUCTURE_SIZE + \
116 UDIF_OBJECT_FLAG_SIZE + \
117 UDIF_OBJECT_TYPE_SIZE)
118
122#define UDIF_OBJECT_TRANSFER_SIZE (UDIF_SERIAL_NUMBER_SIZE + \
123 UDIF_SERIAL_NUMBER_SIZE + \
124 UDIF_SERIAL_NUMBER_SIZE + \
125 UDIF_VALID_TIME_SIZE)
126
130#define UDIF_TRANSFER_RECORD_ENCODED_SIZE (UDIF_SIGNED_HASH_SIZE + \
131 UDIF_SIGNED_HASH_SIZE + \
132 UDIF_CRYPTO_HASH_SIZE + \
133 UDIF_SERIAL_NUMBER_SIZE + \
134 UDIF_SERIAL_NUMBER_SIZE + \
135 UDIF_SERIAL_NUMBER_SIZE + \
136 UDIF_VALID_TIME_SIZE)
137
138
159
176
185
197
209
221UDIF_EXPORT_API udif_errors udif_object_compute_signature(udif_object* obj, const uint8_t* sigkey, bool (*rng_generate)(uint8_t*, size_t));
222
236UDIF_EXPORT_API udif_errors udif_object_compute_transfer_digest(uint8_t* digest, const uint8_t* objserial, const uint8_t* txid, const uint8_t* toowner, uint64_t timestamp);
237
256UDIF_EXPORT_API udif_errors udif_object_create(udif_object* obj, const uint8_t* serial, uint32_t type, const uint8_t* creator, const uint8_t* attrroot,
257 const uint8_t* owner, const uint8_t* sigkey, uint64_t ctime, bool (*rng_generate)(uint8_t*, size_t));
258
270UDIF_EXPORT_API udif_errors udif_object_deserialize(udif_object* obj, const uint8_t* input, size_t inplen);
271
284UDIF_EXPORT_API udif_errors udif_object_destroy(udif_object* obj, const uint8_t* ownersigkey, uint64_t ctime, bool (*rng_generate)(uint8_t*, size_t));
285
296
308UDIF_EXPORT_API udif_errors udif_object_serialize(uint8_t* output, size_t outlen, const udif_object* obj);
309
326UDIF_EXPORT_API udif_errors udif_object_transfer(udif_object* obj, udif_transfer_record* transfer, const uint8_t* newowner, const uint8_t* sendsigkey,
327 const uint8_t* recvsigkey, uint64_t ctime, bool (*rng_generate)(uint8_t*, size_t));
328
342UDIF_EXPORT_API udif_errors udif_object_update_attributes(udif_object* obj, const uint8_t* newattrroot, const uint8_t* ownersigkey, uint64_t ctime,
343 bool (*rng_generate)(uint8_t*, size_t));
344
355UDIF_EXPORT_API bool udif_object_verify(const udif_object* obj, const uint8_t* ownerverkey);
356
365
377UDIF_EXPORT_API udif_errors udif_transfer_deserialize(udif_transfer_record* transfer, const uint8_t* input, size_t inplen);
378
390UDIF_EXPORT_API udif_errors udif_transfer_serialize(uint8_t* output, size_t outlen, const udif_transfer_record* transfer);
391
403UDIF_EXPORT_API bool udif_transfer_verify(const udif_transfer_record* transfer, const uint8_t* senderverkey, const uint8_t* recvverkey);
404
405#endif
UDIF_EXPORT_API udif_errors udif_object_deserialize(udif_object *obj, const uint8_t *input, size_t inplen)
Deserialize an object.
Definition object.c:179
UDIF_EXPORT_API bool udif_object_compare(const udif_object *a, const udif_object *b)
Compare two objects.
Definition object.c:14
UDIF_EXPORT_API void udif_object_clear(udif_object *obj)
Clear an object.
Definition object.c:6
UDIF_EXPORT_API void udif_transfer_clear(udif_transfer_record *transfer)
Clear a transfer record.
Definition object.c:519
UDIF_EXPORT_API bool udif_object_is_destroyed(const udif_object *obj)
Check if object is destroyed.
Definition object.c:262
UDIF_EXPORT_API bool udif_transfer_verify(const udif_transfer_record *transfer, const uint8_t *senderverkey, const uint8_t *recvverkey)
Verify transfer record.
Definition object.c:594
UDIF_EXPORT_API udif_errors udif_object_compute_transfer_digest(uint8_t *digest, const uint8_t *objserial, const uint8_t *txid, const uint8_t *toowner, uint64_t timestamp)
Compute transfer object digest.
Definition object.c:104
UDIF_EXPORT_API udif_errors udif_transfer_serialize(uint8_t *output, size_t outlen, const udif_transfer_record *transfer)
Serialize a transfer record.
Definition object.c:560
UDIF_EXPORT_API udif_errors udif_object_destroy(udif_object *obj, const uint8_t *ownersigkey, uint64_t ctime, bool(*rng_generate)(uint8_t *, size_t))
Mark object as destroyed.
Definition object.c:217
UDIF_EXPORT_API bool udif_object_verify(const udif_object *obj, const uint8_t *ownerverkey)
Verify object signature.
Definition object.c:485
UDIF_EXPORT_API udif_errors udif_object_compute_signature(udif_object *obj, const uint8_t *sigkey, bool(*rng_generate)(uint8_t *, size_t))
Compute object digest and signature.
Definition object.c:70
UDIF_EXPORT_API udif_errors udif_object_serialize(uint8_t *output, size_t outlen, const udif_object *obj)
Serialize an object.
Definition object.c:278
UDIF_EXPORT_API udif_errors udif_object_compute_digest(uint8_t *digest, const udif_object *obj)
Compute object digest.
Definition object.c:31
UDIF_EXPORT_API udif_errors udif_object_transfer(udif_object *obj, udif_transfer_record *transfer, const uint8_t *newowner, const uint8_t *sendsigkey, const uint8_t *recvsigkey, uint64_t ctime, bool(*rng_generate)(uint8_t *, size_t))
Transfer object ownership.
Definition object.c:316
UDIF_EXPORT_API udif_errors udif_object_create(udif_object *obj, const uint8_t *serial, uint32_t type, const uint8_t *creator, const uint8_t *attrroot, const uint8_t *owner, const uint8_t *sigkey, uint64_t ctime, bool(*rng_generate)(uint8_t *, size_t))
Create a new object.
Definition object.c:142
UDIF_EXPORT_API udif_errors udif_object_update_attributes(udif_object *obj, const uint8_t *newattrroot, const uint8_t *ownersigkey, uint64_t ctime, bool(*rng_generate)(uint8_t *, size_t))
Update object attributes.
Definition object.c:431
UDIF_EXPORT_API udif_errors udif_transfer_deserialize(udif_transfer_record *transfer, const uint8_t *input, size_t inplen)
Deserialize a transfer record.
Definition object.c:527
UDIF object container.
Definition object.h:148
uint8_t attrroot[UDIF_CRYPTO_HASH_SIZE]
Definition object.h:150
uint64_t created
Definition object.h:154
uint32_t flags
Definition object.h:156
uint8_t signature[UDIF_SIGNED_HASH_SIZE]
Definition object.h:149
uint64_t updated
Definition object.h:155
uint8_t creator[UDIF_SERIAL_NUMBER_SIZE]
Definition object.h:152
uint8_t owner[UDIF_SERIAL_NUMBER_SIZE]
Definition object.h:153
uint32_t type
Definition object.h:157
uint8_t serial[UDIF_SERIAL_NUMBER_SIZE]
Definition object.h:151
Object transfer record.
Definition object.h:167
uint8_t receiver[UDIF_SIGNED_HASH_SIZE]
Definition object.h:169
uint8_t sender[UDIF_SIGNED_HASH_SIZE]
Definition object.h:168
uint8_t txid[UDIF_CRYPTO_HASH_SIZE]
Definition object.h:170
uint64_t timestamp
Definition object.h:174
uint8_t owner[UDIF_SERIAL_NUMBER_SIZE]
Definition object.h:173
uint8_t serial[UDIF_SERIAL_NUMBER_SIZE]
Definition object.h:171
uint8_t originator[UDIF_SERIAL_NUMBER_SIZE]
Definition object.h:172
UDIF Common Definitions and Protocol Configuration.
#define UDIF_SERIAL_NUMBER_SIZE
The serial number field length.
Definition udif.h:519
#define UDIF_SIGNED_HASH_SIZE
The combined size of a signature and hash.
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:628
#define UDIF_EXPORT_API
The api export prefix.
Definition udifcommon.h:103