summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/engine')
-rw-r--r--src/lib/libcrypto/engine/hw_4758_cca.c29
-rw-r--r--src/lib/libcrypto/engine/hw_aep.c28
-rw-r--r--src/lib/libcrypto/engine/hw_atalla.c27
-rw-r--r--src/lib/libcrypto/engine/hw_cswift.c43
-rw-r--r--src/lib/libcrypto/engine/hw_ncipher.c33
-rw-r--r--src/lib/libcrypto/engine/hw_nuron.c27
-rw-r--r--src/lib/libcrypto/engine/hw_ubsec.c26
7 files changed, 169 insertions, 44 deletions
diff --git a/src/lib/libcrypto/engine/hw_4758_cca.c b/src/lib/libcrypto/engine/hw_4758_cca.c
index 77d3d2ffdf..1053c52082 100644
--- a/src/lib/libcrypto/engine/hw_4758_cca.c
+++ b/src/lib/libcrypto/engine/hw_4758_cca.c
@@ -124,8 +124,24 @@ static F_RANDOMNUMBERGENERATE randomNumberGenerate;
124 124
125/* static variables */ 125/* static variables */
126/*------------------*/ 126/*------------------*/
127static const char def_CCA4758_LIB_NAME[] = CCA_LIB_NAME; 127static const char *CCA4758_LIB_NAME = NULL;
128static const char *CCA4758_LIB_NAME = def_CCA4758_LIB_NAME; 128static const char *get_CCA4758_LIB_NAME(void)
129 {
130 if(CCA4758_LIB_NAME)
131 return CCA4758_LIB_NAME;
132 return CCA_LIB_NAME;
133 }
134static void free_CCA4758_LIB_NAME(void)
135 {
136 if(CCA4758_LIB_NAME)
137 OPENSSL_free((void*)CCA4758_LIB_NAME);
138 CCA4758_LIB_NAME = NULL;
139 }
140static long set_CCA4758_LIB_NAME(const char *name)
141 {
142 free_CCA4758_LIB_NAME();
143 return (((CCA4758_LIB_NAME = BUF_strdup(name)) != NULL) ? 1 : 0);
144 }
129#ifndef OPENSSL_NO_RSA 145#ifndef OPENSSL_NO_RSA
130static const char* n_keyRecordRead = CSNDKRR; 146static const char* n_keyRecordRead = CSNDKRR;
131static const char* n_digitalSignatureGenerate = CSNDDSG; 147static const char* n_digitalSignatureGenerate = CSNDDSG;
@@ -232,6 +248,7 @@ void ENGINE_load_4758cca(void)
232static int ibm_4758_cca_destroy(ENGINE *e) 248static int ibm_4758_cca_destroy(ENGINE *e)
233 { 249 {
234 ERR_unload_CCA4758_strings(); 250 ERR_unload_CCA4758_strings();
251 free_CCA4758_LIB_NAME();
235 return 1; 252 return 1;
236 } 253 }
237 254
@@ -243,7 +260,7 @@ static int ibm_4758_cca_init(ENGINE *e)
243 goto err; 260 goto err;
244 } 261 }
245 262
246 dso = DSO_load(NULL, CCA4758_LIB_NAME , NULL, 0); 263 dso = DSO_load(NULL, get_CCA4758_LIB_NAME(), NULL, 0);
247 if(!dso) 264 if(!dso)
248 { 265 {
249 CCA4758err(CCA4758_F_IBM_4758_CCA_INIT,CCA4758_R_DSO_FAILURE); 266 CCA4758err(CCA4758_F_IBM_4758_CCA_INIT,CCA4758_R_DSO_FAILURE);
@@ -299,7 +316,8 @@ err:
299 316
300static int ibm_4758_cca_finish(ENGINE *e) 317static int ibm_4758_cca_finish(ENGINE *e)
301 { 318 {
302 if(dso) 319 free_CCA4758_LIB_NAME();
320 if(!dso)
303 { 321 {
304 CCA4758err(CCA4758_F_IBM_4758_CCA_FINISH, 322 CCA4758err(CCA4758_F_IBM_4758_CCA_FINISH,
305 CCA4758_R_NOT_LOADED); 323 CCA4758_R_NOT_LOADED);
@@ -340,8 +358,7 @@ static int ibm_4758_cca_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
340 CCA4758_R_ALREADY_LOADED); 358 CCA4758_R_ALREADY_LOADED);
341 return 0; 359 return 0;
342 } 360 }
343 CCA4758_LIB_NAME = (const char *)p; 361 return set_CCA4758_LIB_NAME((const char *)p);
344 return 1;
345 default: 362 default:
346 break; 363 break;
347 } 364 }
diff --git a/src/lib/libcrypto/engine/hw_aep.c b/src/lib/libcrypto/engine/hw_aep.c
index cf4507cff1..8b8380a582 100644
--- a/src/lib/libcrypto/engine/hw_aep.c
+++ b/src/lib/libcrypto/engine/hw_aep.c
@@ -60,7 +60,7 @@
60#include <string.h> 60#include <string.h>
61 61
62#include <openssl/e_os2.h> 62#include <openssl/e_os2.h>
63#ifndef OPENSSL_SYS_MSDOS 63#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__)
64#include <sys/types.h> 64#include <sys/types.h>
65#include <unistd.h> 65#include <unistd.h>
66#else 66#else
@@ -71,6 +71,7 @@ typedef int pid_t;
71#include <openssl/crypto.h> 71#include <openssl/crypto.h>
72#include <openssl/dso.h> 72#include <openssl/dso.h>
73#include <openssl/engine.h> 73#include <openssl/engine.h>
74#include <openssl/buffer.h>
74 75
75#ifndef OPENSSL_NO_HW 76#ifndef OPENSSL_NO_HW
76#ifndef OPENSSL_NO_HW_AEP 77#ifndef OPENSSL_NO_HW_AEP
@@ -363,7 +364,24 @@ static DSO *aep_dso = NULL;
363/* These are the static string constants for the DSO file name and the function 364/* These are the static string constants for the DSO file name and the function
364 * symbol names to bind to. 365 * symbol names to bind to.
365*/ 366*/
366static const char *AEP_LIBNAME = "aep"; 367static const char *AEP_LIBNAME = NULL;
368static const char *get_AEP_LIBNAME(void)
369 {
370 if(AEP_LIBNAME)
371 return AEP_LIBNAME;
372 return "aep";
373 }
374static void free_AEP_LIBNAME(void)
375 {
376 if(AEP_LIBNAME)
377 OPENSSL_free((void*)AEP_LIBNAME);
378 AEP_LIBNAME = NULL;
379 }
380static long set_AEP_LIBNAME(const char *name)
381 {
382 free_AEP_LIBNAME();
383 return ((AEP_LIBNAME = BUF_strdup(name)) != NULL ? 1 : 0);
384 }
367 385
368static const char *AEP_F1 = "AEP_ModExp"; 386static const char *AEP_F1 = "AEP_ModExp";
369static const char *AEP_F2 = "AEP_ModExpCrt"; 387static const char *AEP_F2 = "AEP_ModExpCrt";
@@ -412,7 +430,7 @@ static int aep_init(ENGINE *e)
412 } 430 }
413 /* Attempt to load libaep.so. */ 431 /* Attempt to load libaep.so. */
414 432
415 aep_dso = DSO_load(NULL, AEP_LIBNAME, NULL, 0); 433 aep_dso = DSO_load(NULL, get_AEP_LIBNAME(), NULL, 0);
416 434
417 if(aep_dso == NULL) 435 if(aep_dso == NULL)
418 { 436 {
@@ -474,6 +492,7 @@ static int aep_init(ENGINE *e)
474/* Destructor (complements the "ENGINE_aep()" constructor) */ 492/* Destructor (complements the "ENGINE_aep()" constructor) */
475static int aep_destroy(ENGINE *e) 493static int aep_destroy(ENGINE *e)
476 { 494 {
495 free_AEP_LIBNAME();
477 ERR_unload_AEPHK_strings(); 496 ERR_unload_AEPHK_strings();
478 return 1; 497 return 1;
479 } 498 }
@@ -549,8 +568,7 @@ static int aep_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
549 AEPHK_R_ALREADY_LOADED); 568 AEPHK_R_ALREADY_LOADED);
550 return 0; 569 return 0;
551 } 570 }
552 AEP_LIBNAME = (const char *)p; 571 return set_AEP_LIBNAME((const char*)p);
553 return 1;
554 default: 572 default:
555 break; 573 break;
556 } 574 }
diff --git a/src/lib/libcrypto/engine/hw_atalla.c b/src/lib/libcrypto/engine/hw_atalla.c
index 696cfcf156..6151c46902 100644
--- a/src/lib/libcrypto/engine/hw_atalla.c
+++ b/src/lib/libcrypto/engine/hw_atalla.c
@@ -286,8 +286,24 @@ static tfnASI_GetPerformanceStatistics *p_Atalla_GetPerformanceStatistics = NULL
286 * atasi.dll on win32). For the purposes of testing, I have created a symbollic 286 * atasi.dll on win32). For the purposes of testing, I have created a symbollic
287 * link called "libatasi.so" so that we can use native name-translation - a 287 * link called "libatasi.so" so that we can use native name-translation - a
288 * better solution will be needed. */ 288 * better solution will be needed. */
289static const char def_ATALLA_LIBNAME[] = "atasi"; 289static const char *ATALLA_LIBNAME = NULL;
290static const char *ATALLA_LIBNAME = def_ATALLA_LIBNAME; 290static const char *get_ATALLA_LIBNAME(void)
291 {
292 if(ATALLA_LIBNAME)
293 return ATALLA_LIBNAME;
294 return "atasi";
295 }
296static void free_ATALLA_LIBNAME(void)
297 {
298 if(ATALLA_LIBNAME)
299 OPENSSL_free((void*)ATALLA_LIBNAME);
300 ATALLA_LIBNAME = NULL;
301 }
302static long set_ATALLA_LIBNAME(const char *name)
303 {
304 free_ATALLA_LIBNAME();
305 return (((ATALLA_LIBNAME = BUF_strdup(name)) != NULL) ? 1 : 0);
306 }
291static const char *ATALLA_F1 = "ASI_GetHardwareConfig"; 307static const char *ATALLA_F1 = "ASI_GetHardwareConfig";
292static const char *ATALLA_F2 = "ASI_RSAPrivateKeyOpFn"; 308static const char *ATALLA_F2 = "ASI_RSAPrivateKeyOpFn";
293static const char *ATALLA_F3 = "ASI_GetPerformanceStatistics"; 309static const char *ATALLA_F3 = "ASI_GetPerformanceStatistics";
@@ -295,6 +311,7 @@ static const char *ATALLA_F3 = "ASI_GetPerformanceStatistics";
295/* Destructor (complements the "ENGINE_atalla()" constructor) */ 311/* Destructor (complements the "ENGINE_atalla()" constructor) */
296static int atalla_destroy(ENGINE *e) 312static int atalla_destroy(ENGINE *e)
297 { 313 {
314 free_ATALLA_LIBNAME();
298 /* Unload the atalla error strings so any error state including our 315 /* Unload the atalla error strings so any error state including our
299 * functs or reasons won't lead to a segfault (they simply get displayed 316 * functs or reasons won't lead to a segfault (they simply get displayed
300 * without corresponding string data because none will be found). */ 317 * without corresponding string data because none will be found). */
@@ -324,7 +341,7 @@ static int atalla_init(ENGINE *e)
324 * drivers really use - for now a symbollic link needs to be 341 * drivers really use - for now a symbollic link needs to be
325 * created on the host system from libatasi.so to atasi.so on 342 * created on the host system from libatasi.so to atasi.so on
326 * unix variants. */ 343 * unix variants. */
327 atalla_dso = DSO_load(NULL, ATALLA_LIBNAME, NULL, 0); 344 atalla_dso = DSO_load(NULL, get_ATALLA_LIBNAME(), NULL, 0);
328 if(atalla_dso == NULL) 345 if(atalla_dso == NULL)
329 { 346 {
330 ATALLAerr(ATALLA_F_ATALLA_INIT,ATALLA_R_NOT_LOADED); 347 ATALLAerr(ATALLA_F_ATALLA_INIT,ATALLA_R_NOT_LOADED);
@@ -364,6 +381,7 @@ err:
364 381
365static int atalla_finish(ENGINE *e) 382static int atalla_finish(ENGINE *e)
366 { 383 {
384 free_ATALLA_LIBNAME();
367 if(atalla_dso == NULL) 385 if(atalla_dso == NULL)
368 { 386 {
369 ATALLAerr(ATALLA_F_ATALLA_FINISH,ATALLA_R_NOT_LOADED); 387 ATALLAerr(ATALLA_F_ATALLA_FINISH,ATALLA_R_NOT_LOADED);
@@ -397,8 +415,7 @@ static int atalla_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
397 ATALLAerr(ATALLA_F_ATALLA_CTRL,ATALLA_R_ALREADY_LOADED); 415 ATALLAerr(ATALLA_F_ATALLA_CTRL,ATALLA_R_ALREADY_LOADED);
398 return 0; 416 return 0;
399 } 417 }
400 ATALLA_LIBNAME = (const char *)p; 418 return set_ATALLA_LIBNAME((const char *)p);
401 return 1;
402 default: 419 default:
403 break; 420 break;
404 } 421 }
diff --git a/src/lib/libcrypto/engine/hw_cswift.c b/src/lib/libcrypto/engine/hw_cswift.c
index d8b380550f..f5c897bdbb 100644
--- a/src/lib/libcrypto/engine/hw_cswift.c
+++ b/src/lib/libcrypto/engine/hw_cswift.c
@@ -280,8 +280,24 @@ t_swSimpleRequest *p_CSwift_SimpleRequest = NULL;
280t_swReleaseAccContext *p_CSwift_ReleaseAccContext = NULL; 280t_swReleaseAccContext *p_CSwift_ReleaseAccContext = NULL;
281 281
282/* Used in the DSO operations. */ 282/* Used in the DSO operations. */
283static const char def_CSWIFT_LIBNAME[] = "swift"; 283static const char *CSWIFT_LIBNAME = NULL;
284static const char *CSWIFT_LIBNAME = def_CSWIFT_LIBNAME; 284static const char *get_CSWIFT_LIBNAME(void)
285 {
286 if(CSWIFT_LIBNAME)
287 return CSWIFT_LIBNAME;
288 return "swift";
289 }
290static void free_CSWIFT_LIBNAME(void)
291 {
292 if(CSWIFT_LIBNAME)
293 OPENSSL_free((void*)CSWIFT_LIBNAME);
294 CSWIFT_LIBNAME = NULL;
295 }
296static long set_CSWIFT_LIBNAME(const char *name)
297 {
298 free_CSWIFT_LIBNAME();
299 return (((CSWIFT_LIBNAME = BUF_strdup(name)) != NULL) ? 1 : 0);
300 }
285static const char *CSWIFT_F1 = "swAcquireAccContext"; 301static const char *CSWIFT_F1 = "swAcquireAccContext";
286static const char *CSWIFT_F2 = "swAttachKeyParam"; 302static const char *CSWIFT_F2 = "swAttachKeyParam";
287static const char *CSWIFT_F3 = "swSimpleRequest"; 303static const char *CSWIFT_F3 = "swSimpleRequest";
@@ -313,6 +329,7 @@ static void release_context(SW_CONTEXT_HANDLE hac)
313/* Destructor (complements the "ENGINE_cswift()" constructor) */ 329/* Destructor (complements the "ENGINE_cswift()" constructor) */
314static int cswift_destroy(ENGINE *e) 330static int cswift_destroy(ENGINE *e)
315 { 331 {
332 free_CSWIFT_LIBNAME();
316 ERR_unload_CSWIFT_strings(); 333 ERR_unload_CSWIFT_strings();
317 return 1; 334 return 1;
318 } 335 }
@@ -332,7 +349,7 @@ static int cswift_init(ENGINE *e)
332 goto err; 349 goto err;
333 } 350 }
334 /* Attempt to load libswift.so/swift.dll/whatever. */ 351 /* Attempt to load libswift.so/swift.dll/whatever. */
335 cswift_dso = DSO_load(NULL, CSWIFT_LIBNAME, NULL, 0); 352 cswift_dso = DSO_load(NULL, get_CSWIFT_LIBNAME(), NULL, 0);
336 if(cswift_dso == NULL) 353 if(cswift_dso == NULL)
337 { 354 {
338 CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_NOT_LOADED); 355 CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_NOT_LOADED);
@@ -377,6 +394,7 @@ err:
377 394
378static int cswift_finish(ENGINE *e) 395static int cswift_finish(ENGINE *e)
379 { 396 {
397 free_CSWIFT_LIBNAME();
380 if(cswift_dso == NULL) 398 if(cswift_dso == NULL)
381 { 399 {
382 CSWIFTerr(CSWIFT_F_CSWIFT_FINISH,CSWIFT_R_NOT_LOADED); 400 CSWIFTerr(CSWIFT_F_CSWIFT_FINISH,CSWIFT_R_NOT_LOADED);
@@ -411,8 +429,7 @@ static int cswift_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
411 CSWIFTerr(CSWIFT_F_CSWIFT_CTRL,CSWIFT_R_ALREADY_LOADED); 429 CSWIFTerr(CSWIFT_F_CSWIFT_CTRL,CSWIFT_R_ALREADY_LOADED);
412 return 0; 430 return 0;
413 } 431 }
414 CSWIFT_LIBNAME = (const char *)p; 432 return set_CSWIFT_LIBNAME((const char *)p);
415 return 1;
416 default: 433 default:
417 break; 434 break;
418 } 435 }
@@ -484,7 +501,7 @@ static int cswift_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
484 goto err; 501 goto err;
485 default: 502 default:
486 { 503 {
487 char tmpbuf[20]; 504 char tmpbuf[DECIMAL_SIZE(sw_status)+1];
488 CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_REQUEST_FAILED); 505 CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_REQUEST_FAILED);
489 sprintf(tmpbuf, "%ld", sw_status); 506 sprintf(tmpbuf, "%ld", sw_status);
490 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf); 507 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
@@ -501,7 +518,7 @@ static int cswift_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
501 if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP, &arg, 1, 518 if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP, &arg, 1,
502 &res, 1)) != SW_OK) 519 &res, 1)) != SW_OK)
503 { 520 {
504 char tmpbuf[20]; 521 char tmpbuf[DECIMAL_SIZE(sw_status)+1];
505 CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_REQUEST_FAILED); 522 CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_REQUEST_FAILED);
506 sprintf(tmpbuf, "%ld", sw_status); 523 sprintf(tmpbuf, "%ld", sw_status);
507 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf); 524 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
@@ -591,7 +608,7 @@ static int cswift_mod_exp_crt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
591 goto err; 608 goto err;
592 default: 609 default:
593 { 610 {
594 char tmpbuf[20]; 611 char tmpbuf[DECIMAL_SIZE(sw_status)+1];
595 CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_REQUEST_FAILED); 612 CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_REQUEST_FAILED);
596 sprintf(tmpbuf, "%ld", sw_status); 613 sprintf(tmpbuf, "%ld", sw_status);
597 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf); 614 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
@@ -608,7 +625,7 @@ static int cswift_mod_exp_crt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
608 if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP_CRT, &arg, 1, 625 if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP_CRT, &arg, 1,
609 &res, 1)) != SW_OK) 626 &res, 1)) != SW_OK)
610 { 627 {
611 char tmpbuf[20]; 628 char tmpbuf[DECIMAL_SIZE(sw_status)+1];
612 CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_REQUEST_FAILED); 629 CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_REQUEST_FAILED);
613 sprintf(tmpbuf, "%ld", sw_status); 630 sprintf(tmpbuf, "%ld", sw_status);
614 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf); 631 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
@@ -723,7 +740,7 @@ static DSA_SIG *cswift_dsa_sign(const unsigned char *dgst, int dlen, DSA *dsa)
723 goto err; 740 goto err;
724 default: 741 default:
725 { 742 {
726 char tmpbuf[20]; 743 char tmpbuf[DECIMAL_SIZE(sw_status)+1];
727 CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_REQUEST_FAILED); 744 CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_REQUEST_FAILED);
728 sprintf(tmpbuf, "%ld", sw_status); 745 sprintf(tmpbuf, "%ld", sw_status);
729 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf); 746 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
@@ -741,7 +758,7 @@ static DSA_SIG *cswift_dsa_sign(const unsigned char *dgst, int dlen, DSA *dsa)
741 &res, 1); 758 &res, 1);
742 if(sw_status != SW_OK) 759 if(sw_status != SW_OK)
743 { 760 {
744 char tmpbuf[20]; 761 char tmpbuf[DECIMAL_SIZE(sw_status)+1];
745 CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_REQUEST_FAILED); 762 CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_REQUEST_FAILED);
746 sprintf(tmpbuf, "%ld", sw_status); 763 sprintf(tmpbuf, "%ld", sw_status);
747 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf); 764 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
@@ -835,7 +852,7 @@ static int cswift_dsa_verify(const unsigned char *dgst, int dgst_len,
835 goto err; 852 goto err;
836 default: 853 default:
837 { 854 {
838 char tmpbuf[20]; 855 char tmpbuf[DECIMAL_SIZE(sw_status)+1];
839 CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_REQUEST_FAILED); 856 CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_REQUEST_FAILED);
840 sprintf(tmpbuf, "%ld", sw_status); 857 sprintf(tmpbuf, "%ld", sw_status);
841 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf); 858 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
@@ -857,7 +874,7 @@ static int cswift_dsa_verify(const unsigned char *dgst, int dgst_len,
857 &res, 1); 874 &res, 1);
858 if(sw_status != SW_OK) 875 if(sw_status != SW_OK)
859 { 876 {
860 char tmpbuf[20]; 877 char tmpbuf[DECIMAL_SIZE(sw_status)+1];
861 CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_REQUEST_FAILED); 878 CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_REQUEST_FAILED);
862 sprintf(tmpbuf, "%ld", sw_status); 879 sprintf(tmpbuf, "%ld", sw_status);
863 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf); 880 ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
diff --git a/src/lib/libcrypto/engine/hw_ncipher.c b/src/lib/libcrypto/engine/hw_ncipher.c
index 4762a54e3d..a43d4360f2 100644
--- a/src/lib/libcrypto/engine/hw_ncipher.c
+++ b/src/lib/libcrypto/engine/hw_ncipher.c
@@ -59,9 +59,9 @@
59 59
60#include <stdio.h> 60#include <stdio.h>
61#include <string.h> 61#include <string.h>
62#include "cryptlib.h"
62#include <openssl/crypto.h> 63#include <openssl/crypto.h>
63#include <openssl/pem.h> 64#include <openssl/pem.h>
64#include "cryptlib.h"
65#include <openssl/dso.h> 65#include <openssl/dso.h>
66#include <openssl/engine.h> 66#include <openssl/engine.h>
67#include <openssl/ui.h> 67#include <openssl/ui.h>
@@ -109,11 +109,13 @@ static int hwcrhk_rsa_mod_exp(BIGNUM *r, const BIGNUM *I, RSA *rsa);
109static int hwcrhk_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, 109static int hwcrhk_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
110 const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); 110 const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
111 111
112#ifndef OPENSSL_NO_DH
112/* DH stuff */ 113/* DH stuff */
113/* This function is alised to mod_exp (with the DH and mont dropped). */ 114/* This function is alised to mod_exp (with the DH and mont dropped). */
114static int hwcrhk_mod_exp_dh(const DH *dh, BIGNUM *r, 115static int hwcrhk_mod_exp_dh(const DH *dh, BIGNUM *r,
115 const BIGNUM *a, const BIGNUM *p, 116 const BIGNUM *a, const BIGNUM *p,
116 const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); 117 const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
118#endif
117 119
118/* RAND stuff */ 120/* RAND stuff */
119static int hwcrhk_rand_bytes(unsigned char *buf, int num); 121static int hwcrhk_rand_bytes(unsigned char *buf, int num);
@@ -422,8 +424,24 @@ static HWCryptoHook_RSAUnloadKey_t *p_hwcrhk_RSAUnloadKey = NULL;
422static HWCryptoHook_ModExpCRT_t *p_hwcrhk_ModExpCRT = NULL; 424static HWCryptoHook_ModExpCRT_t *p_hwcrhk_ModExpCRT = NULL;
423 425
424/* Used in the DSO operations. */ 426/* Used in the DSO operations. */
425static const char def_HWCRHK_LIBNAME[] = "nfhwcrhk"; 427static const char *HWCRHK_LIBNAME = NULL;
426static const char *HWCRHK_LIBNAME = def_HWCRHK_LIBNAME; 428static void free_HWCRHK_LIBNAME(void)
429 {
430 if(HWCRHK_LIBNAME)
431 OPENSSL_free((void*)HWCRHK_LIBNAME);
432 HWCRHK_LIBNAME = NULL;
433 }
434static const char *get_HWCRHK_LIBNAME(void)
435 {
436 if(HWCRHK_LIBNAME)
437 return HWCRHK_LIBNAME;
438 return "nfhwcrhk";
439 }
440static long set_HWCRHK_LIBNAME(const char *name)
441 {
442 free_HWCRHK_LIBNAME();
443 return (((HWCRHK_LIBNAME = BUF_strdup(name)) != NULL) ? 1 : 0);
444 }
427static const char *n_hwcrhk_Init = "HWCryptoHook_Init"; 445static const char *n_hwcrhk_Init = "HWCryptoHook_Init";
428static const char *n_hwcrhk_Finish = "HWCryptoHook_Finish"; 446static const char *n_hwcrhk_Finish = "HWCryptoHook_Finish";
429static const char *n_hwcrhk_ModExp = "HWCryptoHook_ModExp"; 447static const char *n_hwcrhk_ModExp = "HWCryptoHook_ModExp";
@@ -469,6 +487,7 @@ static void release_context(HWCryptoHook_ContextHandle hac)
469/* Destructor (complements the "ENGINE_ncipher()" constructor) */ 487/* Destructor (complements the "ENGINE_ncipher()" constructor) */
470static int hwcrhk_destroy(ENGINE *e) 488static int hwcrhk_destroy(ENGINE *e)
471 { 489 {
490 free_HWCRHK_LIBNAME();
472 ERR_unload_HWCRHK_strings(); 491 ERR_unload_HWCRHK_strings();
473 return 1; 492 return 1;
474 } 493 }
@@ -494,7 +513,7 @@ static int hwcrhk_init(ENGINE *e)
494 goto err; 513 goto err;
495 } 514 }
496 /* Attempt to load libnfhwcrhk.so/nfhwcrhk.dll/whatever. */ 515 /* Attempt to load libnfhwcrhk.so/nfhwcrhk.dll/whatever. */
497 hwcrhk_dso = DSO_load(NULL, HWCRHK_LIBNAME, NULL, 0); 516 hwcrhk_dso = DSO_load(NULL, get_HWCRHK_LIBNAME(), NULL, 0);
498 if(hwcrhk_dso == NULL) 517 if(hwcrhk_dso == NULL)
499 { 518 {
500 HWCRHKerr(HWCRHK_F_HWCRHK_INIT,HWCRHK_R_DSO_FAILURE); 519 HWCRHKerr(HWCRHK_F_HWCRHK_INIT,HWCRHK_R_DSO_FAILURE);
@@ -586,6 +605,7 @@ err:
586static int hwcrhk_finish(ENGINE *e) 605static int hwcrhk_finish(ENGINE *e)
587 { 606 {
588 int to_return = 1; 607 int to_return = 1;
608 free_HWCRHK_LIBNAME();
589 if(hwcrhk_dso == NULL) 609 if(hwcrhk_dso == NULL)
590 { 610 {
591 HWCRHKerr(HWCRHK_F_HWCRHK_FINISH,HWCRHK_R_NOT_LOADED); 611 HWCRHKerr(HWCRHK_F_HWCRHK_FINISH,HWCRHK_R_NOT_LOADED);
@@ -634,8 +654,7 @@ static int hwcrhk_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
634 HWCRHKerr(HWCRHK_F_HWCRHK_CTRL,ERR_R_PASSED_NULL_PARAMETER); 654 HWCRHKerr(HWCRHK_F_HWCRHK_CTRL,ERR_R_PASSED_NULL_PARAMETER);
635 return 0; 655 return 0;
636 } 656 }
637 HWCRHK_LIBNAME = (const char *)p; 657 return set_HWCRHK_LIBNAME((const char *)p);
638 return 1;
639 case ENGINE_CTRL_SET_LOGSTREAM: 658 case ENGINE_CTRL_SET_LOGSTREAM:
640 { 659 {
641 BIO *bio = (BIO *)p; 660 BIO *bio = (BIO *)p;
@@ -1040,6 +1059,7 @@ static int hwcrhk_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
1040 return hwcrhk_mod_exp(r, a, p, m, ctx); 1059 return hwcrhk_mod_exp(r, a, p, m, ctx);
1041 } 1060 }
1042 1061
1062#ifndef OPENSSL_NO_DH
1043/* This function is aliased to mod_exp (with the dh and mont dropped). */ 1063/* This function is aliased to mod_exp (with the dh and mont dropped). */
1044static int hwcrhk_mod_exp_dh(const DH *dh, BIGNUM *r, 1064static int hwcrhk_mod_exp_dh(const DH *dh, BIGNUM *r,
1045 const BIGNUM *a, const BIGNUM *p, 1065 const BIGNUM *a, const BIGNUM *p,
@@ -1047,6 +1067,7 @@ static int hwcrhk_mod_exp_dh(const DH *dh, BIGNUM *r,
1047 { 1067 {
1048 return hwcrhk_mod_exp(r, a, p, m, ctx); 1068 return hwcrhk_mod_exp(r, a, p, m, ctx);
1049 } 1069 }
1070#endif
1050 1071
1051/* Random bytes are good */ 1072/* Random bytes are good */
1052static int hwcrhk_rand_bytes(unsigned char *buf, int num) 1073static int hwcrhk_rand_bytes(unsigned char *buf, int num)
diff --git a/src/lib/libcrypto/engine/hw_nuron.c b/src/lib/libcrypto/engine/hw_nuron.c
index 2672012154..130b6d8b40 100644
--- a/src/lib/libcrypto/engine/hw_nuron.c
+++ b/src/lib/libcrypto/engine/hw_nuron.c
@@ -69,8 +69,24 @@
69#define NURON_LIB_NAME "nuron engine" 69#define NURON_LIB_NAME "nuron engine"
70#include "hw_nuron_err.c" 70#include "hw_nuron_err.c"
71 71
72static const char def_NURON_LIBNAME[] = "nuronssl"; 72static const char *NURON_LIBNAME = NULL;
73static const char *NURON_LIBNAME = def_NURON_LIBNAME; 73static const char *get_NURON_LIBNAME(void)
74 {
75 if(NURON_LIBNAME)
76 return NURON_LIBNAME;
77 return "nuronssl";
78 }
79static void free_NURON_LIBNAME(void)
80 {
81 if(NURON_LIBNAME)
82 OPENSSL_free((void*)NURON_LIBNAME);
83 NURON_LIBNAME = NULL;
84 }
85static long set_NURON_LIBNAME(const char *name)
86 {
87 free_NURON_LIBNAME();
88 return (((NURON_LIBNAME = BUF_strdup(name)) != NULL) ? 1 : 0);
89 }
74static const char *NURON_F1 = "nuron_mod_exp"; 90static const char *NURON_F1 = "nuron_mod_exp";
75 91
76/* The definitions for control commands specific to this engine */ 92/* The definitions for control commands specific to this engine */
@@ -90,6 +106,7 @@ static DSO *pvDSOHandle = NULL;
90 106
91static int nuron_destroy(ENGINE *e) 107static int nuron_destroy(ENGINE *e)
92 { 108 {
109 free_NURON_LIBNAME();
93 ERR_unload_NURON_strings(); 110 ERR_unload_NURON_strings();
94 return 1; 111 return 1;
95 } 112 }
@@ -102,7 +119,7 @@ static int nuron_init(ENGINE *e)
102 return 0; 119 return 0;
103 } 120 }
104 121
105 pvDSOHandle = DSO_load(NULL, NURON_LIBNAME, NULL, 122 pvDSOHandle = DSO_load(NULL, get_NURON_LIBNAME(), NULL,
106 DSO_FLAG_NAME_TRANSLATION_EXT_ONLY); 123 DSO_FLAG_NAME_TRANSLATION_EXT_ONLY);
107 if(!pvDSOHandle) 124 if(!pvDSOHandle)
108 { 125 {
@@ -122,6 +139,7 @@ static int nuron_init(ENGINE *e)
122 139
123static int nuron_finish(ENGINE *e) 140static int nuron_finish(ENGINE *e)
124 { 141 {
142 free_NURON_LIBNAME();
125 if(pvDSOHandle == NULL) 143 if(pvDSOHandle == NULL)
126 { 144 {
127 NURONerr(NURON_F_NURON_FINISH,NURON_R_NOT_LOADED); 145 NURONerr(NURON_F_NURON_FINISH,NURON_R_NOT_LOADED);
@@ -153,8 +171,7 @@ static int nuron_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
153 NURONerr(NURON_F_NURON_CTRL,NURON_R_ALREADY_LOADED); 171 NURONerr(NURON_F_NURON_CTRL,NURON_R_ALREADY_LOADED);
154 return 0; 172 return 0;
155 } 173 }
156 NURON_LIBNAME = (const char *)p; 174 return set_NURON_LIBNAME((const char *)p);
157 return 1;
158 default: 175 default:
159 break; 176 break;
160 } 177 }
diff --git a/src/lib/libcrypto/engine/hw_ubsec.c b/src/lib/libcrypto/engine/hw_ubsec.c
index 743c06043c..63397f868c 100644
--- a/src/lib/libcrypto/engine/hw_ubsec.c
+++ b/src/lib/libcrypto/engine/hw_ubsec.c
@@ -304,7 +304,24 @@ static int max_key_len = 1024; /* ??? */
304 * symbol names to bind to. 304 * symbol names to bind to.
305 */ 305 */
306 306
307static const char *UBSEC_LIBNAME = "ubsec"; 307static const char *UBSEC_LIBNAME = NULL;
308static const char *get_UBSEC_LIBNAME(void)
309 {
310 if(UBSEC_LIBNAME)
311 return UBSEC_LIBNAME;
312 return "ubsec";
313 }
314static void free_UBSEC_LIBNAME(void)
315 {
316 if(UBSEC_LIBNAME)
317 OPENSSL_free((void*)UBSEC_LIBNAME);
318 UBSEC_LIBNAME = NULL;
319 }
320static long set_UBSEC_LIBNAME(const char *name)
321 {
322 free_UBSEC_LIBNAME();
323 return (((UBSEC_LIBNAME = BUF_strdup(name)) != NULL) ? 1 : 0);
324 }
308static const char *UBSEC_F1 = "ubsec_bytes_to_bits"; 325static const char *UBSEC_F1 = "ubsec_bytes_to_bits";
309static const char *UBSEC_F2 = "ubsec_bits_to_bytes"; 326static const char *UBSEC_F2 = "ubsec_bits_to_bytes";
310static const char *UBSEC_F3 = "ubsec_open"; 327static const char *UBSEC_F3 = "ubsec_open";
@@ -328,6 +345,7 @@ static const char *UBSEC_F13 = "ubsec_max_key_len_ioctl";
328/* Destructor (complements the "ENGINE_ubsec()" constructor) */ 345/* Destructor (complements the "ENGINE_ubsec()" constructor) */
329static int ubsec_destroy(ENGINE *e) 346static int ubsec_destroy(ENGINE *e)
330 { 347 {
348 free_UBSEC_LIBNAME();
331 ERR_unload_UBSEC_strings(); 349 ERR_unload_UBSEC_strings();
332 return 1; 350 return 1;
333 } 351 }
@@ -364,7 +382,7 @@ static int ubsec_init(ENGINE *e)
364 /* 382 /*
365 * Attempt to load libubsec.so/ubsec.dll/whatever. 383 * Attempt to load libubsec.so/ubsec.dll/whatever.
366 */ 384 */
367 ubsec_dso = DSO_load(NULL, UBSEC_LIBNAME, NULL, 0); 385 ubsec_dso = DSO_load(NULL, get_UBSEC_LIBNAME(), NULL, 0);
368 if(ubsec_dso == NULL) 386 if(ubsec_dso == NULL)
369 { 387 {
370 UBSECerr(UBSEC_F_UBSEC_INIT, UBSEC_R_DSO_FAILURE); 388 UBSECerr(UBSEC_F_UBSEC_INIT, UBSEC_R_DSO_FAILURE);
@@ -459,6 +477,7 @@ err:
459 477
460static int ubsec_finish(ENGINE *e) 478static int ubsec_finish(ENGINE *e)
461 { 479 {
480 free_UBSEC_LIBNAME();
462 if(ubsec_dso == NULL) 481 if(ubsec_dso == NULL)
463 { 482 {
464 UBSECerr(UBSEC_F_UBSEC_FINISH, UBSEC_R_NOT_LOADED); 483 UBSECerr(UBSEC_F_UBSEC_FINISH, UBSEC_R_NOT_LOADED);
@@ -508,8 +527,7 @@ static int ubsec_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
508 UBSECerr(UBSEC_F_UBSEC_CTRL,UBSEC_R_ALREADY_LOADED); 527 UBSECerr(UBSEC_F_UBSEC_CTRL,UBSEC_R_ALREADY_LOADED);
509 return 0; 528 return 0;
510 } 529 }
511 UBSEC_LIBNAME = (const char *)p; 530 return set_UBSEC_LIBNAME((const char *)p);
512 return 1;
513 default: 531 default:
514 break; 532 break;
515 } 533 }