The functionality of the CMC data structures and functions can be augmented through the use of CMC data extensions. Data extensions are used to add additional fields to data structures and additional parameters to a function.
A standard generic data structure, CMC_extension, specifies the item code, item data, item reference, and a bitmask of flags. The item code is the name of the extension and is used to identify it. The item data, depending on the item code, contains either the length of the item value, the item value itself, or other information about the item. The item reference points to where the extension value is stored or is NULL if there is no related item storage. The flags are set to zero or to values that describe options for the extension. To use an extension in a CMC function, a client application sets the item code member of a CMC_extension structure to a valid name and passes the structure as part of the parameter list.
Extensions that are additional parameters to a function can be either input or output parameters. If the extension is passed as an input parameter, the calling client application or service provider allocates memory for the CMC_extension structure and any other structures that are associated with the extension. If the extension is passed as an output parameter, CMC allocates the storage for the extension result and the caller frees it by calling the cmc_free function.
The following extensions make up the CMC common extension set, the extensions that are common to most CMC implementations but are not in the CMC base specification. The extensions are listed in alphabetical order. Each reference entry describes the purpose of the extension.