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

UDIF object operations. More...

#include "udif.h"

Go to the source code of this file.

Data Structures

struct  udif_object
 UDIF object container. More...
struct  udif_transfer_record
 Object transfer record. More...

Macros

#define UDIF_OBJECT_FLAG_DESTROYED   0x01U
 Object flag bits.
#define UDIF_OBJECT_FLAG_SIZE   4U
 Object flag size in bytes.
#define UDIF_OBJECT_TYPE_SIZE   4U
 Object type size in bytes.
#define UDIF_OBJECT_ENCODED_SIZE
 The encoded object record size.
#define UDIF_OBJECT_SIGNING_SIZE
 The encoded object record signing size.
#define UDIF_OBJECT_TRANSFER_SIZE
 The object transfer buffer size.
#define UDIF_TRANSFER_RECORD_ENCODED_SIZE
 The encoded transfer record size.

Typedefs

typedef UDIF_EXPORT_API struct udif_object udif_object
typedef UDIF_EXPORT_API struct udif_transfer_record udif_transfer_record

Functions

UDIF_EXPORT_API void udif_object_clear (udif_object *obj)
 Clear an object.
UDIF_EXPORT_API bool udif_object_compare (const udif_object *a, const udif_object *b)
 Compare two objects.
UDIF_EXPORT_API udif_errors udif_object_compute_digest (uint8_t *digest, const udif_object *obj)
 Compute object digest.
UDIF_EXPORT_API udif_errors udif_object_compute_signature (udif_object *obj, const uint8_t *sigkey, bool(*rng_generate)(uint8_t *, size_t))
 Compute object digest and signature.
UDIF_EXPORT_API udif_errors udif_object_compute_transfer_digest (uint8_t *digest, const uint8_t *objserial, const uint8_t *txid, const uint8_t *toowner, uint64_t timestamp)
 Compute transfer object digest.
UDIF_EXPORT_API udif_errors udif_object_create (udif_object *obj, const uint8_t *serial, uint32_t type, const uint8_t *creator, const uint8_t *attrroot, const uint8_t *owner, const uint8_t *sigkey, uint64_t ctime, bool(*rng_generate)(uint8_t *, size_t))
 Create a new object.
UDIF_EXPORT_API udif_errors udif_object_deserialize (udif_object *obj, const uint8_t *input, size_t inplen)
 Deserialize an object.
UDIF_EXPORT_API udif_errors udif_object_destroy (udif_object *obj, const uint8_t *ownersigkey, uint64_t ctime, bool(*rng_generate)(uint8_t *, size_t))
 Mark object as destroyed.
UDIF_EXPORT_API bool udif_object_is_destroyed (const udif_object *obj)
 Check if object is destroyed.
UDIF_EXPORT_API udif_errors udif_object_serialize (uint8_t *output, size_t outlen, const udif_object *obj)
 Serialize an object.
UDIF_EXPORT_API udif_errors udif_object_transfer (udif_object *obj, udif_transfer_record *transfer, const uint8_t *newowner, const uint8_t *sendsigkey, const uint8_t *recvsigkey, uint64_t ctime, bool(*rng_generate)(uint8_t *, size_t))
 Transfer object ownership.
UDIF_EXPORT_API udif_errors udif_object_update_attributes (udif_object *obj, const uint8_t *newattrroot, const uint8_t *ownersigkey, uint64_t ctime, bool(*rng_generate)(uint8_t *, size_t))
 Update object attributes.
UDIF_EXPORT_API bool udif_object_verify (const udif_object *obj, const uint8_t *ownerverkey)
 Verify object signature.
UDIF_EXPORT_API void udif_transfer_clear (udif_transfer_record *transfer)
 Clear a transfer record.
UDIF_EXPORT_API udif_errors udif_transfer_deserialize (udif_transfer_record *transfer, const uint8_t *input, size_t inplen)
 Deserialize a transfer record.
UDIF_EXPORT_API udif_errors udif_transfer_serialize (uint8_t *output, size_t outlen, const udif_transfer_record *transfer)
 Serialize a transfer record.
UDIF_EXPORT_API bool udif_transfer_verify (const udif_transfer_record *transfer, const uint8_t *senderverkey, const uint8_t *recvverkey)
 Verify transfer record.

Detailed Description

UDIF object operations.

This module implements object lifecycle management for UDIF. Objects are polymorphic containers that can represent identities, assets, commodities, or any ownable entity.

Object Lifecycle:

  • Create: New object signed by creator
  • Transfer: Bi-modal signed ownership transfer
  • Update: Attribute root update by owner
  • Destroy: Mark as destroyed (never deleted)

