Merge pull request #5824 from SparkiDev/pkcs11_init_rv

PKCS#11: add initialization API that returns PKCS#11 return value
pull/5826/head
David Garske 2022-11-28 14:31:03 -08:00 committed by GitHub
commit 7aa796bdbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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,