## keysdata keysdata — Crypto key data object functions. |

## Stability Level

Stable, unless otherwise indicated

## Functions

xmlSecPtrListPtr | xmlSecKeyDataIdsGet ()
int | xmlSecKeyDataIdsInit ()
void | xmlSecKeyDataIdsShutdown ()
int | xmlSecKeyDataIdsRegisterDefault ()
int | xmlSecKeyDataIdsRegister ()
xmlSecKeyDataPtr | xmlSecKeyDataCreate ()
xmlSecKeyDataPtr | xmlSecKeyDataDuplicate ()
void | xmlSecKeyDataDestroy ()
int | xmlSecKeyDataGenerate ()
xmlSecKeyDataType | xmlSecKeyDataGetType ()
xmlSecSize | xmlSecKeyDataGetSize ()
const xmlChar * | xmlSecKeyDataGetIdentifier ()
void | xmlSecKeyDataDebugDump ()
void | xmlSecKeyDataDebugXmlDump ()
int | xmlSecKeyDataXmlRead ()
int | xmlSecKeyDataXmlWrite ()
int | xmlSecKeyDataBinRead ()
int | xmlSecKeyDataBinWrite ()
#define | xmlSecKeyDataGetName()
#define | xmlSecKeyDataIsValid()
#define | xmlSecKeyDataCheckId()
#define | xmlSecKeyDataCheckUsage()
#define | xmlSecKeyDataCheckSize()
int | (*xmlSecKeyDataInitMethod) ()
int | (*xmlSecKeyDataDuplicateMethod) ()
void | (*xmlSecKeyDataFinalizeMethod) ()
int | (*xmlSecKeyDataXmlReadMethod) ()
int | (*xmlSecKeyDataXmlWriteMethod) ()
int | (*xmlSecKeyDataBinReadMethod) ()
int | (*xmlSecKeyDataBinWriteMethod) ()
int | (*xmlSecKeyDataGenerateMethod) ()
xmlSecKeyDataType | (*xmlSecKeyDataGetTypeMethod) ()
xmlSecSize | (*xmlSecKeyDataGetSizeMethod) ()
const xmlChar * | (*xmlSecKeyDataGetIdentifierMethod) ()
void | (*xmlSecKeyDataDebugDumpMethod) ()
#define | xmlSecKeyDataKlassGetName()
xmlSecPtrListId | xmlSecKeyDataListGetKlass ()
xmlSecPtrListId | xmlSecKeyDataIdListGetKlass ()
int | xmlSecKeyDataIdListFind ()
xmlSecKeyDataId | xmlSecKeyDataIdListFindByNode ()
xmlSecKeyDataId | xmlSecKeyDataIdListFindByHref ()
xmlSecKeyDataId | xmlSecKeyDataIdListFindByName ()
void | xmlSecKeyDataIdListDebugDump ()
void | xmlSecKeyDataIdListDebugXmlDump ()
int | xmlSecKeyDataBinaryValueInitialize ()
int | xmlSecKeyDataBinaryValueDuplicate ()
void | xmlSecKeyDataBinaryValueFinalize ()
int | xmlSecKeyDataBinaryValueXmlRead ()
int | xmlSecKeyDataBinaryValueXmlWrite ()
int | xmlSecKeyDataBinaryValueBinRead ()
int | xmlSecKeyDataBinaryValueBinWrite ()
void | xmlSecKeyDataBinaryValueDebugDump ()
void | xmlSecKeyDataBinaryValueDebugXmlDump ()
xmlSecSize | xmlSecKeyDataBinaryValueGetSize ()
xmlSecBufferPtr | xmlSecKeyDataBinaryValueGetBuffer ()
int | xmlSecKeyDataBinaryValueSetBuffer ()
xmlSecKeyDataStorePtr | xmlSecKeyDataStoreCreate ()
void | xmlSecKeyDataStoreDestroy ()
#define | xmlSecKeyDataStoreGetName()
#define | xmlSecKeyDataStoreIsValid()
#define | xmlSecKeyDataStoreCheckId()
#define | xmlSecKeyDataStoreCheckSize()
int | (*xmlSecKeyDataStoreInitializeMethod) ()
void | (*xmlSecKeyDataStoreFinalizeMethod) ()
#define | xmlSecKeyDataStoreKlassGetName()
xmlSecPtrListId | xmlSecKeyDataStorePtrListGetKlass ()
void | xmlSecImportSetPersistKey ()
int | xmlSecImportGetPersistKey ()

## Types and Values