All objects maintain:

  • Immutable serial number
  • Creator certificate reference
  • Current owner
  • Attribute Merkle root
  • Creation and update timestamps
  • Owner signature

Macro Definition Documentation

◆ UDIF_OBJECT_ENCODED_SIZE

#define UDIF_OBJECT_ENCODED_SIZE
Value:
#define UDIF_OBJECT_TYPE_SIZE
Object type size in bytes.
Definition object.h:94
#define UDIF_OBJECT_FLAG_SIZE
Object flag size in bytes.
Definition object.h:89
#define UDIF_SERIAL_NUMBER_SIZE
The serial number field length.
Definition udif.h:519
#define UDIF_SIGNED_HASH_SIZE
The combined size of a signature and hash.
Definition udif.h:525
#define UDIF_VALID_TIME_STRUCTURE_SIZE
The certificate expiration date length.
Definition udif.h:549
#define UDIF_CRYPTO_HASH_SIZE
The size of the certificate hash in bytes.
Definition udif.h:439

The encoded object record size.

◆ UDIF_OBJECT_SIGNING_SIZE

#define UDIF_OBJECT_SIGNING_SIZE

◆ UDIF_OBJECT_TRANSFER_SIZE

#define UDIF_OBJECT_TRANSFER_SIZE
Value:

The object transfer buffer size.

◆ UDIF_TRANSFER_RECORD_ENCODED_SIZE

#define UDIF_TRANSFER_RECORD_ENCODED_SIZE
Value:

The encoded transfer record size.

Function Documentation

◆ udif_object_clear()

UDIF_EXPORT_API void udif_object_clear ( udif_object * obj)

Clear an object.

Zeros out an object structure.

Parameters
objThe object to clear

◆ udif_object_compare()

UDIF_EXPORT_API bool udif_object_compare ( const udif_object * a,
const udif_object * b )

Compare two objects.

Checks if two objects are identical.

Parameters
a[const] The first object
b[const] The second object
Returns
Returns true if identical

◆ udif_object_compute_digest()

UDIF_EXPORT_API udif_errors udif_object_compute_digest ( uint8_t * digest,
const udif_object * obj )

Compute object digest.

Computes the canonical digest for an object, does not include the signature and hash.

Parameters
digestThe output digest (32 bytes)
obj[const] The object
Returns
Returns udif_error_none on success

◆ udif_object_compute_signature()

UDIF_EXPORT_API udif_errors udif_object_compute_signature ( udif_object * obj,
const uint8_t * sigkey,
bool(* rng_generate )(uint8_t *, size_t) )

Compute object digest and signature.

Computes the canonical digest for an object, and signs the object.

Parameters
objThe object
sigkey[const] The owner's private key
rng_generateRandom number generator function
Returns
Returns udif_error_none on success

◆ udif_object_compute_transfer_digest()

UDIF_EXPORT_API udif_errors udif_object_compute_transfer_digest ( uint8_t * digest,
const uint8_t * objserial,
const uint8_t * txid,
const uint8_t * toowner,
uint64_t timestamp )

Compute transfer object digest.

Computes the canonical digest for an object transfer.

Parameters
digestThe output digest (32 bytes)
objserial[const] The object serial number
txid[const] The transfer id
toowner[const] The new object owner
timestampThe current timestamp
Returns
Returns udif_error_none on success

◆ udif_object_create()

UDIF_EXPORT_API udif_errors udif_object_create ( udif_object * obj,
const uint8_t * serial,
uint32_t type,
const uint8_t * creator,
const uint8_t * attrroot,
const uint8_t * owner,
const uint8_t * sigkey,
uint64_t ctime,
bool(* rng_generate )(uint8_t *, size_t) )

Create a new object.

Creates a new object and signs it with the creator's private key. The creator becomes the initial owner.

Parameters
objThe output object structure
serial[const] The object serial number (32 bytes)
typeThe object type code
creator[const] The creator certificate serial (16 bytes)
attrroot[const] The initial attribute Merkle root (32 bytes)
owner[const] The initial owner serial (16 bytes)
sigkey[const] The owner's private signing key
ctimeThe current time (UTC seconds)
rng_generateRandom number generator function
Returns
Returns udif_error_none on success

◆ udif_object_deserialize()

UDIF_EXPORT_API udif_errors udif_object_deserialize ( udif_object * obj,
const uint8_t * input,
size_t inplen )

Deserialize an object.

