52#ifndef UDIF_CAPABILITY_H
53#define UDIF_CAPABILITY_H
81#define UDIF_CAP_QUERY_EXIST (UINT64_C(1) << 0)
90#define UDIF_CAP_QUERY_OWNER_BINDING (UINT64_C(1) << 1)
100#define UDIF_CAP_QUERY_ATTR_BUCKET (UINT64_C(1) << 2)
109#define UDIF_CAP_PROVE_MEMBERSHIP (UINT64_C(1) << 3)
118#define UDIF_CAP_FORWARD_QUERY (UINT64_C(1) << 4)
127#define UDIF_CAP_ADMIN_ENROLL (UINT64_C(1) << 5)
136#define UDIF_CAP_ADMIN_SUSPEND (UINT64_C(1) << 6)
145#define UDIF_CAP_ADMIN_RESUME (UINT64_C(1) << 7)
154#define UDIF_CAP_ADMIN_REVOKE (UINT64_C(1) << 8)
163#define UDIF_CAP_ADMIN_BRANCH_CREATE (UINT64_C(1) << 9)
172#define UDIF_CAP_ADMIN_BRANCH_RETIRE (UINT64_C(1) << 10)
181#define UDIF_CAP_REGISTRY_COMMIT (UINT64_C(1) << 11)
191#define UDIF_CAP_TX_CREATE (UINT64_C(1) << 12)
200#define UDIF_CAP_TX_ACCEPT (UINT64_C(1) << 13)
209#define UDIF_CAP_LOG_ANCHOR_SEND (UINT64_C(1) << 14)
218#define UDIF_CAP_LOG_ANCHOR_VERIFY (UINT64_C(1) << 15)
227#define UDIF_CAP_TREATY_NEGOTIATE (UINT64_C(1) << 16)
236#define UDIF_CAP_TREATY_QUERY_EXEC (UINT64_C(1) << 17)
245#define UDIF_CAP_TREATY_QUERY_ORIGIN (UINT64_C(1) << 18)
255#define UDIF_CAP_TELEMETRY_EXPORT (UINT64_C(1) << 19)
264#define UDIF_CAP_ERROR_REPORT (UINT64_C(1) << 20)
274#define UDIF_CAP_RESERVED_FUTURE_CORE_MASK (UINT64_C(0x00000000FFE00000))
284#define UDIF_CAP_RESERVED_PROFILE_MASK (UINT64_C(0xFFFFFFFF00000000))
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)
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)
312#define UDIF_CAP_TRANSACTION_MASK \
313 (UDIF_CAP_REGISTRY_COMMIT | \
314 UDIF_CAP_TX_CREATE | \
321#define UDIF_CAP_ANCHOR_MASK \
322 (UDIF_CAP_LOG_ANCHOR_SEND | \
323 UDIF_CAP_LOG_ANCHOR_VERIFY)
329#define UDIF_CAP_TREATY_MASK \
330 (UDIF_CAP_TREATY_NEGOTIATE | \
331 UDIF_CAP_TREATY_QUERY_EXEC | \
332 UDIF_CAP_TREATY_QUERY_ORIGIN)
338#define UDIF_CAP_AUDIT_MASK \
339 (UDIF_CAP_TELEMETRY_EXPORT | \
340 UDIF_CAP_ERROR_REPORT)
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)
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)
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)
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)
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)
499#define UDIF_TREATY_ORIGIN_CAPABILITIES (UDIF_CAP_FORWARD_QUERY | UDIF_CAP_TREATY_QUERY_ORIGIN)
509#define UDIF_TREATY_EXEC_CAPABILITIES (UDIF_CAP_TREATY_QUERY_EXEC)
519#define UDIF_TREATY_ADMIN_CAPABILITIES (UDIF_CAP_TREATY_NEGOTIATE)
528#define UDIF_CAP_NONE (UINT64_C(0))
537#define UDIF_CAP_ALL_CORE (UDIF_CAP_CORE_DEFINED_MASK)
542#define UDIF_CAPABILITY_POLICY_SIZE 8U
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)
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)
588static const char UDIF_CAPABILITY_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
591 "Capability denied by policy",
592 "Empty capability mask",
593 "Conflicting capability bits"
663#define UDIF_CAPABILITY_ALL UINT64_C(0x00000000001FFFFF)
715 const uint8_t* issuedby, uint64_t validto, uint32_t policy,
const uint8_t* issuerkey);
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