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.
diff --git a/include/mbedtls/ecp.h b/include/mbedtls/ecp.h
index 325392b..532124d 100644
--- a/include/mbedtls/ecp.h
+++ b/include/mbedtls/ecp.h
@@ -172,6 +172,7 @@
mbedtls_ecp_keypair;
#if defined(MBEDTLS_ECP_RESTARTABLE)
+
/**
* \brief Internal restart context for multiplication
*
@@ -196,6 +197,12 @@
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 @@
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 @@
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 @@
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 @@
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