Sanity check on elliptic curve keys: check that the group is known

This commit is contained in:
Gilles Peskine 2020-02-25 19:52:44 +01:00
parent 8d36696e1f
commit f02b984f86
2 changed files with 21 additions and 11 deletions

View file

@ -46,12 +46,15 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
#if defined(MBEDTLS_ECP_C) #if defined(MBEDTLS_ECP_C)
if( mbedtls_pk_get_type( &pk ) == MBEDTLS_PK_ECKEY ) if( mbedtls_pk_get_type( &pk ) == MBEDTLS_PK_ECKEY )
{ {
mbedtls_ecp_keypair *ecp; mbedtls_ecp_keypair *ecp = mbedtls_pk_ec( pk );
mbedtls_ecp_group_id grp_id = ecp->grp.id;
const mbedtls_ecp_curve_info *curve_info =
mbedtls_ecp_curve_info_from_grp_id( grp_id );
ecp = mbedtls_pk_ec( pk ); /* If the curve is not supported, the key should not have been
if (ecp) { * accepted. */
ret = 0; if( curve_info == NULL )
} abort( );
} }
else else
#endif #endif

View file

@ -41,13 +41,20 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
#if defined(MBEDTLS_ECP_C) #if defined(MBEDTLS_ECP_C)
if( mbedtls_pk_get_type( &pk ) == MBEDTLS_PK_ECKEY ) if( mbedtls_pk_get_type( &pk ) == MBEDTLS_PK_ECKEY )
{ {
mbedtls_ecp_keypair *ecp; mbedtls_ecp_keypair *ecp = mbedtls_pk_ec( pk );
mbedtls_ecp_group_id grp_id = ecp->grp.id;
const mbedtls_ecp_curve_info *curve_info =
mbedtls_ecp_curve_info_from_grp_id( grp_id );
ecp = mbedtls_pk_ec( pk ); /* If the curve is not supported, the key should not have been
//dummy use of value * accepted. */
if (ecp) { if( curve_info == NULL )
ret = 0; abort( );
}
/* It's a public key, so the private value should not have
* been changed from its initialization to 0. */
if( mbedtls_mpi_cmp_int( &ecp->d, 0 ) != 0 )
abort( );
} }
else else
#endif #endif