typedef | xmlSecKeyDataUsage
#define | xmlSecKeyDataUsageUnknown
#define | xmlSecKeyDataUsageKeyInfoNodeRead
#define | xmlSecKeyDataUsageKeyInfoNodeWrite
#define | xmlSecKeyDataUsageKeyValueNodeRead
#define | xmlSecKeyDataUsageKeyValueNodeWrite
#define | xmlSecKeyDataUsageRetrievalMethodNodeXml
#define | xmlSecKeyDataUsageRetrievalMethodNodeBin
#define | xmlSecKeyDataUsageAny
#define | xmlSecKeyDataUsageKeyInfoNode
#define | xmlSecKeyDataUsageKeyValueNode
#define | xmlSecKeyDataUsageRetrievalMethodNode
typedef | xmlSecKeyDataType
#define | xmlSecKeyDataTypeUnknown
#define | xmlSecKeyDataTypeNone
#define | xmlSecKeyDataTypePublic
#define | xmlSecKeyDataTypePrivate
#define | xmlSecKeyDataTypeSymmetric
#define | xmlSecKeyDataTypeSession
#define | xmlSecKeyDataTypePermanent
#define | xmlSecKeyDataTypeTrusted
#define | xmlSecKeyDataTypeAny
enum | xmlSecKeyDataFormat
struct | xmlSecKeyData
#define | xmlSecKeyDataIdUnknown
struct | xmlSecKeyDataKlass
#define | xmlSecKeyDataListId
#define | xmlSecKeyDataIdListId
#define | xmlSecKeyDataBinarySize
struct | xmlSecKeyDataStore
#define | xmlSecKeyDataStoreIdUnknown
struct | xmlSecKeyDataStoreKlass
#define | xmlSecKeyDataStorePtrListId

## Description

## Functions

### xmlSecKeyDataIdsGet ()

    xmlSecPtrListPtr
    xmlSecKeyDataIdsGet (void);

Gets global registered key data klasses list.

#### Returns

the pointer to list of all registered key data klasses.

### xmlSecKeyDataIdsInit ()

    int
    xmlSecKeyDataIdsInit (void);

Initializes the key data klasses. This function is called from the xmlSecInit function and the application should not call it directly.

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataIdsShutdown ()

    void
    xmlSecKeyDataIdsShutdown (void);

Shuts down the keys data klasses. This function is called from the xmlSecShutdown function and the application should not call it directly.

### xmlSecKeyDataIdsRegisterDefault ()

    int
    xmlSecKeyDataIdsRegisterDefault (void);

Registers default (implemented by XML Security Library) key data klasses: <dsig:KeyName/> element processing klass,

<dsig:KeyValue/> element processing klass, ...

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataIdsRegister ()

    int
    xmlSecKeyDataIdsRegister (xmlSecKeyDataId id);

Registers `id` in the global list of key data klasses.

#### Parameters

id | the key data klass. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataCreate ()

    xmlSecKeyDataPtr
    xmlSecKeyDataCreate (xmlSecKeyDataId id);

Allocates and initializes new key data of the specified type `id` . Caller is responsible for destroying returned object with xmlSecKeyDataDestroy function.

#### Parameters

id | the data id. |

#### Returns

the pointer to newly allocated key data structure or NULL if an error occurs.

### xmlSecKeyDataDuplicate ()

    xmlSecKeyDataPtr
    xmlSecKeyDataDuplicate (xmlSecKeyDataPtr data);

Creates a duplicate of the given `data` . Caller is responsible for destroying returned object with xmlSecKeyDataDestroy function.

#### Parameters

data | the pointer to the key data. |

#### Returns

the pointer to newly allocated key data structure or NULL if an error occurs.

### xmlSecKeyDataDestroy ()

    void
    xmlSecKeyDataDestroy (xmlSecKeyDataPtr data);

Destroys the data and frees all allocated memory.

#### Parameters

data | the pointer to the key data. |

### xmlSecKeyDataGenerate ()

    int
    xmlSecKeyDataGenerate (xmlSecKeyDataPtr data,
                           xmlSecSize sizeBits,
                           xmlSecKeyDataType type);

Generates new key data of given size and type.

#### Parameters

data | the pointer to key data. |
sizeBits | the desired key data size (in bits). |
type | the desired key data type. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataGetType ()

    xmlSecKeyDataType
    xmlSecKeyDataGetType (xmlSecKeyDataPtr data);

Gets key data type.

#### Parameters

data | the pointer to key data. |

#### Returns

key data type.

### xmlSecKeyDataGetSize ()

    xmlSecSize
    xmlSecKeyDataGetSize (xmlSecKeyDataPtr data);

Gets key data size.

#### Parameters

data | the pointer to key data. |

#### Returns

key data size (in bits).

### xmlSecKeyDataGetIdentifier ()

    const xmlChar *
    xmlSecKeyDataGetIdentifier (xmlSecKeyDataPtr data);

Gets key data identifier string.

#### Parameters

data | the pointer to key data. |

#### Returns

key data id string.

### xmlSecKeyDataDebugDump ()

    void
    xmlSecKeyDataDebugDump (xmlSecKeyDataPtr data,
                            FILE *output);

Prints key data debug info.

#### Parameters

data | the pointer to key data. |
output | the pointer to output FILE. |

### xmlSecKeyDataDebugXmlDump ()

    void
    xmlSecKeyDataDebugXmlDump (xmlSecKeyDataPtr data,
                               FILE *output);

Prints key data debug info in XML format.

