/* (de)initialisation functions. */ static int ubsec_init(ENGINE *e) { t_UBSEC_ubsec_bytes_to_bits *p1; t_UBSEC_ubsec_bits_to_bytes *p2; t_UBSEC_ubsec_open *p3; t_UBSEC_ubsec_close *p4; # ifndef OPENSSL_NO_DH t_UBSEC_diffie_hellman_generate_ioctl *p5; t_UBSEC_diffie_hellman_agree_ioctl *p6; # endif /* #ifndef OPENSSL_NO_RSA */ t_UBSEC_rsa_mod_exp_ioctl *p7; t_UBSEC_rsa_mod_exp_crt_ioctl *p8; /* #endif */ # ifndef OPENSSL_NO_DSA t_UBSEC_dsa_sign_ioctl *p9; t_UBSEC_dsa_verify_ioctl *p10; # endif t_UBSEC_math_accelerate_ioctl *p11; t_UBSEC_rng_ioctl *p12; t_UBSEC_max_key_len_ioctl *p13; int fd = 0; if (ubsec_dso != NULL) { UBSECerr(UBSEC_F_UBSEC_INIT, UBSEC_R_ALREADY_LOADED); goto err; } /* * Attempt to load libubsec.so/ubsec.dll/whatever. */ ubsec_dso = DSO_load(NULL, get_UBSEC_LIBNAME(), NULL, 0); if (ubsec_dso == NULL) { UBSECerr(UBSEC_F_UBSEC_INIT, UBSEC_R_DSO_FAILURE); goto err; } #define BINDIT(t, name) (t *)DSO_bind_func(ubsec_dso, name) if ((p1 = BINDIT(t_UBSEC_ubsec_bytes_to_bits, UBSEC_F1)) == NULL || (p2 = BINDIT(t_UBSEC_ubsec_bits_to_bytes, UBSEC_F2)) == NULL || (p3 = BINDIT(t_UBSEC_ubsec_open, UBSEC_F3)) == NULL || (p4 = BINDIT(t_UBSEC_ubsec_close, UBSEC_F4)) == NULL # ifndef OPENSSL_NO_DH || (p5 = BINDIT(t_UBSEC_diffie_hellman_generate_ioctl, UBSEC_F5)) == NULL || (p6 = BINDIT(t_UBSEC_diffie_hellman_agree_ioctl, UBSEC_F6)) == NULL # endif /* #ifndef OPENSSL_NO_RSA */ || (p7 = BINDIT(t_UBSEC_rsa_mod_exp_ioctl, UBSEC_F7)) == NULL || (p8 = BINDIT(t_UBSEC_rsa_mod_exp_crt_ioctl, UBSEC_F8)) == NULL /* #endif */ # ifndef OPENSSL_NO_DSA || (p9 = BINDIT(t_UBSEC_dsa_sign_ioctl, UBSEC_F9)) == NULL || (p10 = BINDIT(t_UBSEC_dsa_verify_ioctl, UBSEC_F10)) == NULL # endif || (p11 = BINDIT(t_UBSEC_math_accelerate_ioctl, UBSEC_F11)) == NULL || (p12 = BINDIT(t_UBSEC_rng_ioctl, UBSEC_F12)) == NULL || (p13 = BINDIT(t_UBSEC_max_key_len_ioctl, UBSEC_F13)) == NULL) { UBSECerr(UBSEC_F_UBSEC_INIT, UBSEC_R_DSO_FAILURE); goto err; } /* Copy the pointers */ p_UBSEC_ubsec_bytes_to_bits = p1; p_UBSEC_ubsec_bits_to_bytes = p2; p_UBSEC_ubsec_open = p3; p_UBSEC_ubsec_close = p4; # ifndef OPENSSL_NO_DH p_UBSEC_diffie_hellman_generate_ioctl = p5; p_UBSEC_diffie_hellman_agree_ioctl = p6; # endif # ifndef OPENSSL_NO_RSA p_UBSEC_rsa_mod_exp_ioctl = p7; p_UBSEC_rsa_mod_exp_crt_ioctl = p8; # endif # ifndef OPENSSL_NO_DSA p_UBSEC_dsa_sign_ioctl = p9; p_UBSEC_dsa_verify_ioctl = p10; # endif p_UBSEC_math_accelerate_ioctl = p11; p_UBSEC_rng_ioctl = p12; p_UBSEC_max_key_len_ioctl = p13; /* Perform an open to see if there's actually any unit running. */ if (((fd = p_UBSEC_ubsec_open(UBSEC_KEY_DEVICE_NAME)) > 0) && (p_UBSEC_max_key_len_ioctl(fd, &max_key_len) == 0)) { p_UBSEC_ubsec_close(fd); return 1; } else { UBSECerr(UBSEC_F_UBSEC_INIT, UBSEC_R_UNIT_FAILURE); } err: DSO_free(ubsec_dso); ubsec_dso = NULL; p_UBSEC_ubsec_bytes_to_bits = NULL; p_UBSEC_ubsec_bits_to_bytes = NULL; p_UBSEC_ubsec_open = NULL; p_UBSEC_ubsec_close = NULL; # ifndef OPENSSL_NO_DH p_UBSEC_diffie_hellman_generate_ioctl = NULL; p_UBSEC_diffie_hellman_agree_ioctl = NULL; # endif # ifndef OPENSSL_NO_RSA p_UBSEC_rsa_mod_exp_ioctl = NULL; p_UBSEC_rsa_mod_exp_crt_ioctl = NULL; # endif # ifndef OPENSSL_NO_DSA p_UBSEC_dsa_sign_ioctl = NULL; p_UBSEC_dsa_verify_ioctl = NULL; # endif p_UBSEC_math_accelerate_ioctl = NULL; p_UBSEC_rng_ioctl = NULL; p_UBSEC_max_key_len_ioctl = NULL; return 0; }
int cluster_labs_init(ENGINE *e) { cl_engine_init *p1; cl_mod_exp *p2; cl_mod_exp_crt *p3; cl_rsa_mod_exp *p4; cl_rsa_priv_enc *p5; cl_rsa_priv_dec *p6; cl_rsa_pub_enc *p7; cl_rsa_pub_dec *p8; cl_rand_bytes *p20; cl_dsa_sign *p30; cl_dsa_verify *p31; /* engine already loaded */ if (cluster_labs_dso != NULL) { CLerr(CL_F_CLUSTER_LABS_INIT, CL_R_ALREADY_LOADED); goto err; } /* try to load engine */ cluster_labs_dso = DSO_load(NULL, CLUSTER_LABS_LIB_NAME, NULL, 0); if (cluster_labs_dso == NULL) { CLerr(CL_F_CLUSTER_LABS_INIT, CL_R_DSO_FAILURE); goto err; } /* bind functions */ #define BINDIT(t, name) (t *)DSO_bind_func(cluster_labs_dso, name) if ((p1 = (cl_engine_init, CLUSTER_LABS_F1)) == NULL || (p2 = BINDIT(cl_mod_exp, CLUSTER_LABS_F2)) == NULL || (p3 = BINDIT(cl_mod_exp_crt, CLUSTER_LABS_F3)) == NULL || (p4 = BINDIT(cl_rsa_mod_exp, CLUSTER_LABS_F4)) == NULL || (p5 = BINDIT(cl_rsa_priv_enc, CLUSTER_LABS_F5)) == NULL || (p6 = BINDIT(cl_rsa_priv_dec, CLUSTER_LABS_F6)) == NULL || (p7 = BINDIT(cl_rsa_pub_enc, CLUSTER_LABS_F7)) == NULL || (p8 = BINDIT(cl_rsa_pub_dec, CLUSTER_LABS_F8)) == NULL || (p20 = BINDIT(cl_rand_bytes, CLUSTER_LABS_F20)) == NULL || (p30 = BINDIT(cl_dsa_sign, CLUSTER_LABS_F30)) == NULL || (p31 = BINDIT(cl_dsa_verify, CLUSTER_LABS_F31)) == NULL) { CLerr(CL_F_CLUSTER_LABS_INIT, CL_R_DSO_FAILURE); goto err; } /* copy function pointers */ p_cl_engine_init = p1; p_cl_mod_exp = p2; p_cl_mod_exp_crt = p3; p_cl_rsa_mod_exp = p4; p_cl_rsa_priv_enc = p5; p_cl_rsa_priv_dec = p6; p_cl_rsa_pub_enc = p7; p_cl_rsa_pub_dec = p8; p_cl_rand_bytes = p20; p_cl_dsa_sign = p30; p_cl_dsa_verify = p31; /* cluster labs engine init */ if (p_cl_engine_init() == 0) { CLerr(CL_F_CLUSTER_LABS_INIT, CL_R_INIT_FAILED); goto err; } return (1); err: /* reset all pointers */ DSO_free(cluster_labs_dso); cluster_labs_dso = NULL; p_cl_engine_init = NULL; p_cl_mod_exp = NULL; p_cl_mod_exp_crt = NULL; p_cl_rsa_mod_exp = NULL; p_cl_rsa_priv_enc = NULL; p_cl_rsa_priv_dec = NULL; p_cl_rsa_pub_enc = NULL; p_cl_rsa_pub_dec = NULL; p_cl_rand_bytes = NULL; p_cl_dsa_sign = NULL; p_cl_dsa_verify = NULL; return (0); }
/* (de)initialisation functions. */ static int hwcrhk_init(ENGINE *e) { HWCryptoHook_Init_t *p1; HWCryptoHook_Finish_t *p2; HWCryptoHook_ModExp_t *p3; # ifndef OPENSSL_NO_RSA HWCryptoHook_RSA_t *p4; HWCryptoHook_RSALoadKey_t *p5; HWCryptoHook_RSAGetPublicKey_t *p6; HWCryptoHook_RSAUnloadKey_t *p7; # endif HWCryptoHook_RandomBytes_t *p8; HWCryptoHook_ModExpCRT_t *p9; if (hwcrhk_dso != NULL) { HWCRHKerr(HWCRHK_F_HWCRHK_INIT, HWCRHK_R_ALREADY_LOADED); goto err; } /* Attempt to load libnfhwcrhk.so/nfhwcrhk.dll/whatever. */ hwcrhk_dso = DSO_load(NULL, get_HWCRHK_LIBNAME(), NULL, 0); if (hwcrhk_dso == NULL) { HWCRHKerr(HWCRHK_F_HWCRHK_INIT, HWCRHK_R_DSO_FAILURE); goto err; } #define BINDIT(t, name) (t *)DSO_bind_func(hwcrhk_dso, name) if ((p1 = BINDIT(HWCryptoHook_Init_t, n_hwcrhk_Init)) == NULL || (p2 = BINDIT(HWCryptoHook_Finish_t, n_hwcrhk_Finish)) == NULL || (p3 = BINDIT(HWCryptoHook_ModExp_t, n_hwcrhk_ModExp)) == NULL # ifndef OPENSSL_NO_RSA || (p4 = BINDIT(HWCryptoHook_RSA_t, n_hwcrhk_RSA)) == NULL || (p5 = BINDIT(HWCryptoHook_RSALoadKey_t, n_hwcrhk_RSALoadKey)) == NULL || (p6 = BINDIT(HWCryptoHook_RSAGetPublicKey_t, n_hwcrhk_RSAGetPublicKey)) == NULL || (p7 = BINDIT(HWCryptoHook_RSAUnloadKey_t, n_hwcrhk_RSAUnloadKey)) == NULL # endif || (p8 = BINDIT(HWCryptoHook_RandomBytes_t, n_hwcrhk_RandomBytes)) == NULL || (p9 = BINDIT(HWCryptoHook_ModExpCRT_t, n_hwcrhk_ModExpCRT)) == NULL) { HWCRHKerr(HWCRHK_F_HWCRHK_INIT, HWCRHK_R_DSO_FAILURE); goto err; } /* Copy the pointers */ p_hwcrhk_Init = p1; p_hwcrhk_Finish = p2; p_hwcrhk_ModExp = p3; # ifndef OPENSSL_NO_RSA p_hwcrhk_RSA = p4; p_hwcrhk_RSALoadKey = p5; p_hwcrhk_RSAGetPublicKey = p6; p_hwcrhk_RSAUnloadKey = p7; # endif p_hwcrhk_RandomBytes = p8; p_hwcrhk_ModExpCRT = p9; /* * Check if the application decided to support dynamic locks, and if it * does, use them. */ if (disable_mutex_callbacks == 0) { hwcrhk_globals.mutex_init = hwcrhk_mutex_init; hwcrhk_globals.mutex_acquire = hwcrhk_mutex_lock; hwcrhk_globals.mutex_release = hwcrhk_mutex_unlock; hwcrhk_globals.mutex_destroy = hwcrhk_mutex_destroy; } /* * Try and get a context - if not, we may have a DSO but no accelerator! */ if (!get_context(&hwcrhk_context, &password_context)) { HWCRHKerr(HWCRHK_F_HWCRHK_INIT, HWCRHK_R_UNIT_FAILURE); goto err; } /* Everything's fine. */ # ifndef OPENSSL_NO_RSA if (hndidx_rsa == -1) hndidx_rsa = RSA_get_ex_new_index(0, "nFast HWCryptoHook RSA key handle", NULL, NULL, NULL); # endif return 1; err: DSO_free(hwcrhk_dso); hwcrhk_dso = NULL; p_hwcrhk_Init = NULL; p_hwcrhk_Finish = NULL; p_hwcrhk_ModExp = NULL; # ifndef OPENSSL_NO_RSA p_hwcrhk_RSA = NULL; p_hwcrhk_RSALoadKey = NULL; p_hwcrhk_RSAGetPublicKey = NULL; p_hwcrhk_RSAUnloadKey = NULL; # endif p_hwcrhk_ModExpCRT = NULL; p_hwcrhk_RandomBytes = NULL; return 0; }