UDIF: Universal Digital Identification Framework 1.0.0.0a (A1)
A quantum-secure cryptographic identification
registry.h File Reference

UDIF object registry management. More...

#include "udif.h"
#include "object.h"

Go to the source code of this file.

Data Structures

struct  udif_merkle_node
 Merkle proof node structure. More...
struct  udif_registry_state
 User Agent object registry. More...

Macros

#define UDIF_REGISTRY_DEFAULT_CAPACITY   1024U
 Default registry capacity.
#define UDIF_REGISTRY_MAX_CAPACITY   1048576U
 Maximum registry capacity.

Typedefs

typedef UDIF_EXPORT_API struct udif_merkle_node udif_merkle_node
typedef UDIF_EXPORT_API struct udif_registry_state udif_registry_state

Functions

UDIF_EXPORT_API udif_errors udif_registry_add_object (udif_registry_state *reg, const udif_object *obj)
 Add an object to the registry.
UDIF_EXPORT_API size_t udif_registry_get_capacity (const udif_registry_state *reg)
 Get registry capacity.
UDIF_EXPORT_API void udif_registry_clear (udif_registry_state *reg)
 Clear registry.
UDIF_EXPORT_API udif_errors udif_registry_compute_root (uint8_t *root, const udif_registry_state *reg)
 Compute registry Merkle root.
UDIF_EXPORT_API void udif_registry_dispose (udif_registry_state *reg)
 Dispose registry.
UDIF_EXPORT_API bool udif_registry_find_object (const udif_registry_state *reg, const uint8_t *serial, size_t *index)
 Find object in registry.
UDIF_EXPORT_API udif_errors udif_registry_generate_proof (uint8_t *proof, size_t *prooflen, const udif_registry_state *reg, const uint8_t *serial)
 Generate membership proof.
UDIF_EXPORT_API size_t udif_registry_get_count (const udif_registry_state *reg)
 Get object count.
UDIF_EXPORT_API udif_errors udif_registry_get_digest_at (uint8_t *digest, const udif_registry_state *reg, size_t index)
 Get object digest at index.
UDIF_EXPORT_API udif_errors udif_registry_initialize (udif_registry_state *reg, const uint8_t *ownerser, size_t capacity)
 Initialize a registry.
UDIF_EXPORT_API bool udif_registry_is_full (const udif_registry_state *reg)
 Check if registry is full.
UDIF_EXPORT_API udif_errors udif_registry_remove_object (udif_registry_state *reg, const uint8_t *serial)
 Remove an object from the registry.
UDIF_EXPORT_API udif_errors udif_registry_resize (udif_registry_state *reg, size_t newcapacity)
 Resize registry.
UDIF_EXPORT_API udif_errors udif_registry_update_object (udif_registry_state *reg, const udif_object *obj)
 Update an object in the registry.
UDIF_EXPORT_API bool udif_registry_verify_proof (const uint8_t *proof, size_t prooflen, const uint8_t *root, const uint8_t *objdigest)
 Verify membership proof.

Detailed Description

UDIF object registry management.

This module implements Merkle tree-based registries for User Agents. Each User Agent maintains a registry of owned objects as a Merkle tree, allowing efficient membership proofs and tamper-evident commits.

Registry Operations:

  • Initialize: Create empty registry
  • Add: Add object to registry
  • Remove: Remove object from registry
  • Update: Update object in registry
  • Commit: Compute Merkle root
  • Prove: Generate membership proof
  • Verify: Verify membership proof

The registry uses SHA3-256 for Merkle tree hashing with domain separation to prevent cross-context attacks.

Function Documentation

◆ udif_registry_add_object()

UDIF_EXPORT_API udif_errors udif_registry_add_object ( udif_registry_state * reg,
const udif_object * obj )

Add an object to the registry.

Adds an object's digest to the registry Merkle tree.

Parameters
regThe registry state structure
obj[const] The object to add
Returns
Returns udif_error_none on success

◆ udif_registry_clear()

UDIF_EXPORT_API void udif_registry_clear ( udif_registry_state * reg)

Clear registry.

Removes all objects from the registry without freeing resources.

Parameters
regThe registry state structure

◆ udif_registry_compute_root()

UDIF_EXPORT_API udif_errors udif_registry_compute_root ( uint8_t * root,
const udif_registry_state * reg )

Compute registry Merkle root.