#### Parameters

data | the pointer to key data. |
output | the pointer to output FILE. |

### xmlSecKeyDataXmlRead ()

    int
    xmlSecKeyDataXmlRead (xmlSecKeyDataId id,
                          xmlSecKeyPtr key,
                          xmlNodePtr node,
                          xmlSecKeyInfoCtxPtr keyInfoCtx);

Reads the key data of klass `id` from XML `node` and adds them to `key` .

#### Parameters

id | the data klass. |
key | the destination key. |
node | the pointer to an XML node. |
keyInfoCtx | the pointer to <dsig:KeyInfo/> element processing context. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataXmlWrite ()

    int
    xmlSecKeyDataXmlWrite (xmlSecKeyDataId id,
                           xmlSecKeyPtr key,
                           xmlNodePtr node,
                           xmlSecKeyInfoCtxPtr keyInfoCtx);

Writes the key data of klass `id` from `key` to an XML `node` .

#### Parameters

id | the data klass. |
key | the source key. |
node | the pointer to an XML node. |
keyInfoCtx | the pointer to <dsig:KeyInfo/> element processing context. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataBinRead ()

    int
    xmlSecKeyDataBinRead (xmlSecKeyDataId id,
                          xmlSecKeyPtr key,
                          const xmlSecByte *buf,
                          xmlSecSize bufSize,
                          xmlSecKeyInfoCtxPtr keyInfoCtx);

Reads the key data of klass `id` from binary buffer `buf` to `key` .

#### Parameters

id | the data klass. |
key | the destination key. |
buf | the input binary buffer. |
bufSize | the input buffer size. |
keyInfoCtx | the <dsig:KeyInfo/> node processing context. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataBinWrite ()

    int
    xmlSecKeyDataBinWrite (xmlSecKeyDataId id,
                           xmlSecKeyPtr key,
                           xmlSecByte **buf,
                           xmlSecSize *bufSize,
                           xmlSecKeyInfoCtxPtr keyInfoCtx);

Writes the key data of klass `id` from the `key` to a binary buffer `buf` .

#### Parameters

id | the data klass. |
key | the source key. |
buf | the output binary buffer. |
bufSize | the output buffer size. |
keyInfoCtx | the <dsig:KeyInfo/> node processing context. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataGetName()

    #define             xmlSecKeyDataGetName(data)

Macro. Returns the key data name.

#### Parameters

data | the pointer to key data. |

### xmlSecKeyDataIsValid()

    #define             xmlSecKeyDataIsValid(data)

Macro. Returns 1 if `data` is not NULL and `data->id` is not NULL or 0 otherwise.

#### Parameters

data | the pointer to data. |

### xmlSecKeyDataCheckId()

    #define             xmlSecKeyDataCheckId(data, dataId)

Macro. Returns 1 if `data` is valid and `data` 's id is equal to `dataId` .

#### Parameters

data | the pointer to data. |
dataId | the data Id. |

### xmlSecKeyDataCheckUsage()

    #define             xmlSecKeyDataCheckUsage(data, usg)

Macro. Returns 1 if `data` is valid and could be used for `usg` .

#### Parameters

data | the pointer to data. |
usg | the data usage. |

### xmlSecKeyDataCheckSize()

    #define             xmlSecKeyDataCheckSize(data, size)

Macro. Returns 1 if `data` is valid and `data` 's object has at least `size` bytes.

#### Parameters

data | the pointer to data. |
size | the expected size. |

### xmlSecKeyDataInitMethod ()

    int
    (*xmlSecKeyDataInitMethod) (xmlSecKeyDataPtr data);

Key data specific initialization method.

#### Parameters

data | the pointer to key data. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataDuplicateMethod ()

    int
    (*xmlSecKeyDataDuplicateMethod) (xmlSecKeyDataPtr dst,
                                     xmlSecKeyDataPtr src);

Key data specific duplication (copy) method.

#### Parameters

dst | the pointer to destination key data. |
src | the pointer to source key data. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataFinalizeMethod ()

    void
    (*xmlSecKeyDataFinalizeMethod) (xmlSecKeyDataPtr data);

Key data specific finalization method. All the objects and resources allocated by the key data object must be freed inside this method.

#### Parameters

data | the data. |

### xmlSecKeyDataXmlReadMethod ()

    int
    (*xmlSecKeyDataXmlReadMethod) (xmlSecKeyDataId id,
                                   xmlSecKeyPtr key,
                                   xmlNodePtr node,
                                   xmlSecKeyInfoCtxPtr keyInfoCtx);

Key data specific method for reading XML node.

#### Parameters

id | the data id. |
key | the key. |
node | the pointer to data's value XML node. |
keyInfoCtx | the <dsig:KeyInfo/> node processing context. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataXmlWriteMethod ()

    int
    (*xmlSecKeyDataXmlWriteMethod) (xmlSecKeyDataId id,
                                    xmlSecKeyPtr key,
                                    xmlNodePtr node,
                                    xmlSecKeyInfoCtxPtr keyInfoCtx);

