diff -r 000000000000 -r e35f40988205 xmlsecurityengine/xmlsec/inc/xmlsec_private.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xmlsecurityengine/xmlsec/inc/xmlsec_private.h Thu Dec 17 09:29:21 2009 +0200 @@ -0,0 +1,504 @@ +/** + * 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- library + * + * This is free software; see Copyright file in the source + * distribution for preciese wording. + * + * Copyright (C) 2002-2003 Aleksey Sanin + * 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- libraries" +#endif /* XMLSEC_PRIVATE */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include +#include + +#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 +#define xmlSecStrPrintf xmlStrPrintf +#define xmlSecStrVPrintf xmlStrVPrintf + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __XMLSEC_PRIVATE_H__ */ +