/**
* XML Security Library (http://www.aleksey.com/xmlsec).
*
* These are internal private declarations. You don't want to use this file
* unless you are building xmlsec or xmlsec-<crypto> library
*
* This is free software; see Copyright file in the source
* distribution for preciese wording.
*
* Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
* Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
*/
#ifndef __XMLSEC_PRIVATE_H__
#define __XMLSEC_PRIVATE_H__
#include "xmlsec_config.h"
#ifndef XMLSEC_PRIVATE
#error "xmlsec/private.h file contains private xmlsec definitions and should not be used outside xmlsec or xmlsec-<crypto> libraries"
#endif /* XMLSEC_PRIVATE */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include <libxml2_tree.h>
#include <libxml2_xmlio.h>
#include "xmlsec_xmlsec.h"
#include "xmlsec_keysdata.h"
#include "xmlsec_keys.h"
#include "xmlsec_keysmngr.h"
#include "xmlsec_transforms.h"
/*****************************************************************************
*
* Crypto Init/shutdown
*
****************************************************************************/
/**
* xmlSecCryptoInitMethod:
*
* xmlsec-crypto libraryinitialization method.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoInitMethod) (void);
/**
* xmlSecCryptoShutdownMethod:
*
* xmlsec-crypto library shutdown method.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoShutdownMethod) (void);
/**
* xmlSecCryptoKeysMngrInitMethod:
* @mngr: the pointer to keys manager.
*
* Initializes @mngr with xmlsec-crypto library specific data.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoKeysMngrInitMethod) (xmlSecKeysMngrPtr mngr);
/*****************************************************************************
*
* Key data ids
*
****************************************************************************/
/**
* xmlSecCryptoKeyDataGetKlassMethod:
*
* Gets the key data klass.
*
* Returns pointer to key data klass or NULL if an error occurs
* (the xmlsec-crypto library is not loaded or this key data klass is not
* implemented).
*/
typedef xmlSecKeyDataId (*xmlSecCryptoKeyDataGetKlassMethod) (void);
/*****************************************************************************
*
* Key data store ids
*
****************************************************************************/
/**
* xmlSecCryptoKeyDataStoreGetKlassMethod:
*
* Gets the key data store klass.
*
* Returns pointer to key data store klass or NULL if an error occurs
* (the xmlsec-crypto library is not loaded or this key data store klass is not
* implemented).
*/
typedef xmlSecKeyDataStoreId (*xmlSecCryptoKeyDataStoreGetKlassMethod)(void);
/*****************************************************************************
*
* Crypto transforms ids
*
****************************************************************************/
/**
* xmlSecCryptoTransformGetKlassMethod:
*
* Gets the transform klass.
*
* Returns pointer to transform klass or NULL if an error occurs
* (the xmlsec-crypto library is not loaded or this transform is not
* implemented).
*/
typedef xmlSecTransformId (*xmlSecCryptoTransformGetKlassMethod) (void);
/*****************************************************************************
*
* High level routines form xmlsec command line utility
*
****************************************************************************/
/**
* xmlSecCryptoAppInitMethod:
* @config: the path to crypto library configuration.
*
* General crypto engine initialization. This function is used
* by XMLSec command line utility and called before
* @xmlSecInit function.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppInitMethod) (const char* config);
/**
* xmlSecCryptoAppShutdownMethod:
*
* General crypto engine shutdown. This function is used
* by XMLSec command line utility and called after
* @xmlSecShutdown function.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppShutdownMethod) (void);
/**
* xmlSecCryptoAppDefaultKeysMngrInitMethod:
* @mngr: the pointer to keys manager.
*
* Initializes @mngr with simple keys store #xmlSecSimpleKeysStoreId
* and a default crypto key data stores.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppDefaultKeysMngrInitMethod)
(xmlSecKeysMngrPtr mngr);
/**
* xmlSecCryptoAppDefaultKeysMngrAdoptKeyMethod:
* @mngr: the pointer to keys manager.
* @key: the pointer to key.
*
* Adds @key to the keys manager @mngr created with #xmlSecCryptoAppDefaultKeysMngrInit
* function.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppDefaultKeysMngrAdoptKeyMethod)
(xmlSecKeysMngrPtr mngr,
xmlSecKeyPtr key);
/**
* xmlSecCryptoAppDefaultKeysMngrLoadMethod:
* @mngr: the pointer to keys manager.
* @uri: the uri.
*
* Loads XML keys file from @uri to the keys manager @mngr created
* with #xmlSecCryptoAppDefaultKeysMngrInit function.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppDefaultKeysMngrLoadMethod)
(xmlSecKeysMngrPtr mngr,
const char* uri);
/**
* xmlSecCryptoAppDefaultKeysMngrSaveMethod:
* @mngr: the pointer to keys manager.
* @filename: the destination filename.
* @type: the type of keys to save (public/private/symmetric).
*
* Saves keys from @mngr to XML keys file.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppDefaultKeysMngrSaveMethod)
(xmlSecKeysMngrPtr mngr,
const char* filename,
xmlSecKeyDataType type);
/**
* xmlSecCryptoAppKeysMngrCertLoadMethod:
* @mngr: the keys manager.
* @filename: the certificate file.
* @format: the certificate file format.
* @type: the flag that indicates is the certificate in @filename
* trusted or not.
*
* Reads cert from @filename and adds to the list of trusted or known
* untrusted certs in @store.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppKeysMngrCertLoadMethod)(xmlSecKeysMngrPtr mngr,
const char *filename,
xmlSecKeyDataFormat format,
xmlSecKeyDataType type);
/**
* xmlSecCryptoAppKeysMngrCertLoadMemoryMethod:
* @mngr: the keys manager.
* @data: the key data.
* @dataSize: the key data size.
* @format: the certificate format.
* @type: the flag that indicates is the certificate in @data
* trusted or not.
*
* Reads cert from @data and adds to the list of trusted or known
* untrusted certs in @store.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppKeysMngrCertLoadMemoryMethod)(xmlSecKeysMngrPtr mngr,
const xmlSecByte* data,
xmlSecSize dataSize,
xmlSecKeyDataFormat format,
xmlSecKeyDataType type);
/**
* xmlSecCryptoAppKeyLoadMethod:
* @filename: the key filename.
* @format: the key file format.
* @pwd: the key file password.
* @pwdCallback: the key password callback.
* @pwdCallbackCtx: the user context for password callback.
*
* Reads key from the a file.
*
* Returns pointer to the key or NULL if an error occurs.
*/
typedef xmlSecKeyPtr (*xmlSecCryptoAppKeyLoadMethod) (const char *filename,
xmlSecKeyDataFormat format,
const char *pwd,
void* pwdCallback,
void* pwdCallbackCtx);
/**
* xmlSecCryptoAppKeyLoadMethod:
* @filename: the key filename.
* @format: the key file format.
* @pwd: the key file password.
* @pwdCallback: the key password callback.
* @pwdCallbackCtx: the user context for password callback.
*
* Reads key from the a file.
*
* Returns pointer to the key or NULL if an error occurs.
*/
typedef xmlSecKeyPtr (*xmlSecCryptoAppKeyLoadWithNameMethod) (const char *filename,
xmlSecKeyDataFormat format,
const char *keyname,
const char *pwd,
void* pwdCallback,
void* pwdCallbackCtx);
/**
* xmlSecCryptoAppKeyLoadMemoryMethod:
* @data: the key data.
* @dataSize: the key data size.
* @format: the key data format.
* @pwd: the key data password.
* @pwdCallback: the key password callback.
* @pwdCallbackCtx: the user context for password callback.
*
* Reads key from the binary data buffer.
*
* Returns pointer to the key or NULL if an error occurs.
*/
typedef xmlSecKeyPtr (*xmlSecCryptoAppKeyLoadMemoryMethod) (const xmlSecByte* data,
xmlSecSize dataSize,
xmlSecKeyDataFormat format,
const char *pwd,
void* pwdCallback,
void* pwdCallbackCtx);
/**
* xmlSecCryptoAppPkcs12LoadMethod:
* @filename: the PKCS12 key filename.
* @pwd: the PKCS12 file password.
* @pwdCallback: the password callback.
* @pwdCallbackCtx: the user context for password callback.
*
* Reads key and all associated certificates from the PKCS12 file.
* For uniformity, call xmlSecCryptoAppKeyLoad instead of this function. Pass
* in format=xmlSecKeyDataFormatPkcs12.
*
* Returns pointer to the key or NULL if an error occurs.
*/
typedef xmlSecKeyPtr (*xmlSecCryptoAppPkcs12LoadMethod) (const char* filename,
const char* pwd,
void* pwdCallback,
void* pwdCallbackCtx);
/**
* xmlSecCryptoAppPkcs12LoadMemoryMethod:
* @data: the pkcs12 data.
* @dataSize: the pkcs12 data size.
* @pwd: the PKCS12 data password.
* @pwdCallback: the password callback.
* @pwdCallbackCtx: the user context for password callback.
*
* Reads key and all associated certificates from the PKCS12 binary data.
* For uniformity, call xmlSecCryptoAppKeyLoad instead of this function. Pass
* in format=xmlSecKeyDataFormatPkcs12.
*
* Returns pointer to the key or NULL if an error occurs.
*/
typedef xmlSecKeyPtr (*xmlSecCryptoAppPkcs12LoadMemoryMethod)(const xmlSecByte* data,
xmlSecSize dataSize,
const char* pwd,
void* pwdCallback,
void* pwdCallbackCtx);
/**
* xmlSecCryptoAppKeyCertLoadMethod:
* @key: the pointer to key.
* @filename: the certificate filename.
* @format: the certificate file format.
*
* Reads the certificate from $@filename and adds it to key.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppKeyCertLoadMethod) (xmlSecKeyPtr key,
const char* filename,
xmlSecKeyDataFormat format);
/**
* xmlSecCryptoAppKeyCertLoadMemoryMethod:
* @key: the pointer to key.
* @data: the cert data.
* @dataSize: the cert data size.
* @format: the certificate data format.
*
* Reads the certificate from binary @data buffer and adds it to key.
*
* Returns 0 on success or a negative value otherwise.
*/
typedef int (*xmlSecCryptoAppKeyCertLoadMemoryMethod)(xmlSecKeyPtr key,
const xmlSecByte* data,
xmlSecSize dataSize,
xmlSecKeyDataFormat format);
/**
* xmlSecCryptoDLFunctions:
* @cryptoInit: the xmlsec-crypto library initialization method.
* @cryptoShutdown: the xmlsec-crypto library shutdown method.
* @cryptoKeysMngrInit: the xmlsec-crypto library keys manager init method.
* @keyDataAesGetKlass: the method to get pointer to AES key data klass.
* @keyDataDesGetKlass: the method to get pointer to DES key data klass.
* @keyDataDsaGetKlass: the method to get pointer to DSA key data klass.
* @keyDataHmacGetKlass: the method to get pointer to HMAC key data klass.
* @keyDataRsaGetKlass: the method to get pointer to RSA key data klass.
* @keyDataX509GetKlass: the method to get pointer to X509 key data klass.
* @keyDataRawX509CertGetKlass: the method to get pointer to raw X509 cert key data klass.
* @x509StoreGetKlass: the method to get pointer to X509 key data store.
* @transformAes128CbcGetKlass: the method to get pointer to AES 128 encryption transform.
* @transformAes192CbcGetKlass: the method to get pointer to AES 192 encryption transform.
* @transformAes256CbcGetKlass: the method to get pointer to AES 256 encryption transform.
* @transformKWAes128GetKlass: the method to get pointer to AES 128 key wrapper transform.
* @transformKWAes192GetKlass: the method to get pointer to AES 192 key wrapper transform.
* @transformKWAes256GetKlass: the method to get pointer to AES 256 key wrapper transform.
* @transformDes3CbcGetKlass: the method to get pointer to Triple DES encryption transform.
* @transformKWDes3GetKlass: the method to get pointer to Triple DES key wrapper transform.
* @transformDsaSha1GetKlass: the method to get pointer to DSA-SHA1 signature transform.
* @transformHmacMd5GetKlass: the method to get pointer to HMAC-MD5 transform.
* @transformHmacRipemd160GetKlass: the method to get pointer to HMAC-RIPEMD160 transform.
* @transformHmacSha1GetKlass: the method to get pointer to HMAC-SHA1 transform.
* @transformHmacSha224GetKlass: the method to get pointer to HMAC-SHA224 transform.
* @transformHmacSha256GetKlass: the method to get pointer to HMAC-SHA256 transform.
* @transformHmacSha384GetKlass: the method to get pointer to HMAC-SHA384 transform.
* @transformHmacSha512GetKlass: the method to get pointer to HMAC-SHA512 transform.
* @transformMd5GetKlass: the method to get pointer to MD5 digest transform.
* @transformRipemd160GetKlass: the method to get pointer to RIPEMD160 digest transform.
* @transformRsaMd5GetKlass: the method to get pointer to RSA-MD5 signature transform.
* @transformRsaRipemd160GetKlass: the method to get pointer to RSA-RIPEMD160 signature transform.
* @transformRsaSha1GetKlass: the method to get pointer to RSA-SHA1 signature transform.
* @transformRsaSha224GetKlass: the method to get pointer to RSA-SHA224 signature transform.
* @transformRsaSha256GetKlass: the method to get pointer to RSA-SHA256 signature transform.
* @transformRsaSha384GetKlass: the method to get pointer to RSA-SHA384 signature transform.
* @transformRsaSha512GetKlass: the method to get pointer to RSA-SHA512 signature transform.
* @transformRsaPkcs1GetKlass: the method to get pointer to RSA-PKCS1_5 key transport transform.
* @transformRsaOaepGetKlass: the method to get pointer to RSA-OAEP key transport transform.
* @transformSha1GetKlass: the method to get pointer to SHA1 digest transform.
* @transformSha224GetKlass: the method to get pointer to SHA224 digest transform.
* @transformSha256GetKlass: the method to get pointer to SHA256 digest transform.
* @transformSha384GetKlass: the method to get pointer to SHA384 digest transform.
* @transformSha512GetKlass: the method to get pointer to SHA512 digest transform.
* @cryptoAppInit: the default crypto engine initialization method.
* @cryptoAppShutdown: the default crypto engine shutdown method.
* @cryptoAppDefaultKeysMngrInit: the default keys manager init method.
* @cryptoAppDefaultKeysMngrAdoptKey: the default keys manager adopt key method.
* @cryptoAppDefaultKeysMngrLoad: the default keys manager load method.
* @cryptoAppDefaultKeysMngrSave: the default keys manager save method.
* @cryptoAppKeysMngrCertLoad: the default keys manager file cert load method.
* @cryptoAppKeysMngrCertLoadMemory: the default keys manager memory cert load method.
* @cryptoAppKeyLoad: the key file load method.
* @cryptoAppKeyLoadMemory: the meory key load method.
* @cryptoAppPkcs12Load: the pkcs12 file load method.
* @cryptoAppPkcs12LoadMemory: the memory pkcs12 load method.
* @cryptoAppKeyCertLoad: the cert file load method.
* @cryptoAppKeyCertLoadMemory: the memory cert load method.
* @cryptoAppDefaultPwdCallback:the default password callback.
*
* The list of crypto engine functions, key data and transform classes.
*/
struct _xmlSecCryptoDLFunctions {
/**
* Crypto Init/shutdown
*/
xmlSecCryptoInitMethod cryptoInit;
xmlSecCryptoShutdownMethod cryptoShutdown;
xmlSecCryptoKeysMngrInitMethod cryptoKeysMngrInit;
/**
* Key data ids
*/
xmlSecCryptoKeyDataGetKlassMethod keyDataAesGetKlass;
xmlSecCryptoKeyDataGetKlassMethod keyDataDesGetKlass;
xmlSecCryptoKeyDataGetKlassMethod keyDataDsaGetKlass;
xmlSecCryptoKeyDataGetKlassMethod keyDataHmacGetKlass;
xmlSecCryptoKeyDataGetKlassMethod keyDataRsaGetKlass;
xmlSecCryptoKeyDataGetKlassMethod keyDataX509GetKlass;
xmlSecCryptoKeyDataGetKlassMethod keyDataRawX509CertGetKlass;
/**
* Key data store ids
*/
xmlSecCryptoKeyDataStoreGetKlassMethod x509StoreGetKlass;
/**
* Crypto transforms ids
*/
xmlSecCryptoTransformGetKlassMethod transformAes128CbcGetKlass;
xmlSecCryptoTransformGetKlassMethod transformAes192CbcGetKlass;
xmlSecCryptoTransformGetKlassMethod transformAes256CbcGetKlass;
xmlSecCryptoTransformGetKlassMethod transformKWAes128GetKlass;
xmlSecCryptoTransformGetKlassMethod transformKWAes192GetKlass;
xmlSecCryptoTransformGetKlassMethod transformKWAes256GetKlass;
xmlSecCryptoTransformGetKlassMethod transformDes3CbcGetKlass;
xmlSecCryptoTransformGetKlassMethod transformKWDes3GetKlass;
xmlSecCryptoTransformGetKlassMethod transformDsaSha1GetKlass;
xmlSecCryptoTransformGetKlassMethod transformHmacMd5GetKlass;
xmlSecCryptoTransformGetKlassMethod transformHmacRipemd160GetKlass;
xmlSecCryptoTransformGetKlassMethod transformHmacSha1GetKlass;
xmlSecCryptoTransformGetKlassMethod transformHmacSha224GetKlass;
xmlSecCryptoTransformGetKlassMethod transformHmacSha256GetKlass;
xmlSecCryptoTransformGetKlassMethod transformHmacSha384GetKlass;
xmlSecCryptoTransformGetKlassMethod transformHmacSha512GetKlass;
xmlSecCryptoTransformGetKlassMethod transformMd5GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRipemd160GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRsaMd5GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRsaRipemd160GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRsaSha1GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRsaSha224GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRsaSha256GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRsaSha384GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRsaSha512GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRsaPkcs1GetKlass;
xmlSecCryptoTransformGetKlassMethod transformRsaOaepGetKlass;
xmlSecCryptoTransformGetKlassMethod transformSha1GetKlass;
xmlSecCryptoTransformGetKlassMethod transformSha224GetKlass;
xmlSecCryptoTransformGetKlassMethod transformSha256GetKlass;
xmlSecCryptoTransformGetKlassMethod transformSha384GetKlass;
xmlSecCryptoTransformGetKlassMethod transformSha512GetKlass;
/**
* High level routines form xmlsec command line utility
*/
xmlSecCryptoAppInitMethod cryptoAppInit;
xmlSecCryptoAppShutdownMethod cryptoAppShutdown;
xmlSecCryptoAppDefaultKeysMngrInitMethod cryptoAppDefaultKeysMngrInit;
xmlSecCryptoAppDefaultKeysMngrAdoptKeyMethod cryptoAppDefaultKeysMngrAdoptKey;
xmlSecCryptoAppDefaultKeysMngrLoadMethod cryptoAppDefaultKeysMngrLoad;
xmlSecCryptoAppDefaultKeysMngrSaveMethod cryptoAppDefaultKeysMngrSave;
xmlSecCryptoAppKeysMngrCertLoadMethod cryptoAppKeysMngrCertLoad;
xmlSecCryptoAppKeysMngrCertLoadMemoryMethod cryptoAppKeysMngrCertLoadMemory;
xmlSecCryptoAppKeyLoadMethod cryptoAppKeyLoad;
xmlSecCryptoAppKeyLoadWithNameMethod cryptoAppKeyLoadWithName; //Venus: add for Symbian
xmlSecCryptoAppKeyLoadMemoryMethod cryptoAppKeyLoadMemory;
xmlSecCryptoAppPkcs12LoadMethod cryptoAppPkcs12Load;
xmlSecCryptoAppPkcs12LoadMemoryMethod cryptoAppPkcs12LoadMemory;
xmlSecCryptoAppKeyCertLoadMethod cryptoAppKeyCertLoad;
xmlSecCryptoAppKeyCertLoadMemoryMethod cryptoAppKeyCertLoadMemory;
void* cryptoAppDefaultPwdCallback;
};
#include <libxml2_xmlstring.h>
#define xmlSecStrPrintf xmlStrPrintf
#define xmlSecStrVPrintf xmlStrVPrintf
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __XMLSEC_PRIVATE_H__ */