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 :
|