diff options
Diffstat (limited to 'include/xmlsec/keysmngr.h')
-rw-r--r-- | include/xmlsec/keysmngr.h | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/include/xmlsec/keysmngr.h b/include/xmlsec/keysmngr.h new file mode 100644 index 00000000..289da4c1 --- /dev/null +++ b/include/xmlsec/keysmngr.h @@ -0,0 +1,264 @@ +/** + * XML Security Library (http://www.aleksey.com/xmlsec). + * + * Keys Manager + * + * This is free software; see Copyright file in the source + * distribution for preciese wording. + * + * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com> + */ +#ifndef __XMLSEC_KEYSMGMR_H__ +#define __XMLSEC_KEYSMGMR_H__ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include <xmlsec/xmlsec.h> +#include <xmlsec/list.h> +#include <xmlsec/keys.h> +#include <xmlsec/keysdata.h> +#include <xmlsec/keyinfo.h> + +typedef const struct _xmlSecKeyKlass xmlSecKeyKlass, + *xmlSecKeyId; +typedef const struct _xmlSecKeyStoreKlass xmlSecKeyStoreKlass, + *xmlSecKeyStoreId; + + +/**************************************************************************** + * + * Keys Manager + * + ***************************************************************************/ +XMLSEC_EXPORT xmlSecKeysMngrPtr xmlSecKeysMngrCreate (void); +XMLSEC_EXPORT void xmlSecKeysMngrDestroy (xmlSecKeysMngrPtr mngr); + +XMLSEC_EXPORT xmlSecKeyPtr xmlSecKeysMngrFindKey (xmlSecKeysMngrPtr mngr, + const xmlChar* name, + xmlSecKeyInfoCtxPtr keyInfoCtx); + +XMLSEC_EXPORT int xmlSecKeysMngrAdoptKeysStore (xmlSecKeysMngrPtr mngr, + xmlSecKeyStorePtr store); +XMLSEC_EXPORT xmlSecKeyStorePtr xmlSecKeysMngrGetKeysStore (xmlSecKeysMngrPtr mngr); + +XMLSEC_EXPORT int xmlSecKeysMngrAdoptDataStore (xmlSecKeysMngrPtr mngr, + xmlSecKeyDataStorePtr store); +XMLSEC_EXPORT xmlSecKeyDataStorePtr xmlSecKeysMngrGetDataStore (xmlSecKeysMngrPtr mngr, + xmlSecKeyDataStoreId id); + +/** + * xmlSecGetKeyCallback: + * @keyInfoNode: the pointer to <dsig:KeyInfo/> node. + * @keyInfoCtx: the pointer to <dsig:KeyInfo/> node processing context. + * + * Reads the <dsig:KeyInfo/> node @keyInfoNode and extracts the key. + * + * Returns: the pointer to key or NULL if the key is not found or + * an error occurs. + */ +typedef xmlSecKeyPtr (*xmlSecGetKeyCallback) (xmlNodePtr keyInfoNode, + xmlSecKeyInfoCtxPtr keyInfoCtx); + +/** + * xmlSecKeysMngr: + * @keysStore: the key store (list of keys known to keys manager). + * @storesList: the list of key data stores known to keys manager. + * @getKey: the callback used to read <dsig:KeyInfo/> node. + * + * The keys manager structure. + */ +struct _xmlSecKeysMngr { + xmlSecKeyStorePtr keysStore; + xmlSecPtrList storesList; + xmlSecGetKeyCallback getKey; +}; + + +XMLSEC_EXPORT xmlSecKeyPtr xmlSecKeysMngrGetKey (xmlNodePtr keyInfoNode, + xmlSecKeyInfoCtxPtr keyInfoCtx); + + +/************************************************************************** + * + * xmlSecKeyStore + * + *************************************************************************/ +/** + * xmlSecKeyStore: + * @id: the store id (#xmlSecKeyStoreId). + * @reserved0: reserved for the future. + * @reserved1: reserved for the future. + * + * The keys store. + */ +struct _xmlSecKeyStore { + xmlSecKeyStoreId id; + + /* for the future */ + void* reserved0; + void* reserved1; +}; + +XMLSEC_EXPORT xmlSecKeyStorePtr xmlSecKeyStoreCreate (xmlSecKeyStoreId id); +XMLSEC_EXPORT void xmlSecKeyStoreDestroy (xmlSecKeyStorePtr store); +XMLSEC_EXPORT xmlSecKeyPtr xmlSecKeyStoreFindKey (xmlSecKeyStorePtr store, + const xmlChar* name, + xmlSecKeyInfoCtxPtr keyInfoCtx); +/** + * xmlSecKeyStoreGetName: + * @store: the pointer to store. + * + * Macro. Returns key store name. + */ +#define xmlSecKeyStoreGetName(store) \ + ((xmlSecKeyStoreIsValid((store))) ? \ + xmlSecKeyStoreKlassGetName((store)->id) : NULL) + +/** + * xmlSecKeyStoreIsValid: + * @store: the pointer to store. + * + * Macro. Returns 1 if @store is not NULL and @store->id is not NULL + * or 0 otherwise. + */ +#define xmlSecKeyStoreIsValid(store) \ + ((( store ) != NULL) && ((( store )->id) != NULL)) +/** + * xmlSecKeyStoreCheckId: + * @store: the pointer to store. + * @storeId: the store Id. + * + * Macro. Returns 1 if @store is valid and @store's id is equal to @storeId. + */ +#define xmlSecKeyStoreCheckId(store, storeId) \ + (xmlSecKeyStoreIsValid(( store )) && \ + ((( store )->id) == ( storeId ))) + +/** + * xmlSecKeyStoreCheckSize: + * @store: the pointer to store. + * @size: the expected size. + * + * Macro. Returns 1 if @store is valid and @stores's object has at least @size bytes. + */ +#define xmlSecKeyStoreCheckSize(store, size) \ + (xmlSecKeyStoreIsValid(( store )) && \ + (( store )->id->objSize >= size)) + + +/************************************************************************** + * + * xmlSecKeyStoreKlass + * + *************************************************************************/ +/** + * xmlSecKeyStoreIdUnknown: + * + * The "unknown" id. + */ +#define xmlSecKeyStoreIdUnknown ((xmlSecKeyDataStoreId)NULL) + +/** + * xmlSecKeyStoreInitializeMethod: + * @store: the store. + * + * Keys store specific initialization method. + * + * Returns: 0 on success or a negative value if an error occurs. + */ +typedef int (*xmlSecKeyStoreInitializeMethod) (xmlSecKeyStorePtr store); + +/** + * xmlSecKeyStoreFinalizeMethod: + * @store: the store. + * + * Keys store specific finalization (destroy) method. + */ +typedef void (*xmlSecKeyStoreFinalizeMethod) (xmlSecKeyStorePtr store); + +/** + * xmlSecKeyStoreFindKeyMethod: + * @store: the store. + * @name: the desired key name. + * @keyInfoCtx: the pointer to key info context. + * + * Keys store specific find method. The caller is responsible for destroying + * the returned key using #xmlSecKeyDestroy method. + * + * Returns: the pointer to a key or NULL if key is not found or an error occurs. + */ +typedef xmlSecKeyPtr (*xmlSecKeyStoreFindKeyMethod) (xmlSecKeyStorePtr store, + const xmlChar* name, + xmlSecKeyInfoCtxPtr keyInfoCtx); + +/** + * xmlSecKeyStoreKlass: + * @klassSize: the store klass size. + * @objSize: the store obj size. + * @name: the store's name. + * @initialize: the store's initialization method. + * @finalize: the store's finalization (destroy) method. + * @findKey: the store's find method. + * @reserved0: reserved for the future. + * @reserved1: reserved for the future. + * + * The keys store id (klass). + */ +struct _xmlSecKeyStoreKlass { + xmlSecSize klassSize; + xmlSecSize objSize; + + /* data */ + const xmlChar* name; + + /* constructors/destructor */ + xmlSecKeyStoreInitializeMethod initialize; + xmlSecKeyStoreFinalizeMethod finalize; + xmlSecKeyStoreFindKeyMethod findKey; + + /* for the future */ + void* reserved0; + void* reserved1; +}; + +/** + * xmlSecKeyStoreKlassGetName: + * @klass: the pointer to store klass. + * + * Macro. Returns store klass name. + */ +#define xmlSecKeyStoreKlassGetName(klass) \ + (((klass)) ? ((klass)->name) : NULL) + + +/**************************************************************************** + * + * Simple Keys Store + * + ***************************************************************************/ +/** + * xmlSecSimpleKeysStoreId: + * + * A simple keys store klass id. + */ +#define xmlSecSimpleKeysStoreId xmlSecSimpleKeysStoreGetKlass() +XMLSEC_EXPORT xmlSecKeyStoreId xmlSecSimpleKeysStoreGetKlass (void); +XMLSEC_EXPORT int xmlSecSimpleKeysStoreAdoptKey (xmlSecKeyStorePtr store, + xmlSecKeyPtr key); +XMLSEC_EXPORT int xmlSecSimpleKeysStoreLoad (xmlSecKeyStorePtr store, + const char *uri, + xmlSecKeysMngrPtr keysMngr); +XMLSEC_EXPORT int xmlSecSimpleKeysStoreSave (xmlSecKeyStorePtr store, + const char *filename, + xmlSecKeyDataType type); +XMLSEC_EXPORT xmlSecPtrListPtr xmlSecSimpleKeysStoreGetKeys (xmlSecKeyStorePtr store); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __XMLSEC_KEYSMGMR_H__ */ + |