psa: Add missing PSA configs

Add missing PSA_WANT_CCM/GCM/CMAC. This completes
the set of PSA_WANT config options given the
current support of PSA crypto in Mbed TLS.

Signed-off-by: Ronald Cron <ronald.cron@arm.com>
diff --git a/library/check_crypto_config.h b/library/check_crypto_config.h
index cac90a0..e24246b 100644
--- a/library/check_crypto_config.h
+++ b/library/check_crypto_config.h
@@ -28,6 +28,18 @@
 #ifndef MBEDTLS_CHECK_CRYPTO_CONFIG_H
 #define MBEDTLS_CHECK_CRYPTO_CONFIG_H
 
+#if defined(PSA_WANT_ALG_CCM) && \
+    !( defined(PSA_WANT_KEY_TYPE_AES) || \
+       defined(PSA_WANT_KEY_TYPE_CAMELLIA) )
+#error "PSA_WANT_ALG_CCM defined, but not all prerequisites"
+#endif
+
+#if defined(PSA_WANT_ALG_CMAC) && \
+    !( defined(PSA_WANT_KEY_TYPE_AES) || \
+       defined(PSA_WANT_KEY_TYPE_DES) )
+#error "PSA_WANT_ALG_CMAC defined, but not all prerequisites"
+#endif
+
 #if defined(PSA_WANT_ALG_DETERMINISTIC_ECDSA) && \
     !( defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR) || \
        defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY) )
@@ -40,6 +52,13 @@
 #error "PSA_WANT_ALG_ECDSA defined, but not all prerequisites"
 #endif
 
+#if defined(PSA_WANT_ALG_GCM) && \
+    !( defined(PSA_WANT_KEY_TYPE_AES) || \
+       defined(PSA_WANT_KEY_TYPE_ARIA) || \
+       defined(PSA_WANT_KEY_TYPE_CAMELLIA) )
+#error "PSA_WANT_ALG_GCM defined, but not all prerequisites"
+#endif
+
 #if defined(PSA_WANT_ALG_RSA_PKCS1V15_CRYPT) && \
     !( defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR) || \
        defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY) )
diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index 5c560c2..452d9ec 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -2445,7 +2445,7 @@
     operation->has_input = 0;
     operation->is_sign = 0;
 
-#if defined(MBEDTLS_CMAC_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC)
     if( operation->alg == PSA_ALG_CMAC )
     {
         operation->iv_required = 0;
@@ -2453,7 +2453,7 @@
         status = PSA_SUCCESS;
     }
     else
-#endif /* MBEDTLS_CMAC_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CMAC */
 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC)
     if( PSA_ALG_IS_HMAC( operation->alg ) )
     {
@@ -2491,13 +2491,13 @@
         return( PSA_SUCCESS );
     }
     else
-#if defined(MBEDTLS_CMAC_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC)
     if( operation->alg == PSA_ALG_CMAC )
     {
         mbedtls_cipher_free( &operation->ctx.cmac );
     }
     else
-#endif /* MBEDTLS_CMAC_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CMAC */
 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC)
     if( PSA_ALG_IS_HMAC( operation->alg ) )
     {
@@ -2529,7 +2529,7 @@
     return( PSA_ERROR_BAD_STATE );
 }
 
-#if defined(MBEDTLS_CMAC_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC)
 static psa_status_t psa_cmac_setup( psa_mac_operation_t *operation,
                                     psa_key_slot_t *slot )
 {
@@ -2551,7 +2551,7 @@
 exit:
     return( mbedtls_to_psa_error( ret ) );
 }
-#endif /* MBEDTLS_CMAC_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CMAC */
 
 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC)
 static psa_status_t psa_hmac_setup_internal( psa_hmac_internal_data *hmac,
@@ -2676,13 +2676,13 @@
         goto exit;
     }
 
-#if defined(MBEDTLS_CMAC_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC)
     if( PSA_ALG_FULL_LENGTH_MAC( alg ) == PSA_ALG_CMAC )
     {
         status = psa_cmac_setup( operation, slot );
     }
     else
-#endif /* MBEDTLS_CMAC_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CMAC */
 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC)
     if( PSA_ALG_IS_HMAC( alg ) )
     {
@@ -2750,7 +2750,7 @@
         return( PSA_ERROR_BAD_STATE );
     operation->has_input = 1;
 
-#if defined(MBEDTLS_CMAC_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC)
     if( operation->alg == PSA_ALG_CMAC )
     {
         int ret = mbedtls_cipher_cmac_update( &operation->ctx.cmac,
@@ -2758,7 +2758,7 @@
         status = mbedtls_to_psa_error( ret );
     }
     else
-#endif /* MBEDTLS_CMAC_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CMAC */
 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC)
     if( PSA_ALG_IS_HMAC( operation->alg ) )
     {
@@ -2830,7 +2830,7 @@
     if( mac_size < operation->mac_size )
         return( PSA_ERROR_BUFFER_TOO_SMALL );
 
-#if defined(MBEDTLS_CMAC_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC)
     if( operation->alg == PSA_ALG_CMAC )
     {
         uint8_t tmp[PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE];
@@ -2841,7 +2841,7 @@
         return( mbedtls_to_psa_error( ret ) );
     }
     else
-#endif /* MBEDTLS_CMAC_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CMAC */
 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC)
     if( PSA_ALG_IS_HMAC( operation->alg ) )
     {
@@ -3892,15 +3892,15 @@
     union
     {
         unsigned dummy; /* Make the union non-empty even with no supported algorithms. */
-#if defined(MBEDTLS_CCM_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CCM)
         mbedtls_ccm_context ccm;
-#endif /* MBEDTLS_CCM_C */
-#if defined(MBEDTLS_GCM_C)
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CCM */
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_GCM)
         mbedtls_gcm_context gcm;
-#endif /* MBEDTLS_GCM_C */
-#if defined(MBEDTLS_CHACHAPOLY_C)
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_GCM */
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305)
         mbedtls_chachapoly_context chachapoly;
-#endif /* MBEDTLS_CHACHAPOLY_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305 */
     } ctx;
     psa_algorithm_t core_alg;
     uint8_t full_tag_length;