Key data specific method for writing XML node.

#### Parameters

id | the data id. |
key | the key. |
node | the pointer to data's value XML node. |
keyInfoCtx | the <dsig:KeyInfo/> node processing context. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataBinReadMethod ()

    int
    (*xmlSecKeyDataBinReadMethod) (xmlSecKeyDataId id,
                                   xmlSecKeyPtr key,
                                   const xmlSecByte *buf,
                                   xmlSecSize bufSize,
                                   xmlSecKeyInfoCtxPtr keyInfoCtx);

Key data specific method for reading binary buffer.

#### Parameters

id | the data id. |
key | the key. |
buf | the input buffer. |
bufSize | the buffer size. |
keyInfoCtx | the <dsig:KeyInfo/> node processing context. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataBinWriteMethod ()

    int
    (*xmlSecKeyDataBinWriteMethod) (xmlSecKeyDataId id,
                                    xmlSecKeyPtr key,
                                    xmlSecByte **buf,
                                    xmlSecSize *bufSize,
                                    xmlSecKeyInfoCtxPtr keyInfoCtx);

Key data specific method for reading binary buffer.

#### Parameters

id | the data id. |
key | the key. |
buf | the output buffer. |
bufSize | the buffer size. |
keyInfoCtx | the <dsig:KeyInfo/> node processing context. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataGenerateMethod ()

    int
    (*xmlSecKeyDataGenerateMethod) (xmlSecKeyDataPtr data,
                                    xmlSecSize sizeBits,
                                    xmlSecKeyDataType type);

Key data specific method for generating new key data.

#### Parameters

data | the pointer to key data. |
sizeBits | the key data specific size. |
type | the required key type (session/permanent, etc.) |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataGetTypeMethod ()

    xmlSecKeyDataType
    (*xmlSecKeyDataGetTypeMethod) (xmlSecKeyDataPtr data);

Key data specific method to get the key type.

#### Parameters

data | the data. |

#### Returns

the key type.

### xmlSecKeyDataGetSizeMethod ()

    xmlSecSize
    (*xmlSecKeyDataGetSizeMethod) (xmlSecKeyDataPtr data);

Key data specific method to get the key size.

#### Parameters

data | the pointer to key data. |

#### Returns

the key size in bits.

### xmlSecKeyDataGetIdentifierMethod ()

    const xmlChar *
    (*xmlSecKeyDataGetIdentifierMethod) (xmlSecKeyDataPtr data);

Key data specific method to get the key data identifier string (for example, X509 data identifier is the subject of the verified cert).

#### Parameters

data | the pointer to key data. |

#### Returns

the identifier string or NULL if an error occurs.

### xmlSecKeyDataDebugDumpMethod ()

    void
    (*xmlSecKeyDataDebugDumpMethod) (xmlSecKeyDataPtr data,
                                     FILE *output);

Key data specific method for printing debug info.

#### Parameters

data | the data. |
output | the FILE to print debug info (should be open for writing). |

### xmlSecKeyDataKlassGetName()

    #define             xmlSecKeyDataKlassGetName(klass)

Macro. Returns data klass name.

#### Parameters

klass | the data klass. |

### xmlSecKeyDataListGetKlass ()

    xmlSecPtrListId
    xmlSecKeyDataListGetKlass (void);

The key data list klass.

#### Returns

pointer to the key data list klass.

### xmlSecKeyDataIdListGetKlass ()

    xmlSecPtrListId
    xmlSecKeyDataIdListGetKlass (void);

The key data id list klass.

#### Returns

pointer to the key data id list klass.

### xmlSecKeyDataIdListFind ()

    int
    xmlSecKeyDataIdListFind (xmlSecPtrListPtr list,
                             xmlSecKeyDataId dataId);

Lookups `dataId` in `list` .

#### Parameters

list | the pointer to key data ids list. |
dataId | the key data klass. |

#### Returns

1 if `dataId` is found in the `list` , 0 if not and a negative value if an error occurs.

### xmlSecKeyDataIdListFindByNode ()

    xmlSecKeyDataId
    xmlSecKeyDataIdListFindByNode (xmlSecPtrListPtr list,
                                   const xmlChar *nodeName,
                                   const xmlChar *nodeNs,
                                   xmlSecKeyDataUsage usage);

Lookups data klass in the list with given `nodeName` , `nodeNs` and `usage` in the `list` .

#### Parameters

list | the pointer to key data ids list. |
nodeName | the desired key data klass XML node name. |
nodeNs | the desired key data klass XML node namespace. |
usage | the desired key data usage. |

#### Returns

key data klass is found and NULL otherwise.

### xmlSecKeyDataIdListFindByHref ()

    xmlSecKeyDataId
    xmlSecKeyDataIdListFindByHref (xmlSecPtrListPtr list,
                                   const xmlChar *href,
                                   xmlSecKeyDataUsage usage);

Lookups data klass in the list with given `href` and `usage` in `list` .

