Allow CMAC self test to skip tests for unsupported primitives

Same type of skipping as in AES and GCM self test routines.

Signed-off-by: Steven Cooreman <steven.cooreman@silabs.com>
diff --git a/library/cmac.c b/library/cmac.c
index 59ece15..9501461 100644
--- a/library/cmac.c
+++ b/library/cmac.c
@@ -793,6 +793,17 @@
         if( ( ret = mbedtls_cipher_setkey( &ctx, key, keybits,
                                        MBEDTLS_ENCRYPT ) ) != 0 )
         {
+            /* When CMAC is implemented by an alternative implementation, or
+             * the underlying primitive itself is implemented alternatively,
+             * certain features (e.g. AES-192) may be unavailable. This should
+             * not cause the selftest function to fail. */
+            if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED ||
+                ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ) {
+                if( verbose != 0 )
+                    mbedtls_printf( "skipped\n" );
+                goto next_test;
+            }
+
             if( verbose != 0 )
                 mbedtls_printf( "test execution failed\n" );
 
@@ -820,6 +831,7 @@
         if( verbose != 0 )
             mbedtls_printf( "passed\n" );
 
+next_test:
         mbedtls_cipher_free( &ctx );
     }
 
@@ -864,6 +876,17 @@
         if( ( ret = mbedtls_cipher_cmac( cipher_info, key, keybits, messages,
                                          message_lengths[i], output ) ) != 0 )
         {
+            /* When CMAC is implemented by an alternative implementation, or
+             * the underlying primitive itself is implemented alternatively,
+             * certain features (e.g. AES-192) may be unavailable. This should
+             * not cause the selftest function to fail. */
+            if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED ||
+                ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ) {
+                if( verbose != 0 )
+                    mbedtls_printf( "skipped\n" );
+                continue;
+            }
+
             if( verbose != 0 )
                 mbedtls_printf( "failed\n" );
             goto exit;