diff --git a/library/ecp.c b/library/ecp.c index 2f6c1e8f9..4e637d732 100644 --- a/library/ecp.c +++ b/library/ecp.c @@ -2115,9 +2115,19 @@ int mbedtls_ecp_mul_restartable( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, #endif /* MBEDTLS_ECP_INTERNAL_ALT */ - /* Common sanity checks */ - MBEDTLS_MPI_CHK( mbedtls_ecp_check_privkey( grp, m ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_check_pubkey( grp, P ) ); +#if defined(MBEDTLS_ECP_EARLY_RETURN) && defined(ECP_SHORTWEIERSTRASS) + /* skip argument check when restarting */ + if( ecp_get_type( grp ) != ECP_TYPE_SHORT_WEIERSTRASS || + rs_ctx == NULL || rs_ctx->rsm == NULL ) +#endif + { + /* Common sanity checks */ + MBEDTLS_MPI_CHK( mbedtls_ecp_check_privkey( grp, m ) ); + MBEDTLS_MPI_CHK( mbedtls_ecp_check_pubkey( grp, P ) ); + + /* check_privkey is 0M and check_pubkey is 3M */ + ECP_BUDGET( 3 ); + } ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; #if defined(ECP_MONTGOMERY)