Generalise mbedtls_ct_error_if to mbedtls_ct_int_if
Signed-off-by: Dave Rodgman <dave.rodgman@arm.com>
diff --git a/library/constant_time_impl.h b/library/constant_time_impl.h
index 34b33b0..9bfb2c5 100644
--- a/library/constant_time_impl.h
+++ b/library/constant_time_impl.h
@@ -397,15 +397,15 @@
#endif /* MBEDTLS_BIGNUM_C */
-static inline int mbedtls_ct_error_if(mbedtls_ct_condition_t condition, int if1, int if0)
+static inline int mbedtls_ct_int_if(mbedtls_ct_condition_t condition, int if1, int if0)
{
- return -((int) mbedtls_ct_if(condition, (mbedtls_ct_uint_t) (-if1),
- (mbedtls_ct_uint_t) (-if0)));
+ int a[2] = {if0, if1};
+ return a[mbedtls_ct_uint_if_else_0(condition, 1)];
}
-static inline int mbedtls_ct_error_if_else_0(mbedtls_ct_condition_t condition, int if1)
+static inline int mbedtls_ct_int_if_else_0(mbedtls_ct_condition_t condition, int if1)
{
- return -((int) (condition & (-if1)));
+ return mbedtls_ct_int_if(condition, if1, 0);
}
static inline mbedtls_ct_condition_t mbedtls_ct_uint_eq(mbedtls_ct_uint_t x,
diff --git a/library/constant_time_internal.h b/library/constant_time_internal.h
index 63eb104..604268e 100644
--- a/library/constant_time_internal.h
+++ b/library/constant_time_internal.h
@@ -411,7 +411,7 @@
unsigned char c,
unsigned char t);
-/** Choose between two error values. The values must be zero or negative.
+/** Choose between two int values.
*
* Functionally equivalent to:
*
@@ -423,23 +423,22 @@
*
* \return \c if1 if \p condition == MBEDTLS_CT_TRUE, otherwise \c if0.
*/
-static inline int mbedtls_ct_error_if(mbedtls_ct_condition_t condition, int if1, int if0);
+static inline int mbedtls_ct_int_if(mbedtls_ct_condition_t condition, int if1, int if0);
-/** Choose between an error value and 0. The error value must be zero or negative.
+/** Choose between an int value and 0.
*
* Functionally equivalent to:
*
* condition ? if1 : 0.
*
- * Functionally equivalent to mbedtls_ct_error_if(condition, if1, 0) but
- * results in smaller code size.
+ * Functionally equivalent to mbedtls_ct_int_if(condition, if1, 0).
*
* \param condition Condition to test.
* \param if1 Value to use if \p condition == MBEDTLS_CT_TRUE.
*
* \return \c if1 if \p condition == MBEDTLS_CT_TRUE, otherwise 0.
*/
-static inline int mbedtls_ct_error_if_else_0(mbedtls_ct_condition_t condition, int if1);
+static inline int mbedtls_ct_int_if_else_0(mbedtls_ct_condition_t condition, int if1);
/* ============================================================================
* Block memory operations