UDIF: Universal Digital Identification Framework 1.0.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
76#define UDIF_CAPABILITY_POLICY_SIZE 4U
77
81#define UDIF_CAPABILITY_ENCODED_SIZE (UDIF_CRYPTO_HASH_SIZE + \
82 UDIF_CRYPTO_MAC_SIZE + \
83 UDIF_SERIAL_NUMBER_SIZE + \
84 UDIF_SERIAL_NUMBER_SIZE + \
85 UDIF_CAPABILITY_BITMAP_SIZE + \
86 UDIF_VALID_TIME_SIZE + \
87 UDIF_CAPABILITY_BITMAP_SIZE + \
88 UDIF_CAPABILITY_POLICY_SIZE)
89
93#define UDIF_CAPABILITY_SIGNED_SIZE (UDIF_SERIAL_NUMBER_SIZE + \
94 UDIF_SERIAL_NUMBER_SIZE + \
95 UDIF_CAPABILITY_BITMAP_SIZE + \
96 UDIF_VALID_TIME_SIZE + \
97 UDIF_CAPABILITY_BITMAP_SIZE + \
98 UDIF_CAPABILITY_POLICY_SIZE)
99
118
119
121
122static const char UDIF_CAPABILITY_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
123{
124 "No error",
125 "Capability denied by policy",
126 "Empty capability mask",
127 "Conflicting capability bits"
128};
129
131
148
177
188
199UDIF_EXPORT_API bool udif_capability_allows_scope(const udif_capability* capability, uint32_t scope);
200
211UDIF_EXPORT_API bool udif_capability_allows_verb(const udif_capability* capability, uint32_t verb);
212
221
238UDIF_EXPORT_API udif_errors udif_capability_create(udif_capability* capability, uint32_t verbsbitmap, uint32_t scopebitmap, const uint8_t* issuedto,
239 const uint8_t* issuedby, uint64_t validto, uint32_t policy, const uint8_t* issuerkey);
240
252
264UDIF_EXPORT_API udif_errors udif_capability_deserialize(udif_capability* capability, const uint8_t* input, size_t inplen);
265
278UDIF_EXPORT_API bool udif_capability_grants_permission(const udif_capability* capability, uint32_t verb, uint32_t scope, uint64_t ctime);
279
290UDIF_EXPORT_API bool udif_capability_is_expired(const udif_capability* capability, uint64_t ctime);
291
303UDIF_EXPORT_API udif_errors udif_capability_serialize(uint8_t* output, size_t outlen, const udif_capability* capability);
304
315UDIF_EXPORT_API bool udif_capability_verify(const udif_capability* capability, const uint8_t* issuerkey);
316
317#endif
udif_capability_id
Canonical capability identifiers (bit positions map to the mask).
Definition capability.h:137
@ udif_capability_register_issuer
Definition capability.h:142
@ udif_capability_issue_certificate
Definition capability.h:138
@ udif_capability_admin
Definition capability.h:146
@ udif_capability_rotate_keys
Definition capability.h:143
@ udif_capability_revoke_certificate
Definition capability.h:139
@ udif_capability_directory_query
Definition capability.h:144
@ udif_capability_audit_logging_access
Definition capability.h:145
@ udif_capability_issue_token
Definition capability.h:140
@ udif_capability_validate_token
Definition capability.h:141
UDIF_EXPORT_API bool udif_capability_verify(const udif_capability *capability, const uint8_t *issuerkey)
Verify a capability token.
Definition capability.c:231
UDIF_EXPORT_API void udif_capability_clear(udif_capability *capability)
Clear a capability.
Definition capability.c:40
UDIF_EXPORT_API bool udif_capability_is_expired(const udif_capability *capability, uint64_t ctime)
Check if capability is expired.
Definition capability.c:178
UDIF_EXPORT_API udif_errors udif_capability_compute_digest(uint8_t *digest, const udif_capability *capability)
Compute object digest.
Definition capability.c:85
UDIF_EXPORT_API bool udif_capability_allows_verb(const udif_capability *capability, uint32_t verb)
Check if capability allows a verb.
Definition capability.c:24
UDIF_EXPORT_API udif_errors udif_capability_serialize(uint8_t *output, size_t outlen, const udif_capability *capability)
Serialize a capability.
Definition capability.c:194
UDIF_EXPORT_API bool udif_capability_allows_scope(const udif_capability *capability, uint32_t scope)
Check if capability allows a scope.
Definition capability.c:8
UDIF_EXPORT_API udif_errors udif_capability_deserialize(udif_capability *capability, const uint8_t *input, size_t inplen)
Deserialize a capability.
Definition capability.c:116
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:48
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:153
udif_capability_verbs
Capability permission verbs (bit positions)
Definition capability.h:154
@ udif_capability_prove_membership
Definition capability.h:158
@ udif_capability_admin_resume
Definition capability.h:162
@ udif_capability_treaty_query_exec
Definition capability.h:172
@ udif_capability_error_report
Definition capability.h:175
@ udif_capability_logging_anchor_send
Definition capability.h:169
@ udif_capability_tx_accept
Definition capability.h:168
@ udif_capability_telemetry_export
Definition capability.h:174
@ udif_capability_admin_branch_create
Definition capability.h:164
@ udif_capability_treaty_negotiate
Definition capability.h:171
@ udif_capability_tx_create
Definition capability.h:167
@ udif_capability_admin_branch_retire
Definition capability.h:165
@ udif_capability_query_owner_binding
Definition capability.h:156
@ udif_capability_registry_commit
Definition capability.h:166
@ udif_capability_treaty_query_origin
Definition capability.h:173
@ udif_capability_query_attr_bucket
Definition capability.h:157
@ udif_capability_admin_revoke
Definition capability.h:163
@ udif_capability_admin_enroll
Definition capability.h:160
@ udif_capability_forward_query
Definition capability.h:159
@ udif_capability_logging_anchor_verify
Definition capability.h:170
@ udif_capability_admin_suspend
Definition capability.h:161
@ udif_capability_query_exist
Definition capability.h:155
udif_capability_scopes
Capability scope flags.
Definition capability.h:183
@ udif_scope_intra_domain
Definition capability.h:185
@ udif_scope_local
Definition capability.h:184
@ udif_scope_treaty
Definition capability.h:186
Capability token.
Definition capability.h:108
uint8_t digest[UDIF_CRYPTO_HASH_SIZE]
Definition capability.h:109
uint64_t verbsbitmap
Definition capability.h:115
uint8_t issuedby[UDIF_SERIAL_NUMBER_SIZE]
Definition capability.h:111
uint8_t issuedto[UDIF_SERIAL_NUMBER_SIZE]
Definition capability.h:112
uint64_t scopebitmap
Definition capability.h:113
uint32_t policy
Definition capability.h:116
uint64_t validto
Definition capability.h:114
uint8_t tag[UDIF_CRYPTO_MAC_SIZE]
Definition capability.h:110
UDIF Common Definitions and Protocol Configuration.
#define UDIF_SERIAL_NUMBER_SIZE
The serial number field length.
Definition udif.h:519
#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_CRYPTO_MAC_SIZE
The MAC function output byte size.
Definition udif.h:452
#define UDIF_EXPORT_API
The api export prefix.
Definition udifcommon.h:103