UDIF: Universal Digital Identification Framework 1.1.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#include "registry.h"
58
80
85#define UDIF_QUERY_MAX_PREDICATE_SIZE 1024U
86
91#define UDIF_QUERY_MAX_PROOF_SIZE 8192U
92
97#define UDIF_QUERY_PREDICATE_SIZE sizeof(size_t)
98
103#define UDIF_QUERY_PROOF_SIZE sizeof(size_t)
104
109#define UDIF_QUERY_TYPE_SIZE 1U
110
115#define UDIF_QUERY_VERDICT_SIZE 1U
116
121#define UDIF_QUERY_STRUCTURE_SIZE (UDIF_CRYPTO_HASH_SIZE + \
122 UDIF_QUERY_ID_SIZE + \
123 UDIF_SERIAL_NUMBER_SIZE + \
124 UDIF_VALID_TIME_SIZE + \
125 UDIF_QUERY_PREDICATE_SIZE + \
126 UDIF_QUERY_TYPE_SIZE)
127
132#define UDIF_QUERY_RESPONSE_STRUCTURE_SIZE (UDIF_SIGNED_HASH_SIZE + \
133 UDIF_QUERY_ID_SIZE + \
134 UDIF_CRYPTO_HASH_SIZE + \
135 UDIF_SERIAL_NUMBER_SIZE + \
136 UDIF_QUERY_VERDICT_SIZE + \
137 UDIF_VALID_TIME_SIZE + \
138 UDIF_QUERY_PROOF_SIZE)
139
151
162
180
198
207
216UDIF_EXPORT_API void udif_query_compute_digest(uint8_t* digest, const udif_query* query);
217
234UDIF_EXPORT_API udif_errors udif_query_create_attr_bucket(udif_query* query, const uint8_t* queryid, const uint8_t* targetser,
235 const uint8_t* serial, uint64_t attrmin, uint64_t attrmax, uint64_t timeanchor, const uint8_t* capability);
236
251UDIF_EXPORT_API udif_errors udif_query_create_existence(udif_query* query, const uint8_t* queryid, const uint8_t* targetser,
252 const uint8_t* serial, uint64_t timeanchor, const uint8_t* capability);
253
268UDIF_EXPORT_API udif_errors udif_query_create_membership_proof(udif_query* query, const uint8_t* queryid, const uint8_t* targetser,
269 const uint8_t* serial, uint64_t timeanchor, const uint8_t* capability);
270
286UDIF_EXPORT_API udif_errors udif_query_create_owner_binding(udif_query* query, const uint8_t* queryid, const uint8_t* targetser,
287 const uint8_t* serial, const uint8_t* ownerser, uint64_t time_anchor, const uint8_t* capability);
288
306UDIF_EXPORT_API udif_errors udif_query_create_response(udif_query_response* response, const udif_query* query, uint8_t verdict, const uint8_t* proofdata,
307 size_t prooflen, const uint8_t* respser, const uint8_t* respsigkey, uint64_t ctime, bool (*rng_generate)(uint8_t*, size_t));
308
320UDIF_EXPORT_API udif_errors udif_query_deserialize(udif_query* query, const uint8_t* input, size_t inplen);
321
333UDIF_EXPORT_API udif_errors udif_query_serialize(uint8_t* output, size_t* outlen, const udif_query* query);
334
345UDIF_EXPORT_API bool udif_query_is_fresh(const udif_query* query, uint64_t ctime);
346
355
365UDIF_EXPORT_API void udif_query_response_compute_digest(uint8_t* digest, const udif_query_response* response, const udif_query* query);
366
375UDIF_EXPORT_API bool udif_query_verify_response_signature(const udif_query_response* response, const uint8_t* respverkey);
376
388UDIF_EXPORT_API udif_errors udif_query_response_deserialize(udif_query_response* response, const uint8_t* input, size_t inplen);
389
401UDIF_EXPORT_API udif_errors udif_query_response_serialize(uint8_t* output, size_t* outlen, const udif_query_response* response);
402
414UDIF_EXPORT_API bool udif_query_validate_authorization(const udif_query* query, const udif_capability* capability, const uint8_t* targser);
415
416
429
449UDIF_EXPORT_API udif_errors udif_query_evaluate_registry(uint8_t* verdict, uint8_t* proof, size_t* prooflen, const udif_query* query,
450 const udif_registry_state* registry, const udif_capability* capability, const uint8_t* subjectser, uint64_t ctime);
451
463UDIF_EXPORT_API bool udif_query_verify_response(const udif_query_response* response, const udif_query* query, const uint8_t* respverkey);
464
465#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:118
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:247
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:200
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:831
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:159
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:599
UDIF_EXPORT_API void udif_query_response_clear(udif_query_response *response)
Clear a query response.
Definition query.c:651
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:533
udif_query_types
Query predicate types.
Definition query.h:145
@ udif_query_attr_bucket
Definition query.h:148
@ udif_query_owner_binding
Definition query.h:147
@ udif_query_membership_proof
Definition query.h:149
@ udif_query_exist
Definition query.h:146
UDIF_EXPORT_API void udif_query_compute_digest(uint8_t *digest, const udif_query *query)
Compute query digest.
Definition query.c:37
UDIF_EXPORT_API bool udif_query_verify_response_signature(const udif_query_response *response, const uint8_t *respverkey)
Verify a query response signature over the embedded query digest.
Definition query.c:869
UDIF_EXPORT_API void udif_query_response_compute_digest(uint8_t *digest, const udif_query_response *response, const udif_query *query)
Compute response digest.
Definition query.c:500
UDIF_EXPORT_API bool udif_query_is_fresh(const udif_query *query, uint64_t ctime)
Check if query is fresh.
Definition query.c:470
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:69
UDIF_EXPORT_API void udif_query_clear(udif_query *query)
Clear a query.
Definition query.c:23
UDIF_EXPORT_API udif_errors udif_query_deserialize(udif_query *query, const uint8_t *input, size_t inplen)
Deserialize a query.
Definition query.c:349
UDIF_EXPORT_API udif_errors udif_query_evaluate_registry(uint8_t *verdict, uint8_t *proof, size_t *prooflen, const udif_query *query, const udif_registry_state *registry, const udif_capability *capability, const uint8_t *subjectser, uint64_t ctime)
Evaluate a query against a UA registry.
Definition query.c:708
udif_query_verdicts
Query response verdicts.
Definition query.h:157
@ udif_verdict_no
Definition query.h:158
@ udif_verdict_yes
Definition query.h:159
@ udif_verdict_deny
Definition query.h:160
UDIF_EXPORT_API udif_errors udif_query_serialize(uint8_t *output, size_t *outlen, const udif_query *query)
Serialize a query.
Definition query.c:420
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:902
UDIF_EXPORT_API bool udif_query_predicate_is_canonical(const udif_query *query)
Validate the canonical predicate size for a query type.
Definition query.c:668
UDIF object registry management.
Capability token.
Definition capability.h:574
Query response.
Definition query.h:188
uint8_t verdict
Definition query.h:193
uint64_t timestamp
Definition query.h:194
uint8_t queryid[UDIF_QUERY_ID_SIZE]
Definition query.h:190
uint8_t signature[UDIF_SIGNED_HASH_SIZE]
Definition query.h:189
uint8_t respser[UDIF_SERIAL_NUMBER_SIZE]
Definition query.h:192
uint8_t * proof
Definition query.h:196
uint8_t querydigest[UDIF_CRYPTO_HASH_SIZE]
Definition query.h:191
size_t prooflen
Definition query.h:195
Query request.
Definition query.h:171
uint8_t targser[UDIF_SERIAL_NUMBER_SIZE]
Definition query.h:174
uint8_t querytype
Definition query.h:177
uint8_t queryid[UDIF_QUERY_ID_SIZE]
Definition query.h:173
size_t predlen
Definition query.h:176
uint8_t * predicate
Definition query.h:178
uint8_t capabilityref[UDIF_CRYPTO_HASH_SIZE]
Definition query.h:172
uint64_t timeanchor
Definition query.h:175
User Agent object registry.
Definition registry.h:169
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_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_QUERY_ID_SIZE
The query identifier field length in bytes.
Definition udif.h:531
#define UDIF_EXPORT_API
The api export prefix.
Definition udifcommon.h:101