#### Parameters

list | the pointer to key data ids list. |
href | the desired key data klass href. |
usage | the desired key data usage. |

#### Returns

key data klass is found and NULL otherwise.

### xmlSecKeyDataIdListFindByName ()

    xmlSecKeyDataId
    xmlSecKeyDataIdListFindByName (xmlSecPtrListPtr list,
                                   const xmlChar *name,
                                   xmlSecKeyDataUsage usage);

Lookups data klass in the list with given `name` and `usage` in `list` .

#### Parameters

list | the pointer to key data ids list. |
name | the desired key data klass name. |
usage | the desired key data usage. |

#### Returns

key data klass is found and NULL otherwise.

### xmlSecKeyDataIdListDebugDump ()

    void
    xmlSecKeyDataIdListDebugDump (xmlSecPtrListPtr list,
                                  FILE *output);

Prints binary key data debug information to `output` .

#### Parameters

list | the pointer to key data ids list. |
output | the pointer to output FILE. |

### xmlSecKeyDataIdListDebugXmlDump ()

    void
    xmlSecKeyDataIdListDebugXmlDump (xmlSecPtrListPtr list,
                                     FILE *output);

Prints binary key data debug information to `output` in XML format.

#### Parameters

list | the pointer to key data ids list. |
output | the pointer to output FILE. |

### xmlSecKeyDataBinaryValueInitialize ()

    int
    xmlSecKeyDataBinaryValueInitialize (xmlSecKeyDataPtr data);

Initializes key data.

#### Parameters

data | the pointer to binary key data. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataBinaryValueDuplicate ()

    int
    xmlSecKeyDataBinaryValueDuplicate (xmlSecKeyDataPtr dst,
                                       xmlSecKeyDataPtr src);

Copies binary key data from `src` to `dst` .

#### Parameters

dst | the pointer to destination binary key data. |
src | the pointer to source binary key data. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataBinaryValueFinalize ()

    void
    xmlSecKeyDataBinaryValueFinalize (xmlSecKeyDataPtr data);

Cleans up binary key data.

#### Parameters

data | the pointer to binary key data. |

### xmlSecKeyDataBinaryValueXmlRead ()

    int
    xmlSecKeyDataBinaryValueXmlRead (xmlSecKeyDataId id,
                                     xmlSecKeyPtr key,
                                     xmlNodePtr node,
                                     xmlSecKeyInfoCtxPtr keyInfoCtx);

Reads binary key data from `node` to the key by base64 decoding the `node` content.

#### Parameters

id | the data klass. |
key | the pointer to destination key. |
node | the pointer to an XML node. |
keyInfoCtx | the pointer to <dsig:KeyInfo/> element processing context. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataBinaryValueXmlWrite ()

    int
    xmlSecKeyDataBinaryValueXmlWrite (xmlSecKeyDataId id,
                                      xmlSecKeyPtr key,
                                      xmlNodePtr node,
                                      xmlSecKeyInfoCtxPtr keyInfoCtx);

Base64 encodes binary key data of klass `id` from the `key` and sets to the `node` content.

#### Parameters

id | the data klass. |
key | the pointer to source key. |
node | the pointer to an XML node. |
keyInfoCtx | the pointer to <dsig:KeyInfo/> element processing context. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataBinaryValueBinRead ()

    int
    xmlSecKeyDataBinaryValueBinRead (xmlSecKeyDataId id,
                                     xmlSecKeyPtr key,
                                     const xmlSecByte *buf,
                                     xmlSecSize bufSize,
                                     xmlSecKeyInfoCtxPtr keyInfoCtx);

Reads binary key data of the klass `id` from `buf` to the `key` .

#### Parameters

id | the data klass. |
key | the pointer to destination key. |
buf | the source binary buffer. |
bufSize | the source binary buffer size. |
keyInfoCtx | the pointer to <dsig:KeyInfo/> element processing context. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataBinaryValueBinWrite ()

    int
    xmlSecKeyDataBinaryValueBinWrite (xmlSecKeyDataId id,
                                      xmlSecKeyPtr key,
                                      xmlSecByte **buf,
                                      xmlSecSize *bufSize,
                                      xmlSecKeyInfoCtxPtr keyInfoCtx);

Writes binary key data of klass `id` from the `key` to `buf` .

#### Parameters

id | the data klass. |
key | the pointer to source key. |
buf | the destination binary buffer. |
bufSize | the destination binary buffer size. |
keyInfoCtx | the pointer to <dsig:KeyInfo/> element processing context. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataBinaryValueDebugDump ()

    void
    xmlSecKeyDataBinaryValueDebugDump (xmlSecKeyDataPtr data,
                                       FILE *output);

Prints binary key data debug information to `output` .

#### Parameters

data | the pointer to binary key data. |
output | the pointer to output FILE. |

### xmlSecKeyDataBinaryValueDebugXmlDump ()

    void
    xmlSecKeyDataBinaryValueDebugXmlDump (xmlSecKeyDataPtr data,
                                          FILE *output);

