@@ -621,7 +621,7 @@ static void ssl_calc_finished_tls( mbedtls_ssl_context *, unsigned char *, int )
621
621
#if defined(MBEDTLS_SSL_PROTO_TLS1_2 )
622
622
#if defined(MBEDTLS_SHA256_C )
623
623
static void ssl_update_checksum_sha256 ( mbedtls_ssl_context * , const unsigned char * , size_t );
624
- static void ssl_calc_verify_tls_sha256 ( mbedtls_ssl_context * ,unsigned char * );
624
+ static void ssl_calc_verify_tls_sha256 ( mbedtls_ssl_context * , unsigned char * );
625
625
static void ssl_calc_finished_tls_sha256 ( mbedtls_ssl_context * ,unsigned char * , int );
626
626
#endif
627
627
@@ -1142,7 +1142,7 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl )
1142
1142
}
1143
1143
1144
1144
#if defined(MBEDTLS_SSL_PROTO_SSL3 )
1145
- void ssl_calc_verify_ssl ( mbedtls_ssl_context * ssl , unsigned char hash [ 36 ] )
1145
+ void ssl_calc_verify_ssl ( mbedtls_ssl_context * ssl , unsigned char * hash )
1146
1146
{
1147
1147
mbedtls_md5_context md5 ;
1148
1148
mbedtls_sha1_context sha1 ;
@@ -1191,7 +1191,7 @@ void ssl_calc_verify_ssl( mbedtls_ssl_context *ssl, unsigned char hash[36] )
1191
1191
#endif /* MBEDTLS_SSL_PROTO_SSL3 */
1192
1192
1193
1193
#if defined(MBEDTLS_SSL_PROTO_TLS1 ) || defined(MBEDTLS_SSL_PROTO_TLS1_1 )
1194
- void ssl_calc_verify_tls ( mbedtls_ssl_context * ssl , unsigned char hash [ 36 ] )
1194
+ void ssl_calc_verify_tls ( mbedtls_ssl_context * ssl , unsigned char * hash )
1195
1195
{
1196
1196
mbedtls_md5_context md5 ;
1197
1197
mbedtls_sha1_context sha1 ;
@@ -1219,7 +1219,7 @@ void ssl_calc_verify_tls( mbedtls_ssl_context *ssl, unsigned char hash[36] )
1219
1219
1220
1220
#if defined(MBEDTLS_SSL_PROTO_TLS1_2 )
1221
1221
#if defined(MBEDTLS_SHA256_C )
1222
- void ssl_calc_verify_tls_sha256 ( mbedtls_ssl_context * ssl , unsigned char hash [ 32 ] )
1222
+ void ssl_calc_verify_tls_sha256 ( mbedtls_ssl_context * ssl , unsigned char * hash )
1223
1223
{
1224
1224
mbedtls_sha256_context sha256 ;
1225
1225
@@ -1240,7 +1240,7 @@ void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *ssl, unsigned char hash[32
1240
1240
#endif /* MBEDTLS_SHA256_C */
1241
1241
1242
1242
#if defined(MBEDTLS_SHA512_C )
1243
- void ssl_calc_verify_tls_sha384 ( mbedtls_ssl_context * ssl , unsigned char hash [ 48 ] )
1243
+ void ssl_calc_verify_tls_sha384 ( mbedtls_ssl_context * ssl , unsigned char * hash )
1244
1244
{
1245
1245
mbedtls_sha512_context sha512 ;
1246
1246
@@ -6363,13 +6363,22 @@ static void ssl_calc_finished_tls_sha256(
6363
6363
#endif /* MBEDTLS_SHA256_C */
6364
6364
6365
6365
#if defined(MBEDTLS_SHA512_C )
6366
+
6367
+ typedef int (* finish_sha384_t )(mbedtls_sha512_context * , unsigned char * );
6368
+
6366
6369
static void ssl_calc_finished_tls_sha384 (
6367
6370
mbedtls_ssl_context * ssl , unsigned char * buf , int from )
6368
6371
{
6369
6372
int len = 12 ;
6370
6373
const char * sender ;
6371
6374
mbedtls_sha512_context sha512 ;
6372
6375
unsigned char padbuf [48 ];
6376
+ /*
6377
+ * For SHA-384, we can save 16 bytes by keeping padbuf 48 bytes long.
6378
+ * However, to avoid stringop-overflow warning in gcc, we have to cast
6379
+ * mbedtls_sha512_finish_ret().
6380
+ */
6381
+ finish_sha384_t finish_sha384 = (finish_sha384_t )mbedtls_sha512_finish_ret ;
6373
6382
6374
6383
mbedtls_ssl_session * session = ssl -> session_negotiate ;
6375
6384
if ( !session )
@@ -6396,7 +6405,7 @@ static void ssl_calc_finished_tls_sha384(
6396
6405
? "client finished"
6397
6406
: "server finished" ;
6398
6407
6399
- mbedtls_sha512_finish_ret ( & sha512 , padbuf );
6408
+ finish_sha384 ( & sha512 , padbuf );
6400
6409
6401
6410
ssl -> handshake -> tls_prf ( session -> master , 48 , sender ,
6402
6411
padbuf , 48 , buf , len );
0 commit comments