LCOV - code coverage report
Current view: top level - libreoffice/workdir/unxlngi6.pro/UnpackedTarball/xmlsec/src - dl.c (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 171 0.0 %
Date: 2012-12-17 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /** 
       2             :  * XML Security Library (http://www.aleksey.com/xmlsec).
       3             :  *
       4             :  *
       5             :  * This is free software; see Copyright file in the source
       6             :  * distribution for preciese wording.
       7             :  * 
       8             :  * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
       9             :  */
      10             : #include "globals.h"
      11             : 
      12             : #include <stdlib.h>
      13             : #include <stdio.h>
      14             : #include <stdarg.h>
      15             : #include <string.h>
      16             : #include <time.h>
      17             : 
      18             : #include <libxml/tree.h>
      19             : 
      20             : #include <xmlsec/xmlsec.h>
      21             : #include <xmlsec/app.h>
      22             : #include <xmlsec/list.h>
      23             : #include <xmlsec/keysdata.h>
      24             : #include <xmlsec/keys.h>
      25             : #include <xmlsec/keysmngr.h>
      26             : #include <xmlsec/transforms.h>
      27             : #include <xmlsec/private.h>
      28             : #include <xmlsec/xmltree.h>
      29             : #include <xmlsec/errors.h>
      30             : #include <xmlsec/dl.h>
      31             : 
      32             : #ifndef XMLSEC_NO_CRYPTO_DYNAMIC_LOADING
      33             : 
      34             : 
      35             : #ifdef XMLSEC_DL_LIBLTDL
      36             : #include <ltdl.h>
      37             : #endif /* XMLSEC_DL_LIBLTDL */
      38             : 
      39             : #ifdef XMLSEC_DL_WIN32
      40             : #include <windows.h>
      41             : #endif /* XMLSEC_DL_WIN32 */
      42             : 
      43             : /***********************************************************************
      44             :  *
      45             :  * loaded libraries list
      46             :  *
      47             :  **********************************************************************/
      48             : typedef struct _xmlSecCryptoDLLibrary                                   xmlSecCryptoDLLibrary,
      49             :                                                                         *xmlSecCryptoDLLibraryPtr;
      50             : struct _xmlSecCryptoDLLibrary {
      51             :     xmlChar*    name;
      52             :     xmlChar*    filename;
      53             :     xmlChar*    getFunctionsName;
      54             :     xmlSecCryptoDLFunctionsPtr functions;
      55             : 
      56             : #ifdef XMLSEC_DL_LIBLTDL
      57             :     lt_dlhandle handle;
      58             : #endif /* XMLSEC_DL_LIBLTDL */
      59             : 
      60             : #ifdef XMLSEC_DL_WIN32
      61             :     HINSTANCE   handle;
      62             : #endif /* XMLSEC_DL_WIN32 */
      63             : };
      64             : 
      65             : static xmlSecCryptoDLLibraryPtr xmlSecCryptoDLLibraryCreate             (const xmlChar* name);
      66             : static void                     xmlSecCryptoDLLibraryDestroy            (xmlSecCryptoDLLibraryPtr lib);
      67             : static xmlSecCryptoDLLibraryPtr xmlSecCryptoDLLibraryDuplicate          (xmlSecCryptoDLLibraryPtr lib);
      68             : static xmlChar*                 xmlSecCryptoDLLibraryConstructFilename  (const xmlChar* name);
      69             : static xmlChar*                 xmlSecCryptoDLLibraryConstructGetFunctionsName(const xmlChar* name);
      70             :                                                         
      71             : 
      72             : static xmlSecPtrListKlass xmlSecCryptoDLLibrariesListKlass = {
      73             :     BAD_CAST "dl-libraries-list",
      74             :     (xmlSecPtrDuplicateItemMethod)xmlSecCryptoDLLibraryDuplicate,/* xmlSecPtrDuplicateItemMethod duplicateItem; */
      75             :     (xmlSecPtrDestroyItemMethod)xmlSecCryptoDLLibraryDestroy,   /* xmlSecPtrDestroyItemMethod destroyItem; */
      76             :     NULL,                                                       /* xmlSecPtrDebugDumpItemMethod debugDumpItem; */
      77             :     NULL,                                                       /* xmlSecPtrDebugDumpItemMethod debugXmlDumpItem; */
      78             : };
      79             : static xmlSecPtrListId          xmlSecCryptoDLLibrariesListGetKlass     (void);
      80             : static int                      xmlSecCryptoDLLibrariesListFindByName   (xmlSecPtrListPtr list, 
      81             :                                                                          const xmlChar* name);
      82             : 
      83             : typedef xmlSecCryptoDLFunctionsPtr (*xmlSecCryptoGetFunctionsCallback)(void);
      84             : 
      85             : static xmlSecCryptoDLLibraryPtr 
      86             : xmlSecCryptoDLLibraryCreate(const xmlChar* name) {
      87             :     xmlSecCryptoDLLibraryPtr lib;
      88             :     xmlSecCryptoGetFunctionsCallback getFunctions;
      89             :     
      90             :     xmlSecAssert2(name != NULL, NULL);
      91             : 
      92             :     /* fprintf (stderr, "loading \"library %s\"...\n", name); */
      93             :     
      94             :     /* Allocate a new xmlSecCryptoDLLibrary and fill the fields. */
      95             :     lib = (xmlSecCryptoDLLibraryPtr)xmlMalloc(sizeof(xmlSecCryptoDLLibrary));
      96             :     if(lib == NULL) {
      97             :         xmlSecError(XMLSEC_ERRORS_HERE,
      98             :                     NULL,
      99             :                     NULL,
     100             :                     XMLSEC_ERRORS_R_MALLOC_FAILED,
     101             :                     "size=%d", sizeof(lib)); 
     102             :         return(NULL);
     103             :     }
     104             :     memset(lib, 0, sizeof(xmlSecCryptoDLLibrary));
     105             :     
     106             :     lib->name = xmlStrdup(name);
     107             :     if(lib->name == NULL) {
     108             :         xmlSecError(XMLSEC_ERRORS_HERE,
     109             :                     "xmlStrdup",
     110             :                     NULL,
     111             :                     XMLSEC_ERRORS_R_MALLOC_FAILED,
     112             :                     XMLSEC_ERRORS_NO_MESSAGE); 
     113             :         xmlSecCryptoDLLibraryDestroy(lib);
     114             :         return(NULL);
     115             :     }
     116             : 
     117             :     lib->filename = xmlSecCryptoDLLibraryConstructFilename(name);
     118             :     if(lib->filename == NULL) {
     119             :         xmlSecError(XMLSEC_ERRORS_HERE,
     120             :                     "xmlSecCryptoDLLibraryConstructFilename",
     121             :                     NULL,
     122             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     123             :                     XMLSEC_ERRORS_NO_MESSAGE); 
     124             :         xmlSecCryptoDLLibraryDestroy(lib);
     125             :         return(NULL);
     126             :     }
     127             : 
     128             :     lib->getFunctionsName = xmlSecCryptoDLLibraryConstructGetFunctionsName(name);
     129             :     if(lib->getFunctionsName == NULL) {
     130             :         xmlSecError(XMLSEC_ERRORS_HERE,
     131             :                     "xmlSecCryptoDLLibraryConstructGetFunctionsName",
     132             :                     NULL,
     133             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     134             :                     XMLSEC_ERRORS_NO_MESSAGE); 
     135             :         xmlSecCryptoDLLibraryDestroy(lib);
     136             :         return(NULL);
     137             :     }
     138             : 
     139             : #ifdef XMLSEC_DL_LIBLTDL
     140             :     lib->handle = lt_dlopenext((char*)lib->filename);
     141             :     if(lib->handle == NULL) {
     142             :         xmlSecError(XMLSEC_ERRORS_HERE,
     143             :                     "lt_dlopenext",
     144             :                     NULL,
     145             :                     XMLSEC_ERRORS_R_IO_FAILED,
     146             :                     "filename=%s",
     147             :                     xmlSecErrorsSafeString(lib->filename));
     148             :         xmlSecCryptoDLLibraryDestroy(lib);
     149             :         return(NULL);
     150             :     }
     151             : 
     152             :     getFunctions = (xmlSecCryptoGetFunctionsCallback)lt_dlsym(lib->handle, (char*)lib->getFunctionsName);
     153             :     if(getFunctions == NULL) {
     154             :         xmlSecError(XMLSEC_ERRORS_HERE,
     155             :                     "lt_dlsym",
     156             :                     NULL,
     157             :                     XMLSEC_ERRORS_R_IO_FAILED,
     158             :                     "function=%s",
     159             :                     xmlSecErrorsSafeString(lib->getFunctionsName));
     160             :         xmlSecCryptoDLLibraryDestroy(lib);
     161             :         return(NULL);
     162             :     }
     163             : #endif /* XMLSEC_DL_LIBLTDL */
     164             : 
     165             : #ifdef XMLSEC_DL_WIN32
     166             :     lib->handle = LoadLibraryA((char*)lib->filename);
     167             :     if(lib->handle == NULL) {
     168             :         xmlSecError(XMLSEC_ERRORS_HERE,
     169             :                     "LoadLibraryA",
     170             :                     NULL,
     171             :                     XMLSEC_ERRORS_R_IO_FAILED,
     172             :                     "filename=%s",
     173             :                     xmlSecErrorsSafeString(lib->filename));
     174             :         xmlSecCryptoDLLibraryDestroy(lib);
     175             :         return(NULL);
     176             :     }
     177             : 
     178             :     getFunctions = (xmlSecCryptoGetFunctionsCallback)GetProcAddress(lib->handle, (char*)lib->getFunctionsName);
     179             :     if(getFunctions == NULL) {
     180             :         xmlSecError(XMLSEC_ERRORS_HERE,
     181             :                     "GetProcAddressA",
     182             :                     NULL,
     183             :                     XMLSEC_ERRORS_R_IO_FAILED,
     184             :                     "function=%s",
     185             :                     xmlSecErrorsSafeString(lib->getFunctionsName));
     186             :         xmlSecCryptoDLLibraryDestroy(lib);
     187             :         return(NULL);
     188             :     }
     189             : #endif /* XMLSEC_DL_WIN32 */
     190             : 
     191             :     if(getFunctions == NULL) {
     192             :         xmlSecError(XMLSEC_ERRORS_HERE,
     193             :                     NULL,
     194             :                     NULL,
     195             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     196             :                     "invalid configuration: no way to load library");
     197             :         xmlSecCryptoDLLibraryDestroy(lib);
     198             :         return(NULL);
     199             :     }    
     200             : 
     201             :     lib->functions = getFunctions();
     202             :     if(lib->functions == NULL) {
     203             :         xmlSecError(XMLSEC_ERRORS_HERE,
     204             :                     "getFunctions",
     205             :                     NULL,
     206             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     207             :                     XMLSEC_ERRORS_NO_MESSAGE); 
     208             :         xmlSecCryptoDLLibraryDestroy(lib);
     209             :         return(NULL);
     210             :     }
     211             : 
     212             :     /* fprintf (stderr, "library %s loaded\n", name); */
     213             :     return(lib);
     214             : }
     215             : 
     216             : static void 
     217             : xmlSecCryptoDLLibraryDestroy(xmlSecCryptoDLLibraryPtr lib) {
     218             :     xmlSecAssert(lib != NULL);
     219             : 
     220             :     /* fprintf (stderr, "unloading \"library %s\"...\n", lib->name); */
     221             :     if(lib->name != NULL) {
     222             :         xmlFree(lib->name);
     223             :     }
     224             : 
     225             :     if(lib->filename != NULL) {
     226             :         xmlFree(lib->filename);
     227             :     }
     228             :     
     229             :     if(lib->getFunctionsName != NULL) {
     230             :         xmlFree(lib->getFunctionsName);
     231             :     }
     232             : 
     233             : #ifdef XMLSEC_DL_LIBLTDL
     234             :     if(lib->handle != NULL) {        
     235             :         int ret;
     236             :         
     237             :         ret = lt_dlclose(lib->handle);
     238             :         if(ret != 0) {
     239             :             xmlSecError(XMLSEC_ERRORS_HERE,
     240             :                         "lt_dlclose",
     241             :                         NULL,
     242             :                         XMLSEC_ERRORS_R_IO_FAILED,
     243             :                         XMLSEC_ERRORS_NO_MESSAGE);
     244             :         }
     245             :     }
     246             : #endif /* XMLSEC_DL_LIBLTDL */
     247             : 
     248             : #ifdef XMLSEC_DL_WIN32
     249             :     if(lib->handle != NULL) {        
     250             :         BOOL res;
     251             : 
     252             :         res = FreeLibrary(lib->handle);
     253             :         if(!res) {
     254             :             xmlSecError(XMLSEC_ERRORS_HERE,
     255             :                         "FreeLibrary",
     256             :                         NULL,
     257             :                         XMLSEC_ERRORS_R_IO_FAILED,
     258             :                         XMLSEC_ERRORS_NO_MESSAGE);
     259             :         }
     260             :         }
     261             : #endif /* XMLSEC_DL_WIN32*/
     262             : 
     263             :     memset(lib, 0, sizeof(xmlSecCryptoDLLibrary));
     264             :     xmlFree(lib);
     265             : }
     266             : 
     267             : static xmlSecCryptoDLLibraryPtr 
     268             : xmlSecCryptoDLLibraryDuplicate(xmlSecCryptoDLLibraryPtr lib) {
     269             :     xmlSecAssert2(lib != NULL, NULL);
     270             :     xmlSecAssert2(lib->name != NULL, NULL);
     271             : 
     272             :     return(xmlSecCryptoDLLibraryCreate(lib->name));
     273             : }
     274             : 
     275             : static xmlChar* 
     276             : xmlSecCryptoDLLibraryConstructFilename(const xmlChar* name) {
     277             :     static xmlChar tmpl[] = "lib%s-%s";
     278             :     xmlChar* res;
     279             :     int len;
     280             : 
     281             :     xmlSecAssert2(name != NULL, NULL);
     282             : 
     283             :     /* TODO */
     284             :     len = xmlStrlen(BAD_CAST PACKAGE) + xmlStrlen(name) + xmlStrlen(tmpl) + 1;
     285             :     res = (xmlChar*)xmlMalloc(len + 1);
     286             :     if(res == NULL) {
     287             :         xmlSecError(XMLSEC_ERRORS_HERE,
     288             :                     NULL,
     289             :                     NULL,
     290             :                     XMLSEC_ERRORS_R_MALLOC_FAILED,
     291             :                     "size=%d", len + 1); 
     292             :         return(NULL);
     293             :     }
     294             :     xmlSecStrPrintf(res, len, tmpl, PACKAGE, name);
     295             :     
     296             :     return(res);
     297             : }
     298             : 
     299             : static xmlChar* 
     300             : xmlSecCryptoDLLibraryConstructGetFunctionsName(const xmlChar* name) {
     301             :     static xmlChar tmpl[] = "xmlSecCryptoGetFunctions_%s";
     302             :     xmlChar* res;
     303             :     int len;
     304             :     
     305             :     xmlSecAssert2(name != NULL, NULL);
     306             :     
     307             :     len = xmlStrlen(name) + xmlStrlen(tmpl) + 1;
     308             :     res = (xmlChar*)xmlMalloc(len + 1);
     309             :     if(res == NULL) {
     310             :         xmlSecError(XMLSEC_ERRORS_HERE,
     311             :                     NULL,
     312             :                     NULL,
     313             :                     XMLSEC_ERRORS_R_MALLOC_FAILED,
     314             :                     "size=%d", len + 1); 
     315             :         return(NULL);
     316             :     }
     317             :     xmlSecStrPrintf(res, len, tmpl, name);
     318             :     
     319             :     return(res);
     320             : }
     321             : 
     322             : static xmlSecPtrListId 
     323             : xmlSecCryptoDLLibrariesListGetKlass(void) {
     324             :     return(&xmlSecCryptoDLLibrariesListKlass);
     325             : }
     326             : 
     327             : static int
     328             : xmlSecCryptoDLLibrariesListFindByName(xmlSecPtrListPtr list, const xmlChar* name) {
     329             :     xmlSecSize i, size;
     330             :     xmlSecCryptoDLLibraryPtr lib;
     331             :     
     332             :     xmlSecAssert2(xmlSecPtrListCheckId(list, xmlSecCryptoDLLibrariesListGetKlass()), -1);
     333             :     xmlSecAssert2(name != NULL, -1);
     334             :     
     335             :     size = xmlSecPtrListGetSize(list);
     336             :     for(i = 0; i < size; ++i) {
     337             :         lib = (xmlSecCryptoDLLibraryPtr)xmlSecPtrListGetItem(list, i);
     338             :         if((lib != NULL) && (lib->name != NULL) && (xmlStrcmp(lib->name, name) == 0)) {
     339             :             return(i);
     340             :         }
     341             :     }
     342             :     return(-1);
     343             : }
     344             : 
     345             : /******************************************************************************
     346             :  *
     347             :  * Dynamic load functions
     348             :  *
     349             :  *****************************************************************************/
     350             : static xmlSecCryptoDLFunctionsPtr gXmlSecCryptoDLFunctions = NULL;
     351             : static xmlSecPtrList gXmlSecCryptoDLLibraries;
     352             : 
     353             : /**
     354             :  * xmlSecCryptoDLInit:
     355             :  * 
     356             :  * Initializes dynamic loading engine. This is an internal function
     357             :  * and should not be called by application directly.
     358             :  *
     359             :  * Returns: 0 on success or a negative value if an error occurs.
     360             :  */
     361             : int 
     362             : xmlSecCryptoDLInit(void) {
     363             :     int ret;
     364             :     
     365             :     ret = xmlSecPtrListInitialize(&gXmlSecCryptoDLLibraries, xmlSecCryptoDLLibrariesListGetKlass());
     366             :     if(ret < 0) {
     367             :         xmlSecError(XMLSEC_ERRORS_HERE,
     368             :                     NULL,
     369             :                     "xmlSecPtrListPtrInitialize",
     370             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     371             :                     "xmlSecCryptoDLLibrariesListGetKlass");
     372             :         return(-1);
     373             :     }
     374             : 
     375             : #ifdef XMLSEC_DL_LIBLTDL
     376             :     ret = lt_dlinit ();
     377             :     if(ret != 0) {
     378             :         xmlSecError(XMLSEC_ERRORS_HERE,
     379             :                     NULL,
     380             :                     "lt_dlinit",
     381             :                     XMLSEC_ERRORS_R_IO_FAILED,
     382             :                     XMLSEC_ERRORS_NO_MESSAGE);
     383             :         return(-1);
     384             :     }
     385             : #endif /* XMLSEC_DL_LIBLTDL */
     386             : 
     387             :     return(0);
     388             : }
     389             : 
     390             : 
     391             : /**
     392             :  * xmlSecCryptoDLShutdown:
     393             :  * 
     394             :  * Shutdowns dynamic loading engine. This is an internal function
     395             :  * and should not be called by application directly.
     396             :  *
     397             :  * Returns: 0 on success or a negative value if an error occurs.
     398             :  */
     399             : int 
     400             : xmlSecCryptoDLShutdown(void) {
     401             :     int ret;
     402             : 
     403             :     xmlSecPtrListFinalize(&gXmlSecCryptoDLLibraries);
     404             : 
     405             : #ifdef XMLSEC_DL_LIBLTDL
     406             :     ret = lt_dlexit ();
     407             :     if(ret != 0) {
     408             :         xmlSecError(XMLSEC_ERRORS_HERE,
     409             :                     NULL,
     410             :                     "lt_dlexit",
     411             :                     XMLSEC_ERRORS_R_IO_FAILED,
     412             :                     XMLSEC_ERRORS_NO_MESSAGE);
     413             :     }
     414             : #endif /* XMLSEC_DL_LIBLTDL */
     415             : 
     416             :     return(0);
     417             : }
     418             : 
     419             : /** 
     420             :  * xmlSecCryptoDLLoadLibrary:
     421             :  * @crypto:             the desired crypto library name ("openssl", "nss", ...).
     422             :  *
     423             :  * Loads the xmlsec-<crypto> library. This function is NOT thread safe, 
     424             :  * application MUST NOT call #xmlSecCryptoDLLoadLibrary, #xmlSecCryptoDLGetLibraryFunctions,
     425             :  * and #xmlSecCryptoDLUnloadLibrary functions from multiple threads.
     426             :  *
     427             :  * Returns: 0 on success or a negative value if an error occurs.
     428             :  */
     429             : int 
     430             : xmlSecCryptoDLLoadLibrary(const xmlChar* crypto) {
     431             :     xmlSecCryptoDLFunctionsPtr functions;
     432             :     int ret;
     433             :     
     434             :     xmlSecAssert2(crypto != NULL, -1);
     435             : 
     436             :     functions = xmlSecCryptoDLGetLibraryFunctions(crypto);
     437             :     if(functions == NULL) {
     438             :         xmlSecError(XMLSEC_ERRORS_HERE,
     439             :                     NULL,
     440             :                     "xmlSecCryptoDLGetLibraryFunctions",
     441             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     442             :                     XMLSEC_ERRORS_NO_MESSAGE);
     443             :         return(-1);
     444             :     }
     445             :     
     446             :     ret = xmlSecCryptoDLSetFunctions(functions);
     447             :     if(ret < 0) {
     448             :         xmlSecError(XMLSEC_ERRORS_HERE,
     449             :                     NULL,
     450             :                     "xmlSecCryptoDLSetFunctions",
     451             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     452             :                     XMLSEC_ERRORS_NO_MESSAGE);
     453             :         return(-1);
     454             :     }
     455             :     return(0);
     456             : }
     457             : 
     458             : /** 
     459             :  * xmlSecCryptoDLGetLibraryFunctions:
     460             :  * @crypto:             the desired crypto library name ("openssl", "nss", ...).
     461             :  *
     462             :  * Loads the xmlsec-<crypto> library and gets global crypto functions/transforms/keys data/keys store 
     463             :  * table. This function is NOT thread safe, application MUST NOT call #xmlSecCryptoDLLoadLibrary, 
     464             :  * #xmlSecCryptoDLGetLibraryFunctions, and #xmlSecCryptoDLUnloadLibrary functions from multiple threads.
     465             :  *
     466             :  * Returns: the table or NULL if an error occurs.
     467             :  */
     468             : xmlSecCryptoDLFunctionsPtr 
     469             : xmlSecCryptoDLGetLibraryFunctions(const xmlChar* crypto) {
     470             :     xmlSecCryptoDLLibraryPtr lib;
     471             :     int pos;
     472             :     int ret;
     473             :         
     474             :     xmlSecAssert2(crypto != NULL, NULL);
     475             : 
     476             :     pos = xmlSecCryptoDLLibrariesListFindByName(&gXmlSecCryptoDLLibraries, crypto);
     477             :     if(pos >= 0) {
     478             :         lib = (xmlSecCryptoDLLibraryPtr)xmlSecPtrListGetItem(&gXmlSecCryptoDLLibraries, pos);
     479             :         xmlSecAssert2(lib != NULL, NULL);
     480             :         xmlSecAssert2(lib->functions != NULL, NULL);
     481             :         
     482             :         return(lib->functions);
     483             :     }
     484             : 
     485             :     lib = xmlSecCryptoDLLibraryCreate(crypto);
     486             :     if(lib == NULL) {
     487             :         xmlSecError(XMLSEC_ERRORS_HERE,
     488             :                     NULL,
     489             :                     "xmlSecCryptoDLLibraryCreate",
     490             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     491             :                     "crypto=%s",
     492             :                     xmlSecErrorsSafeString(crypto));
     493             :         return(NULL);
     494             :     }
     495             : 
     496             :     ret = xmlSecPtrListAdd(&gXmlSecCryptoDLLibraries, lib);    
     497             :     if(ret < 0) {
     498             :         xmlSecError(XMLSEC_ERRORS_HERE,
     499             :                     NULL,
     500             :                     "xmlSecPtrListAdd",
     501             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     502             :                     "crypto=%s",
     503             :                     xmlSecErrorsSafeString(crypto));
     504             :         xmlSecCryptoDLLibraryDestroy(lib);
     505             :         return(NULL);
     506             :     }
     507             : 
     508             :     return(lib->functions);
     509             : }
     510             : 
     511             : /** 
     512             :  * xmlSecCryptoDLUnloadLibrary:
     513             :  * @crypto:             the desired crypto library name ("openssl", "nss", ...).
     514             :  *
     515             :  * Unloads the xmlsec-<crypto> library. All pointers to this library
     516             :  * functions tables became invalid. This function is NOT thread safe, 
     517             :  * application MUST NOT call #xmlSecCryptoDLLoadLibrary, #xmlSecCryptoDLGetLibraryFunctions,
     518             :  * and #xmlSecCryptoDLUnloadLibrary functions from multiple threads.
     519             :  *
     520             :  * Returns: 0 on success or a negative value if an error occurs.
     521             :  */
     522             : int 
     523             : xmlSecCryptoDLUnloadLibrary(const xmlChar* crypto) {
     524             :     xmlSecCryptoDLLibraryPtr lib;
     525             :     int pos;
     526             :     int ret;
     527             :     
     528             :     xmlSecAssert2(crypto != NULL, -1);
     529             : 
     530             :     pos = xmlSecCryptoDLLibrariesListFindByName(&gXmlSecCryptoDLLibraries, crypto);
     531             :     if(pos < 0) {
     532             :         /* todo: is it an error? */
     533             :         return(0);
     534             :     }
     535             :     
     536             :     lib = (xmlSecCryptoDLLibraryPtr)xmlSecPtrListGetItem(&gXmlSecCryptoDLLibraries, pos);
     537             :     if((lib != NULL) && (lib->functions == gXmlSecCryptoDLFunctions)) {
     538             :         gXmlSecCryptoDLFunctions = NULL;
     539             :     }
     540             :     
     541             :     ret = xmlSecPtrListRemove(&gXmlSecCryptoDLLibraries, pos);
     542             :     if(ret < 0) {
     543             :         xmlSecError(XMLSEC_ERRORS_HERE,
     544             :                     NULL,
     545             :                     "xmlSecPtrListRemove",
     546             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     547             :                     XMLSEC_ERRORS_NO_MESSAGE);
     548             :         return(-1);
     549             :     }
     550             : 
     551             :     return(0);
     552             : }
     553             : 
     554             : /** 
     555             :  * xmlSecCryptoDLSetFunctions:
     556             :  * @functions:          the new table
     557             :  *
     558             :  * Sets global crypto functions/transforms/keys data/keys store table.
     559             :  *
     560             :  * Returns: 0 on success or a negative value if an error occurs.
     561             :  */
     562             : int
     563             : xmlSecCryptoDLSetFunctions(xmlSecCryptoDLFunctionsPtr functions) {
     564             :     xmlSecAssert2(functions != NULL, -1);
     565             : 
     566             :     gXmlSecCryptoDLFunctions = functions;
     567             :     
     568             :     return(0);
     569             : }
     570             : 
     571             : /** 
     572             :  * xmlSecCryptoDLGetFunctions:
     573             :  *
     574             :  * Gets global crypto functions/transforms/keys data/keys store table.
     575             :  *
     576             :  * Returns: the table.
     577             :  */
     578             : xmlSecCryptoDLFunctionsPtr 
     579             : xmlSecCryptoDLGetFunctions(void) {
     580             :     return(gXmlSecCryptoDLFunctions);
     581             : }
     582             : 
     583             : #endif /* XMLSEC_NO_CRYPTO_DYNAMIC_LOADING */
     584             : 
     585             : /**
     586             :  * xmlSecCryptoDLFunctionsRegisterKeyDataAndTransforms:
     587             :  * @functions:          the functions table.
     588             :  * 
     589             :  * Registers the key data and transforms klasses from @functions table in xmlsec. 
     590             :  *
     591             :  * Returns: 0 on success or a negative value if an error occurs.
     592             :  */
     593             : int 
     594           0 : xmlSecCryptoDLFunctionsRegisterKeyDataAndTransforms(struct _xmlSecCryptoDLFunctions* functions) {
     595           0 :     xmlSecAssert2(functions != NULL, -1);
     596             : 
     597             :     /** 
     598             :      * Register keys
     599             :      */
     600           0 :     if((functions->keyDataAesGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataAesGetKlass()) < 0)) {
     601           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     602           0 :                     xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataAesGetKlass())),
     603             :                     "xmlSecKeyDataIdsRegister",
     604             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     605             :                     XMLSEC_ERRORS_NO_MESSAGE);
     606           0 :         return(-1);
     607             :     }
     608           0 :     if((functions->keyDataDesGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataDesGetKlass()) < 0)) {
     609           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     610           0 :                     xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataDesGetKlass())),
     611             :                     "xmlSecKeyDataIdsRegister",
     612             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     613             :                     XMLSEC_ERRORS_NO_MESSAGE);
     614           0 :         return(-1);
     615             :     }
     616           0 :     if((functions->keyDataDsaGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataDsaGetKlass()) < 0)) {
     617           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     618           0 :                     xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataDsaGetKlass())),
     619             :                     "xmlSecKeyDataIdsRegister",
     620             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     621             :                     XMLSEC_ERRORS_NO_MESSAGE);
     622           0 :         return(-1);
     623             :     }
     624           0 :     if((functions->keyDataGost2001GetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataGost2001GetKlass()) < 0)) {
     625           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     626           0 :                     xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataGost2001GetKlass())),
     627             :                     "xmlSecKeyDataIdsRegister",
     628             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     629             :                     XMLSEC_ERRORS_NO_MESSAGE);
     630           0 :         return(-1);
     631             :     }
     632           0 :     if((functions->keyDataHmacGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataHmacGetKlass()) < 0)) {
     633           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     634           0 :                     xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataHmacGetKlass())),
     635             :                     "xmlSecKeyDataIdsRegister",
     636             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     637             :                     XMLSEC_ERRORS_NO_MESSAGE);
     638           0 :         return(-1);
     639             :     }
     640           0 :     if((functions->keyDataRsaGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataRsaGetKlass()) < 0)) {
     641           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     642           0 :                     xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataRsaGetKlass())),
     643             :                     "xmlSecKeyDataIdsRegister",
     644             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     645             :                     XMLSEC_ERRORS_NO_MESSAGE);
     646           0 :         return(-1);
     647             :     }
     648           0 :     if((functions->keyDataX509GetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataX509GetKlass()) < 0)) {
     649           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     650           0 :                     xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataX509GetKlass())),
     651             :                     "xmlSecKeyDataIdsRegister",
     652             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     653             :                     XMLSEC_ERRORS_NO_MESSAGE);
     654           0 :         return(-1);
     655             :     }
     656           0 :     if((functions->keyDataRawX509CertGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataRawX509CertGetKlass()) < 0)) {
     657           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     658           0 :                     xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataRawX509CertGetKlass())),
     659             :                     "xmlSecKeyDataIdsRegister",
     660             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     661             :                     XMLSEC_ERRORS_NO_MESSAGE);
     662           0 :         return(-1);
     663             :     }
     664             : 
     665             : 
     666             :     /** 
     667             :      * Register transforms
     668             :      */
     669           0 :     if((functions->transformAes128CbcGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformAes128CbcGetKlass()) < 0) {
     670           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     671           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformAes128CbcGetKlass())),
     672             :                     "xmlSecTransformIdsRegister",
     673             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     674             :                     XMLSEC_ERRORS_NO_MESSAGE);
     675           0 :         return(-1);
     676             :     }    
     677             : 
     678           0 :     if((functions->transformAes192CbcGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformAes192CbcGetKlass()) < 0) {
     679           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     680           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformAes192CbcGetKlass())),
     681             :                     "xmlSecTransformIdsRegister",
     682             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     683             :                     XMLSEC_ERRORS_NO_MESSAGE);
     684           0 :         return(-1);
     685             :     }    
     686             : 
     687           0 :     if((functions->transformAes256CbcGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformAes256CbcGetKlass()) < 0) {
     688           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     689           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformAes256CbcGetKlass())),
     690             :                     "xmlSecTransformIdsRegister",
     691             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     692             :                     XMLSEC_ERRORS_NO_MESSAGE);
     693           0 :         return(-1);
     694             :     }    
     695             : 
     696           0 :     if((functions->transformKWAes128GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformKWAes128GetKlass()) < 0) {
     697           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     698           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformKWAes128GetKlass())),
     699             :                     "xmlSecTransformIdsRegister",
     700             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     701             :                     XMLSEC_ERRORS_NO_MESSAGE);
     702           0 :         return(-1);
     703             :     }    
     704             : 
     705           0 :     if((functions->transformKWAes192GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformKWAes192GetKlass()) < 0) {
     706           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     707           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformKWAes192GetKlass())),
     708             :                     "xmlSecTransformIdsRegister",
     709             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     710             :                     XMLSEC_ERRORS_NO_MESSAGE);
     711           0 :         return(-1);
     712             :     }    
     713             : 
     714           0 :     if((functions->transformKWAes256GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformKWAes256GetKlass()) < 0) {
     715           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     716           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformKWAes256GetKlass())),
     717             :                     "xmlSecTransformIdsRegister",
     718             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     719             :                     XMLSEC_ERRORS_NO_MESSAGE);
     720           0 :         return(-1);
     721             :     }    
     722             : 
     723           0 :     if((functions->transformDes3CbcGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformDes3CbcGetKlass()) < 0) {
     724           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     725           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformDes3CbcGetKlass())),
     726             :                     "xmlSecTransformIdsRegister",
     727             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     728             :                     XMLSEC_ERRORS_NO_MESSAGE);
     729           0 :         return(-1);
     730             :     }    
     731             : 
     732           0 :     if((functions->transformKWDes3GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformKWDes3GetKlass()) < 0) {
     733           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     734           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformKWDes3GetKlass())),
     735             :                     "xmlSecTransformIdsRegister",
     736             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     737             :                     XMLSEC_ERRORS_NO_MESSAGE);
     738           0 :         return(-1);
     739             :     }    
     740             : 
     741           0 :     if((functions->transformGost2001GostR3411_94GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformGost2001GostR3411_94GetKlass()) < 0) {
     742           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     743           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformGost2001GostR3411_94GetKlass())),
     744             :                     "xmlSecTransformIdsRegister",
     745             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     746             :                     XMLSEC_ERRORS_NO_MESSAGE);
     747           0 :         return(-1);
     748             :     }    
     749             : 
     750           0 :     if((functions->transformDsaSha1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformDsaSha1GetKlass()) < 0) {
     751           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     752           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformDsaSha1GetKlass())),
     753             :                     "xmlSecTransformIdsRegister",
     754             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     755             :                     XMLSEC_ERRORS_NO_MESSAGE);
     756           0 :         return(-1);
     757             :     }    
     758             : 
     759           0 :     if((functions->transformHmacMd5GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacMd5GetKlass()) < 0) {
     760           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     761           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacMd5GetKlass())),
     762             :                     "xmlSecTransformIdsRegister",
     763             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     764             :                     XMLSEC_ERRORS_NO_MESSAGE);
     765           0 :         return(-1);
     766             :     }    
     767             : 
     768           0 :     if((functions->transformHmacRipemd160GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacRipemd160GetKlass()) < 0) {
     769           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     770           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacRipemd160GetKlass())),
     771             :                     "xmlSecTransformIdsRegister",
     772             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     773             :                     XMLSEC_ERRORS_NO_MESSAGE);
     774           0 :         return(-1);
     775             :     }    
     776             : 
     777           0 :     if((functions->transformHmacSha1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha1GetKlass()) < 0) {
     778           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     779           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha1GetKlass())),
     780             :                     "xmlSecTransformIdsRegister",
     781             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     782             :                     XMLSEC_ERRORS_NO_MESSAGE);
     783           0 :         return(-1);
     784             :     }    
     785             : 
     786           0 :     if((functions->transformHmacSha224GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha224GetKlass()) < 0) {
     787           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     788           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha224GetKlass())),
     789             :                     "xmlSecTransformIdsRegister",
     790             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     791             :                     XMLSEC_ERRORS_NO_MESSAGE);
     792           0 :         return(-1);
     793             :     }    
     794             : 
     795           0 :     if((functions->transformHmacSha256GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha256GetKlass()) < 0) {
     796           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     797           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha256GetKlass())),
     798             :                     "xmlSecTransformIdsRegister",
     799             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     800             :                     XMLSEC_ERRORS_NO_MESSAGE);
     801           0 :         return(-1);
     802             :     }    
     803             : 
     804           0 :     if((functions->transformHmacSha384GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha384GetKlass()) < 0) {
     805           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     806           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha384GetKlass())),
     807             :                     "xmlSecTransformIdsRegister",
     808             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     809             :                     XMLSEC_ERRORS_NO_MESSAGE);
     810           0 :         return(-1);
     811             :     }    
     812             : 
     813           0 :     if((functions->transformHmacSha512GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha512GetKlass()) < 0) {
     814           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     815           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha512GetKlass())),
     816             :                     "xmlSecTransformIdsRegister",
     817             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     818             :                     XMLSEC_ERRORS_NO_MESSAGE);
     819           0 :         return(-1);
     820             :     }
     821             : 
     822           0 :     if((functions->transformMd5GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformMd5GetKlass()) < 0) {
     823           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     824           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformMd5GetKlass())),
     825             :                     "xmlSecTransformIdsRegister",
     826             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     827             :                     XMLSEC_ERRORS_NO_MESSAGE);
     828           0 :         return(-1);
     829             :     }    
     830             : 
     831           0 :     if((functions->transformRipemd160GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRipemd160GetKlass()) < 0) {
     832           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     833           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRipemd160GetKlass())),
     834             :                     "xmlSecTransformIdsRegister",
     835             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     836             :                     XMLSEC_ERRORS_NO_MESSAGE);
     837           0 :         return(-1);
     838             :     }    
     839             : 
     840           0 :     if((functions->transformRsaMd5GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaMd5GetKlass()) < 0) {
     841           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     842           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaMd5GetKlass())),
     843             :                     "xmlSecTransformIdsRegister",
     844             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     845             :                     XMLSEC_ERRORS_NO_MESSAGE);
     846           0 :         return(-1);
     847             :     }    
     848             : 
     849           0 :     if((functions->transformRsaRipemd160GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaRipemd160GetKlass()) < 0) {
     850           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     851           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaRipemd160GetKlass())),
     852             :                     "xmlSecTransformIdsRegister",
     853             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     854             :                     XMLSEC_ERRORS_NO_MESSAGE);
     855           0 :         return(-1);
     856             :     }    
     857             : 
     858           0 :     if((functions->transformRsaSha1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha1GetKlass()) < 0) {
     859           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     860           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha1GetKlass())),
     861             :                     "xmlSecTransformIdsRegister",
     862             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     863             :                     XMLSEC_ERRORS_NO_MESSAGE);
     864           0 :         return(-1);
     865             :     }    
     866             : 
     867           0 :     if((functions->transformRsaSha224GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha224GetKlass()) < 0) {
     868           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     869           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha224GetKlass())),
     870             :                     "xmlSecTransformIdsRegister",
     871             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     872             :                     XMLSEC_ERRORS_NO_MESSAGE);
     873           0 :         return(-1);
     874             :     }    
     875             : 
     876           0 :     if((functions->transformRsaSha256GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha256GetKlass()) < 0) {
     877           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     878           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha256GetKlass())),
     879             :                     "xmlSecTransformIdsRegister",
     880             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     881             :                     XMLSEC_ERRORS_NO_MESSAGE);
     882           0 :         return(-1);
     883             :     }    
     884             : 
     885           0 :     if((functions->transformRsaSha384GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha384GetKlass()) < 0) {
     886           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     887           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha384GetKlass())),
     888             :                     "xmlSecTransformIdsRegister",
     889             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     890             :                     XMLSEC_ERRORS_NO_MESSAGE);
     891           0 :         return(-1);
     892             :     }    
     893             : 
     894           0 :     if((functions->transformRsaSha512GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha512GetKlass()) < 0) {
     895           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     896           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha512GetKlass())),
     897             :                     "xmlSecTransformIdsRegister",
     898             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     899             :                     XMLSEC_ERRORS_NO_MESSAGE);
     900           0 :         return(-1);
     901             :     }
     902             : 
     903           0 :     if((functions->transformRsaPkcs1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaPkcs1GetKlass()) < 0) {
     904           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     905           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaPkcs1GetKlass())),
     906             :                     "xmlSecTransformIdsRegister",
     907             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     908             :                     XMLSEC_ERRORS_NO_MESSAGE);
     909           0 :         return(-1);
     910             :     }    
     911             : 
     912           0 :     if((functions->transformRsaOaepGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaOaepGetKlass()) < 0) {
     913           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     914           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaOaepGetKlass())),
     915             :                     "xmlSecTransformIdsRegister",
     916             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     917             :                     XMLSEC_ERRORS_NO_MESSAGE);
     918           0 :         return(-1);
     919             :     }    
     920             : 
     921           0 :     if((functions->transformGostR3411_94GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformGostR3411_94GetKlass()) < 0) {
     922           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     923           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformGostR3411_94GetKlass())),
     924             :                     "xmlSecTransformIdsRegister",
     925             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     926             :                     XMLSEC_ERRORS_NO_MESSAGE);
     927           0 :         return(-1);
     928             :     }    
     929             : 
     930           0 :     if((functions->transformSha1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha1GetKlass()) < 0) {
     931           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     932           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha1GetKlass())),
     933             :                     "xmlSecTransformIdsRegister",
     934             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     935             :                     XMLSEC_ERRORS_NO_MESSAGE);
     936           0 :         return(-1);
     937             :     }    
     938             : 
     939           0 :     if((functions->transformSha224GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha224GetKlass()) < 0) {
     940           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     941           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha224GetKlass())),
     942             :                     "xmlSecTransformIdsRegister",
     943             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     944             :                     XMLSEC_ERRORS_NO_MESSAGE);
     945           0 :         return(-1);
     946             :     }    
     947             : 
     948           0 :     if((functions->transformSha256GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha256GetKlass()) < 0) {
     949           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     950           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha256GetKlass())),
     951             :                     "xmlSecTransformIdsRegister",
     952             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     953             :                     XMLSEC_ERRORS_NO_MESSAGE);
     954           0 :         return(-1);
     955             :     }    
     956             : 
     957           0 :     if((functions->transformSha384GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha384GetKlass()) < 0) {
     958           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     959           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha384GetKlass())),
     960             :                     "xmlSecTransformIdsRegister",
     961             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     962             :                     XMLSEC_ERRORS_NO_MESSAGE);
     963           0 :         return(-1);
     964             :     }    
     965             : 
     966           0 :     if((functions->transformSha512GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha512GetKlass()) < 0) {
     967           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     968           0 :                     xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha512GetKlass())),
     969             :                     "xmlSecTransformIdsRegister",
     970             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     971             :                     XMLSEC_ERRORS_NO_MESSAGE);
     972           0 :         return(-1);
     973             :     }    
     974             : 
     975           0 :     return(0);     
     976             : }
     977             : 
     978             : 

Generated by: LCOV version 1.10