Prints binary key data debug information to `output` in XML format.

#### Parameters

data | the pointer to binary key data. |
output | the pointer to output FILE. |

### xmlSecKeyDataBinaryValueGetSize ()

    xmlSecSize
    xmlSecKeyDataBinaryValueGetSize (xmlSecKeyDataPtr data);

Gets the binary key data size.

#### Parameters

data | the pointer to binary key data. |

#### Returns

binary key data size in bits.

### xmlSecKeyDataBinaryValueGetBuffer ()

    xmlSecBufferPtr
    xmlSecKeyDataBinaryValueGetBuffer (xmlSecKeyDataPtr data);

Gets the binary key data buffer.

#### Parameters

data | the pointer to binary key data. |

#### Returns

pointer to binary key data buffer.

### xmlSecKeyDataBinaryValueSetBuffer ()

    int
    xmlSecKeyDataBinaryValueSetBuffer (xmlSecKeyDataPtr data,
                                       const xmlSecByte *buf,
                                       xmlSecSize bufSize);

Sets the value of `data` to `buf` .

#### Parameters

data | the pointer to binary key data. |
buf | the pointer to binary buffer. |
bufSize | the binary buffer size. |

#### Returns

0 on success or a negative value otherwise.

### xmlSecKeyDataStoreCreate ()

    xmlSecKeyDataStorePtr
    xmlSecKeyDataStoreCreate (xmlSecKeyDataStoreId id);

Creates new key data store of the specified klass `id` . Caller is responsible for freeing returned object with xmlSecKeyDataStoreDestroy function.

#### Parameters

id | the store id. |

#### Returns

the pointer to newly allocated key data store structure or NULL if an error occurs.

### xmlSecKeyDataStoreDestroy ()

    void
    xmlSecKeyDataStoreDestroy (xmlSecKeyDataStorePtr store);

Destroys the key data store created with xmlSecKeyDataStoreCreate function.

#### Parameters

store | the pointer to the key data store.. |

### xmlSecKeyDataStoreGetName()

    #define             xmlSecKeyDataStoreGetName(store)

Macro. Returns key data store name.

#### Parameters

store | the pointer to store. |

### xmlSecKeyDataStoreIsValid()

    #define             xmlSecKeyDataStoreIsValid(store)

Macro. Returns 1 if `store` is not NULL and `store->id` is not NULL or 0 otherwise.

#### Parameters

store | the pointer to store. |

### xmlSecKeyDataStoreCheckId()

    #define             xmlSecKeyDataStoreCheckId(store, storeId)

Macro. Returns 1 if `store` is valid and `store` 's id is equal to `storeId` .

#### Parameters

store | the pointer to store. |
storeId | the store Id. |

### xmlSecKeyDataStoreCheckSize()

    #define             xmlSecKeyDataStoreCheckSize(store, size)

Macro. Returns 1 if `data` is valid and `stores` 's object has at least `size` bytes.

#### Parameters

store | the pointer to store. |
size | the expected size. |

### xmlSecKeyDataStoreInitializeMethod ()

    int
    (*xmlSecKeyDataStoreInitializeMethod) (xmlSecKeyDataStorePtr store);

Key data store specific initialization method.

#### Parameters

store | the data store. |

#### Returns

0 on success or a negative value if an error occurs.

### xmlSecKeyDataStoreFinalizeMethod ()

    void
    (*xmlSecKeyDataStoreFinalizeMethod) (xmlSecKeyDataStorePtr store);

Key data store specific finalization (destroy) method.

#### Parameters

store | the data store. |

### xmlSecKeyDataStoreKlassGetName()

    #define             xmlSecKeyDataStoreKlassGetName(klass)

Macro. Returns store klass name.

#### Parameters

klass | the pointer to store klass. |

### xmlSecKeyDataStorePtrListGetKlass ()

    xmlSecPtrListId
    xmlSecKeyDataStorePtrListGetKlass (void);

Key data stores list.

#### Returns

key data stores list klass.

### xmlSecImportSetPersistKey ()

    void
    xmlSecImportSetPersistKey (void);

### xmlSecImportGetPersistKey ()

    int
    xmlSecImportGetPersistKey (void);

## Types and Values

### xmlSecKeyDataUsage

    typedef unsigned int                                    xmlSecKeyDataUsage;

The bits mask that determines possible keys data usage.

### xmlSecKeyDataUsageUnknown

    #define xmlSecKeyDataUsageUnknown                       0x00000

The key data usage is unknown.

### xmlSecKeyDataUsageKeyInfoNodeRead

    #define xmlSecKeyDataUsageKeyInfoNodeRead               0x00001

The key data could be read from a <dsig:KeyInfo/> child.

### xmlSecKeyDataUsageKeyInfoNodeWrite

    #define xmlSecKeyDataUsageKeyInfoNodeWrite              0x00002

The key data could be written to a <dsig:KeyInfo /> child.

