2 * XML Security Library (http://www.aleksey.com/xmlsec).
5 * This is free software; see Copyright file in the source
6 * distribution for preciese wording.
8 * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
18 #include <libxml/tree.h>
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>
32 #ifndef XMLSEC_NO_CRYPTO_DYNAMIC_LOADING
35 #ifdef XMLSEC_DL_LIBLTDL
37 #endif /* XMLSEC_DL_LIBLTDL */
39 #ifdef XMLSEC_DL_WIN32
41 #endif /* XMLSEC_DL_WIN32 */
43 /***********************************************************************
45 * loaded libraries list
47 **********************************************************************/
48 typedef struct _xmlSecCryptoDLLibrary xmlSecCryptoDLLibrary,
49 *xmlSecCryptoDLLibraryPtr;
50 struct _xmlSecCryptoDLLibrary {
53 xmlChar* getFunctionsName;
54 xmlSecCryptoDLFunctionsPtr functions;
56 #ifdef XMLSEC_DL_LIBLTDL
58 #endif /* XMLSEC_DL_LIBLTDL */
60 #ifdef XMLSEC_DL_WIN32
62 #endif /* XMLSEC_DL_WIN32 */
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);
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; */
79 static xmlSecPtrListId xmlSecCryptoDLLibrariesListGetKlass (void);
80 static int xmlSecCryptoDLLibrariesListFindByName (xmlSecPtrListPtr list,
83 typedef xmlSecCryptoDLFunctionsPtr (*xmlSecCryptoGetFunctionsCallback)(void);
85 static xmlSecCryptoDLLibraryPtr
86 xmlSecCryptoDLLibraryCreate(const xmlChar* name) {
87 xmlSecCryptoDLLibraryPtr lib;
88 xmlSecCryptoGetFunctionsCallback getFunctions;
90 xmlSecAssert2(name != NULL, NULL);
92 /* fprintf (stderr, "loading \"library %s\"...\n", name); */
94 /* Allocate a new xmlSecCryptoDLLibrary and fill the fields. */
95 lib = (xmlSecCryptoDLLibraryPtr)xmlMalloc(sizeof(xmlSecCryptoDLLibrary));
97 xmlSecError(XMLSEC_ERRORS_HERE,
100 XMLSEC_ERRORS_R_MALLOC_FAILED,
101 "size=%d", sizeof(lib));
104 memset(lib, 0, sizeof(xmlSecCryptoDLLibrary));
106 lib->name = xmlStrdup(name);
107 if(lib->name == NULL) {
108 xmlSecError(XMLSEC_ERRORS_HERE,
111 XMLSEC_ERRORS_R_MALLOC_FAILED,
112 XMLSEC_ERRORS_NO_MESSAGE);
113 xmlSecCryptoDLLibraryDestroy(lib);
117 lib->filename = xmlSecCryptoDLLibraryConstructFilename(name);
118 if(lib->filename == NULL) {
119 xmlSecError(XMLSEC_ERRORS_HERE,
120 "xmlSecCryptoDLLibraryConstructFilename",
122 XMLSEC_ERRORS_R_XMLSEC_FAILED,
123 XMLSEC_ERRORS_NO_MESSAGE);
124 xmlSecCryptoDLLibraryDestroy(lib);
128 lib->getFunctionsName = xmlSecCryptoDLLibraryConstructGetFunctionsName(name);
129 if(lib->getFunctionsName == NULL) {
130 xmlSecError(XMLSEC_ERRORS_HERE,
131 "xmlSecCryptoDLLibraryConstructGetFunctionsName",
133 XMLSEC_ERRORS_R_XMLSEC_FAILED,
134 XMLSEC_ERRORS_NO_MESSAGE);
135 xmlSecCryptoDLLibraryDestroy(lib);
139 #ifdef XMLSEC_DL_LIBLTDL
140 lib->handle = lt_dlopenext((char*)lib->filename);
141 if(lib->handle == NULL) {
142 xmlSecError(XMLSEC_ERRORS_HERE,
145 XMLSEC_ERRORS_R_IO_FAILED,
147 xmlSecErrorsSafeString(lib->filename));
148 xmlSecCryptoDLLibraryDestroy(lib);
152 getFunctions = (xmlSecCryptoGetFunctionsCallback)lt_dlsym(lib->handle, (char*)lib->getFunctionsName);
153 if(getFunctions == NULL) {
154 xmlSecError(XMLSEC_ERRORS_HERE,
157 XMLSEC_ERRORS_R_IO_FAILED,
159 xmlSecErrorsSafeString(lib->getFunctionsName));
160 xmlSecCryptoDLLibraryDestroy(lib);
163 #endif /* XMLSEC_DL_LIBLTDL */
165 #ifdef XMLSEC_DL_WIN32
166 lib->handle = LoadLibraryA((char*)lib->filename);
167 if(lib->handle == NULL) {
168 xmlSecError(XMLSEC_ERRORS_HERE,
171 XMLSEC_ERRORS_R_IO_FAILED,
173 xmlSecErrorsSafeString(lib->filename));
174 xmlSecCryptoDLLibraryDestroy(lib);
178 getFunctions = (xmlSecCryptoGetFunctionsCallback)GetProcAddress(lib->handle, (char*)lib->getFunctionsName);
179 if(getFunctions == NULL) {
180 xmlSecError(XMLSEC_ERRORS_HERE,
183 XMLSEC_ERRORS_R_IO_FAILED,
185 xmlSecErrorsSafeString(lib->getFunctionsName));
186 xmlSecCryptoDLLibraryDestroy(lib);
189 #endif /* XMLSEC_DL_WIN32 */
191 if(getFunctions == NULL) {
192 xmlSecError(XMLSEC_ERRORS_HERE,
195 XMLSEC_ERRORS_R_XMLSEC_FAILED,
196 "invalid configuration: no way to load library");
197 xmlSecCryptoDLLibraryDestroy(lib);
201 lib->functions = getFunctions();
202 if(lib->functions == NULL) {
203 xmlSecError(XMLSEC_ERRORS_HERE,
206 XMLSEC_ERRORS_R_XMLSEC_FAILED,
207 XMLSEC_ERRORS_NO_MESSAGE);
208 xmlSecCryptoDLLibraryDestroy(lib);
212 /* fprintf (stderr, "library %s loaded\n", name); */
217 xmlSecCryptoDLLibraryDestroy(xmlSecCryptoDLLibraryPtr lib) {
218 xmlSecAssert(lib != NULL);
220 /* fprintf (stderr, "unloading \"library %s\"...\n", lib->name); */
221 if(lib->name != NULL) {
225 if(lib->filename != NULL) {
226 xmlFree(lib->filename);
229 if(lib->getFunctionsName != NULL) {
230 xmlFree(lib->getFunctionsName);
233 #ifdef XMLSEC_DL_LIBLTDL
234 if(lib->handle != NULL) {
237 ret = lt_dlclose(lib->handle);
239 xmlSecError(XMLSEC_ERRORS_HERE,
242 XMLSEC_ERRORS_R_IO_FAILED,
243 XMLSEC_ERRORS_NO_MESSAGE);
246 #endif /* XMLSEC_DL_LIBLTDL */
248 #ifdef XMLSEC_DL_WIN32
249 if(lib->handle != NULL) {
252 res = FreeLibrary(lib->handle);
254 xmlSecError(XMLSEC_ERRORS_HERE,
257 XMLSEC_ERRORS_R_IO_FAILED,
258 XMLSEC_ERRORS_NO_MESSAGE);
261 #endif /* XMLSEC_DL_WIN32*/
263 memset(lib, 0, sizeof(xmlSecCryptoDLLibrary));
267 static xmlSecCryptoDLLibraryPtr
268 xmlSecCryptoDLLibraryDuplicate(xmlSecCryptoDLLibraryPtr lib) {
269 xmlSecAssert2(lib != NULL, NULL);
270 xmlSecAssert2(lib->name != NULL, NULL);
272 return(xmlSecCryptoDLLibraryCreate(lib->name));
276 xmlSecCryptoDLLibraryConstructFilename(const xmlChar* name) {
277 static xmlChar tmpl[] = "lib%s-%s";
281 xmlSecAssert2(name != NULL, NULL);
284 len = xmlStrlen(BAD_CAST PACKAGE) + xmlStrlen(name) + xmlStrlen(tmpl) + 1;
285 res = (xmlChar*)xmlMalloc(len + 1);
287 xmlSecError(XMLSEC_ERRORS_HERE,
290 XMLSEC_ERRORS_R_MALLOC_FAILED,
294 xmlSecStrPrintf(res, len, tmpl, PACKAGE, name);
300 xmlSecCryptoDLLibraryConstructGetFunctionsName(const xmlChar* name) {
301 static xmlChar tmpl[] = "xmlSecCryptoGetFunctions_%s";
305 xmlSecAssert2(name != NULL, NULL);
307 len = xmlStrlen(name) + xmlStrlen(tmpl) + 1;
308 res = (xmlChar*)xmlMalloc(len + 1);
310 xmlSecError(XMLSEC_ERRORS_HERE,
313 XMLSEC_ERRORS_R_MALLOC_FAILED,
317 xmlSecStrPrintf(res, len, tmpl, name);
322 static xmlSecPtrListId
323 xmlSecCryptoDLLibrariesListGetKlass(void) {
324 return(&xmlSecCryptoDLLibrariesListKlass);
328 xmlSecCryptoDLLibrariesListFindByName(xmlSecPtrListPtr list, const xmlChar* name) {
330 xmlSecCryptoDLLibraryPtr lib;
332 xmlSecAssert2(xmlSecPtrListCheckId(list, xmlSecCryptoDLLibrariesListGetKlass()), -1);
333 xmlSecAssert2(name != NULL, -1);
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)) {
345 /******************************************************************************
347 * Dynamic load functions
349 *****************************************************************************/
350 static xmlSecCryptoDLFunctionsPtr gXmlSecCryptoDLFunctions = NULL;
351 static xmlSecPtrList gXmlSecCryptoDLLibraries;
354 * xmlSecCryptoDLInit:
356 * Initializes dynamic loading engine. This is an internal function
357 * and should not be called by application directly.
359 * Returns: 0 on success or a negative value if an error occurs.
362 xmlSecCryptoDLInit(void) {
365 ret = xmlSecPtrListInitialize(&gXmlSecCryptoDLLibraries, xmlSecCryptoDLLibrariesListGetKlass());
367 xmlSecError(XMLSEC_ERRORS_HERE,
369 "xmlSecPtrListPtrInitialize",
370 XMLSEC_ERRORS_R_XMLSEC_FAILED,
371 "xmlSecCryptoDLLibrariesListGetKlass");
375 #ifdef XMLSEC_DL_LIBLTDL
378 xmlSecError(XMLSEC_ERRORS_HERE,
381 XMLSEC_ERRORS_R_IO_FAILED,
382 XMLSEC_ERRORS_NO_MESSAGE);
385 #endif /* XMLSEC_DL_LIBLTDL */
392 * xmlSecCryptoDLShutdown:
394 * Shutdowns dynamic loading engine. This is an internal function
395 * and should not be called by application directly.
397 * Returns: 0 on success or a negative value if an error occurs.
400 xmlSecCryptoDLShutdown(void) {
403 xmlSecPtrListFinalize(&gXmlSecCryptoDLLibraries);
405 #ifdef XMLSEC_DL_LIBLTDL
408 xmlSecError(XMLSEC_ERRORS_HERE,
411 XMLSEC_ERRORS_R_IO_FAILED,
412 XMLSEC_ERRORS_NO_MESSAGE);
414 #endif /* XMLSEC_DL_LIBLTDL */
420 * xmlSecCryptoDLLoadLibrary:
421 * @crypto: the desired crypto library name ("openssl", "nss", ...).
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.
427 * Returns: 0 on success or a negative value if an error occurs.
430 xmlSecCryptoDLLoadLibrary(const xmlChar* crypto) {
431 xmlSecCryptoDLFunctionsPtr functions;
434 xmlSecAssert2(crypto != NULL, -1);
436 functions = xmlSecCryptoDLGetLibraryFunctions(crypto);
437 if(functions == NULL) {
438 xmlSecError(XMLSEC_ERRORS_HERE,
440 "xmlSecCryptoDLGetLibraryFunctions",
441 XMLSEC_ERRORS_R_XMLSEC_FAILED,
442 XMLSEC_ERRORS_NO_MESSAGE);
446 ret = xmlSecCryptoDLSetFunctions(functions);
448 xmlSecError(XMLSEC_ERRORS_HERE,
450 "xmlSecCryptoDLSetFunctions",
451 XMLSEC_ERRORS_R_XMLSEC_FAILED,
452 XMLSEC_ERRORS_NO_MESSAGE);
459 * xmlSecCryptoDLGetLibraryFunctions:
460 * @crypto: the desired crypto library name ("openssl", "nss", ...).
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.
466 * Returns: the table or NULL if an error occurs.
468 xmlSecCryptoDLFunctionsPtr
469 xmlSecCryptoDLGetLibraryFunctions(const xmlChar* crypto) {
470 xmlSecCryptoDLLibraryPtr lib;
474 xmlSecAssert2(crypto != NULL, NULL);
476 pos = xmlSecCryptoDLLibrariesListFindByName(&gXmlSecCryptoDLLibraries, crypto);
478 lib = (xmlSecCryptoDLLibraryPtr)xmlSecPtrListGetItem(&gXmlSecCryptoDLLibraries, pos);
479 xmlSecAssert2(lib != NULL, NULL);
480 xmlSecAssert2(lib->functions != NULL, NULL);
482 return(lib->functions);
485 lib = xmlSecCryptoDLLibraryCreate(crypto);
487 xmlSecError(XMLSEC_ERRORS_HERE,
489 "xmlSecCryptoDLLibraryCreate",
490 XMLSEC_ERRORS_R_XMLSEC_FAILED,
492 xmlSecErrorsSafeString(crypto));
496 ret = xmlSecPtrListAdd(&gXmlSecCryptoDLLibraries, lib);
498 xmlSecError(XMLSEC_ERRORS_HERE,
501 XMLSEC_ERRORS_R_XMLSEC_FAILED,
503 xmlSecErrorsSafeString(crypto));
504 xmlSecCryptoDLLibraryDestroy(lib);
508 return(lib->functions);
512 * xmlSecCryptoDLUnloadLibrary:
513 * @crypto: the desired crypto library name ("openssl", "nss", ...).
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.
520 * Returns: 0 on success or a negative value if an error occurs.
523 xmlSecCryptoDLUnloadLibrary(const xmlChar* crypto) {
524 xmlSecCryptoDLLibraryPtr lib;
528 xmlSecAssert2(crypto != NULL, -1);
530 pos = xmlSecCryptoDLLibrariesListFindByName(&gXmlSecCryptoDLLibraries, crypto);
532 /* todo: is it an error? */
536 lib = (xmlSecCryptoDLLibraryPtr)xmlSecPtrListGetItem(&gXmlSecCryptoDLLibraries, pos);
537 if((lib != NULL) && (lib->functions == gXmlSecCryptoDLFunctions)) {
538 gXmlSecCryptoDLFunctions = NULL;
541 ret = xmlSecPtrListRemove(&gXmlSecCryptoDLLibraries, pos);
543 xmlSecError(XMLSEC_ERRORS_HERE,
545 "xmlSecPtrListRemove",
546 XMLSEC_ERRORS_R_XMLSEC_FAILED,
547 XMLSEC_ERRORS_NO_MESSAGE);
555 * xmlSecCryptoDLSetFunctions:
556 * @functions: the new table
558 * Sets global crypto functions/transforms/keys data/keys store table.
560 * Returns: 0 on success or a negative value if an error occurs.
563 xmlSecCryptoDLSetFunctions(xmlSecCryptoDLFunctionsPtr functions) {
564 xmlSecAssert2(functions != NULL, -1);
566 gXmlSecCryptoDLFunctions = functions;
572 * xmlSecCryptoDLGetFunctions:
574 * Gets global crypto functions/transforms/keys data/keys store table.
576 * Returns: the table.
578 xmlSecCryptoDLFunctionsPtr
579 xmlSecCryptoDLGetFunctions(void) {
580 return(gXmlSecCryptoDLFunctions);
583 #endif /* XMLSEC_NO_CRYPTO_DYNAMIC_LOADING */
586 * xmlSecCryptoDLFunctionsRegisterKeyDataAndTransforms:
587 * @functions: the functions table.
589 * Registers the key data and transforms klasses from @functions table in xmlsec.
591 * Returns: 0 on success or a negative value if an error occurs.
594 xmlSecCryptoDLFunctionsRegisterKeyDataAndTransforms(struct _xmlSecCryptoDLFunctions* functions) {
595 xmlSecAssert2(functions != NULL, -1);
600 if((functions->keyDataAesGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataAesGetKlass()) < 0)) {
601 xmlSecError(XMLSEC_ERRORS_HERE,
602 xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataAesGetKlass())),
603 "xmlSecKeyDataIdsRegister",
604 XMLSEC_ERRORS_R_XMLSEC_FAILED,
605 XMLSEC_ERRORS_NO_MESSAGE);
608 if((functions->keyDataDesGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataDesGetKlass()) < 0)) {
609 xmlSecError(XMLSEC_ERRORS_HERE,
610 xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataDesGetKlass())),
611 "xmlSecKeyDataIdsRegister",
612 XMLSEC_ERRORS_R_XMLSEC_FAILED,
613 XMLSEC_ERRORS_NO_MESSAGE);
616 if((functions->keyDataDsaGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataDsaGetKlass()) < 0)) {
617 xmlSecError(XMLSEC_ERRORS_HERE,
618 xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataDsaGetKlass())),
619 "xmlSecKeyDataIdsRegister",
620 XMLSEC_ERRORS_R_XMLSEC_FAILED,
621 XMLSEC_ERRORS_NO_MESSAGE);
624 if((functions->keyDataGost2001GetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataGost2001GetKlass()) < 0)) {
625 xmlSecError(XMLSEC_ERRORS_HERE,
626 xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataGost2001GetKlass())),
627 "xmlSecKeyDataIdsRegister",
628 XMLSEC_ERRORS_R_XMLSEC_FAILED,
629 XMLSEC_ERRORS_NO_MESSAGE);
632 if((functions->keyDataHmacGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataHmacGetKlass()) < 0)) {
633 xmlSecError(XMLSEC_ERRORS_HERE,
634 xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataHmacGetKlass())),
635 "xmlSecKeyDataIdsRegister",
636 XMLSEC_ERRORS_R_XMLSEC_FAILED,
637 XMLSEC_ERRORS_NO_MESSAGE);
640 if((functions->keyDataRsaGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataRsaGetKlass()) < 0)) {
641 xmlSecError(XMLSEC_ERRORS_HERE,
642 xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataRsaGetKlass())),
643 "xmlSecKeyDataIdsRegister",
644 XMLSEC_ERRORS_R_XMLSEC_FAILED,
645 XMLSEC_ERRORS_NO_MESSAGE);
648 if((functions->keyDataX509GetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataX509GetKlass()) < 0)) {
649 xmlSecError(XMLSEC_ERRORS_HERE,
650 xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataX509GetKlass())),
651 "xmlSecKeyDataIdsRegister",
652 XMLSEC_ERRORS_R_XMLSEC_FAILED,
653 XMLSEC_ERRORS_NO_MESSAGE);
656 if((functions->keyDataRawX509CertGetKlass != NULL) && (xmlSecKeyDataIdsRegister(functions->keyDataRawX509CertGetKlass()) < 0)) {
657 xmlSecError(XMLSEC_ERRORS_HERE,
658 xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(functions->keyDataRawX509CertGetKlass())),
659 "xmlSecKeyDataIdsRegister",
660 XMLSEC_ERRORS_R_XMLSEC_FAILED,
661 XMLSEC_ERRORS_NO_MESSAGE);
667 * Register transforms
669 if((functions->transformAes128CbcGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformAes128CbcGetKlass()) < 0) {
670 xmlSecError(XMLSEC_ERRORS_HERE,
671 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformAes128CbcGetKlass())),
672 "xmlSecTransformIdsRegister",
673 XMLSEC_ERRORS_R_XMLSEC_FAILED,
674 XMLSEC_ERRORS_NO_MESSAGE);
678 if((functions->transformAes192CbcGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformAes192CbcGetKlass()) < 0) {
679 xmlSecError(XMLSEC_ERRORS_HERE,
680 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformAes192CbcGetKlass())),
681 "xmlSecTransformIdsRegister",
682 XMLSEC_ERRORS_R_XMLSEC_FAILED,
683 XMLSEC_ERRORS_NO_MESSAGE);
687 if((functions->transformAes256CbcGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformAes256CbcGetKlass()) < 0) {
688 xmlSecError(XMLSEC_ERRORS_HERE,
689 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformAes256CbcGetKlass())),
690 "xmlSecTransformIdsRegister",
691 XMLSEC_ERRORS_R_XMLSEC_FAILED,
692 XMLSEC_ERRORS_NO_MESSAGE);
696 if((functions->transformKWAes128GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformKWAes128GetKlass()) < 0) {
697 xmlSecError(XMLSEC_ERRORS_HERE,
698 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformKWAes128GetKlass())),
699 "xmlSecTransformIdsRegister",
700 XMLSEC_ERRORS_R_XMLSEC_FAILED,
701 XMLSEC_ERRORS_NO_MESSAGE);
705 if((functions->transformKWAes192GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformKWAes192GetKlass()) < 0) {
706 xmlSecError(XMLSEC_ERRORS_HERE,
707 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformKWAes192GetKlass())),
708 "xmlSecTransformIdsRegister",
709 XMLSEC_ERRORS_R_XMLSEC_FAILED,
710 XMLSEC_ERRORS_NO_MESSAGE);
714 if((functions->transformKWAes256GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformKWAes256GetKlass()) < 0) {
715 xmlSecError(XMLSEC_ERRORS_HERE,
716 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformKWAes256GetKlass())),
717 "xmlSecTransformIdsRegister",
718 XMLSEC_ERRORS_R_XMLSEC_FAILED,
719 XMLSEC_ERRORS_NO_MESSAGE);
723 if((functions->transformDes3CbcGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformDes3CbcGetKlass()) < 0) {
724 xmlSecError(XMLSEC_ERRORS_HERE,
725 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformDes3CbcGetKlass())),
726 "xmlSecTransformIdsRegister",
727 XMLSEC_ERRORS_R_XMLSEC_FAILED,
728 XMLSEC_ERRORS_NO_MESSAGE);
732 if((functions->transformKWDes3GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformKWDes3GetKlass()) < 0) {
733 xmlSecError(XMLSEC_ERRORS_HERE,
734 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformKWDes3GetKlass())),
735 "xmlSecTransformIdsRegister",
736 XMLSEC_ERRORS_R_XMLSEC_FAILED,
737 XMLSEC_ERRORS_NO_MESSAGE);
741 if((functions->transformGost2001GostR3411_94GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformGost2001GostR3411_94GetKlass()) < 0) {
742 xmlSecError(XMLSEC_ERRORS_HERE,
743 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformGost2001GostR3411_94GetKlass())),
744 "xmlSecTransformIdsRegister",
745 XMLSEC_ERRORS_R_XMLSEC_FAILED,
746 XMLSEC_ERRORS_NO_MESSAGE);
750 if((functions->transformDsaSha1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformDsaSha1GetKlass()) < 0) {
751 xmlSecError(XMLSEC_ERRORS_HERE,
752 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformDsaSha1GetKlass())),
753 "xmlSecTransformIdsRegister",
754 XMLSEC_ERRORS_R_XMLSEC_FAILED,
755 XMLSEC_ERRORS_NO_MESSAGE);
759 if((functions->transformHmacMd5GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacMd5GetKlass()) < 0) {
760 xmlSecError(XMLSEC_ERRORS_HERE,
761 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacMd5GetKlass())),
762 "xmlSecTransformIdsRegister",
763 XMLSEC_ERRORS_R_XMLSEC_FAILED,
764 XMLSEC_ERRORS_NO_MESSAGE);
768 if((functions->transformHmacRipemd160GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacRipemd160GetKlass()) < 0) {
769 xmlSecError(XMLSEC_ERRORS_HERE,
770 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacRipemd160GetKlass())),
771 "xmlSecTransformIdsRegister",
772 XMLSEC_ERRORS_R_XMLSEC_FAILED,
773 XMLSEC_ERRORS_NO_MESSAGE);
777 if((functions->transformHmacSha1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha1GetKlass()) < 0) {
778 xmlSecError(XMLSEC_ERRORS_HERE,
779 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha1GetKlass())),
780 "xmlSecTransformIdsRegister",
781 XMLSEC_ERRORS_R_XMLSEC_FAILED,
782 XMLSEC_ERRORS_NO_MESSAGE);
786 if((functions->transformHmacSha224GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha224GetKlass()) < 0) {
787 xmlSecError(XMLSEC_ERRORS_HERE,
788 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha224GetKlass())),
789 "xmlSecTransformIdsRegister",
790 XMLSEC_ERRORS_R_XMLSEC_FAILED,
791 XMLSEC_ERRORS_NO_MESSAGE);
795 if((functions->transformHmacSha256GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha256GetKlass()) < 0) {
796 xmlSecError(XMLSEC_ERRORS_HERE,
797 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha256GetKlass())),
798 "xmlSecTransformIdsRegister",
799 XMLSEC_ERRORS_R_XMLSEC_FAILED,
800 XMLSEC_ERRORS_NO_MESSAGE);
804 if((functions->transformHmacSha384GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha384GetKlass()) < 0) {
805 xmlSecError(XMLSEC_ERRORS_HERE,
806 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha384GetKlass())),
807 "xmlSecTransformIdsRegister",
808 XMLSEC_ERRORS_R_XMLSEC_FAILED,
809 XMLSEC_ERRORS_NO_MESSAGE);
813 if((functions->transformHmacSha512GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformHmacSha512GetKlass()) < 0) {
814 xmlSecError(XMLSEC_ERRORS_HERE,
815 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformHmacSha512GetKlass())),
816 "xmlSecTransformIdsRegister",
817 XMLSEC_ERRORS_R_XMLSEC_FAILED,
818 XMLSEC_ERRORS_NO_MESSAGE);
822 if((functions->transformMd5GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformMd5GetKlass()) < 0) {
823 xmlSecError(XMLSEC_ERRORS_HERE,
824 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformMd5GetKlass())),
825 "xmlSecTransformIdsRegister",
826 XMLSEC_ERRORS_R_XMLSEC_FAILED,
827 XMLSEC_ERRORS_NO_MESSAGE);
831 if((functions->transformRipemd160GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRipemd160GetKlass()) < 0) {
832 xmlSecError(XMLSEC_ERRORS_HERE,
833 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRipemd160GetKlass())),
834 "xmlSecTransformIdsRegister",
835 XMLSEC_ERRORS_R_XMLSEC_FAILED,
836 XMLSEC_ERRORS_NO_MESSAGE);
840 if((functions->transformRsaMd5GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaMd5GetKlass()) < 0) {
841 xmlSecError(XMLSEC_ERRORS_HERE,
842 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaMd5GetKlass())),
843 "xmlSecTransformIdsRegister",
844 XMLSEC_ERRORS_R_XMLSEC_FAILED,
845 XMLSEC_ERRORS_NO_MESSAGE);
849 if((functions->transformRsaRipemd160GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaRipemd160GetKlass()) < 0) {
850 xmlSecError(XMLSEC_ERRORS_HERE,
851 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaRipemd160GetKlass())),
852 "xmlSecTransformIdsRegister",
853 XMLSEC_ERRORS_R_XMLSEC_FAILED,
854 XMLSEC_ERRORS_NO_MESSAGE);
858 if((functions->transformRsaSha1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha1GetKlass()) < 0) {
859 xmlSecError(XMLSEC_ERRORS_HERE,
860 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha1GetKlass())),
861 "xmlSecTransformIdsRegister",
862 XMLSEC_ERRORS_R_XMLSEC_FAILED,
863 XMLSEC_ERRORS_NO_MESSAGE);
867 if((functions->transformRsaSha224GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha224GetKlass()) < 0) {
868 xmlSecError(XMLSEC_ERRORS_HERE,
869 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha224GetKlass())),
870 "xmlSecTransformIdsRegister",
871 XMLSEC_ERRORS_R_XMLSEC_FAILED,
872 XMLSEC_ERRORS_NO_MESSAGE);
876 if((functions->transformRsaSha256GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha256GetKlass()) < 0) {
877 xmlSecError(XMLSEC_ERRORS_HERE,
878 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha256GetKlass())),
879 "xmlSecTransformIdsRegister",
880 XMLSEC_ERRORS_R_XMLSEC_FAILED,
881 XMLSEC_ERRORS_NO_MESSAGE);
885 if((functions->transformRsaSha384GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha384GetKlass()) < 0) {
886 xmlSecError(XMLSEC_ERRORS_HERE,
887 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha384GetKlass())),
888 "xmlSecTransformIdsRegister",
889 XMLSEC_ERRORS_R_XMLSEC_FAILED,
890 XMLSEC_ERRORS_NO_MESSAGE);
894 if((functions->transformRsaSha512GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaSha512GetKlass()) < 0) {
895 xmlSecError(XMLSEC_ERRORS_HERE,
896 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaSha512GetKlass())),
897 "xmlSecTransformIdsRegister",
898 XMLSEC_ERRORS_R_XMLSEC_FAILED,
899 XMLSEC_ERRORS_NO_MESSAGE);
903 if((functions->transformRsaPkcs1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaPkcs1GetKlass()) < 0) {
904 xmlSecError(XMLSEC_ERRORS_HERE,
905 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaPkcs1GetKlass())),
906 "xmlSecTransformIdsRegister",
907 XMLSEC_ERRORS_R_XMLSEC_FAILED,
908 XMLSEC_ERRORS_NO_MESSAGE);
912 if((functions->transformRsaOaepGetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformRsaOaepGetKlass()) < 0) {
913 xmlSecError(XMLSEC_ERRORS_HERE,
914 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformRsaOaepGetKlass())),
915 "xmlSecTransformIdsRegister",
916 XMLSEC_ERRORS_R_XMLSEC_FAILED,
917 XMLSEC_ERRORS_NO_MESSAGE);
921 if((functions->transformGostR3411_94GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformGostR3411_94GetKlass()) < 0) {
922 xmlSecError(XMLSEC_ERRORS_HERE,
923 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformGostR3411_94GetKlass())),
924 "xmlSecTransformIdsRegister",
925 XMLSEC_ERRORS_R_XMLSEC_FAILED,
926 XMLSEC_ERRORS_NO_MESSAGE);
930 if((functions->transformSha1GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha1GetKlass()) < 0) {
931 xmlSecError(XMLSEC_ERRORS_HERE,
932 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha1GetKlass())),
933 "xmlSecTransformIdsRegister",
934 XMLSEC_ERRORS_R_XMLSEC_FAILED,
935 XMLSEC_ERRORS_NO_MESSAGE);
939 if((functions->transformSha224GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha224GetKlass()) < 0) {
940 xmlSecError(XMLSEC_ERRORS_HERE,
941 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha224GetKlass())),
942 "xmlSecTransformIdsRegister",
943 XMLSEC_ERRORS_R_XMLSEC_FAILED,
944 XMLSEC_ERRORS_NO_MESSAGE);
948 if((functions->transformSha256GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha256GetKlass()) < 0) {
949 xmlSecError(XMLSEC_ERRORS_HERE,
950 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha256GetKlass())),
951 "xmlSecTransformIdsRegister",
952 XMLSEC_ERRORS_R_XMLSEC_FAILED,
953 XMLSEC_ERRORS_NO_MESSAGE);
957 if((functions->transformSha384GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha384GetKlass()) < 0) {
958 xmlSecError(XMLSEC_ERRORS_HERE,
959 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha384GetKlass())),
960 "xmlSecTransformIdsRegister",
961 XMLSEC_ERRORS_R_XMLSEC_FAILED,
962 XMLSEC_ERRORS_NO_MESSAGE);
966 if((functions->transformSha512GetKlass != NULL) && xmlSecTransformIdsRegister(functions->transformSha512GetKlass()) < 0) {
967 xmlSecError(XMLSEC_ERRORS_HERE,
968 xmlSecErrorsSafeString(xmlSecTransformKlassGetName(functions->transformSha512GetKlass())),
969 "xmlSecTransformIdsRegister",
970 XMLSEC_ERRORS_R_XMLSEC_FAILED,
971 XMLSEC_ERRORS_NO_MESSAGE);