@@ -931,6 +931,7 @@ static int InitSha256(wc_Sha256* sha256)
931931 }
932932
933933 #if defined(WOLFSSL_SMALL_STACK ) && !defined(WOLFSSL_SMALL_STACK_CACHE )
934+ ForceZero (W , sizeof (word32 ) * WC_SHA256_BLOCK_SIZE );
934935 XFREE (W , NULL , DYNAMIC_TYPE_TMP_BUFFER );
935936 #endif
936937 return 0 ;
@@ -1690,10 +1691,11 @@ static int InitSha256(wc_Sha256* sha256)
16901691 return ;
16911692
16921693#ifdef WOLFSSL_SMALL_STACK_CACHE
1693- if (sha224 -> W != NULL ) {
1694- XFREE (sha224 -> W , NULL , DYNAMIC_TYPE_DIGEST );
1695- sha224 -> W = NULL ;
1696- }
1694+ if (sha224 -> W != NULL ) {
1695+ ForceZero (sha224 -> W , sizeof (word32 ) * WC_SHA224_BLOCK_SIZE );
1696+ XFREE (sha224 -> W , NULL , DYNAMIC_TYPE_DIGEST );
1697+ sha224 -> W = NULL ;
1698+ }
16971699#endif
16981700
16991701 #if defined(WOLFSSL_ASYNC_CRYPT ) && defined(WC_ASYNC_ENABLE_SHA224 )
@@ -1707,11 +1709,13 @@ static int InitSha256(wc_Sha256* sha256)
17071709 KcapiHashFree (& sha224 -> kcapi );
17081710 #endif
17091711 #if defined(WOLFSSL_RENESAS_RX64_HASH )
1710- if (sha224 -> msg != NULL ) {
1711- XFREE (sha224 -> msg , sha224 -> heap , DYNAMIC_TYPE_TMP_BUFFER );
1712- sha224 -> msg = NULL ;
1713- }
1712+ if (sha224 -> msg != NULL ) {
1713+ ForceZero (sha224 -> msg , sha224 -> len );
1714+ XFREE (sha224 -> msg , sha224 -> heap , DYNAMIC_TYPE_TMP_BUFFER );
1715+ sha224 -> msg = NULL ;
1716+ }
17141717 #endif
1718+ ForceZero (sha224 , sizeof (* sha224 ));
17151719 }
17161720#endif /* WOLFSSL_SHA224 */
17171721#endif /* !defined(WOLFSSL_HAVE_PSA) || defined(WOLFSSL_PSA_NO_HASH) */
@@ -1737,6 +1741,7 @@ void wc_Sha256Free(wc_Sha256* sha256)
17371741
17381742#ifdef WOLFSSL_SMALL_STACK_CACHE
17391743 if (sha256 -> W != NULL ) {
1744+ ForceZero (sha256 -> W , sizeof (word32 ) * WC_SHA256_BLOCK_SIZE );
17401745 XFREE (sha256 -> W , NULL , DYNAMIC_TYPE_DIGEST );
17411746 sha256 -> W = NULL ;
17421747 }
@@ -1772,6 +1777,7 @@ void wc_Sha256Free(wc_Sha256* sha256)
17721777 defined(WOLFSSL_HASH_KEEP )
17731778
17741779 if (sha256 -> msg != NULL ) {
1780+ ForceZero (sha256 -> msg , sha256 -> len );
17751781 XFREE (sha256 -> msg , sha256 -> heap , DYNAMIC_TYPE_TMP_BUFFER );
17761782 sha256 -> msg = NULL ;
17771783 }
@@ -1813,6 +1819,7 @@ void wc_Sha256Free(wc_Sha256* sha256)
18131819 ESP_LOGV (TAG , "Hardware unlock not needed in wc_Sha256Free." );
18141820 }
18151821#endif
1822+ ForceZero (sha256 , sizeof (* sha256 ));
18161823}
18171824
18181825#endif /* !defined(WOLFSSL_HAVE_PSA) || defined(WOLFSSL_PSA_NO_HASH) */
0 commit comments