UDIF: Universal Digital Identification Framework 1.1.0.0a (A1)
A quantum-secure cryptographic identification
capability.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_CAPABILITY_H
53#define UDIF_CAPABILITY_H
54
55#include "udif.h"
56
72
81#define UDIF_CAP_QUERY_EXIST (UINT64_C(1) << 0)
82
90#define UDIF_CAP_QUERY_OWNER_BINDING (UINT64_C(1) << 1)
91
100#define UDIF_CAP_QUERY_ATTR_BUCKET (UINT64_C(1) << 2)
101
109#define UDIF_CAP_PROVE_MEMBERSHIP (UINT64_C(1) << 3)
110
118#define UDIF_CAP_FORWARD_QUERY (UINT64_C(1) << 4)
119
127#define UDIF_CAP_ADMIN_ENROLL (UINT64_C(1) << 5)
128
136#define UDIF_CAP_ADMIN_SUSPEND (UINT64_C(1) << 6)
137
145#define UDIF_CAP_ADMIN_RESUME (UINT64_C(1) << 7)
146
154#define UDIF_CAP_ADMIN_REVOKE (UINT64_C(1) << 8)
155
163#define UDIF_CAP_ADMIN_BRANCH_CREATE (UINT64_C(1) << 9)
164
172#define UDIF_CAP_ADMIN_BRANCH_RETIRE (UINT64_C(1) << 10)
173
181#define UDIF_CAP_REGISTRY_COMMIT (UINT64_C(1) << 11)
182
191#define UDIF_CAP_TX_CREATE (UINT64_C(1) << 12)
192
200#define UDIF_CAP_TX_ACCEPT (UINT64_C(1) << 13)
201
209#define UDIF_CAP_LOG_ANCHOR_SEND (UINT64_C(1) << 14)
210
218#define UDIF_CAP_LOG_ANCHOR_VERIFY (UINT64_C(1) << 15)
219
227#define UDIF_CAP_TREATY_NEGOTIATE (UINT64_C(1) << 16)
228
236#define UDIF_CAP_TREATY_QUERY_EXEC (UINT64_C(1) << 17)
237
245#define UDIF_CAP_TREATY_QUERY_ORIGIN (UINT64_C(1) << 18)
246
255#define UDIF_CAP_TELEMETRY_EXPORT (UINT64_C(1) << 19)
256
264#define UDIF_CAP_ERROR_REPORT (UINT64_C(1) << 20)
265
274#define UDIF_CAP_RESERVED_FUTURE_CORE_MASK (UINT64_C(0x00000000FFE00000))
275
284#define UDIF_CAP_RESERVED_PROFILE_MASK (UINT64_C(0xFFFFFFFF00000000))
285
290#define UDIF_CAP_QUERY_MASK \
291 (UDIF_CAP_QUERY_EXIST | \
292 UDIF_CAP_QUERY_OWNER_BINDING | \
293 UDIF_CAP_QUERY_ATTR_BUCKET | \
294 UDIF_CAP_PROVE_MEMBERSHIP)
295
300#define UDIF_CAP_ADMIN_MASK \
301 (UDIF_CAP_ADMIN_ENROLL | \
302 UDIF_CAP_ADMIN_SUSPEND | \
303 UDIF_CAP_ADMIN_RESUME | \
304 UDIF_CAP_ADMIN_REVOKE | \
305 UDIF_CAP_ADMIN_BRANCH_CREATE | \
306 UDIF_CAP_ADMIN_BRANCH_RETIRE)
307
312#define UDIF_CAP_TRANSACTION_MASK \
313 (UDIF_CAP_REGISTRY_COMMIT | \
314 UDIF_CAP_TX_CREATE | \
315 UDIF_CAP_TX_ACCEPT)
316
321#define UDIF_CAP_ANCHOR_MASK \
322 (UDIF_CAP_LOG_ANCHOR_SEND | \
323 UDIF_CAP_LOG_ANCHOR_VERIFY)
324
329#define UDIF_CAP_TREATY_MASK \
330 (UDIF_CAP_TREATY_NEGOTIATE | \
331 UDIF_CAP_TREATY_QUERY_EXEC | \
332 UDIF_CAP_TREATY_QUERY_ORIGIN)
333
338#define UDIF_CAP_AUDIT_MASK \
339 (UDIF_CAP_TELEMETRY_EXPORT | \
340 UDIF_CAP_ERROR_REPORT)
341
342
361#define UDIF_ROOT_CAPABILITIES \
362 (UDIF_CAP_ADMIN_ENROLL | \
363 UDIF_CAP_ADMIN_SUSPEND | \
364 UDIF_CAP_ADMIN_RESUME | \
365 UDIF_CAP_ADMIN_REVOKE | \
366 UDIF_CAP_ADMIN_BRANCH_CREATE | \
367 UDIF_CAP_ADMIN_BRANCH_RETIRE | \
368 UDIF_CAP_LOG_ANCHOR_VERIFY)
369
389#define UDIF_BC_CAPABILITIES \
390 (UDIF_CAP_FORWARD_QUERY | \
391 UDIF_CAP_ADMIN_ENROLL | \
392 UDIF_CAP_ADMIN_SUSPEND | \
393 UDIF_CAP_ADMIN_RESUME | \
394 UDIF_CAP_ADMIN_REVOKE | \
395 UDIF_CAP_ADMIN_BRANCH_CREATE | \
396 UDIF_CAP_ADMIN_BRANCH_RETIRE | \
397 UDIF_CAP_LOG_ANCHOR_SEND | \
398 UDIF_CAP_LOG_ANCHOR_VERIFY | \
399 UDIF_CAP_TELEMETRY_EXPORT | \
400 UDIF_CAP_ERROR_REPORT)
401
423#define UDIF_GC_CAPABILITIES \
424 (UDIF_CAP_FORWARD_QUERY | \
425 UDIF_CAP_ADMIN_ENROLL | \
426 UDIF_CAP_ADMIN_SUSPEND | \
427 UDIF_CAP_ADMIN_RESUME | \
428 UDIF_CAP_ADMIN_REVOKE | \
429 UDIF_CAP_REGISTRY_COMMIT | \
430 UDIF_CAP_LOG_ANCHOR_SEND | \
431 UDIF_CAP_TELEMETRY_EXPORT | \
432 UDIF_CAP_ERROR_REPORT)
433
452#define UDIF_CLIENT_CAPABILITIES \
453 (UDIF_CAP_QUERY_EXIST | \
454 UDIF_CAP_QUERY_OWNER_BINDING | \
455 UDIF_CAP_QUERY_ATTR_BUCKET | \
456 UDIF_CAP_PROVE_MEMBERSHIP | \
457 UDIF_CAP_REGISTRY_COMMIT | \
458 UDIF_CAP_TX_CREATE | \
459 UDIF_CAP_TX_ACCEPT | \
460 UDIF_CAP_ERROR_REPORT)
461
468#define UDIF_CAP_CORE_DEFINED_MASK \
469 (UDIF_CAP_QUERY_EXIST | \
470 UDIF_CAP_QUERY_OWNER_BINDING | \
471 UDIF_CAP_QUERY_ATTR_BUCKET | \
472 UDIF_CAP_PROVE_MEMBERSHIP | \
473 UDIF_CAP_FORWARD_QUERY | \
474 UDIF_CAP_ADMIN_ENROLL | \
475 UDIF_CAP_ADMIN_SUSPEND | \
476 UDIF_CAP_ADMIN_RESUME | \
477 UDIF_CAP_ADMIN_REVOKE | \
478 UDIF_CAP_ADMIN_BRANCH_CREATE | \
479 UDIF_CAP_ADMIN_BRANCH_RETIRE | \
480 UDIF_CAP_REGISTRY_COMMIT | \
481 UDIF_CAP_TX_CREATE | \
482 UDIF_CAP_TX_ACCEPT | \
483 UDIF_CAP_LOG_ANCHOR_SEND | \
484 UDIF_CAP_LOG_ANCHOR_VERIFY | \
485 UDIF_CAP_TREATY_NEGOTIATE | \
486 UDIF_CAP_TREATY_QUERY_EXEC | \
487 UDIF_CAP_TREATY_QUERY_ORIGIN | \
488 UDIF_CAP_TELEMETRY_EXPORT | \
489 UDIF_CAP_ERROR_REPORT)
490
499#define UDIF_TREATY_ORIGIN_CAPABILITIES (UDIF_CAP_FORWARD_QUERY | UDIF_CAP_TREATY_QUERY_ORIGIN)
500
509#define UDIF_TREATY_EXEC_CAPABILITIES (UDIF_CAP_TREATY_QUERY_EXEC)
510
519#define UDIF_TREATY_ADMIN_CAPABILITIES (UDIF_CAP_TREATY_NEGOTIATE)
520
528#define UDIF_CAP_NONE (UINT64_C(0))
529
537#define UDIF_CAP_ALL_CORE (UDIF_CAP_CORE_DEFINED_MASK)
538
542#define UDIF_CAPABILITY_POLICY_SIZE 8U
543
547#define UDIF_CAPABILITY_ENCODED_SIZE (UDIF_CRYPTO_HASH_SIZE + \
548 UDIF_CRYPTO_MAC_SIZE + \
549 UDIF_SERIAL_NUMBER_SIZE + \
550 UDIF_SERIAL_NUMBER_SIZE + \
551 UDIF_CAPABILITY_BITMAP_SIZE + \
552 UDIF_VALID_TIME_SIZE + \
553 UDIF_CAPABILITY_BITMAP_SIZE + \
554 UDIF_CAPABILITY_POLICY_SIZE)
555
559#define UDIF_CAPABILITY_SIGNED_SIZE (UDIF_SERIAL_NUMBER_SIZE + \
560 UDIF_SERIAL_NUMBER_SIZE + \
561 UDIF_CAPABILITY_BITMAP_SIZE + \
562 UDIF_VALID_TIME_SIZE + \
563 UDIF_CAPABILITY_BITMAP_SIZE + \
564 UDIF_CAPABILITY_POLICY_SIZE)
565
584
585
587
588static const char UDIF_CAPABILITY_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
589{
590 "No error",
591 "Capability denied by policy",
592 "Empty capability mask",
593 "Conflicting capability bits"
594};
595
597
614
643
654
663#define UDIF_CAPABILITY_ALL UINT64_C(0x00000000001FFFFF)
664
675UDIF_EXPORT_API bool udif_capability_allows_scope(const udif_capability* capability, uint32_t scope);
676
687UDIF_EXPORT_API bool udif_capability_allows_verb(const udif_capability* capability, uint32_t verb);
688
697
714UDIF_EXPORT_API udif_errors udif_capability_create(udif_capability* capability, uint32_t verbsbitmap, uint32_t scopebitmap, const uint8_t* issuedto,
715 const uint8_t* issuedby, uint64_t validto, uint32_t policy, const uint8_t* issuerkey);
716
728
740UDIF_EXPORT_API udif_errors udif_capability_deserialize(udif_capability* capability, const uint8_t* input, size_t inplen);
741
754UDIF_EXPORT_API bool udif_capability_grants_permission(const udif_capability* capability, uint32_t verb, uint32_t scope, uint64_t ctime);
755
766UDIF_EXPORT_API bool udif_capability_is_expired(const udif_capability* capability, uint64_t ctime);
767
779UDIF_EXPORT_API udif_errors udif_capability_serialize(uint8_t* output, size_t outlen, const udif_capability* capability);
780
791UDIF_EXPORT_API bool udif_capability_verify(const udif_capability* capability, const uint8_t* issuerkey);
792
793#endif
udif_capability_id
Canonical capability identifiers (bit positions map to the mask).
Definition capability.h:603
@ udif_capability_register_issuer
Definition capability.h:608
@ udif_capability_issue_certificate
Definition capability.h:604
@ udif_capability_admin
Definition capability.h:612
@ udif_capability_rotate_keys
Definition capability.h:609
@ udif_capability_revoke_certificate
Definition capability.h:605
@ udif_capability_directory_query
Definition capability.h:610
@ udif_capability_audit_logging_access
Definition capability.h:611
@ udif_capability_issue_token
Definition capability.h:606
@ udif_capability_validate_token
Definition capability.h:607
UDIF_EXPORT_API bool udif_capability_verify(const udif_capability *capability, const uint8_t *issuerkey)
Verify a capability token.
Definition capability.c:251
UDIF_EXPORT_API void udif_capability_clear(udif_capability *capability)
Clear a capability.
Definition capability.c:57
UDIF_EXPORT_API bool udif_capability_is_expired(const udif_capability *capability, uint64_t ctime)
Check if capability is expired.
Definition capability.c:198
UDIF_EXPORT_API udif_errors udif_capability_compute_digest(uint8_t *digest, const udif_capability *capability)
Compute object digest.
Definition capability.c:105
UDIF_EXPORT_API bool udif_capability_allows_verb(const udif_capability *capability, uint32_t verb)
Check if capability allows a verb.
Definition capability.c:41
UDIF_EXPORT_API udif_errors udif_capability_serialize(uint8_t *output, size_t outlen, const udif_capability *capability)
Serialize a capability.
Definition capability.c:214
UDIF_EXPORT_API bool udif_capability_allows_scope(const udif_capability *capability, uint32_t scope)
Check if capability allows a scope.
Definition capability.c:25
UDIF_EXPORT_API udif_errors udif_capability_deserialize(udif_capability *capability, const uint8_t *input, size_t inplen)
Deserialize a capability.
Definition capability.c:136
UDIF_EXPORT_API udif_errors udif_capability_create(udif_capability *capability, uint32_t verbsbitmap, uint32_t scopebitmap, const uint8_t *issuedto, const uint8_t *issuedby, uint64_t validto, uint32_t policy, const uint8_t *issuerkey)
Create a capability token.
Definition capability.c:65
UDIF_EXPORT_API bool udif_capability_grants_permission(const udif_capability *capability, uint32_t verb, uint32_t scope, uint64_t ctime)
Check if capability grants permission.
Definition capability.c:173
udif_capability_verbs
Capability permission verbs (bit positions)
Definition capability.h:620
@ udif_capability_prove_membership
Definition capability.h:624
@ udif_capability_admin_resume
Definition capability.h:628
@ udif_capability_treaty_query_exec
Definition capability.h:638
@ udif_capability_error_report
Definition capability.h:641
@ udif_capability_logging_anchor_send
Definition capability.h:635
@ udif_capability_tx_accept
Definition capability.h:634
@ udif_capability_telemetry_export
Definition capability.h:640
@ udif_capability_admin_branch_create
Definition capability.h:630
@ udif_capability_treaty_negotiate
Definition capability.h:637
@ udif_capability_tx_create
Definition capability.h:633
@ udif_capability_admin_branch_retire
Definition capability.h:631
@ udif_capability_query_owner_binding
Definition capability.h:622
@ udif_capability_registry_commit
Definition capability.h:632
@ udif_capability_treaty_query_origin
Definition capability.h:639
@ udif_capability_query_attr_bucket
Definition capability.h:623
@ udif_capability_admin_revoke
Definition capability.h:629
@ udif_capability_admin_enroll
Definition capability.h:626
@ udif_capability_forward_query
Definition capability.h:625
@ udif_capability_logging_anchor_verify
Definition capability.h:636
@ udif_capability_admin_suspend
Definition capability.h:627
@ udif_capability_query_exist
Definition capability.h:621
udif_capability_scopes
Capability scope flags.
Definition capability.h:649
@ udif_scope_intra_domain
Definition capability.h:651
@ udif_scope_local
Definition capability.h:650
@ udif_scope_treaty
Definition capability.h:652
Capability token.
Definition capability.h:574
uint8_t digest[UDIF_CRYPTO_HASH_SIZE]
Definition capability.h:575
uint64_t verbsbitmap
Definition capability.h:581
uint64_t policy
Definition capability.h:582
uint8_t issuedby[UDIF_SERIAL_NUMBER_SIZE]
Definition capability.h:577
uint8_t issuedto[UDIF_SERIAL_NUMBER_SIZE]
Definition capability.h:578
uint64_t scopebitmap
Definition capability.h:579
uint64_t validto
Definition capability.h:580
uint8_t tag[UDIF_CRYPTO_MAC_SIZE]
Definition capability.h:576
UDIF Common Definitions and Protocol Configuration.
#define UDIF_SERIAL_NUMBER_SIZE
The certificate serial number field length.
Definition udif.h:546
#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_CRYPTO_MAC_SIZE
The MAC function output byte size.
Definition udif.h:452
#define UDIF_EXPORT_API
The api export prefix.
Definition udifcommon.h:101