52#ifndef UDIF_CAPABILITY_H
53#define UDIF_CAPABILITY_H
76#define UDIF_CAPABILITY_POLICY_SIZE 4U
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)
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)
122static const char UDIF_CAPABILITY_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
125 "Capability denied by policy",
126 "Empty capability mask",
127 "Conflicting capability bits"
239 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: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