From b5a50e754dd3d61f49eb798a23279ce0b74f9cf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= Date: Thu, 20 Apr 2017 16:06:13 +0200 Subject: [PATCH] Always declare restartable function variants Otherwise code that uses these functions in other modules will have to do: #if defined(MBEDTLS_ECP_RESTARTABLE) ret = do_stuff( there, may, be, many, args ); #else ret = do_stuff( their, may, be, namy, args, rs_ctx ); #fi and there is a risk that the arg list will differ when code is updated, and this might not be caught immediately by tests because this depends on a config.h compile-time option which are harder to test. Always declaring the restartable variants of the API functions avoids this problem; the cost in ROM size should be negligible. --- include/mbedtls/ecp.h | 11 +++++++---- library/ecp.c | 9 --------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/include/mbedtls/ecp.h b/include/mbedtls/ecp.h index 325392b02..532124dc7 100644 --- a/include/mbedtls/ecp.h +++ b/include/mbedtls/ecp.h @@ -172,6 +172,7 @@ typedef struct mbedtls_ecp_keypair; #if defined(MBEDTLS_ECP_RESTARTABLE) + /** * \brief Internal restart context for multiplication * @@ -196,6 +197,12 @@ typedef struct mbedtls_ecp_restart_mul_ctx *rsm; /*!< ecp_mul_comb() sub-context */ mbedtls_ecp_restart_muladd_ctx *ma; /*!< ecp_muladd() sub-context */ } mbedtls_ecp_restart_ctx; + +#else /* MBEDTLS_ECP_RESTARTABLE */ + +/* We want to declare restartable versions of existing functions anyway */ +typedef void mbedtls_ecp_restart_ctx; + #endif /* MBEDTLS_ECP_RESTARTABLE */ /** @@ -612,7 +619,6 @@ int mbedtls_ecp_mul( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, const mbedtls_mpi *m, const mbedtls_ecp_point *P, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); -#if defined(MBEDTLS_ECP_RESTARTABLE) /** * \brief Restartable version of \c mbedtls_ecp_mul() * @@ -636,7 +642,6 @@ int mbedtls_ecp_mul_restartable( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, const mbedtls_mpi *m, const mbedtls_ecp_point *P, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, mbedtls_ecp_restart_ctx *rs_ctx ); -#endif /* MBEDTLS_ECP_RESTARTABLE */ /** * \brief Multiplication and addition of two points by integers: @@ -662,7 +667,6 @@ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, const mbedtls_mpi *m, const mbedtls_ecp_point *P, const mbedtls_mpi *n, const mbedtls_ecp_point *Q ); -#if defined(MBEDTLS_ECP_RESTARTABLE) /** * \brief Restartable version of \c mbedtls_ecp_muladd() * @@ -687,7 +691,6 @@ int mbedtls_ecp_muladd_restartable( const mbedtls_mpi *m, const mbedtls_ecp_point *P, const mbedtls_mpi *n, const mbedtls_ecp_point *Q, mbedtls_ecp_restart_ctx *rs_ctx ); -#endif /** * \brief Check that a point is a valid public key on this curve diff --git a/library/ecp.c b/library/ecp.c index 03b1476a4..92397244a 100644 --- a/library/ecp.c +++ b/library/ecp.c @@ -250,9 +250,6 @@ static int ecp_check_budget( const mbedtls_ecp_group *grp, #define ECP_BUDGET( ops ) MBEDTLS_MPI_CHK( ecp_check_budget( grp, rs_ctx, ops ) ); #else #define ECP_BUDGET( ops ) /* no-op */ - -/* We also need that type to make our life simpler for internal functions */ -typedef void mbedtls_ecp_restart_ctx; #endif /* MBEDTLS_ECP_RESTARTABLE */ #if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) || \ @@ -2130,9 +2127,6 @@ cleanup: /* * Restartable multiplication R = m * P */ -#if !defined(MBEDTLS_ECP_RESTARTABLE) -static -#endif int mbedtls_ecp_mul_restartable( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, const mbedtls_mpi *m, const mbedtls_ecp_point *P, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, @@ -2295,9 +2289,6 @@ cleanup: * Restartable linear combination * NOT constant-time */ -#if !defined(MBEDTLS_ECP_RESTARTABLE) -static -#endif int mbedtls_ecp_muladd_restartable( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, const mbedtls_mpi *m, const mbedtls_ecp_point *P,