|
UDIF: Universal Digital Identification Framework 1.0.0.0a (A1)
A quantum-secure cryptographic identification
|
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. | |
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:
All objects maintain:
| #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.
| UDIF_EXPORT_API void udif_object_clear | ( | udif_object * | obj | ) |
Clear an object.
Zeros out an object structure.
| obj | The object to clear |
| UDIF_EXPORT_API bool udif_object_compare | ( | const udif_object * | a, |
| const udif_object * | b ) |
Compare two objects.
Checks if two objects are identical.
| a | [const] The first object |
| b | [const] The second object |
| 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.
| digest | The output digest (32 bytes) |
| obj | [const] The object |
| 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.
| obj | The object |
| sigkey | [const] The owner's private key |
| rng_generate | Random number generator function |
| 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.
| digest | The output digest (32 bytes) |
| objserial | [const] The object serial number |
| txid | [const] The transfer id |
| toowner | [const] The new object owner |
| timestamp | The current timestamp |
| 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.
| obj | The output object structure |
| serial | [const] The object serial number (32 bytes) |
| type | The 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 |
| ctime | The current time (UTC seconds) |
| rng_generate | Random number generator function |
| 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.
| obj | The output object structure |
| input | [const] The input buffer |
| inplen | The input buffer length |
| 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.
| obj | The object to destroy |
| ownersigkey | [const] The owner's private key |
| ctime | The current time (UTC seconds) |
| rng_generate | Random number generator function |
| UDIF_EXPORT_API bool udif_object_is_destroyed | ( | const udif_object * | obj | ) |
Check if object is destroyed.
Tests the destroyed flag.
| obj | [const] The object |
| 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.
| output | The output buffer |
| outlen | The output buffer length |
| obj | [const] The object to serialize |
| 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.
| obj | The object to transfer (will be updated) |
| transfer | The 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 |
| ctime | The current time (UTC seconds) |
| rng_generate | Random number generator function |
| 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.
| obj | The object to update |
| newattrroot | [const] The new attribute root (32 bytes) |
| ownersigkey | [const] The owner's private key |
| ctime | The current time (UTC seconds) |
| rng_generate | Random number generator function |
| 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.
| obj | [const] The object to verify |
| ownerverkey | [const] The owner's public key |
| UDIF_EXPORT_API void udif_transfer_clear | ( | udif_transfer_record * | transfer | ) |
Clear a transfer record.
Zeros out a transfer record structure.
| transfer | The transfer record to clear |
| 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.
| transfer | The output transfer record structure |
| input | [const] The input buffer |
| inplen | The input buffer length |
| 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.
| output | The output buffer |
| outlen | The output array length |
| transfer | [const] The transfer record to serialize |
| 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.
| transfer | [const] The transfer record |
| senderverkey | [const] The sender's public key |
| recvverkey | [const] The receiver's public key |