Computes the Merkle root of all objects in the registry.

Parameters
rootThe output Merkle root (32 bytes)
reg[const] The registry state structure
Returns
Returns udif_error_none on success

◆ udif_registry_dispose()

UDIF_EXPORT_API void udif_registry_dispose ( udif_registry_state * reg)

Dispose registry.

Frees all resources and clears the registry.

Parameters
regThe registry state structure

◆ udif_registry_find_object()

UDIF_EXPORT_API bool udif_registry_find_object ( const udif_registry_state * reg,
const uint8_t * serial,
size_t * index )

Find object in registry.

Searches for an object by serial number.

Parameters
reg[const] The registry state structure
serial[const] The object serial (16 bytes)
indexPointer to receive the object index
Returns
Returns true if found

◆ udif_registry_generate_proof()

UDIF_EXPORT_API udif_errors udif_registry_generate_proof ( uint8_t * proof,
size_t * prooflen,
const udif_registry_state * reg,
const uint8_t * serial )

Generate membership proof.

Generates a Merkle inclusion proof for an object in the registry.

Parameters
proofThe output proof buffer
prooflenPointer to proof length (in: buffer size, out: bytes written)
reg[const] The registry state structure
serial[const] The object serial (16 bytes)
Returns
Returns udif_error_none on success

◆ udif_registry_get_capacity()

UDIF_EXPORT_API size_t udif_registry_get_capacity ( const udif_registry_state * reg)

Get registry capacity.

Returns the current capacity of the registry.

Parameters
reg[const] The registry state structure
Returns
The registry capacity

◆ udif_registry_get_count()

UDIF_EXPORT_API size_t udif_registry_get_count ( const udif_registry_state * reg)

Get object count.

Returns the number of objects in the registry.

Parameters
reg[const] The registry state structure
Returns
The object count

◆ udif_registry_get_digest_at()

UDIF_EXPORT_API udif_errors udif_registry_get_digest_at ( uint8_t * digest,
const udif_registry_state * reg,
size_t index )

Get object digest at index.

Retrieves the digest of an object at a specific index.

Parameters
digestThe output digest (32 bytes)
reg[const] The registry state structure
indexThe object index
Returns
Returns udif_error_none on success

◆ udif_registry_initialize()

UDIF_EXPORT_API udif_errors udif_registry_initialize ( udif_registry_state * reg,
const uint8_t * ownerser,
size_t capacity )

Initialize a registry.

Creates an empty registry for a User Agent.

Parameters
regThe registry state structure
ownerser[const] The owner's serial number (16 bytes)
incapacityThe initial capacity (number of objects)
Returns
Returns udif_error_none on success

◆ udif_registry_is_full()

UDIF_EXPORT_API bool udif_registry_is_full ( const udif_registry_state * reg)

Check if registry is full.

Tests if the registry has reached capacity.

Parameters
reg[const] The registry state structure
Returns
Returns true if full

◆ udif_registry_remove_object()

UDIF_EXPORT_API udif_errors udif_registry_remove_object ( udif_registry_state * reg,
const uint8_t * serial )

Remove an object from the registry.

Removes an object's digest from the registry.

Parameters
regThe registry state structure
serial[const] The object serial
Returns
Returns udif_error_none on success

◆ udif_registry_resize()

UDIF_EXPORT_API udif_errors udif_registry_resize ( udif_registry_state * reg,
size_t newcapacity )

Resize registry.

Increases the registry capacity.

Parameters
regThe registry state structure
newcapacityThe new capacity
Returns
Returns udif_error_none on success

◆ udif_registry_update_object()

UDIF_EXPORT_API udif_errors udif_registry_update_object ( udif_registry_state * reg,
const udif_object * obj )

Update an object in the registry.

Updates an object's digest in the registry.

Parameters
regThe registry state structure
obj[const] The updated object
Returns
Returns udif_error_none on success

◆ udif_registry_verify_proof()

UDIF_EXPORT_API bool udif_registry_verify_proof ( const uint8_t * proof,
size_t prooflen,
const uint8_t * root,
const uint8_t * objdigest )

Verify membership proof.

Verifies a Merkle inclusion proof against a registry root.

Parameters
proof[const] The proof data
prooflenThe proof length
root[const] The registry Merkle root (32 bytes)
object_digest[const] The object digest (32 bytes)
Returns
Returns true if proof is valid