mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-10-24 04:09:07 +03:00
bsdkm driver: wolfkdriv_aes_ctx_clear cleanup.
This commit is contained in:
@@ -383,16 +383,19 @@ static void km_AesFree(Aes * aes) {
|
||||
#endif
|
||||
}
|
||||
|
||||
static void wolfkdriv_aes_ctx_clear(km_aes_ctx * ctx)
|
||||
/* clean up allocated km_aes_ctx struct.
|
||||
* - cbc allocates both encrypt and decrypt, and frees both.
|
||||
* - gcm uses only aes_encrypt.
|
||||
* */
|
||||
static void wolfkdriv_aes_ctx_clear(km_aes_ctx * ctx, int free_decrypt)
|
||||
{
|
||||
if (ctx != NULL) {
|
||||
km_AesFree(&ctx->aes_encrypt);
|
||||
km_AesFree(&ctx->aes_decrypt);
|
||||
}
|
||||
|
||||
#ifdef WOLFKM_DEBUG_AES
|
||||
printf("info: exiting km_AesExitCommon\n");
|
||||
#endif /* WOLFKM_DEBUG_AES */
|
||||
if (free_decrypt) {
|
||||
km_AesFree(&ctx->aes_decrypt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void wolfkdriv_identify(driver_t * driver, device_t parent)
|
||||
@@ -671,7 +674,16 @@ static int wolfkdriv_newsession_aes(device_t dev,
|
||||
|
||||
newsession_cipher_out:
|
||||
if (error != 0) {
|
||||
wolfkdriv_aes_ctx_clear(&session->aes_ctx);
|
||||
switch (csp->csp_cipher_alg) {
|
||||
case CRYPTO_AES_NIST_GCM_16:
|
||||
wolfkdriv_aes_ctx_clear(&session->aes_ctx, 0);
|
||||
break;
|
||||
case CRYPTO_AES_CBC:
|
||||
wolfkdriv_aes_ctx_clear(&session->aes_ctx, 1);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
@@ -713,13 +725,27 @@ static void
|
||||
wolfkdriv_freesession(device_t dev, crypto_session_t cses)
|
||||
{
|
||||
wolfkdriv_session_t * session = NULL;
|
||||
const struct crypto_session_params * csp = NULL;
|
||||
(void)dev;
|
||||
|
||||
/* get the wolfkdriv_session_t context */
|
||||
session = crypto_get_driver_session(cses);
|
||||
csp = crypto_get_params(cses);
|
||||
|
||||
/* clean it up */
|
||||
wolfkdriv_aes_ctx_clear(&session->aes_ctx);
|
||||
switch (csp->csp_mode) {
|
||||
case CSP_MODE_CIPHER:
|
||||
wolfkdriv_aes_ctx_clear(&session->aes_ctx, 1);
|
||||
break;
|
||||
case CSP_MODE_DIGEST:
|
||||
case CSP_MODE_ETA:
|
||||
break;
|
||||
case CSP_MODE_AEAD:
|
||||
wolfkdriv_aes_ctx_clear(&session->aes_ctx, 0);
|
||||
break;
|
||||
default:
|
||||
__assert_unreachable();
|
||||
}
|
||||
|
||||
#if defined(WOLFSSL_BSDKM_VERBOSE_DEBUG)
|
||||
device_printf(dev, "info: exiting freesession\n");
|
||||
|
||||
Reference in New Issue
Block a user