@@ -680,20 +680,20 @@ static void ssl_calc_finished_ssl( mbedtls_ssl_context *, unsigned char *, int )
680680#endif
681681
682682#if defined(MBEDTLS_SSL_PROTO_TLS1 ) || defined(MBEDTLS_SSL_PROTO_TLS1_1 )
683- static void ssl_calc_verify_tls ( const mbedtls_ssl_context * , unsigned char * , size_t * );
683+ static void ssl_calc_verify_tls ( const mbedtls_ssl_context * , unsigned char * , size_t * );
684684static void ssl_calc_finished_tls ( mbedtls_ssl_context * , unsigned char * , int );
685685#endif
686686
687687#if defined(MBEDTLS_SSL_PROTO_TLS1_2 )
688688#if defined(MBEDTLS_SHA256_C )
689689static void ssl_update_checksum_sha256 ( mbedtls_ssl_context * , const unsigned char * , size_t );
690- static void ssl_calc_verify_tls_sha256 ( const mbedtls_ssl_context * ,unsigned char * , size_t * );
690+ static void ssl_calc_verify_tls_sha256 ( const mbedtls_ssl_context * ,unsigned char * , size_t * );
691691static void ssl_calc_finished_tls_sha256 ( mbedtls_ssl_context * ,unsigned char * , int );
692692#endif
693693
694694#if defined(MBEDTLS_SHA512_C )
695695static void ssl_update_checksum_sha384 ( mbedtls_ssl_context * , const unsigned char * , size_t );
696- static void ssl_calc_verify_tls_sha384 ( const mbedtls_ssl_context * , unsigned char * , size_t * );
696+ static void ssl_calc_verify_tls_sha384 ( const mbedtls_ssl_context * , unsigned char * , size_t * );
697697static void ssl_calc_finished_tls_sha384 ( mbedtls_ssl_context * , unsigned char * , int );
698698#endif
699699#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
@@ -1667,7 +1667,7 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl )
16671667
16681668#if defined(MBEDTLS_SSL_PROTO_SSL3 )
16691669void ssl_calc_verify_ssl ( const mbedtls_ssl_context * ssl ,
1670- unsigned char hash [ 36 ] ,
1670+ unsigned char * hash ,
16711671 size_t * hlen )
16721672{
16731673 mbedtls_md5_context md5 ;
@@ -1720,7 +1720,7 @@ void ssl_calc_verify_ssl( const mbedtls_ssl_context *ssl,
17201720
17211721#if defined(MBEDTLS_SSL_PROTO_TLS1 ) || defined(MBEDTLS_SSL_PROTO_TLS1_1 )
17221722void ssl_calc_verify_tls ( const mbedtls_ssl_context * ssl ,
1723- unsigned char hash [ 36 ] ,
1723+ unsigned char * hash ,
17241724 size_t * hlen )
17251725{
17261726 mbedtls_md5_context md5 ;
@@ -1752,7 +1752,7 @@ void ssl_calc_verify_tls( const mbedtls_ssl_context *ssl,
17521752#if defined(MBEDTLS_SSL_PROTO_TLS1_2 )
17531753#if defined(MBEDTLS_SHA256_C )
17541754void ssl_calc_verify_tls_sha256 ( const mbedtls_ssl_context * ssl ,
1755- unsigned char hash [ 32 ] ,
1755+ unsigned char * hash ,
17561756 size_t * hlen )
17571757{
17581758#if defined(MBEDTLS_USE_PSA_CRYPTO )
@@ -1801,7 +1801,7 @@ void ssl_calc_verify_tls_sha256( const mbedtls_ssl_context *ssl,
18011801
18021802#if defined(MBEDTLS_SHA512_C )
18031803void ssl_calc_verify_tls_sha384 ( const mbedtls_ssl_context * ssl ,
1804- unsigned char hash [ 48 ] ,
1804+ unsigned char * hash ,
18051805 size_t * hlen )
18061806{
18071807#if defined(MBEDTLS_USE_PSA_CRYPTO )
@@ -3197,6 +3197,9 @@ static void ssl_calc_finished_tls_sha256(
31973197#endif /* MBEDTLS_SHA256_C */
31983198
31993199#if defined(MBEDTLS_SHA512_C )
3200+
3201+ typedef int (* finish_sha384_t )(mbedtls_sha512_context * , unsigned char * );
3202+
32003203static void ssl_calc_finished_tls_sha384 (
32013204 mbedtls_ssl_context * ssl , unsigned char * buf , int from )
32023205{
@@ -3255,8 +3258,14 @@ static void ssl_calc_finished_tls_sha384(
32553258 MBEDTLS_SSL_DEBUG_BUF ( 4 , "finished sha512 state" , (unsigned char * )
32563259 sha512 .state , sizeof ( sha512 .state ) );
32573260#endif
3261+ /*
3262+ * For SHA-384, we can save 16 bytes by keeping padbuf 48 bytes long.
3263+ * However, to avoid stringop-overflow warning in gcc, we have to cast
3264+ * mbedtls_sha512_finish_ret().
3265+ */
3266+ finish_sha384_t finish = (finish_sha384_t )mbedtls_sha512_finish_ret ;
3267+ finish ( & sha512 , padbuf );
32583268
3259- mbedtls_sha512_finish_ret ( & sha512 , padbuf );
32603269 mbedtls_sha512_free ( & sha512 );
32613270#endif
32623271
0 commit comments