Skip to content

Commit

Permalink
pk.c: Ensure min hash_len in pk_hashlen_helper
Browse files Browse the repository at this point in the history
The function `pk_hashlen_helper` exists to ensure a valid hash_len is
used in pk_verify and pk_sign functions. This function has been
used to adjust to the corrsponding hash_len if the user passes in 0
for the hash_len argument based on the md algorithm given. If the user
does not pass in 0 as the hash_len, then it is not adjusted. This is
problematic if the user gives a hash_len and hash buffer that is less than the
associated length of the md algorithm. This error would go unchecked
and eventually lead to buffer overread when given to specific pk_sign/verify
functions, since they both ignore the hash_len argument if md_alg is not MBEDTLS_MD_NONE.

This commit, adds a conditional to `pk_hashlen_helper` so that an
error is thrown if the user specifies a hash_length (not 0) and it is
not eqaul to the expected for the associated message digest algorithm.
This aligns better with the api documentation where it states "If
hash_len is 0, then the length associated with md_alg is used instead,
or an error returned if it is invalid"

Signed-off-by: Nick Child <nick.child@ibm.com>
Signed-off-by: Nayna Jain <nayna@linux.ibm.com>
  • Loading branch information
nick-child-ibm committed Jun 17, 2021
1 parent b7abba2 commit ee13467
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion library/pk.c
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,15 @@ static inline int pk_hashlen_helper( mbedtls_md_type_t md_alg, size_t *hash_len
{
const mbedtls_md_info_t *md_info;

if( *hash_len != 0 )
if( *hash_len != 0 && md_alg == MBEDTLS_MD_NONE )
return( 0 );

if( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL )
return( -1 );

if ( *hash_len != 0 && *hash_len != mbedtls_md_get_size( md_info ) )
return ( -1 );

*hash_len = mbedtls_md_get_size( md_info );
return( 0 );
}
Expand Down

0 comments on commit ee13467

Please sign in to comment.