101#include "udifcommon.h"
103#include "udifcommon.h"
105#include "socketbase.h"
107#if defined(UDIF_CONFIG_DILITHIUM_KYBER)
108# include "dilithium.h"
110#elif defined(UDIF_CONFIG_SPHINCS_MCELIECE)
111# include "mceliece.h"
112# include "sphincsplus.h"
114# error Invalid parameter set!
170#define UDIF_USE_RCS_ENCRYPTION
172#if defined(UDIF_USE_RCS_ENCRYPTION)
174# define udif_cipher_state qsc_rcs_state
175# define udif_cipher_dispose qsc_rcs_dispose
176# define udif_cipher_initialize qsc_rcs_initialize
177# define udif_cipher_keyparams qsc_rcs_keyparams
178# define udif_cipher_set_associated qsc_rcs_set_associated
179# define udif_cipher_transform qsc_rcs_transform
182# define udif_cipher_state qsc_aes_gcm256_state
183# define udif_cipher_dispose qsc_aes_gcm256_dispose
184# define udif_cipher_initialize qsc_aes_gcm256_initialize
185# define udif_cipher_keyparams qsc_aes_keyparams
186# define udif_cipher_set_associated qsc_aes_gcm256_set_associated
187# define udif_cipher_transform qsc_aes_gcm256_transform
198#if defined(UDIF_CONFIG_SPHINCS_MCELIECE)
203# define udif_cipher_generate_keypair qsc_mceliece_generate_keypair
208# define udif_cipher_decapsulate qsc_mceliece_decapsulate
213# define udif_cipher_encapsulate qsc_mceliece_encapsulate
218# define udif_signature_generate_keypair qsc_sphincsplus_generate_keypair
223# define udif_signature_sign qsc_sphincsplus_sign
228# define udif_signature_verify qsc_sphincsplus_verify
229#elif defined(UDIF_CONFIG_DILITHIUM_KYBER)
234# define udif_cipher_generate_keypair qsc_kyber_generate_keypair
239# define udif_cipher_decapsulate qsc_kyber_decapsulate
244# define udif_cipher_encapsulate qsc_kyber_encapsulate
249# define udif_signature_generate_keypair qsc_dilithium_generate_keypair
254# define udif_signature_sign qsc_dilithium_sign
259# define udif_signature_verify qsc_dilithium_verify
261# error Invalid parameter set!
293#if defined(UDIF_CONFIG_DILITHIUM_KYBER)
299# define UDIF_ASYMMETRIC_CIPHERTEXT_SIZE (QSC_KYBER_CIPHERTEXT_SIZE)
305# define UDIF_ASYMMETRIC_PRIVATE_KEY_SIZE (QSC_KYBER_PRIVATEKEY_SIZE)
311# define UDIF_ASYMMETRIC_PUBLIC_KEY_SIZE (QSC_KYBER_PUBLICKEY_SIZE)
317# define UDIF_ASYMMETRIC_SIGNATURE_SIZE (QSC_DILITHIUM_SIGNATURE_SIZE)
323# define UDIF_ASYMMETRIC_SIGNING_KEY_SIZE (QSC_DILITHIUM_PRIVATEKEY_SIZE)
329# define UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE (QSC_DILITHIUM_PUBLICKEY_SIZE)
331# if defined(QSC_DILITHIUM_S1P44) && defined(QSC_KYBER_S1K2P512)
336# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 5630U
341# define UDIF_PARAMATERS_DILITHIUM_KYBER_D1K1
346# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 2188U
351# define UDIF_SIGNATURE_ENCODING_SIZE 3312U
356# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 1752U
357# elif defined(QSC_DILITHIUM_S3P65) && defined(QSC_KYBER_S3K3P768)
362# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 7666U
367# define UDIF_PARAMATERS_DILITHIUM_KYBER_D3K3
372# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 3053U
377# define UDIF_SIGNATURE_ENCODING_SIZE 4476U
382# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 2604
383# elif defined(QSC_DILITHIUM_S5P87) && defined(QSC_KYBER_S5K4P1024)
388# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 10327U
393# define UDIF_PARAMATERS_DILITHIUM_KYBER_D5K5
398# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 3919U
403# define UDIF_SIGNATURE_ENCODING_SIZE 6212U
408# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 3456U
409# elif defined(QSC_DILITHIUM_S5P87) && defined(QSC_KYBER_S6K5P1280)
414# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 10327U
419# define UDIF_PARAMATERS_DILITHIUM_KYBER_D5K6
424# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 3919U
429# define UDIF_SIGNATURE_ENCODING_SIZE 6172U
434# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 3456U
438# error the library parameter sets are mismatched!
441# elif defined(UDIF_CONFIG_SPHINCS_MCELIECE)
446# define UDIF_ASYMMETRIC_CIPHERTEXT_SIZE (QSC_MCELIECE_CIPHERTEXT_SIZE)
451# define UDIF_ASYMMETRIC_PRIVATE_KEY_SIZE (QSC_MCELIECE_PRIVATEKEY_SIZE)
456# define UDIF_ASYMMETRIC_PUBLIC_KEY_SIZE (QSC_MCELIECE_PUBLICKEY_SIZE)
461# define UDIF_ASYMMETRIC_SIGNATURE_SIZE (QSC_SPHINCSPLUS_SIGNATURE_SIZE)
466# define UDIF_ASYMMETRIC_SIGNING_KEY_SIZE (QSC_SPHINCSPLUS_PRIVATEKEY_SIZE)
471# define UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE (QSC_SPHINCSPLUS_PUBLICKEY_SIZE)
473# if defined(QSC_MCELIECE_S1N3488T64)
474# if defined(QSC_SPHINCSPLUS_S1S128SHAKERF)
479# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 23753U
484# define UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF1M1
489# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 470U
494# define UDIF_SIGNATURE_ENCODING_SIZE 22828U
499# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 44U
500# elif defined(QSC_SPHINCSPLUS_S1S128SHAKERS)
505# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 11253U
510# define UDIF_PARAMATERS_SPHINCSS_MCELIECE_SS1M1
515# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 470U
520# define UDIF_SIGNATURE_ENCODING_SIZE 10520U
525# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 44U
527# elif defined(QSC_MCELIECE_S3N4608T96)
528# if defined(QSC_SPHINCSPLUS_S3S192SHAKERF)
533# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 48928U
538# define UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF3M3
543# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 491U
548# define UDIF_SIGNATURE_ENCODING_SIZE 47596U
553# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 64U
554# elif defined(QSC_SPHINCSPLUS_S3S192SHAKERS)
559# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 22606U
564# define UDIF_PARAMATERS_SPHINCSS_MCELIECE_SS3M3
569# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 491U
574# define UDIF_SIGNATURE_ENCODING_SIZE 21676U
579# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 64U
581# elif defined(QSC_MCELIECE_S5N6688T128)
582# if defined(QSC_SPHINCSPLUS_S5S256SHAKERF)
587# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 68176U
592# define UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF5M5
597# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 516U
602# define UDIF_SIGNATURE_ENCODING_SIZE 66520U
607# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 88U
608# elif defined(QSC_SPHINCSPLUS_S5S256SHAKERS)
613# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 41003U
618# define UDIF_PARAMATERS_SPHINCSS_MCELIECE_SS5M5
623# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 516U
628# define UDIF_SIGNATURE_ENCODING_SIZE 39768U
633# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 88U
635# elif defined(QSC_MCELIECE_S6N6960T119)
636# if defined(QSC_SPHINCSPLUS_S5S256SHAKERF)
641# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 68173U
646# define UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF5M6
651# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 516U
656# define UDIF_SIGNATURE_ENCODING_SIZE 66520U
661# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 88U
662# elif defined(QSC_SPHINCSPLUS_S5S256SHAKERS)
667# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 41003U
672# define UDIF_PARAMATERS_SPHINCSS_MCELIECE_SS5M6
677# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 516U
682# define UDIF_SIGNATURE_ENCODING_SIZE 39768U
687# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 88U
689# elif defined(QSC_MCELIECE_S7N8192T128)
690# if defined(QSC_SPHINCSPLUS_S5S256SHAKERF)
695# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 68173U
700# define UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF5M7
705# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 516U
710# define UDIF_SIGNATURE_ENCODING_SIZE 66520U
715# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 88U
716# elif defined(QSC_SPHINCSPLUS_S5S256SHAKERS)
721# define UDIF_CHILD_CERTIFICATE_STRING_SIZE 41003U
726# define UDIF_PARAMATERS_SPHINCSS_MCELIECE_SS5M7
731# define UDIF_ROOT_CERTIFICATE_STRING_SIZE 516U
736# define UDIF_SIGNATURE_ENCODING_SIZE 39768U
741# define UDIF_VERIFICATION_KEY_ENCODING_SIZE 88U
743# error Invalid parameter sets, check the QSC library settings
749# error Invalid parameter sets, check the QSC library settings
759#define UDIF_CLAIM_ANCHOR_SIZE 32U
765#define UDIF_POLICY_HASH_SIZE 32U
771#define UDIF_PERMISSION_MASK_SIZE 8U
777#define UDIF_CAPABILITY_MASK_SIZE 8U
783#define UDIF_CAPABILITY_TOKEN_MAX_SIZE 2048U
789#define UDIF_SUITEID_SIZE 1U
795#define UDIF_ROLE_SIZE 1U
801#define UDIF_MINIMUM_TRUST 1U
808#define UDIF_NAME_MAX_SIZE 256U
814#define UDIF_TWOWAY_TRUST 1000002U
820#define UDIF_APPLICATION_CLIENT_PORT 39761U
826#define UDIF_APPLICATION_IDG_PORT 39762U
832#define UDIF_APPLICATION_UBC_PORT 39763U
838#define UDIF_APPLICATION_UGC_PORT 39764U
844#define UDIF_APPLICATION_URA_PORT 39765U
850#define UDIF_APPLICATION_UUA_PORT 39766U
856#define UDIF_CANONICAL_NAME_MINIMUM_SIZE 3U
862#define UDIF_CERTIFICATE_ADDRESS_SIZE 22U
868#define UDIF_CERTIFICATE_ALGORITHM_SIZE 1U
874#define UDIF_CERTIFICATE_DEFAULT_PERIOD ((uint64_t)365U * 24U * 60U * 60U)
880#define UDIF_CERTIFICATE_DESIGNATION_SIZE 1U
886#define UDIF_CERTIFICATE_EXPIRATION_SIZE 16U
892#define UDIF_CERTIFICATE_HASH_SIZE 32U
899#define UDIF_CERTIFICATE_ISSUER_SIZE 256U
905#define UDIF_CERTIFICATE_LINE_LENGTH 64U
911#define UDIF_CERTIFICATE_MAXIMUM_PERIOD (UDIF_CERTIFICATE_DEFAULT_PERIOD * 2U)
917#define UDIF_CERTIFICATE_MINIMUM_PERIOD ((uint64_t)1U * 24U * 60U * 60U)
923#define UDIF_CERTIFICATE_SERIAL_SIZE 16U
929#define UDIF_CERTIFICATE_HINT_SIZE (UDIF_CERTIFICATE_HASH_SIZE + UDIF_CERTIFICATE_SERIAL_SIZE)
935#define UDIF_CERTIFICATE_SIGNED_HASH_SIZE (UDIF_ASYMMETRIC_SIGNATURE_SIZE + UDIF_CERTIFICATE_HASH_SIZE)
941#define UDIF_CERTIFICATE_VERSION_SIZE 1U
947#define UDIF_CERTIFICATE_CHILD_SIZE (UDIF_CERTIFICATE_SIGNED_HASH_SIZE + \
948 UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE + \
949 UDIF_CERTIFICATE_ISSUER_SIZE + \
950 UDIF_CERTIFICATE_SERIAL_SIZE + \
951 UDIF_CERTIFICATE_SERIAL_SIZE + \
952 UDIF_CERTIFICATE_EXPIRATION_SIZE + \
953 UDIF_CERTIFICATE_DESIGNATION_SIZE + \
954 UDIF_CERTIFICATE_ALGORITHM_SIZE + \
955 UDIF_CERTIFICATE_VERSION_SIZE + \
956 UDIF_SUITEID_SIZE + \
958 UDIF_CAPABILITY_MASK_SIZE)
964#define UDIF_CERTIFICATE_IDG_SIZE (UDIF_ASYMMETRIC_SIGNATURE_SIZE + \
965 UDIF_CERTIFICATE_HASH_SIZE + \
966 UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE + \
967 UDIF_CERTIFICATE_ISSUER_SIZE + \
968 UDIF_CERTIFICATE_ADDRESS_SIZE + \
969 UDIF_CERTIFICATE_SERIAL_SIZE + \
970 UDIF_CERTIFICATE_SERIAL_SIZE + \
971 UDIF_CERTIFICATE_EXPIRATION_SIZE + \
972 UDIF_CERTIFICATE_DESIGNATION_SIZE + \
973 UDIF_CERTIFICATE_ALGORITHM_SIZE + \
974 UDIF_CERTIFICATE_VERSION_SIZE + \
975 UDIF_SUITEID_SIZE + \
977 UDIF_CAPABILITY_MASK_SIZE)
983#define UDIF_CERTIFICATE_ROOT_SIZE (UDIF_CERTIFICATE_HASH_SIZE + \
984 UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE + \
985 UDIF_CERTIFICATE_ISSUER_SIZE + \
986 UDIF_CERTIFICATE_SERIAL_SIZE + \
987 UDIF_CERTIFICATE_EXPIRATION_SIZE + \
988 UDIF_CERTIFICATE_ALGORITHM_SIZE + \
989 UDIF_CERTIFICATE_VERSION_SIZE + \
990 UDIF_SUITEID_SIZE + \
992 UDIF_CAPABILITY_MASK_SIZE)
998#define UDIF_CRYPTO_SYMMETRIC_KEY_SIZE 32U
1004#define UDIF_MESSAGE_MAX_SIZE 1400000UL
1010#define UDIF_MFK_EXPIRATION_PERIOD ((uint64_t)60U * 24U * 60U * 60U)
1016#define UDIF_MINIMUM_PATH_LENGTH 9U
1022#define UDIF_NETWORK_CONNECTION_MTU 1500U
1029#define UDIF_NETWORK_DOMAIN_NAME_MAX_SIZE 256U
1035#define UDIF_NETWORK_MAX_APSS 1000000UL
1041#define UDIF_NETWORK_NODE_ID_SIZE 16
1047#define UDIF_PERIOD_DAY_TO_SECONDS (24U * 60U * 60U)
1053#define UDIF_SOCKET_TERMINATOR_SIZE 1U
1059#define UDIF_PACKET_ERROR_SIZE 1U
1065#define UDIF_PACKET_HEADER_SIZE 22U
1071#define UDIF_PACKET_SUBHEADER_SIZE 16U
1077#define UDIF_PACKET_SEQUENCE_TERMINATOR 0xFFFFFFFFUL
1083#define UDIF_PACKET_TIME_SIZE 8U
1089#define UDIF_PACKET_TIME_THRESHOLD 60U
1095#define UDIF_NETWORK_TERMINATION_MESSAGE_SIZE 1U
1101#define UDIF_NETWORK_TERMINATION_PACKET_SIZE (UDIF_PACKET_HEADER_SIZE + UDIF_NETWORK_TERMINATION_MESSAGE_SIZE)
1109#define UDIF_ACTIVE_VERSION 1U
1115#define UDIF_ACTIVE_VERSION_SIZE 2U
1123#define UDIF_NAMESPACE_CODE_SIZE 8U
1129#define UDIF_ISSUER_DOMAIN_CODE_SIZE 8U
1135#define UDIF_IDENTITY_ID_SIZE 32U
1141#define UDIF_IDENTITY_MAX_SIZE 512U
1147#define UDIF_PERIOD_DAY_TO_SECONDS (24U * 60U * 60U)
1155#define UDIF_CERTIFICATE_ROLE_SIZE 1U
1161#define UDIF_CERTIFICATE_SERIAL_SIZE 16U
1167#define UDIF_CERTIFICATE_VERSION_SIZE 1U
1173#define UDIF_CERTIFICATE_HASH_SIZE 32U
1179#define UDIF_CERTIFICATE_SIGNED_HASH_SIZE (UDIF_ASYMMETRIC_SIGNATURE_SIZE + UDIF_CERTIFICATE_HASH_SIZE)
1185#define UDIF_CERTIFICATE_DEFAULT_PERIOD ((uint64_t)365U * 24U * 60U * 60U)
1191#define UDIF_CERTIFICATE_MINIMUM_PERIOD ((uint64_t)1U * 24U * 60U * 60U)
1197#define UDIF_CERTIFICATE_MAXIMUM_PERIOD (UDIF_CERTIFICATE_DEFAULT_PERIOD * 2U)
1205#define UDIF_CRYPTO_SYMMETRIC_KEY_SIZE 32U
1211#define UDIF_CRYPTO_SYMMETRIC_MAC_SIZE 32U
1217#define UDIF_CRYPTO_SYMMETRIC_HASH_SIZE 32U
1223#if defined(UDIF_USE_RCS_ENCRYPTION)
1224# define UDIF_CRYPTO_SYMMETRIC_NONCE_SIZE 32U
1226# define UDIF_CRYPTO_SYMMETRIC_NONCE_SIZE 16U
1233#define UDIF_CRYPTO_SEED_SIZE 64U
1239#define UDIF_CRYPTO_SYMMETRIC_TOKEN_SIZE 32U
1245#define UDIF_CRYPTO_SYMMETRIC_HASH_SIZE 32U
1251#if defined(UDIF_USE_RCS_ENCRYPTION)
1252# if defined(UDIF_EXTENDED_SESSION_SECURITY)
1253# define UDIF_CRYPTO_SYMMETRIC_MAC_SIZE 64U
1255# define UDIF_CRYPTO_SYMMETRIC_MAC_SIZE 32U
1258# define UDIF_CRYPTO_SYMMETRIC_MAC_SIZE 16U
1265#define UDIF_CRYPTO_SYMMETRIC_SECRET_SIZE 32U
1647#define UDIF_CERTIFICATE_HEADER_SIZE 64U
1653#define UDIF_CERTIFICATE_FOOTER_SIZE 64U
1661#define UDIF_CERTIFICATE_ISSUER_PREFIX_SIZE 9U
1667#define UDIF_CERTIFICATE_SERIAL_PREFIX_SIZE 9U
1673#define UDIF_CERTIFICATE_VALID_FROM_PREFIX_SIZE 13U
1679#define UDIF_CERTIFICATE_EXPIRATION_TO_PREFIX_SIZE 6U
1685#define UDIF_CERTIFICATE_ALGORITHM_PREFIX_SIZE 12U
1691#define UDIF_CERTIFICATE_VERSION_PREFIX_SIZE 10U
1697#define UDIF_CERTIFICATE_ROLE_PREFIX_SIZE 6U
1698#define UDIF_ROOT_CERTIFICATE_HEADER_SIZE 64U
1699#define UDIF_ROOT_CERTIFICATE_HASH_PREFIX_SIZE 19U
1700#define UDIF_ROOT_CERTIFICATE_PUBLICKEY_PREFIX_SIZE 13U
1701#define UDIF_ROOT_CERTIFICATE_ISSUER_PREFIX_SIZE 9U
1702#define UDIF_ROOT_CERTIFICATE_NAME_PREFIX_SIZE 7U
1703#define UDIF_ROOT_CERTIFICATE_SERIAL_PREFIX_SIZE 9U
1704#define UDIF_ROOT_CERTIFICATE_FOOTER_SIZE 64U
1705#define UDIF_ROOT_CERTIFICATE_VALID_FROM_PREFIX_SIZE 13U
1706#define UDIF_ROOT_CERTIFICATE_EXPIRATION_TO_PREFIX_SIZE 6U
1707#define UDIF_ROOT_CERTIFICATE_ALGORITHM_PREFIX_SIZE 12U
1708#define UDIF_ROOT_CERTIFICATE_VERSION_PREFIX_SIZE 10U
1709#define UDIF_ROOT_CERTIFICATE_CAPABILITY_MASK_PREFIX_SIZE 18U
1710#define UDIF_ROOT_CERTIFICATE_DEFAULT_NAME_SIZE 18U
1711#define UDIF_ACTIVE_VERSION_STRING_SIZE 5U
1717static const char UDIF_ROOT_CERTIFICATE_HEADER[UDIF_ROOT_CERTIFICATE_HEADER_SIZE] =
"------------BEGIN UDIF ROOT PUBLIC CERTIFICATE BLOCK-----------";
1718static const char UDIF_ROOT_CERTIFICATE_ISSUER_PREFIX[UDIF_ROOT_CERTIFICATE_ISSUER_PREFIX_SIZE] =
"Issuer: ";
1719static const char UDIF_ROOT_CERTIFICATE_NAME_PREFIX[UDIF_ROOT_CERTIFICATE_NAME_PREFIX_SIZE] =
"Name: ";
1720static const char UDIF_ROOT_CERTIFICATE_SERIAL_PREFIX[UDIF_ROOT_CERTIFICATE_SERIAL_PREFIX_SIZE] =
"Serial: ";
1721static const char UDIF_ROOT_CERTIFICATE_VALID_FROM_PREFIX[UDIF_ROOT_CERTIFICATE_VALID_FROM_PREFIX_SIZE] =
"Valid From: ";
1722static const char UDIF_ROOT_CERTIFICATE_EXPIRATION_TO_PREFIX[UDIF_ROOT_CERTIFICATE_EXPIRATION_TO_PREFIX_SIZE] =
" To: ";
1723static const char UDIF_ROOT_CERTIFICATE_ALGORITHM_PREFIX[UDIF_ROOT_CERTIFICATE_ALGORITHM_PREFIX_SIZE] =
"Algorithm: ";
1724static const char UDIF_ROOT_CERTIFICATE_VERSION_PREFIX[UDIF_ROOT_CERTIFICATE_VERSION_PREFIX_SIZE] =
"Version: ";
1725static const char UDIF_ROOT_CERTIFICATE_CAPABILITY_MASK_PREFIX[UDIF_ROOT_CERTIFICATE_CAPABILITY_MASK_PREFIX_SIZE] =
"Capability Mask: ";
1726static const char UDIF_ROOT_CERTIFICATE_HASH_PREFIX[UDIF_ROOT_CERTIFICATE_HASH_PREFIX_SIZE] =
"Certificate Hash: ";
1727static const char UDIF_ROOT_CERTIFICATE_PUBLICKEY_PREFIX[UDIF_ROOT_CERTIFICATE_PUBLICKEY_PREFIX_SIZE] =
"Public Key: ";
1728static const char UDIF_ROOT_CERTIFICATE_FOOTER[UDIF_ROOT_CERTIFICATE_FOOTER_SIZE] =
"------------END UDIF ROOT PUBLIC CERTIFICATE BLOCK-------------";
1729static const char UDIF_ROOT_CERTIFICATE_DEFAULT_NAME[UDIF_ROOT_CERTIFICATE_DEFAULT_NAME_SIZE] =
" Root Certificate";
1731static const char UDIF_ACTIVE_VERSION_STRING[UDIF_ACTIVE_VERSION_STRING_SIZE] =
"0x01";
1732static const char UDIF_CERTIFICATE_CHILD_EXTENSION[] =
".ccert";
1733static const char UDIF_CERTIFICATE_MFCOL_EXTENSION[] =
".mfcol";
1734static const char UDIF_CERTIFICATE_ROOT_EXTENSION[] =
".rcert";
1735static const char UDIF_CERTIFICATE_TOPOLOGY_EXTENSION[] =
".dtop";
1736static const char UDIF_APPLICATION_ROOT_PATH[] =
"\\UDIF";
1737static const char UDIF_CERTIFICATE_BACKUP_PATH[] =
"\\Backup";
1738static const char UDIF_CERTIFICATE_STORE_PATH[] =
"\\Certificates";
1739static const char UDIF_ROOT_CERTIFICATE_PATH[] =
"\\Root";
1740static const char UDIF_CERTIFICATE_TOPOLOGY_PATH[] =
"\\Topology";
1746#define UDIF_CERTIFICATE_SEPERATOR_SIZE 1U
1747#define UDIF_CHILD_CERTIFICATE_HEADER_SIZE 64U
1748#define UDIF_CHILD_CERTIFICATE_ROOT_HASH_PREFIX_SIZE 30U
1749#define UDIF_CHILD_CERTIFICATE_SIGNATURE_KEY_PREFIX_SIZE 23U
1750#define UDIF_CHILD_CERTIFICATE_ISSUER_PREFIX_SIZE 9U
1751#define UDIF_CHILD_CERTIFICATE_NAME_PREFIX_SIZE 7U
1752#define UDIF_CHILD_CERTIFICATE_SERIAL_PREFIX_SIZE 9U
1753#define UDIF_CHILD_CERTIFICATE_ROOT_SERIAL_PREFIX_SIZE 14U
1754#define UDIF_CHILD_CERTIFICATE_VALID_FROM_PREFIX_SIZE 13U
1755#define UDIF_CHILD_CERTIFICATE_EXPIRATION_TO_PREFIX_SIZE 6U
1756#define UDIF_CHILD_CERTIFICATE_ALGORITHM_PREFIX_SIZE 12U
1757#define UDIF_CHILD_CERTIFICATE_VERSION_PREFIX_SIZE 10U
1758#define UDIF_CHILD_CERTIFICATE_DESIGNATION_PREFIX_SIZE 14U
1759#define UDIF_CHILD_CERTIFICATE_CAPABILITY_MASK_PREFIX_SIZE 18U
1760#define UDIF_CHILD_CERTIFICATE_ADDRESS_PREFIX_SIZE 10U
1761#define UDIF_CHILD_CERTIFICATE_FOOTER_SIZE 64U
1762#define UDIF_CHILD_CERTIFICATE_DEFAULT_NAME_SIZE 19U
1764static const char UDIF_CHILD_CERTIFICATE_HEADER[UDIF_CHILD_CERTIFICATE_HEADER_SIZE] =
"-----------BEGIN UDIF CHILD PUBLIC CERTIFICATE BLOCK-----------";
1765static const char UDIF_CHILD_CERTIFICATE_ROOT_HASH_PREFIX[UDIF_CHILD_CERTIFICATE_ROOT_HASH_PREFIX_SIZE] =
"Root Signed Public Key Hash: ";
1766static const char UDIF_CHILD_CERTIFICATE_SIGNATURE_KEY_PREFIX[UDIF_CHILD_CERTIFICATE_SIGNATURE_KEY_PREFIX_SIZE] =
"Public Signature Key: ";
1767static const char UDIF_CHILD_CERTIFICATE_ISSUER_PREFIX[UDIF_CHILD_CERTIFICATE_ISSUER_PREFIX_SIZE] =
"Issuer: ";
1768static const char UDIF_CHILD_CERTIFICATE_NAME_PREFIX[UDIF_CHILD_CERTIFICATE_NAME_PREFIX_SIZE] =
"Name: ";
1769static const char UDIF_CHILD_CERTIFICATE_SERIAL_PREFIX[UDIF_CHILD_CERTIFICATE_SERIAL_PREFIX_SIZE] =
"Serial: ";
1770static const char UDIF_CHILD_CERTIFICATE_ROOT_SERIAL_PREFIX[UDIF_CHILD_CERTIFICATE_ROOT_SERIAL_PREFIX_SIZE] =
"Root Serial: ";
1771static const char UDIF_CHILD_CERTIFICATE_VALID_FROM_PREFIX[UDIF_CHILD_CERTIFICATE_VALID_FROM_PREFIX_SIZE] =
"Valid From: ";
1772static const char UDIF_CHILD_CERTIFICATE_EXPIRATION_TO_PREFIX[UDIF_CHILD_CERTIFICATE_EXPIRATION_TO_PREFIX_SIZE] =
" To: ";
1773static const char UDIF_CHILD_CERTIFICATE_ALGORITHM_PREFIX[UDIF_CHILD_CERTIFICATE_ALGORITHM_PREFIX_SIZE] =
"Algorithm: ";
1774static const char UDIF_CHILD_CERTIFICATE_VERSION_PREFIX[UDIF_CHILD_CERTIFICATE_VERSION_PREFIX_SIZE] =
"Version: ";
1775static const char UDIF_CHILD_CERTIFICATE_DESIGNATION_PREFIX[UDIF_CHILD_CERTIFICATE_DESIGNATION_PREFIX_SIZE] =
"Designation: ";
1776static const char UDIF_CHILD_CERTIFICATE_CAPABILITY_MASK_PREFIX[UDIF_CHILD_CERTIFICATE_CAPABILITY_MASK_PREFIX_SIZE] =
"Capability Mask: ";
1777static const char UDIF_CHILD_CERTIFICATE_ADDRESS_PREFIX[UDIF_CHILD_CERTIFICATE_ADDRESS_PREFIX_SIZE] =
"Address: ";
1778static const char UDIF_CHILD_CERTIFICATE_FOOTER[UDIF_CHILD_CERTIFICATE_FOOTER_SIZE] =
"------------END UDIF CHILD PUBLIC CERTIFICATE BLOCK------------";
1779static const char UDIF_CHILD_CERTIFICATE_DEFAULT_NAME[UDIF_CHILD_CERTIFICATE_DEFAULT_NAME_SIZE] =
" Child Certificate";
1781#define UDIF_NETWORK_DESIGNATION_SIZE 33
1782static const char UDIF_NETWORK_DESIGNATION_NONE[UDIF_NETWORK_DESIGNATION_SIZE] =
"udif_network_designation_none";
1783static const char UDIF_NETWORK_DESIGNATION_URA[UDIF_NETWORK_DESIGNATION_SIZE] =
"udif_network_designation_ura";
1784static const char UDIF_NETWORK_DESIGNATION_CLIENT[UDIF_NETWORK_DESIGNATION_SIZE] =
"udif_network_designation_client";
1785static const char UDIF_NETWORK_DESIGNATION_UBC[UDIF_NETWORK_DESIGNATION_SIZE] =
"udif_network_designation_ubc";
1786static const char UDIF_NETWORK_DESIGNATION_IDG[UDIF_NETWORK_DESIGNATION_SIZE] =
"udif_network_designation_idg";
1787static const char UDIF_NETWORK_DESIGNATION_UUA[UDIF_NETWORK_DESIGNATION_SIZE] =
"udif_network_designation_uua";
1788static const char UDIF_NETWORK_DESIGNATION_UGC[UDIF_NETWORK_DESIGNATION_SIZE] =
"udif_network_designation_ugc";
1789static const char UDIF_NETWORK_DESIGNATION_ALL[UDIF_NETWORK_DESIGNATION_SIZE] =
"udif_network_designation_all";
1795#define UDIF_PROTOCOL_SET_SIZE 41U
1810#if defined(UDIF_PARAMATERS_DILITHIUM_KYBER_D1K1)
1811static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"dilithium-s1_kyber-s1_rcs-256_sha3-256";
1813#elif defined(UDIF_PARAMATERS_DILITHIUM_KYBER_D3K3)
1814static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"dilithium-s3_kyber-s3_rcs-256_sha3-256";
1816#elif defined(UDIF_PARAMATERS_DILITHIUM_KYBER_D5K5)
1817static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"dilithium-s5_kyber-s5_rcs-256_sha3-256";
1819#elif defined(UDIF_PARAMATERS_DILITHIUM_KYBER_D5K6)
1820static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"dilithium-s5_kyber-s6_rcs-512_sha3-512";
1822#elif defined(UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF1M1)
1823static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-1f_mceliece-s1_rcs-256_sha3-256";
1825#elif defined(UDIF_PARAMATERS_SPHINCSPLUS_S1S128SHAKERS)
1826static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-1s_mceliece-s1_rcs-256_sha3-256";
1828#elif defined(UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF3M3)
1829static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-3f_mceliece-s3_rcs-256_sha3-256";
1831#elif defined(UDIF_PARAMATERS_SPHINCSPLUS_S3S192SHAKERS)
1832static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-3s_mceliece-s3_rcs-256_sha3-256";
1834#elif defined(UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF5M5)
1835static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-5f_mceliece-s5_rcs-256_sha3-256";
1837#elif defined(UDIF_PARAMATERS_SPHINCSPLUS_S5S256SHAKERS)
1838static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-5s_mceliece-s5_rcs-256_sha3-256";
1840#elif defined(UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF5M6)
1841static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-5f_mceliece-s6_rcs-256_sha3-256";
1843#elif defined(UDIF_PARAMATERS_SPHINCSPLUS_S5S256SHAKERS)
1844static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-5s_mceliece-s6_rcs-256_sha3-256";
1846#elif defined(UDIF_PARAMATERS_SPHINCSF_MCELIECE_SF5M7)
1847static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-5f_mceliece-s7_rcs-256_sha3-256";
1849#define UDIF_SUITE_ID 13U
1850#elif defined(UDIF_PARAMATERS_SPHINCSPLUS_S5S256SHAKERS)
1851static const char UDIF_CONFIG_STRING[UDIF_PROTOCOL_SET_SIZE] =
"sphincs-5s_mceliece-s7_rcs-256_sha3-256";
1854# error Invalid parameter set!
1861#define UDIF_ROLE_STRING_SIZE 32U
1864static const char UDIF_ROLE_STRINGS[][UDIF_ROLE_STRING_SIZE] =
1872 "udif_role_revoked",
1884#define UDIF_ERROR_STRING_DEPTH 16U
1890#define UDIF_ERROR_STRING_SIZE 128U
1895static const char UDIF_IDENTITY_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
1898 "Invalid namespace code",
1899 "Invalid issuer domain code",
1900 "Invalid subject identifier",
1901 "Capability/permission mask invalid",
1902 "Claim anchor mismatch",
1903 "Signature verification failed",
1905 "Identity not yet valid"
1909static const char UDIF_CERTIFICATE_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
1912 "Unknown certificate type",
1913 "Bad or unknown serial number",
1914 "Invalid certificate chain",
1915 "Signature invalid",
1916 "Certificate expired",
1917 "Certificate not yet valid",
1918 "Policy hash mismatch",
1919 "Certificate revoked"
1923static const char UDIF_CLAIMS_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
1926 "Unknown claim type",
1928 "Canonicalization failed",
1930 "Invalid claim value"
1934static const char UDIF_CAPABILITY_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
1937 "Capability denied by policy",
1938 "Empty capability mask",
1939 "Conflicting capability bits"
1943static const char UDIF_POLICY_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
1947 "Policy hash mismatch",
1948 "Policy evaluation indeterminate"
1952static const char UDIF_ENCODING_ERROR_STRINGS[][UDIF_ERROR_STRING_SIZE] =
1957 "Bad format/version",
1958 "Unsupported encoding"
1969UDIF_EXPORT_API
typedef struct udif_time_window
1971 uint64_t not_before;
1980UDIF_EXPORT_API
typedef struct udif_capability_mask
1983} udif_capability_mask;
1990UDIF_EXPORT_API
typedef struct udif_permission_mask
1993} udif_permission_mask;
2000UDIF_EXPORT_API
typedef struct udif_identity_id
2010UDIF_EXPORT_API
typedef struct udif_namespace_code
2013} udif_namespace_code;
2020UDIF_EXPORT_API
typedef struct udif_issuer_domain_code
2023} udif_issuer_domain_code;
2030UDIF_EXPORT_API
typedef struct udif_policy_hash
2040UDIF_EXPORT_API
typedef struct udif_claim_anchor
2052UDIF_EXPORT_API
typedef enum udif_version_sets
2054 udif_version_set_none = 0x00U,
2055 udif_version_set_one_zero = 0x01U,
2064UDIF_EXPORT_API
typedef struct udif_certificate_expiration
2068} udif_certificate_expiration;
2074UDIF_EXPORT_API
typedef struct udif_child_certificate
2077 uint8_t verkey[UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE];
2081 udif_certificate_expiration expiration;
2086} udif_child_certificate;
2092#define UDIF_X509_CERTIFICATE_SIZE 4096U
2101#define UDIF_IDG_HINT_SIZE (UDIF_CERTIFICATE_HASH_SIZE + UDIF_CERTIFICATE_SERIAL_SIZE)
2107UDIF_EXPORT_API
typedef struct udif_idg_hint
2120UDIF_EXPORT_API
typedef struct udif_idg_certificate
2123 uint8_t vkey[UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE];
2124 uint8_t xcert[UDIF_X509_CERTIFICATE_SIZE];
2127 uint8_t hint[UDIF_IDG_HINT_SIZE];
2129 udif_certificate_expiration expiration;
2134} udif_idg_certificate;
2140UDIF_EXPORT_API
typedef struct udif_connection_state
2143 udif_cipher_state rxcpr;
2144 udif_cipher_state txcpr;
2149} udif_connection_state;
2155UDIF_EXPORT_API
typedef struct udif_keep_alive_state
2161} udif_keep_alive_state;
2167UDIF_EXPORT_API
typedef struct udif_network_packet
2174} udif_network_packet;
2184UDIF_EXPORT_API
typedef struct udif_root_certificate
2186 uint8_t verkey[UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE];
2189 udif_certificate_expiration expiration;
2191 udif_version_sets version;
2193} udif_root_certificate;
2199UDIF_EXPORT_API
typedef struct udif_serialized_symmetric_key
2204} udif_serialized_symmetric_key;
2210UDIF_EXPORT_API
typedef struct udif_signature_keypair
2212 uint8_t prikey[UDIF_ASYMMETRIC_SIGNING_KEY_SIZE];
2213 uint8_t pubkey[UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE];
2214} udif_signature_keypair;
2220UDIF_EXPORT_API
typedef struct udif_cipher_keypair
2222 uint8_t prikey[UDIF_ASYMMETRIC_PRIVATE_KEY_SIZE];
2223 uint8_t pubkey[UDIF_ASYMMETRIC_PUBLIC_KEY_SIZE];
2224} udif_cipher_keypair;
2233UDIF_EXPORT_API
typedef struct udif_claim
2236 const uint8_t* value;
2244UDIF_EXPORT_API
typedef struct udif_claim_set
2246 const udif_claim* items;
2248 udif_claim_anchor anchor;
2259UDIF_EXPORT_API
typedef struct udif_identity_record
2261 udif_namespace_code nspace;
2262 udif_issuer_domain_code issuer;
2263 udif_identity_id subject;
2264 udif_time_window validity;
2265 udif_permission_mask perms;
2266 udif_capability_mask caps;
2267 udif_policy_hash policy;
2268 udif_claim_anchor anchor;
2269 uint8_t verkey[UDIF_ASYMMETRIC_VERIFICATION_KEY_SIZE];
2271 uint8_t signature[UDIF_ASYMMETRIC_SIGNATURE_SIZE];
2272} udif_identity_record;
2281UDIF_EXPORT_API
typedef struct udif_token_header
2284 udif_namespace_code nspace;
2285 udif_issuer_domain_code issuer;
2286 udif_time_window validity;
2297UDIF_EXPORT_API
typedef struct udif_token
2299 udif_token_header head;
2300 udif_identity_id subject;
2301 udif_capability_mask caps;
2302 udif_permission_mask perms;
2304 uint32_t payload_len;
2306 uint8_t signature[UDIF_ASYMMETRIC_SIGNATURE_SIZE];
2316UDIF_EXPORT_API
typedef struct udif_encoded_blob
2323#define UDIF_NETWORK_ERROR_STRING_DEPTH 28U
2324#define UDIF_NETWORK_ERROR_STRING_SIZE 128U
2328static const char UDIF_NETWORK_ERROR_STRINGS[UDIF_NETWORK_ERROR_STRING_DEPTH][UDIF_NETWORK_ERROR_STRING_SIZE] =
2330 "No error was detected",
2331 "The socket accept function returned an error",
2332 "The cipher authentication has failed",
2333 "The keep alive check failed",
2334 "The communications channel has failed",
2335 "The device could not make a connnection to the remote host",
2336 "The decryption authentication has failed",
2337 "The transmission failed at the kex establish phase",
2338 "The connection experienced an unexpected error",
2339 "The server has run out of socket connections",
2340 "The random generator experienced a failure",
2341 "The input is invalid",
2342 "The request is invalid",
2343 "The keep alive has expired with no response",
2344 "The keepalive failure counter has exceeded maximum ",
2345 "The kex authentication has failed",
2346 "The key-id is not recognized",
2347 "The certificate has expired",
2348 "The listener function failed to initialize",
2349 "The server has run out of memory",
2350 "The random generator experienced a failure",
2351 "The random generator experienced a failure",
2352 "The ratchet operation has failed",
2353 "The receiver failed at the network layer",
2354 "The transmitter failed at the network layer",
2355 "The protocol version is unknown",
2356 "The packet was received out of sequence",
2357 "The expected data could not be verified"
2360#define UDIF_PROTOCOL_ERROR_STRING_DEPTH 44U
2361#define UDIF_PROTOCOL_ERROR_STRING_SIZE 128U
2363static const char UDIF_PROTOCOL_ERROR_STRINGS[UDIF_PROTOCOL_ERROR_STRING_DEPTH][UDIF_PROTOCOL_ERROR_STRING_SIZE] =
2365 "No error was detected",
2366 "The symmetric cipher had an authentication failure",
2367 "The node certificate could not be found",
2368 "The communications channel has failed",
2369 "The device could not make a connection to the remote host",
2370 "The transmission failed at the KEX connection phase",
2371 "The convergence call has returned an error",
2372 "The database is already synchronized",
2373 "The asymmetric cipher failed to decapsulate the shared secret",
2374 "The node or certificate decoding failed",
2375 "The decryption authentication has failed",
2376 "The transmission failed at the KEX establish phase",
2377 "The transmission failed at the KEX exchange phase",
2378 "The application could not delete a local file",
2379 "The file could not be found",
2380 "The file could not be written to storage",
2381 "The public-key hash is invalid",
2382 "The server has run out of socket connections",
2383 "The packet flag was unexpected",
2384 "The certificate has expired and is invalid",
2385 "The UDIF public key has expired ",
2386 "The key identity is unrecognized",
2387 "The listener function failed to initialize",
2388 "The server has run out of memory",
2389 "The network time is invalid or has substantial delay",
2390 "The expected data could not be verified",
2391 "The server has no usable IP address, assign in configuration",
2392 "The node is offline or not available for connection",
2393 "The node could not be found in the database",
2394 "The node was previously registered in the database",
2395 "The operation was cancelled by the user",
2396 "The packet header received was invalid",
2397 "The packet was received out of sequence",
2398 "The receiver failed at the network layer",
2399 "The root signature failed authentication",
2400 "The certificate could not be serialized",
2401 "The signature scheme could not sign a message",
2402 "The transmission failed to sign the data",
2403 "The socket could not be bound to an IP address",
2404 "The socket could not be created",
2405 "The transmitter failed at the network layer",
2406 "The topological database has no aps entries",
2407 "The protocol string was not recognized",
2408 "The transmission failed at the KEX verify phase"
2423UDIF_EXPORT_API
void udif_connection_close(qsc_socket* rsock,
udif_network_errors err,
bool notify);
2435UDIF_EXPORT_API
udif_protocol_errors udif_decrypt_packet(udif_connection_state* cns, uint8_t* message,
size_t* msglen,
const udif_network_packet* packetin);
2447UDIF_EXPORT_API
udif_protocol_errors udif_encrypt_packet(udif_connection_state* cns, udif_network_packet* packetout,
const uint8_t* message,
size_t msglen);
2454UDIF_EXPORT_API
void udif_connection_state_dispose(udif_connection_state* cns);
2479UDIF_EXPORT_API
void udif_packet_clear(udif_network_packet* packet);
2487UDIF_EXPORT_API
void udif_packet_error_message(udif_network_packet* packet,
udif_protocol_errors error);
2495UDIF_EXPORT_API
void udif_packet_header_deserialize(
const uint8_t* header, udif_network_packet* packet);
2503UDIF_EXPORT_API
void udif_packet_header_serialize(
const udif_network_packet* packet, uint8_t* header);
2510UDIF_EXPORT_API
void udif_packet_set_utc_time(udif_network_packet* packet);
2519UDIF_EXPORT_API
bool udif_packet_time_valid(
const udif_network_packet* packet);
2529UDIF_EXPORT_API
size_t udif_packet_to_stream(
const udif_network_packet* packet, uint8_t* pstream);
2537UDIF_EXPORT_API
void udif_stream_to_packet(
const uint8_t* pstream, udif_network_packet* packet);
#define UDIF_CERTIFICATE_HASH_SIZE
The size of the certificate hash in bytes.
Definition udif.h:892
#define UDIF_POLICY_HASH_SIZE
The size of a policy identifier hash in bytes.
Definition udif.h:765
udif_claim_type
Claim type identifiers (deterministic canonicalization required).
Definition udif.h:1444
@ udif_claim_unknown
Definition udif.h:1445
@ udif_claim_custom
Definition udif.h:1457
@ udif_claim_citizenship
Definition udif.h:1451
@ udif_claim_age_over
Definition udif.h:1450
@ udif_claim_address
Definition udif.h:1456
@ udif_claim_contact_email
Definition udif.h:1454
@ udif_claim_membership_id
Definition udif.h:1453
@ udif_claim_contact_phone
Definition udif.h:1455
@ udif_claim_commodity_id
Definition udif.h:1446
@ udif_claim_residency
Definition udif.h:1452
@ udif_claim_biometric_hash
Definition udif.h:1447
@ udif_claim_public_key
Definition udif.h:1449
@ udif_claim_institution_id
Definition udif.h:1448
udif_network_errors
The UDIF network error values.
Definition udif.h:1315
@ udif_network_error_bad_keep_alive
Definition udif.h:1319
@ udif_network_error_connection_failure
Definition udif.h:1321
@ udif_network_error_kex_auth_failure
Definition udif.h:1331
@ udif_network_error_identity_unknown
Definition udif.h:1326
@ udif_network_error_listener_fail
Definition udif.h:1334
@ udif_network_error_invalid_request
Definition udif.h:1328
@ udif_network_error_channel_down
Definition udif.h:1320
@ udif_network_error_general_failure
Definition udif.h:1324
@ udif_network_error_key_not_recognized
Definition udif.h:1332
@ udif_network_error_establish_failure
Definition udif.h:1323
@ udif_network_error_unsequenced
Definition udif.h:1342
@ udif_network_error_accept_fail
Definition udif.h:1317
@ udif_network_error_random_failure
Definition udif.h:1337
@ udif_network_error_none
Definition udif.h:1316
@ udif_network_error_memory_allocation
Definition udif.h:1335
@ udif_network_error_verify_failure
Definition udif.h:1343
@ udif_network_error_keep_alive_timeout
Definition udif.h:1330
@ udif_network_error_hosts_exceeded
Definition udif.h:1325
@ udif_network_error_auth_failure
Definition udif.h:1318
@ udif_network_error_keep_alive_expired
Definition udif.h:1329
@ udif_network_error_decryption_failure
Definition udif.h:1322
@ udif_network_error_ratchet_fail
Definition udif.h:1338
@ udif_network_error_unknown_protocol
Definition udif.h:1341
@ udif_network_error_invalid_input
Definition udif.h:1327
@ udif_network_error_transmit_failure
Definition udif.h:1340
@ udif_network_error_key_has_expired
Definition udif.h:1333
@ udif_network_error_packet_unsequenced
Definition udif.h:1336
@ udif_network_error_receive_failure
Definition udif.h:1339
udif_network_flags
The UDIF network flags.
Definition udif.h:1351
@ udif_network_flag_network_remote_signing_response
Definition udif.h:1384
@ udif_network_flag_tunnel_session_established
Definition udif.h:1374
@ udif_network_flag_topology_status_request
Definition udif.h:1378
@ udif_network_flag_incremental_update_request
Definition udif.h:1355
@ udif_network_flag_none
Definition udif.h:1352
@ udif_network_flag_network_converge_update
Definition udif.h:1366
@ udif_network_flag_register_response
Definition udif.h:1358
@ udif_network_flag_network_revocation_broadcast
Definition udif.h:1369
@ udif_network_flag_register_update_response
Definition udif.h:1360
@ udif_network_flag_connection_terminate_request
Definition udif.h:1353
@ udif_network_flag_network_converge_response
Definition udif.h:1365
@ udif_network_flag_network_announce_broadcast
Definition udif.h:1363
@ udif_network_flag_tunnel_encrypted_message
Definition udif.h:1373
@ udif_network_flag_topology_status_available
Definition udif.h:1380
@ udif_network_flag_register_update_request
Definition udif.h:1359
@ udif_network_flag_error_condition
Definition udif.h:1354
@ udif_network_flag_register_request
Definition udif.h:1357
@ udif_network_flag_network_resign_response
Definition udif.h:1368
@ udif_network_flag_topology_query_response
Definition udif.h:1377
@ udif_network_flag_topology_status_response
Definition udif.h:1379
@ udif_network_flag_system_error_condition
Definition udif.h:1371
@ udif_network_flag_topology_status_unavailable
Definition udif.h:1382
@ udif_network_flag_incremental_update_response
Definition udif.h:1356
@ udif_network_flag_network_remote_signing_request
Definition udif.h:1383
@ udif_network_flag_keep_alive_response
Definition udif.h:1362
@ udif_network_flag_keep_alive_request
Definition udif.h:1361
@ udif_network_flag_tunnel_transfer_request
Definition udif.h:1375
@ udif_network_flag_topology_status_synchronized
Definition udif.h:1381
@ udif_network_flag_tunnel_connection_terminate
Definition udif.h:1372
@ udif_network_flag_network_resign_request
Definition udif.h:1367
@ udif_network_flag_network_converge_request
Definition udif.h:1364
@ udif_network_flag_topology_query_request
Definition udif.h:1376
@ udif_network_flag_network_signature_request
Definition udif.h:1370
udif_capability_id
Canonical capability identifiers (bit positions map to the mask).
Definition udif.h:1477
@ udif_cap_issue_token
Definition udif.h:1480
@ udif_cap_register_issuer
Definition udif.h:1482
@ udif_cap_audit_log_access
Definition udif.h:1485
@ udif_cap_issue_certificate
Definition udif.h:1478
@ udif_cap_directory_query
Definition udif.h:1484
@ udif_cap_revoke_certificate
Definition udif.h:1479
@ udif_cap_rotate_keys
Definition udif.h:1483
@ udif_cap_validate_token
Definition udif.h:1481
@ udif_cap_admin
Definition udif.h:1486
#define UDIF_CERTIFICATE_SIGNED_HASH_SIZE
The size of the signature and hash field in a certificate.
Definition udif.h:935
#define UDIF_NAMESPACE_CODE_SIZE
The size of a namespace code (short string or numeric).
Definition udif.h:1123
udif_error_policy
Policy evaluation/lookup errors.
Definition udif.h:1621
@ udif_epol_none
Definition udif.h:1622
@ udif_epol_not_found
Definition udif.h:1623
@ udif_epol_indeterminate
Definition udif.h:1625
@ udif_epol_hash_mismatch
Definition udif.h:1624
udif_error_certificate
Certificate-specific error codes.
Definition udif.h:1578
@ udif_ecert_expired
Definition udif.h:1584
@ udif_ecert_policy_mismatch
Definition udif.h:1586
@ udif_ecert_serial_bad
Definition udif.h:1581
@ udif_ecert_chain_invalid
Definition udif.h:1582
@ udif_ecert_revoked
Definition udif.h:1587
@ udif_ecert_none
Definition udif.h:1579
@ udif_ecert_future
Definition udif.h:1585
@ udif_ecert_type_unknown
Definition udif.h:1580
@ udif_ecert_sig_invalid
Definition udif.h:1583
udif_network_designations
The UDIF device designation.
Definition udif.h:1297
@ udif_network_designation_none
Definition udif.h:1298
@ udif_network_designation_ura
Definition udif.h:1303
@ udif_network_designation_all
Definition udif.h:1307
@ udif_network_designation_uua
Definition udif.h:1306
@ udif_network_designation_idg
Definition udif.h:1305
@ udif_network_designation_revoked
Definition udif.h:1304
@ udif_network_designation_ubc
Definition udif.h:1299
@ udif_network_designation_remote
Definition udif.h:1302
@ udif_network_designation_client
Definition udif.h:1300
@ udif_network_designation_ugc
Definition udif.h:1301
udif_error_identity
Identity-specific error codes.
Definition udif.h:1561
@ udif_eid_mask_invalid
Definition udif.h:1566
@ udif_eid_expired
Definition udif.h:1569
@ udif_eid_subject_bad
Definition udif.h:1565
@ udif_eid_issuer_bad
Definition udif.h:1564
@ udif_eid_namespace_bad
Definition udif.h:1563
@ udif_eid_future
Definition udif.h:1570
@ udif_eid_none
Definition udif.h:1562
@ udif_eid_sig_invalid
Definition udif.h:1568
@ udif_eid_anchor_mismatch
Definition udif.h:1567
#define UDIF_ISSUER_DOMAIN_CODE_SIZE
The size of an issuer domain code (unique identifier).
Definition udif.h:1129
#define UDIF_IDENTITY_ID_SIZE
The size of a subject identity identifier in bytes.
Definition udif.h:1135
#define UDIF_CERTIFICATE_SERIAL_SIZE
The certificate serial number field length.
Definition udif.h:923
#define UDIF_CLAIM_ANCHOR_SIZE
The size of a claim anchor or merkle root in bytes.
Definition udif.h:759
udif_protocol_errors
The UDIF protocol error values.
Definition udif.h:1392
@ udif_protocol_error_convergence_synchronized
Definition udif.h:1400
@ udif_protocol_error_key_expired
Definition udif.h:1413
@ udif_protocol_error_message_time_invalid
Definition udif.h:1417
@ udif_protocol_error_connect_failure
Definition udif.h:1398
@ udif_protocol_error_node_not_available
Definition udif.h:1420
@ udif_protocol_error_signature_failure
Definition udif.h:1429
@ udif_protocol_error_file_not_found
Definition udif.h:1407
@ udif_protocol_error_no_usable_address
Definition udif.h:1419
@ udif_protocol_error_root_signature_invalid
Definition udif.h:1427
@ udif_protocol_error_serialization_failure
Definition udif.h:1428
@ udif_protocol_error_topology_no_aps
Definition udif.h:1434
@ udif_protocol_error_decapsulation_failure
Definition udif.h:1401
@ udif_protocol_error_establish_failure
Definition udif.h:1404
@ udif_protocol_error_node_not_found
Definition udif.h:1421
@ udif_protocol_error_file_not_written
Definition udif.h:1408
@ udif_protocol_error_channel_down
Definition udif.h:1396
@ udif_protocol_error_memory_allocation
Definition udif.h:1416
@ udif_protocol_error_packet_unsequenced
Definition udif.h:1425
@ udif_protocol_error_listener_fail
Definition udif.h:1415
@ udif_protocol_error_decryption_failure
Definition udif.h:1403
@ udif_protocol_error_connection_failure
Definition udif.h:1397
@ udif_protocol_error_file_not_deleted
Definition udif.h:1406
@ udif_protocol_error_certificate_expired
Definition udif.h:1412
@ udif_protocol_error_key_unrecognized
Definition udif.h:1414
@ udif_protocol_error_node_was_registered
Definition udif.h:1422
@ udif_protocol_error_receive_failure
Definition udif.h:1426
@ udif_protocol_error_certificate_not_found
Definition udif.h:1395
@ udif_protocol_error_invalid_request
Definition udif.h:1411
@ udif_protocol_error_verification_failure
Definition udif.h:1436
@ udif_protocol_error_unknown_protocol
Definition udif.h:1435
@ udif_protocol_error_hash_invalid
Definition udif.h:1409
@ udif_protocol_error_transmit_failure
Definition udif.h:1433
@ udif_protocol_error_decoding_failure
Definition udif.h:1402
@ udif_protocol_error_message_verification_failure
Definition udif.h:1418
@ udif_protocol_error_hosts_exceeded
Definition udif.h:1410
@ udif_protocol_error_socket_binding
Definition udif.h:1431
@ udif_protocol_error_authentication_failure
Definition udif.h:1394
@ udif_protocol_error_none
Definition udif.h:1393
@ udif_protocol_error_convergence_failure
Definition udif.h:1399
@ udif_protocol_error_exchange_failure
Definition udif.h:1405
@ udif_protocol_error_signing_failure
Definition udif.h:1430
@ udif_protocol_error_packet_header_invalid
Definition udif.h:1424
@ udif_protocol_error_operation_cancelled
Definition udif.h:1423
@ udif_protocol_error_socket_creation
Definition udif.h:1432
udif_token_type
Token families issued/validated within UDIF.
Definition udif.h:1465
@ udif_token_session
Definition udif.h:1469
@ udif_token_attestation
Definition udif.h:1468
@ udif_token_none
Definition udif.h:1466
@ udif_token_capability
Definition udif.h:1467
udif_error_encoding
Encoding/decoding errors for UDIF objects.
Definition udif.h:1633
@ udif_eenc_none
Definition udif.h:1634
@ udif_eenc_overflow
Definition udif.h:1635
@ udif_eenc_format
Definition udif.h:1637
@ udif_eenc_underflow
Definition udif.h:1636
@ udif_eenc_unsupported
Definition udif.h:1638
#define UDIF_CAPABILITY_MASK_SIZE
The size of a capability mask in hex characters.
Definition udif.h:777
udif_verify_policy
Verification strictness for identity/cert/claim checks.
Definition udif.h:1523
@ udif_verify_lenient
Definition udif.h:1525
@ udif_verify_strict
Definition udif.h:1524
#define UDIF_CAPABILITY_TOKEN_MAX_SIZE
The maximum size of a serialized capability token.
Definition udif.h:783
udif_permission_class
Permission classes whose bits populate the permission mask.
Definition udif.h:1494
@ udif_perm_export_identity
Definition udif.h:1502
@ udif_perm_write_claims
Definition udif.h:1496
@ udif_perm_import_identity
Definition udif.h:1503
@ udif_perm_delegate
Definition udif.h:1501
@ udif_perm_read_claims
Definition udif.h:1495
@ udif_perm_manage_caps
Definition udif.h:1500
@ udif_perm_read_certs
Definition udif.h:1497
@ udif_perm_write_certs
Definition udif.h:1498
@ udif_perm_manage_policy
Definition udif.h:1499
udif_time_validation
Results of time/validity-window checks.
Definition udif.h:1533
@ udif_time_skew_exceeds
Definition udif.h:1537
@ udif_time_valid
Definition udif.h:1534
@ udif_time_expired
Definition udif.h:1536
@ udif_time_future
Definition udif.h:1535
#define UDIF_CRYPTO_SYMMETRIC_NONCE_SIZE
The byte length of the symmetric cipher nonce.
Definition udif.h:1224
udif_policy_decision
Policy evaluation outcome.
Definition udif.h:1511
@ udif_policy_permit
Definition udif.h:1512
@ udif_policy_deny
Definition udif.h:1513
@ udif_policy_not_applicable
Definition udif.h:1515
@ udif_policy_indeterminate
Definition udif.h:1514
udif_status
Generic status codes for UDIF operations.
Definition udif.h:1545
@ udif_status_internal_error
Definition udif.h:1553
@ udif_status_out_of_memory
Definition udif.h:1550
@ udif_status_not_found
Definition udif.h:1548
@ udif_status_invalid_argument
Definition udif.h:1547
@ udif_status_buffer_too_small
Definition udif.h:1551
@ udif_status_already_exists
Definition udif.h:1549
@ udif_status_not_supported
Definition udif.h:1552
@ udif_status_success
Definition udif.h:1546
udif_configuration_sets
The UDIF algorithm configuration sets.
Definition udif.h:1274
@ udif_configuration_set_sphincsplus1s_mceliece1_rcs256_shake256
Definition udif.h:1281
@ udif_configuration_set_none
Definition udif.h:1275
@ udif_configuration_set_sphincsplus5f_mceliece7_rcs256_shake256
Definition udif.h:1288
@ udif_configuration_set_sphincsplus5s_mceliece7_rcs256_shake256
Definition udif.h:1289
@ udif_configuration_set_dilithium1_kyber1_rcs256_shake256
Definition udif.h:1276
@ udif_configuration_set_sphincsplus3f_mceliece3_rcs256_shake256
Definition udif.h:1282
@ udif_configuration_set_sphincsplus3s_mceliece3_rcs256_shake256
Definition udif.h:1283
@ udif_configuration_set_dilithium5_kyber5_rcs256_shake256
Definition udif.h:1278
@ udif_configuration_set_sphincsplus5s_mceliece6_rcs256_shake256
Definition udif.h:1287
@ udif_configuration_set_dilithium5_kyber6_rcs512_shake256
Definition udif.h:1279
@ udif_configuration_set_dilithium3_kyber3_rcs256_shake256
Definition udif.h:1277
@ udif_configuration_set_sphincsplus1f_mceliece1_rcs256_shake256
Definition udif.h:1280
@ udif_configuration_set_sphincsplus5s_mceliece5_rcs256_shake256
Definition udif.h:1285
@ udif_configuration_set_sphincsplus5f_mceliece5_rcs256_shake256
Definition udif.h:1284
@ udif_configuration_set_sphincsplus5f_mceliece6_rcs256_shake256
Definition udif.h:1286
#define UDIF_CERTIFICATE_ISSUER_SIZE
The maximum certificate issuer string length. The last character must be a string terminator.
Definition udif.h:899
#define UDIF_PERMISSION_MASK_SIZE
The size of a permission mask in bytes.
Definition udif.h:771
udif_error_capability
Capability/permission evaluation errors.
Definition udif.h:1609
@ udif_ecap_denied
Definition udif.h:1611
@ udif_ecap_mask_conflict
Definition udif.h:1613
@ udif_ecap_mask_empty
Definition udif.h:1612
@ udif_ecap_none
Definition udif.h:1610
udif_error_claims
Claim/claim-set error codes.
Definition udif.h:1595
@ udif_ecl_value_invalid
Definition udif.h:1601
@ udif_ecl_canonical_fail
Definition udif.h:1599
@ udif_ecl_anchor_bad
Definition udif.h:1600
@ udif_ecl_none
Definition udif.h:1596
@ udif_ecl_encoding_bad
Definition udif.h:1598
@ udif_ecl_type_unknown
Definition udif.h:1597
#define UDIF_CRYPTO_SYMMETRIC_KEY_SIZE
The byte length of the symmetric cipher key.
Definition udif.h:998