Fix to make sure the Crypto callback is unregistered on cleanup.

pull/60/head
David Garske 2019-02-11 17:27:07 -08:00
parent 4664405f7a
commit 6d836b91ad
3 changed files with 52 additions and 5 deletions

View File

@ -34,6 +34,12 @@
#include <wolfssl/ssl.h>
#undef USE_CERT_BUFFERS_2048
#define USE_CERT_BUFFERS_2048
#undef USE_CERT_BUFFERS_256
#define USE_CERT_BUFFERS_256
#include <wolfssl/certs_test.h>
/*
* Generating the Client Certificate
*
@ -232,10 +238,19 @@ int TPM2_TLS_Client(void* userCtx)
#else
wolfSSL_CTX_set_verify(ctx, WOLFSSL_VERIFY_PEER, myVerify);
#ifdef NO_FILESYSTEM
/* example loading from buffer */
#if 0
if (wolfSSL_CTX_load_verify(ctx, ca.buffer, (long)ca.size,
WOLFSSL_FILETYPE_ASN1) != WOLFSSL_SUCCESS) }
/* Load CA Certificates from Buffer */
#if !defined(NO_RSA) && !defined(TLS_USE_ECC)
if (wolfSSL_CTX_load_verify_buffer(ctx,
ca_cert_der_2048, sizeof_ca_cert_der_2048,
WOLFSSL_FILETYPE_ASN1) != WOLFSSL_SUCCESS) {
printf("Error loading ca_cert_der_2048 DER cert\n");
goto exit;
}
#elif defined(HAVE_ECC)
if (wolfSSL_CTX_load_verify_buffer(ctx,
ca_ecc_cert_der_256, sizeof_ca_ecc_cert_der_256,
WOLFSSL_FILETYPE_ASN1) != WOLFSSL_SUCCESS) {
printf("Error loading ca_ecc_cert_der_256 DER cert\n");
goto exit;
}
#endif

View File

@ -272,8 +272,16 @@ int wolfTPM2_Cleanup(WOLFTPM2_DEV* dev)
int rc;
Shutdown_In shutdownIn;
if (dev == NULL)
if (dev == NULL) {
return BAD_FUNC_ARG;
}
#if defined(WOLF_CRYPTO_DEV) || defined(WOLF_CRYPTO_CB)
/* make sure crypto dev callback is unregistered */
rc = wolfTPM2_ClearCryptoDevCb(dev, INVALID_DEVID);
if (rc != 0)
return rc;
#endif
shutdownIn.shutdownType = TPM_SU_CLEAR;
rc = TPM2_Shutdown(&shutdownIn);
@ -3353,6 +3361,28 @@ int wolfTPM2_SetCryptoDevCb(WOLFTPM2_DEV* dev, CryptoDevCallbackFunc cb,
return rc;
}
int wolfTPM2_ClearCryptoDevCb(WOLFTPM2_DEV* dev, int devId)
{
int rc = 0;
if (dev == NULL) {
return BAD_FUNC_ARG;
}
/* get device Id */
if (devId == INVALID_DEVID) {
rc = wolfTPM2_GetTpmDevId(dev);
if (rc >= 0) {
devId = rc;
}
}
if (devId != INVALID_DEVID) {
wc_CryptoCb_UnRegisterDevice(devId);
}
return rc;
}
/******************************************************************************/
/* --- END wolf Crypto Device Support -- */
/******************************************************************************/

View File

@ -289,6 +289,8 @@ typedef struct TpmCryptoDevCtx {
WOLFTPM_API int wolfTPM2_CryptoDevCb(int devId, wc_CryptoInfo* info, void* ctx);
WOLFTPM_API int wolfTPM2_SetCryptoDevCb(WOLFTPM2_DEV* dev, CryptoDevCallbackFunc cb,
TpmCryptoDevCtx* tpmCtx, int* pDevId);
WOLFTPM_API int wolfTPM2_ClearCryptoDevCb(WOLFTPM2_DEV* dev, int devId);
#endif /* WOLF_CRYPTO_CB */