### xmlSecKeyDataUsageKeyValueNodeRead

    #define xmlSecKeyDataUsageKeyValueNodeRead              0x00004

The key data could be read from a <dsig:KeyValue /> child.

### xmlSecKeyDataUsageKeyValueNodeWrite

    #define xmlSecKeyDataUsageKeyValueNodeWrite             0x00008

The key data could be written to a <dsig:KeyValue /> child.

### xmlSecKeyDataUsageRetrievalMethodNodeXml

    #define xmlSecKeyDataUsageRetrievalMethodNodeXml        0x00010

The key data could be retrieved using <dsig:RetrievalMethod /> node in XML format.

### xmlSecKeyDataUsageRetrievalMethodNodeBin

    #define xmlSecKeyDataUsageRetrievalMethodNodeBin        0x00020

The key data could be retrieved using <dsig:RetrievalMethod /> node in binary format.

### xmlSecKeyDataUsageAny

    #define xmlSecKeyDataUsageAny                           0xFFFFF

Any key data usage.

### xmlSecKeyDataUsageKeyInfoNode

    #define             xmlSecKeyDataUsageKeyInfoNode

The key data could be read and written from/to a <dsig:KeyInfo /> child.

### xmlSecKeyDataUsageKeyValueNode

    #define             xmlSecKeyDataUsageKeyValueNode

The key data could be read and written from/to a <dsig:KeyValue /> child.

### xmlSecKeyDataUsageRetrievalMethodNode

    #define             xmlSecKeyDataUsageRetrievalMethodNode

The key data could be retrieved using <dsig:RetrievalMethod /> node in any format.

### xmlSecKeyDataType

    typedef unsigned int                            xmlSecKeyDataType;

The key data type (public/private, session/permanent, etc.).

### xmlSecKeyDataTypeUnknown

    #define xmlSecKeyDataTypeUnknown                        0x0000

The key data type is unknown (same as xmlSecKeyDataTypeNone).

### xmlSecKeyDataTypeNone

    #define xmlSecKeyDataTypeNone                           xmlSecKeyDataTypeUnknown

The key data type is unknown (same as xmlSecKeyDataTypeUnknown).

### xmlSecKeyDataTypePublic

    #define xmlSecKeyDataTypePublic                         0x0001

The key data contain a public key.

### xmlSecKeyDataTypePrivate

    #define xmlSecKeyDataTypePrivate                        0x0002

The key data contain a private key.

### xmlSecKeyDataTypeSymmetric

    #define xmlSecKeyDataTypeSymmetric                      0x0004

The key data contain a symmetric key.

### xmlSecKeyDataTypeSession

    #define xmlSecKeyDataTypeSession                        0x0008

The key data contain session key (one time key, not stored in keys manager).

### xmlSecKeyDataTypePermanent

    #define xmlSecKeyDataTypePermanent                      0x0010

The key data contain permanent key (stored in keys manager).

### xmlSecKeyDataTypeTrusted

    #define xmlSecKeyDataTypeTrusted                        0x0100

The key data is trusted.

### xmlSecKeyDataTypeAny

    #define xmlSecKeyDataTypeAny                            0xFFFF

Any key data.

### enum xmlSecKeyDataFormat

The key data format (binary, der, pem, etc.).

#### Members

xmlSecKeyDataFormatUnknown | the key data format is unknown. |
xmlSecKeyDataFormatBinary | the binary key data. |
xmlSecKeyDataFormatPem | the PEM key data (cert or public/private key). |
xmlSecKeyDataFormatDer | the DER key data (cert or public/private key). |
xmlSecKeyDataFormatPkcs8Pem | the PKCS8 PEM private key. |
xmlSecKeyDataFormatPkcs8Der | the PKCS8 DER private key. |
xmlSecKeyDataFormatPkcs12 | the PKCS12 format (bag of keys and certs) |
xmlSecKeyDataFormatCertPem | the PEM cert. |
xmlSecKeyDataFormatCertDer | the DER cert. |

### struct xmlSecKeyData

    struct xmlSecKeyData {
        xmlSecKeyDataId                     id;
        void*                               reserved0;
        void*                               reserved1;
    };

The key data: key value (crypto material), x509 data, pgp data, etc.

#### Members

xmlSecKeyDataId `id`; | the data id (xmlSecKeyDataId). |
void *`reserved0`; | reserved for the future. |
void *`reserved1`; | reserved for the future. |

### xmlSecKeyDataIdUnknown

    #define xmlSecKeyDataIdUnknown                  ((xmlSecKeyDataId)NULL)

The "unknown" id.

