forked from wolfSSL/wolfssl
--enable-pkcs11=static LIBS=-l<pkcs11 static library> or define HAVE_PKCS11_STATIC
This commit is contained in:
10
configure.ac
10
configure.ac
@ -5228,10 +5228,16 @@ AC_ARG_ENABLE([pkcs11],
|
|||||||
[ ENABLED_PKCS11=no ]
|
[ ENABLED_PKCS11=no ]
|
||||||
)
|
)
|
||||||
|
|
||||||
if test "x$ENABLED_PKCS11" = "xyes"
|
if test "x$ENABLED_PKCS11" != "xno"
|
||||||
then
|
then
|
||||||
AM_CFLAGS="$AM_CFLAGS -DHAVE_PKCS11 -DHAVE_WOLF_BIGINT"
|
AM_CFLAGS="$AM_CFLAGS -DHAVE_PKCS11 -DHAVE_WOLF_BIGINT"
|
||||||
LIBS="$LIBS -ldl"
|
if test "x$ENABLED_PKCS11" != "xstatic"
|
||||||
|
then
|
||||||
|
LIBS="$LIBS -ldl"
|
||||||
|
else
|
||||||
|
AM_CFLAGS="$AM_CFLAGS -DHAVE_PKCS11_STATIC"
|
||||||
|
ENABLED_PKCS11="yes"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,7 +27,9 @@
|
|||||||
|
|
||||||
#ifdef HAVE_PKCS11
|
#ifdef HAVE_PKCS11
|
||||||
|
|
||||||
|
#ifndef HAVE_PKCS11_STATIC
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <wolfssl/wolfcrypt/wc_pkcs11.h>
|
#include <wolfssl/wolfcrypt/wc_pkcs11.h>
|
||||||
#include <wolfssl/wolfcrypt/error-crypt.h>
|
#include <wolfssl/wolfcrypt/error-crypt.h>
|
||||||
@ -416,7 +418,9 @@ static void pkcs11_val(const char* op, CK_ULONG val)
|
|||||||
int wc_Pkcs11_Initialize(Pkcs11Dev* dev, const char* library, void* heap)
|
int wc_Pkcs11_Initialize(Pkcs11Dev* dev, const char* library, void* heap)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
#ifndef HAVE_PKCS11_STATIC
|
||||||
void* func;
|
void* func;
|
||||||
|
#endif
|
||||||
CK_C_INITIALIZE_ARGS args;
|
CK_C_INITIALIZE_ARGS args;
|
||||||
|
|
||||||
if (dev == NULL || library == NULL)
|
if (dev == NULL || library == NULL)
|
||||||
@ -424,6 +428,7 @@ int wc_Pkcs11_Initialize(Pkcs11Dev* dev, const char* library, void* heap)
|
|||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
dev->heap = heap;
|
dev->heap = heap;
|
||||||
|
#ifndef HAVE_PKCS11_STATIC
|
||||||
dev->dlHandle = dlopen(library, RTLD_NOW | RTLD_LOCAL);
|
dev->dlHandle = dlopen(library, RTLD_NOW | RTLD_LOCAL);
|
||||||
if (dev->dlHandle == NULL) {
|
if (dev->dlHandle == NULL) {
|
||||||
WOLFSSL_MSG(dlerror());
|
WOLFSSL_MSG(dlerror());
|
||||||
@ -441,6 +446,9 @@ int wc_Pkcs11_Initialize(Pkcs11Dev* dev, const char* library, void* heap)
|
|||||||
}
|
}
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
ret = ((CK_C_GetFunctionList)func)(&dev->func);
|
ret = ((CK_C_GetFunctionList)func)(&dev->func);
|
||||||
|
#else
|
||||||
|
ret = C_GetFunctionList(&dev->func);
|
||||||
|
#endif
|
||||||
if (ret != CKR_OK) {
|
if (ret != CKR_OK) {
|
||||||
PKCS11_RV("CK_C_GetFunctionList", ret);
|
PKCS11_RV("CK_C_GetFunctionList", ret);
|
||||||
ret = WC_HW_E;
|
ret = WC_HW_E;
|
||||||
@ -470,13 +478,19 @@ int wc_Pkcs11_Initialize(Pkcs11Dev* dev, const char* library, void* heap)
|
|||||||
*/
|
*/
|
||||||
void wc_Pkcs11_Finalize(Pkcs11Dev* dev)
|
void wc_Pkcs11_Finalize(Pkcs11Dev* dev)
|
||||||
{
|
{
|
||||||
if (dev != NULL && dev->dlHandle != NULL) {
|
if (dev != NULL
|
||||||
|
#ifndef HAVE_PKCS11_STATIC
|
||||||
|
&& dev->dlHandle != NULL
|
||||||
|
#endif
|
||||||
|
) {
|
||||||
if (dev->func != NULL) {
|
if (dev->func != NULL) {
|
||||||
dev->func->C_Finalize(NULL);
|
dev->func->C_Finalize(NULL);
|
||||||
dev->func = NULL;
|
dev->func = NULL;
|
||||||
}
|
}
|
||||||
|
#ifndef HAVE_PKCS11_STATIC
|
||||||
dlclose(dev->dlHandle);
|
dlclose(dev->dlHandle);
|
||||||
dev->dlHandle = NULL;
|
dev->dlHandle = NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -346,6 +346,10 @@ typedef CK_FUNCTION_LIST_PTR* CK_FUNCTION_LIST_PTR_PTR;
|
|||||||
|
|
||||||
typedef CK_RV (*CK_C_GetFunctionList)(CK_FUNCTION_LIST_PTR_PTR ppFunctionList);
|
typedef CK_RV (*CK_C_GetFunctionList)(CK_FUNCTION_LIST_PTR_PTR ppFunctionList);
|
||||||
|
|
||||||
|
#ifdef HAVE_PKCS11_STATIC
|
||||||
|
CK_RV C_GetFunctionList(CK_FUNCTION_LIST_PTR_PTR ppFunctionList);
|
||||||
|
#endif
|
||||||
|
|
||||||
struct CK_FUNCTION_LIST {
|
struct CK_FUNCTION_LIST {
|
||||||
CK_VERSION version;
|
CK_VERSION version;
|
||||||
|
|
||||||
|
@ -39,7 +39,9 @@
|
|||||||
|
|
||||||
|
|
||||||
typedef struct Pkcs11Dev {
|
typedef struct Pkcs11Dev {
|
||||||
|
#ifndef HAVE_PKCS11_STATIC
|
||||||
void* dlHandle; /* Handle to library */
|
void* dlHandle; /* Handle to library */
|
||||||
|
#endif
|
||||||
CK_FUNCTION_LIST* func; /* Array of functions */
|
CK_FUNCTION_LIST* func; /* Array of functions */
|
||||||
void* heap;
|
void* heap;
|
||||||
} Pkcs11Dev;
|
} Pkcs11Dev;
|
||||||
|
Reference in New Issue
Block a user