Decodes an object from canonical TLV format.

Parameters
objThe output object structure
input[const] The input buffer
inplenThe input buffer length
Returns
Returns udif_error_none on success

◆ udif_object_destroy()

UDIF_EXPORT_API udif_errors udif_object_destroy ( udif_object * obj,
const uint8_t * ownersigkey,
uint64_t ctime,
bool(* rng_generate )(uint8_t *, size_t) )

Mark object as destroyed.

Sets the destroyed flag. Object is never deleted, just flagged.

Parameters
objThe object to destroy
ownersigkey[const] The owner's private key
ctimeThe current time (UTC seconds)
rng_generateRandom number generator function
Returns
Returns udif_error_none on success

◆ udif_object_is_destroyed()

UDIF_EXPORT_API bool udif_object_is_destroyed ( const udif_object * obj)

Check if object is destroyed.

Tests the destroyed flag.

Parameters
obj[const] The object
Returns
Returns true if destroyed

◆ udif_object_serialize()

UDIF_EXPORT_API udif_errors udif_object_serialize ( uint8_t * output,
size_t outlen,
const udif_object * obj )

Serialize an object.

Encodes an object to canonical TLV format.

Parameters
outputThe output buffer
outlenThe output buffer length
obj[const] The object to serialize
Returns
Returns udif_error_none on success

◆ udif_object_transfer()

UDIF_EXPORT_API udif_errors udif_object_transfer ( udif_object * obj,
udif_transfer_record * transfer,
const uint8_t * newowner,
const uint8_t * sendsigkey,
const uint8_t * recvsigkey,
uint64_t ctime,
bool(* rng_generate )(uint8_t *, size_t) )

Transfer object ownership.

Transfers ownership using bi-modal signatures (sender and receiver). Creates a transfer record that must be logged.

Parameters
objThe object to transfer (will be updated)
transferThe output transfer record
newowner[const] The new owner serial (16 bytes)
sendsigkey[const] The current owner's private key
recvsigkey[const] The new owner's private key
ctimeThe current time (UTC seconds)
rng_generateRandom number generator function
Returns
Returns udif_error_none on success

◆ udif_object_update_attributes()

UDIF_EXPORT_API udif_errors udif_object_update_attributes ( udif_object * obj,
const uint8_t * newattrroot,
const uint8_t * ownersigkey,
uint64_t ctime,
bool(* rng_generate )(uint8_t *, size_t) )

Update object attributes.

Updates the attribute Merkle root and timestamp, signed by owner.

Parameters
objThe object to update
newattrroot[const] The new attribute root (32 bytes)
ownersigkey[const] The owner's private key
ctimeThe current time (UTC seconds)
rng_generateRandom number generator function
Returns
Returns udif_error_none on success

◆ udif_object_verify()

UDIF_EXPORT_API bool udif_object_verify ( const udif_object * obj,
const uint8_t * ownerverkey )

Verify object signature.

Verifies the object signature matches the current owner.

Parameters
obj[const] The object to verify
ownerverkey[const] The owner's public key
Returns
Returns true if signature is valid

◆ udif_transfer_clear()

UDIF_EXPORT_API void udif_transfer_clear ( udif_transfer_record * transfer)

Clear a transfer record.

Zeros out a transfer record structure.

Parameters
transferThe transfer record to clear

◆ udif_transfer_deserialize()

UDIF_EXPORT_API udif_errors udif_transfer_deserialize ( udif_transfer_record * transfer,
const uint8_t * input,
size_t inplen )

Deserialize a transfer record.

Decodes a transfer record from canonical format.

Parameters
transferThe output transfer record structure
input[const] The input buffer
inplenThe input buffer length
Returns
Returns udif_error_none on success

◆ udif_transfer_serialize()

UDIF_EXPORT_API udif_errors udif_transfer_serialize ( uint8_t * output,
size_t outlen,
const udif_transfer_record * transfer )

Serialize a transfer record.

Encodes a transfer record to canonical format.

Parameters
outputThe output buffer
outlenThe output array length
transfer[const] The transfer record to serialize
Returns
Returns udif_error_none on success

◆ udif_transfer_verify()

UDIF_EXPORT_API bool udif_transfer_verify ( const udif_transfer_record * transfer,
const uint8_t * senderverkey,
const uint8_t * recvverkey )

Verify transfer record.

Verifies both sender and receiver signatures on a transfer.

Parameters
transfer[const] The transfer record
senderverkey[const] The sender's public key
recvverkey[const] The receiver's public key
Returns
Returns true if both signatures are valid