Introduce generic validation macros
Avoid duplicating source code for each module.
diff --git a/include/mbedtls/aes.h b/include/mbedtls/aes.h
index 62c1f92..cfb20c4 100644
--- a/include/mbedtls/aes.h
+++ b/include/mbedtls/aes.h
@@ -67,22 +67,6 @@
/* MBEDTLS_ERR_AES_HW_ACCEL_FAILED is deprecated and should not be used. */
#define MBEDTLS_ERR_AES_HW_ACCEL_FAILED -0x0025 /**< AES hardware accelerator failed. */
-#if defined( MBEDTLS_CHECK_PARAMS )
-#define MBEDTLS_AES_VALIDATE_RET( cond ) do{ if( !(cond) ) { \
- MBEDTLS_PARAM_FAILED( #cond ); \
- return MBEDTLS_ERR_AES_BAD_INPUT_DATA;} \
- } while(0);
-
-#define MBEDTLS_AES_VALIDATE( cond ) do{ if( !(cond) ) { \
- MBEDTLS_PARAM_FAILED( #cond ); \
- return; } \
- } while(0);
-#else
-/* No validation of parameters will be performed */
-#define MBEDTLS_AES_VALIDATE_RET( cond )
-#define MBEDTLS_AES_VALIDATE( cond)
-#endif
-
#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
!defined(inline) && !defined(__cplusplus)
#define inline __inline
diff --git a/include/mbedtls/platform_util.h b/include/mbedtls/platform_util.h
index ed21ffa..1ac16d4 100644
--- a/include/mbedtls/platform_util.h
+++ b/include/mbedtls/platform_util.h
@@ -81,6 +81,33 @@
const char *file,
int line );
#endif /* MBEDTLS_PARAM_FAILED */
+
+/* Internal macro meant to be called only from within the library. */
+#define MBEDTLS_INTERNAL_VALIDATE_RET( cond, ret ) \
+ do { \
+ if( !(cond) ) \
+ { \
+ MBEDTLS_PARAM_FAILED( #cond ); \
+ return( ret ); \
+ } \
+ } while( 0 )
+
+/* Internal macro meant to be called only from within the library. */
+#define MBEDTLS_INTERNAL_VALIDATE( cond ) \
+ do { \
+ if( !(cond) ) \
+ { \
+ MBEDTLS_PARAM_FAILED( #cond ); \
+ return; \
+ } \
+ } while( 0 )
+
+#else /* MBEDTLS_CHECK_PARAMS */
+
+/* Internal macros meant to be called only from within the library. */
+#define MBEDTLS_INTERNAL_VALIDATE_RET( cond, ret ) do { } while( 0 )
+#define MBEDTLS_INTERNAL_VALIDATE( cond ) do { } while( 0 )
+
#endif /* MBEDTLS_CHECK_PARAMS */
/**
diff --git a/library/aes.c b/library/aes.c
index 7a364a0..6ff39d7 100644
--- a/library/aes.c
+++ b/library/aes.c
@@ -56,6 +56,12 @@
#if !defined(MBEDTLS_AES_ALT)
+/* Parameter validation macros based on platform_util.h */
+#define AES_VALIDATE_RET( cond ) \
+ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_AES_BAD_INPUT_DATA)
+#define AES_VALIDATE( cond ) \
+ MBEDTLS_INTERNAL_VALIDATE( cond )
+
/*
* 32-bit integer manipulation macros (little endian)
*/
@@ -511,7 +517,7 @@
void mbedtls_aes_init( mbedtls_aes_context *ctx )
{
- MBEDTLS_AES_VALIDATE( ctx != NULL );
+ AES_VALIDATE( ctx != NULL );
memset( ctx, 0, sizeof( mbedtls_aes_context ) );
}
@@ -527,7 +533,7 @@
#if defined(MBEDTLS_CIPHER_MODE_XTS)
void mbedtls_aes_xts_init( mbedtls_aes_xts_context *ctx )
{
- MBEDTLS_AES_VALIDATE( ctx != NULL );
+ AES_VALIDATE( ctx != NULL );
mbedtls_aes_init( &ctx->crypt );
mbedtls_aes_init( &ctx->tweak );
@@ -535,7 +541,7 @@
void mbedtls_aes_xts_free( mbedtls_aes_xts_context *ctx )
{
- MBEDTLS_AES_VALIDATE( ctx != NULL );
+ AES_VALIDATE( ctx != NULL );
mbedtls_aes_free( &ctx->crypt );
mbedtls_aes_free( &ctx->tweak );
@@ -552,7 +558,7 @@
unsigned int i;
uint32_t *RK;
- MBEDTLS_AES_VALIDATE_RET( ctx != NULL && key != NULL );
+ AES_VALIDATE_RET( ctx != NULL && key != NULL );
switch( keybits )
{
@@ -670,7 +676,7 @@
uint32_t *RK;
uint32_t *SK;
- MBEDTLS_AES_VALIDATE_RET( ctx != NULL && key != NULL );
+ AES_VALIDATE_RET( ctx != NULL && key != NULL );
mbedtls_aes_init( &cty );