@@ -3913,16 +3913,16 @@
 {
     switch( operation->core_alg )
     {
-#if defined(MBEDTLS_CCM_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CCM)
         case PSA_ALG_CCM:
             mbedtls_ccm_free( &operation->ctx.ccm );
             break;
-#endif /* MBEDTLS_CCM_C */
-#if defined(MBEDTLS_GCM_C)
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CCM */
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_GCM)
         case PSA_ALG_GCM:
             mbedtls_gcm_free( &operation->ctx.gcm );
             break;
-#endif /* MBEDTLS_GCM_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_GCM */
     }
 
     psa_unlock_key_slot( operation->slot );
@@ -3955,7 +3955,7 @@
 
     switch( PSA_ALG_AEAD_WITH_SHORTENED_TAG( alg, 0 ) )
     {
-#if defined(MBEDTLS_CCM_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CCM)
         case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CCM, 0 ):
             operation->core_alg = PSA_ALG_CCM;
             operation->full_tag_length = 16;
@@ -3975,9 +3975,9 @@
             if( status != 0 )
                 goto cleanup;
             break;
-#endif /* MBEDTLS_CCM_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CCM */
 
-#if defined(MBEDTLS_GCM_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_GCM)
         case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_GCM, 0 ):
             operation->core_alg = PSA_ALG_GCM;
             operation->full_tag_length = 16;
@@ -3997,9 +3997,9 @@
             if( status != 0 )
                 goto cleanup;
             break;
-#endif /* MBEDTLS_GCM_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_GCM */
 
-#if defined(MBEDTLS_CHACHAPOLY_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305)
         case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CHACHA20_POLY1305, 0 ):
             operation->core_alg = PSA_ALG_CHACHA20_POLY1305;
             operation->full_tag_length = 16;
@@ -4016,7 +4016,7 @@
             if( status != 0 )
                 goto cleanup;
             break;
-#endif /* MBEDTLS_CHACHAPOLY_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305 */
 
         default:
             status = PSA_ERROR_NOT_SUPPORTED;
@@ -4068,7 +4068,7 @@
     }
     tag = ciphertext + plaintext_length;
 
-#if defined(MBEDTLS_GCM_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_GCM)
     if( operation.core_alg == PSA_ALG_GCM )
     {
         status = mbedtls_to_psa_error(
@@ -4081,8 +4081,8 @@
                                        operation.tag_length, tag ) );
     }
     else
-#endif /* MBEDTLS_GCM_C */
-#if defined(MBEDTLS_CCM_C)
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_GCM */
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CCM)
     if( operation.core_alg == PSA_ALG_CCM )
     {
         status = mbedtls_to_psa_error(
@@ -4095,8 +4095,8 @@
                                          tag, operation.tag_length ) );
     }
     else
-#endif /* MBEDTLS_CCM_C */
-#if defined(MBEDTLS_CHACHAPOLY_C)
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CCM */
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305)
     if( operation.core_alg == PSA_ALG_CHACHA20_POLY1305 )
     {
         if( nonce_length != 12 || operation.tag_length != 16 )
@@ -4115,7 +4115,7 @@
                                                 tag ) );
     }
     else
-#endif /* MBEDTLS_CHACHAPOLY_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305 */
     {
         (void) tag;
         return( PSA_ERROR_NOT_SUPPORTED );
@@ -4180,7 +4180,7 @@
     if( status != PSA_SUCCESS )
         goto exit;
 
-#if defined(MBEDTLS_GCM_C)
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_GCM)
     if( operation.core_alg == PSA_ALG_GCM )
     {
         status = mbedtls_to_psa_error(
@@ -4193,8 +4193,8 @@
                                       ciphertext, plaintext ) );
     }
     else
-#endif /* MBEDTLS_GCM_C */
-#if defined(MBEDTLS_CCM_C)
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_GCM */
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CCM)
     if( operation.core_alg == PSA_ALG_CCM )
     {
         status = mbedtls_to_psa_error(
@@ -4207,8 +4207,8 @@
                                       tag, operation.tag_length ) );
     }
     else
-#endif /* MBEDTLS_CCM_C */
-#if defined(MBEDTLS_CHACHAPOLY_C)
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CCM */
+#if defined(MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305)
     if( operation.core_alg == PSA_ALG_CHACHA20_POLY1305 )
     {
         if( nonce_length != 12 || operation.tag_length != 16 )
@@ -4227,7 +4227,7 @@
                                              plaintext ) );
     }
     else
-#endif /* MBEDTLS_CHACHAPOLY_C */
+#endif /* MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305 */
     {
         return( PSA_ERROR_NOT_SUPPORTED );
     }