PKCS#11: add initialization API that returns PKCS#11 return value

This commit is contained in:
Sean Parkinson
2022-11-28 16:37:12 +10:00
parent ee91f4415d
commit 2d424f7d06
2 changed files with 30 additions and 2 deletions

View File

@@ -409,6 +409,7 @@ static void pkcs11_val(const char* op, CK_ULONG val)
*
* @param [in] dev Device object.
* @param [in] library Library name including path.
* @param [in] heap Heap hint.
* @return BAD_FUNC_ARG when dev or library are NULL pointers.
* @return BAD_PATH_ERROR when dynamic library cannot be opened.
* @return WC_INIT_E when the initialization PKCS#11 fails.
@@ -416,9 +417,29 @@ static void pkcs11_val(const char* op, CK_ULONG val)
* @return 0 on success.
*/
int wc_Pkcs11_Initialize(Pkcs11Dev* dev, const char* library, void* heap)
{
return wc_Pkcs11_Initialize_ex(dev, library, heap, NULL);
}
/**
* Load library, get function list and initialize PKCS#11.
*
* @param [in] dev Device object.
* @param [in] library Library name including path.
* @param [in] heap Heap hint.
* @param [out] rvp PKCS#11 return value. Last return value seen.
* May be NULL.
* @return BAD_FUNC_ARG when dev or library are NULL pointers.
* @return BAD_PATH_ERROR when dynamic library cannot be opened.
* @return WC_INIT_E when the initialization PKCS#11 fails.
* @return WC_HW_E when unable to get PKCS#11 function list.
* @return 0 on success.
*/
int wc_Pkcs11_Initialize_ex(Pkcs11Dev* dev, const char* library, void* heap,
CK_RV* rvp)
{
int ret = 0;
CK_RV rv;
CK_RV rv = CKR_OK;
#ifndef HAVE_PKCS11_STATIC
void* func;
#endif
@@ -466,8 +487,13 @@ int wc_Pkcs11_Initialize(Pkcs11Dev* dev, const char* library, void* heap)
}
}
if (ret != 0)
if (rvp != NULL) {
*rvp = rv;
}
if (ret != 0) {
wc_Pkcs11_Finalize(dev);
}
return ret;
}

View File

@@ -72,6 +72,8 @@ enum Pkcs11KeyType {
WOLFSSL_API int wc_Pkcs11_Initialize(Pkcs11Dev* dev, const char* library,
void* heap);
WOLFSSL_API int wc_Pkcs11_Initialize_ex(Pkcs11Dev* dev, const char* library,
void* heap, CK_RV* rvp);
WOLFSSL_API void wc_Pkcs11_Finalize(Pkcs11Dev* dev);
WOLFSSL_API int wc_Pkcs11Token_Init(Pkcs11Token* token, Pkcs11Dev* dev,