UDIF: Universal Digital Identification Framework 1.0.0.0a (A1)
A quantum-secure cryptographic identification
query.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_QUERY_H
53#define UDIF_QUERY_H
54
55#include "udif.h"
56#include "capability.h"
57
79
84#define UDIF_QUERY_ID_SIZE 16U
85
90#define UDIF_QUERY_MAX_PREDICATE_SIZE 1024U
91
96#define UDIF_QUERY_MAX_PROOF_SIZE 8192U
97
102#define UDIF_QUERY_PREDICATE_SIZE sizeof(size_t)
103
108#define UDIF_QUERY_PROOF_SIZE sizeof(size_t)
109
114#define UDIF_QUERY_TYPE_SIZE 1U
115
120#define UDIF_QUERY_VERDICT_SIZE 1U
121
126#define UDIF_QUERY_STRUCTURE_SIZE (UDIF_CRYPTO_HASH_SIZE + \
127 UDIF_QUERY_ID_SIZE + \
128 UDIF_SERIAL_NUMBER_SIZE + \
129 UDIF_VALID_TIME_SIZE + \
130 UDIF_QUERY_PREDICATE_SIZE + \
131 UDIF_QUERY_TYPE_SIZE)
132
137#define UDIF_QUERY_RESPONSE_STRUCTURE_SIZE (UDIF_SIGNED_HASH_SIZE + \
138 UDIF_QUERY_ID_SIZE + \
139 UDIF_SERIAL_NUMBER_SIZE + \
140 UDIF_QUERY_VERDICT_SIZE + \
141 UDIF_VALID_TIME_SIZE + \
142 UDIF_QUERY_PROOF_SIZE)
143
155
166
184
201
210
219UDIF_EXPORT_API void udif_query_compute_digest(uint8_t* digest, const udif_query* query);
220
237UDIF_EXPORT_API udif_errors udif_query_create_attr_bucket(udif_query* query, const uint8_t* queryid, const uint8_t* targetser,
238 const uint8_t* serial, uint64_t attrmin, uint64_t attrmax, uint64_t timeanchor, const uint8_t* capability);
239
254UDIF_EXPORT_API udif_errors udif_query_create_existence(udif_query* query, const uint8_t* queryid, const uint8_t* targetser,
255 const uint8_t* serial, uint64_t timeanchor, const uint8_t* capability);
256
271UDIF_EXPORT_API udif_errors udif_query_create_membership_proof(udif_query* query, const uint8_t* queryid, const uint8_t* targetser,
272 const uint8_t* serial, uint64_t timeanchor, const uint8_t* capability);
273
289UDIF_EXPORT_API udif_errors udif_query_create_owner_binding(udif_query* query, const uint8_t* queryid, const uint8_t* targetser,
290 const uint8_t* serial, const uint8_t* ownerser, uint64_t time_anchor, const uint8_t* capability);
291
309UDIF_EXPORT_API udif_errors udif_query_create_response(udif_query_response* response, const udif_query* query, uint8_t verdict, const uint8_t* proofdata,
310 size_t prooflen, const uint8_t* respser, const uint8_t* respsigkey, uint64_t ctime, bool (*rng_generate)(uint8_t*, size_t));
311
323UDIF_EXPORT_API udif_errors udif_query_deserialize(udif_query* query, const uint8_t* input, size_t inplen);
324
336UDIF_EXPORT_API udif_errors udif_query_serialize(uint8_t* output, size_t* outlen, const udif_query* query);
337
348UDIF_EXPORT_API bool udif_query_is_fresh(const udif_query* query, uint64_t ctime);
349
358
368UDIF_EXPORT_API void udif_query_response_compute_digest(uint8_t* digest, const udif_query_response* response, const uint8_t* queryid);
369
381UDIF_EXPORT_API udif_errors udif_query_response_deserialize(udif_query_response* response, const uint8_t* input, size_t inplen);
382
394UDIF_EXPORT_API udif_errors udif_query_response_serialize(uint8_t* output, size_t* outlen, const udif_query_response* response);
395
407UDIF_EXPORT_API bool udif_query_validate_authorization(const udif_query* query, const udif_capability* capability, const uint8_t* targser);
408
420UDIF_EXPORT_API bool udif_query_verify_response(const udif_query_response* response, const udif_query* query, const uint8_t* respverkey);
421
422#endif
UDIF capability token management.
UDIF_EXPORT_API udif_errors udif_query_create_existence(udif_query *query, const uint8_t *queryid, const uint8_t *targetser, const uint8_t *serial, uint64_t timeanchor, const uint8_t *capability)
Create an existence query.
Definition query.c:103
UDIF_EXPORT_API udif_errors udif_query_create_response(udif_query_response *response, const udif_query *query, uint8_t verdict, const uint8_t *proofdata, size_t prooflen, const uint8_t *respser, const uint8_t *respsigkey, uint64_t ctime, bool(*rng_generate)(uint8_t *, size_t))
Create a query response.
Definition query.c:235
UDIF_EXPORT_API udif_errors udif_query_create_owner_binding(udif_query *query, const uint8_t *queryid, const uint8_t *targetser, const uint8_t *serial, const uint8_t *ownerser, uint64_t time_anchor, const uint8_t *capability)
Create an owner binding query.
Definition query.c:187
UDIF_EXPORT_API bool udif_query_validate_authorization(const udif_query *query, const udif_capability *capability, const uint8_t *targser)
Validate query authorization.
Definition query.c:619
UDIF_EXPORT_API udif_errors udif_query_create_membership_proof(udif_query *query, const uint8_t *queryid, const uint8_t *targetser, const uint8_t *serial, uint64_t timeanchor, const uint8_t *capability)
Create a membership proof query.
Definition query.c:145
UDIF_EXPORT_API udif_errors udif_query_response_serialize(uint8_t *output, size_t *outlen, const udif_query_response *response)
Serialize a query response.
Definition query.c:564
UDIF_EXPORT_API void udif_query_response_clear(udif_query_response *response)
Clear a query response.
Definition query.c:605
UDIF_EXPORT_API udif_errors udif_query_response_deserialize(udif_query_response *response, const uint8_t *input, size_t inplen)
Deserialize a query response.
Definition query.c:505
udif_query_types
Query predicate types.
Definition query.h:149
@ udif_query_attr_bucket
Definition query.h:152
@ udif_query_owner_binding
Definition query.h:151
@ udif_query_membership_proof
Definition query.h:153
@ udif_query_exist
Definition query.h:150
UDIF_EXPORT_API void udif_query_compute_digest(uint8_t *digest, const udif_query *query)
Compute query digest.
Definition query.c:22
UDIF_EXPORT_API void udif_query_response_compute_digest(uint8_t *digest, const udif_query_response *response, const uint8_t *queryid)
Compute response digest.
Definition query.c:473
UDIF_EXPORT_API bool udif_query_is_fresh(const udif_query *query, uint64_t ctime)
Check if query is fresh.
Definition query.c:443
UDIF_EXPORT_API udif_errors udif_query_create_attr_bucket(udif_query *query, const uint8_t *queryid, const uint8_t *targetser, const uint8_t *serial, uint64_t attrmin, uint64_t attrmax, uint64_t timeanchor, const uint8_t *capability)
Create an attribute bucket query.
Definition query.c:54
UDIF_EXPORT_API void udif_query_clear(udif_query *query)
Clear a query.
Definition query.c:8
UDIF_EXPORT_API udif_errors udif_query_deserialize(udif_query *query, const uint8_t *input, size_t inplen)
Deserialize a query.
Definition query.c:334
udif_query_verdicts
Query response verdicts.
Definition query.h:161
@ udif_verdict_no
Definition query.h:162
@ udif_verdict_yes
Definition query.h:163
@ udif_verdict_deny
Definition query.h:164
#define UDIF_QUERY_ID_SIZE
The query id size.
Definition query.h:84
UDIF_EXPORT_API udif_errors udif_query_serialize(uint8_t *output, size_t *outlen, const udif_query *query)
Serialize a query.
Definition query.c:402
UDIF_EXPORT_API bool udif_query_verify_response(const udif_query_response *response, const udif_query *query, const uint8_t *respverkey)
Verify a query response.
Definition query.c:655
Capability token.
Definition capability.h:108
Query response.
Definition query.h:192
uint8_t verdict
Definition query.h:196
uint64_t timestamp
Definition query.h:197
uint8_t queryid[UDIF_QUERY_ID_SIZE]
Definition query.h:194
uint8_t signature[UDIF_SIGNED_HASH_SIZE]
Definition query.h:193
uint8_t respser[UDIF_SERIAL_NUMBER_SIZE]
Definition query.h:195
uint8_t * proof
Definition query.h:199
size_t prooflen
Definition query.h:198
Query request.
Definition query.h:175
uint8_t targser[UDIF_SERIAL_NUMBER_SIZE]
Definition query.h:178
uint8_t querytype
Definition query.h:181
uint8_t queryid[UDIF_QUERY_ID_SIZE]
Definition query.h:177
size_t predlen
Definition query.h:180
uint8_t * predicate
Definition query.h:182
uint8_t capabilityref[UDIF_CRYPTO_HASH_SIZE]
Definition query.h:176
uint64_t timeanchor
Definition query.h:179
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