### struct xmlSecKeyDataKlass

    struct xmlSecKeyDataKlass {
        xmlSecSize                          klassSize;
        xmlSecSize                          objSize;

        /* data */
        const xmlChar*                      name;
        xmlSecKeyDataUsage                  usage;
        const xmlChar*                      href;
        const xmlChar*                      dataNodeName;
        const xmlChar*                      dataNodeNs;

        /* constructors/destructor */
        xmlSecKeyDataInitMethod             initialize;
        xmlSecKeyDataDuplicateMethod        duplicate;
        xmlSecKeyDataFinalizeMethod         finalize;
        xmlSecKeyDataGenerateMethod         generate;

        /* get info */
        xmlSecKeyDataGetTypeMethod          getType;
        xmlSecKeyDataGetSizeMethod          getSize;
        xmlSecKeyDataGetIdentifierMethod    getIdentifier;

        /* read/write */
        xmlSecKeyDataXmlReadMethod          xmlRead;
        xmlSecKeyDataXmlWriteMethod         xmlWrite;
        xmlSecKeyDataBinReadMethod          binRead;
        xmlSecKeyDataBinWriteMethod         binWrite;

        /* debug */
        xmlSecKeyDataDebugDumpMethod        debugDump;
        xmlSecKeyDataDebugDumpMethod        debugXmlDump;

        /* for the future */
        void*                               reserved0;
        void*                               reserved1;
    };

The data id (klass).

#### Members

xmlSecSize `klassSize`; | the klass size. |
xmlSecSize `objSize`; | the object size. |
const xmlChar *`name`; | the object name. |
xmlSecKeyDataUsage `usage`; | the allowed data usage. |
const xmlChar *`href`; | the identification string (href). |
const xmlChar *`dataNodeName`; | the data's XML node name. |
const xmlChar *`dataNodeNs`; | the data's XML node namespace. |
xmlSecKeyDataInitMethod `initialize`; | the initialization method. |
xmlSecKeyDataDuplicateMethod `duplicate`; | the duplicate (copy) method. |
xmlSecKeyDataFinalizeMethod `finalize`; | the finalization (destroy) method. |
xmlSecKeyDataGenerateMethod `generate`; | the new data generation method. |
xmlSecKeyDataGetTypeMethod `getType`; | the method to access data's type information. |
xmlSecKeyDataGetSizeMethod `getSize`; | the method to access data's size. |
xmlSecKeyDataGetIdentifierMethod `getIdentifier`; | the method to access data's string identifier. |
xmlSecKeyDataXmlReadMethod `xmlRead`; | the method for reading data from XML node. |
xmlSecKeyDataXmlWriteMethod `xmlWrite`; | the method for writing data to XML node. |
xmlSecKeyDataBinReadMethod `binRead`; | the method for reading data from a binary buffer. |
xmlSecKeyDataBinWriteMethod `binWrite`; | the method for writing data to binary buffer. |
xmlSecKeyDataDebugDumpMethod `debugDump`; | the method for printing debug data information. |
xmlSecKeyDataDebugDumpMethod `debugXmlDump`; | the method for printing debug data information in XML format. |
void *`reserved0`; | reserved for the future. |
void *`reserved1`; | reserved for the future. |

### xmlSecKeyDataListId

    #define xmlSecKeyDataListId     xmlSecKeyDataListGetKlass()

The key data klasses list klass id.

### xmlSecKeyDataIdListId

    #define xmlSecKeyDataIdListId   xmlSecKeyDataIdListGetKlass()

The key data list klass id.

### xmlSecKeyDataBinarySize

    #define             xmlSecKeyDataBinarySize

The binary key data object size.

### struct xmlSecKeyDataStore

    struct xmlSecKeyDataStore {
        xmlSecKeyDataStoreId                id;

        /* for the future */
        void*                               reserved0;
        void*                               reserved1;
    };

The key data store. Key data store holds common key data specific information required for key data processing. For example, X509 data store may hold information about trusted (root) certificates.

#### Members

xmlSecKeyDataStoreId `id`; | the store id (xmlSecKeyDataStoreId). |
void *`reserved0`; | reserved for the future. |
void *`reserved1`; | reserved for the future. |

### xmlSecKeyDataStoreIdUnknown

    #define xmlSecKeyDataStoreIdUnknown                     NULL

The "unknown" id.

### struct xmlSecKeyDataStoreKlass

    struct xmlSecKeyDataStoreKlass {
        xmlSecSize                          klassSize;
        xmlSecSize                          objSize;

        /* data */
        const xmlChar*                      name;

        /* constructors/destructor */
        xmlSecKeyDataStoreInitializeMethod  initialize;
        xmlSecKeyDataStoreFinalizeMethod    finalize;

        /* for the future */
        void*                               reserved0;
        void*                               reserved1;
    };

The data store id (klass).

#### Members

xmlSecSize `klassSize`; | the data store klass size. |
xmlSecSize `objSize`; | the data store obj size. |
const xmlChar *`name`; | the store's name. |
xmlSecKeyDataStoreInitializeMethod `initialize`; | the store's initialization method. |
xmlSecKeyDataStoreFinalizeMethod `finalize`; | the store's finalization (destroy) method. |
void *`reserved0`; | reserved for the future. |
void *`reserved1`; | reserved for the future. |

### xmlSecKeyDataStorePtrListId

    #define xmlSecKeyDataStorePtrListId     xmlSecKeyDataStorePtrListGetKlass()

The data store list id (klass).