@@ -2079,14 +2079,10 @@ WOLFSSL_CMAC_CTX* wolfSSL_CMAC_CTX_new(void)
20792079 ctx = (WOLFSSL_CMAC_CTX * )XMALLOC (sizeof (WOLFSSL_CMAC_CTX ), NULL ,
20802080 DYNAMIC_TYPE_OPENSSL );
20812081 if (ctx != NULL ) {
2082- /* Allocate memory for wolfSSL CMAC object. */
2083- ctx -> internal = (Cmac * )XMALLOC (sizeof (Cmac ), NULL , DYNAMIC_TYPE_CMAC );
2084- if (ctx -> internal == NULL ) {
2085- XFREE (ctx , NULL , DYNAMIC_TYPE_OPENSSL );
2086- ctx = NULL ;
2087- }
2088- }
2089- if (ctx != NULL ) {
2082+ /* Memory for wolfSSL CMAC object is allocated in
2083+ * wolfSSL_CMAC_Init().
2084+ */
2085+ ctx -> internal = NULL ;
20902086 /* Allocate memory for EVP cipher context object. */
20912087 ctx -> cctx = wolfSSL_EVP_CIPHER_CTX_new ();
20922088 if (ctx -> cctx == NULL ) {
@@ -2110,9 +2106,13 @@ void wolfSSL_CMAC_CTX_free(WOLFSSL_CMAC_CTX *ctx)
21102106 if (ctx != NULL ) {
21112107 /* Deallocate dynamically allocated fields. */
21122108 if (ctx -> internal != NULL ) {
2109+ #if (!defined(HAVE_FIPS ) || FIPS_VERSION_GE (5 , 3 )) && !defined(HAVE_SELFTEST )
2110+ wc_CmacFree ((Cmac * )ctx -> internal );
2111+ #endif
21132112 XFREE (ctx -> internal , NULL , DYNAMIC_TYPE_CMAC );
21142113 }
21152114 if (ctx -> cctx != NULL ) {
2115+ wolfSSL_EVP_CIPHER_CTX_cleanup (ctx -> cctx );
21162116 wolfSSL_EVP_CIPHER_CTX_free (ctx -> cctx );
21172117 }
21182118 /* Deallocate CMAC context object. */
@@ -2167,22 +2167,37 @@ int wolfSSL_CMAC_Init(WOLFSSL_CMAC_CTX* ctx, const void *key, size_t keySz,
21672167 /* Only AES-CBC ciphers are supported. */
21682168 if ((ret == 1 ) && (cipher != EVP_AES_128_CBC ) &&
21692169 (cipher != EVP_AES_192_CBC ) && (cipher != EVP_AES_256_CBC )) {
2170+ WOLFSSL_MSG ("wolfSSL_CMAC_Init: requested cipher is unsupported" );
21702171 ret = 0 ;
21712172 }
21722173 /* Key length must match cipher. */
21732174 if ((ret == 1 ) && ((int )keySz != wolfSSL_EVP_Cipher_key_length (cipher ))) {
2175+ WOLFSSL_MSG ("wolfSSL_CMAC_Init: "
2176+ "supplied key size doesn't match requested cipher" );
21742177 ret = 0 ;
21752178 }
21762179
2180+ if ((ret == 1 ) && (ctx -> internal == NULL )) {
2181+ /* Allocate memory for wolfSSL CMAC object. */
2182+ ctx -> internal = (Cmac * )XMALLOC (sizeof (Cmac ), NULL , DYNAMIC_TYPE_CMAC );
2183+ if (ctx -> internal == NULL )
2184+ ret = 0 ;
2185+ }
2186+
21772187 /* Initialize the wolfCrypt CMAC object. */
21782188 if ((ret == 1 ) && (wc_InitCmac ((Cmac * )ctx -> internal , (const byte * )key ,
21792189 (word32 )keySz , WC_CMAC_AES , NULL ) != 0 )) {
2190+ WOLFSSL_MSG ("wolfSSL_CMAC_Init: wc_InitCmac() failed" );
2191+ XFREE (ctx -> internal , NULL , DYNAMIC_TYPE_CMAC );
2192+ ctx -> internal = NULL ;
21802193 ret = 0 ;
21812194 }
21822195 if (ret == 1 ) {
21832196 /* Initialize the EVP cipher context object for encryption. */
21842197 ret = wolfSSL_EVP_CipherInit (ctx -> cctx , cipher , (const byte * )key , NULL ,
21852198 1 );
2199+ if (ret != WOLFSSL_SUCCESS )
2200+ WOLFSSL_MSG ("wolfSSL_CMAC_Init: wolfSSL_EVP_CipherInit() failed" );
21862201 }
21872202
21882203 WOLFSSL_LEAVE ("wolfSSL_CMAC_Init" , ret );
@@ -2237,7 +2252,7 @@ int wolfSSL_CMAC_Final(WOLFSSL_CMAC_CTX* ctx, unsigned char* out, size_t* len)
22372252
22382253 WOLFSSL_ENTER ("wolfSSL_CMAC_Final" );
22392254
2240- /* Valiudate parameters. */
2255+ /* Validate parameters. */
22412256 if (ctx == NULL ) {
22422257 ret = 0 ;
22432258 }
@@ -2268,6 +2283,9 @@ int wolfSSL_CMAC_Final(WOLFSSL_CMAC_CTX* ctx, unsigned char* out, size_t* len)
22682283 else if (len != NULL ) {
22692284 * len = (size_t )len32 ;
22702285 }
2286+
2287+ XFREE (ctx -> internal , NULL , DYNAMIC_TYPE_CMAC );
2288+ ctx -> internal = NULL ;
22712289 }
22722290
22732291 WOLFSSL_LEAVE ("wolfSSL_CMAC_Final" , ret );
@@ -2899,7 +2917,7 @@ void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* in, WOLFSSL_DES_cblock* out,
28992917
29002918#ifdef OPENSSL_EXTRA
29012919
2902- #ifndef NO_AES
2920+ #if !defined( NO_AES ) && !defined( WOLFSSL_NO_OPENSSL_AES_LOW_LEVEL_API )
29032921
29042922/* Sets the key into the AES key object for encryption or decryption.
29052923 *
@@ -3408,7 +3426,7 @@ size_t wolfSSL_CRYPTO_cts128_decrypt(const unsigned char *in,
34083426 return len ;
34093427}
34103428#endif /* HAVE_CTS */
3411- #endif /* NO_AES */
3429+ #endif /* ! NO_AES && !WOLFSSL_NO_OPENSSL_AES_LOW_LEVEL_API */
34123430#endif /* OPENSSL_EXTRA */
34133431
34143432/*******************************************************************************
0 commit comments