diff --git a/include/psa/crypto_builtin_hash.h b/include/psa/crypto_builtin_hash.h
index 0f42fdc..87e9711 100644
--- a/include/psa/crypto_builtin_hash.h
+++ b/include/psa/crypto_builtin_hash.h
@@ -43,6 +43,18 @@
 #define MBEDTLS_PSA_BUILTIN_HASH
 #endif
 
+#if defined(MBEDTLS_PSA_ACCEL_ALG_MD2) || \
+    defined(MBEDTLS_PSA_ACCEL_ALG_MD4) || \
+    defined(MBEDTLS_PSA_ACCEL_ALG_MD5) || \
+    defined(MBEDTLS_PSA_ACCEL_ALG_RIPEMD160) || \
+    defined(MBEDTLS_PSA_ACCEL_ALG_SHA_1) || \
+    defined(MBEDTLS_PSA_ACCEL_ALG_SHA_224) || \
+    defined(MBEDTLS_PSA_ACCEL_ALG_SHA_256) || \
+    defined(MBEDTLS_PSA_ACCEL_ALG_SHA_384) || \
+    defined(MBEDTLS_PSA_ACCEL_ALG_SHA_512)
+#define MBEDTLS_PSA_ACCEL_HASH
+#endif
+
 typedef struct
 {
     psa_algorithm_t alg;
diff --git a/library/psa_crypto_driver_wrappers.c b/library/psa_crypto_driver_wrappers.c
index 457738f..bf82991 100644
--- a/library/psa_crypto_driver_wrappers.c
+++ b/library/psa_crypto_driver_wrappers.c
@@ -1085,7 +1085,7 @@
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
     /* Try accelerators first */
-#if defined(PSA_CRYPTO_DRIVER_TEST)
+#if defined(PSA_CRYPTO_DRIVER_TEST) && defined(MBEDTLS_PSA_ACCEL_HASH)
     status = mbedtls_transparent_test_driver_hash_compute( alg, input, input_length,
                                             hash, hash_size, hash_length );
     if( status != PSA_ERROR_NOT_SUPPORTED )
@@ -1117,7 +1117,7 @@
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
     /* Try setup on accelerators first */
-#if defined(PSA_CRYPTO_DRIVER_TEST)
+#if defined(PSA_CRYPTO_DRIVER_TEST) && defined(MBEDTLS_PSA_ACCEL_HASH)
     status = mbedtls_transparent_test_driver_hash_setup( &operation->ctx.test_ctx, alg );
     if( status == PSA_SUCCESS )
         operation->id = PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID;
@@ -1148,7 +1148,7 @@
 {
     switch( source_operation->id )
     {
-#if defined(PSA_CRYPTO_DRIVER_TEST)
+#if defined(PSA_CRYPTO_DRIVER_TEST) && defined(MBEDTLS_PSA_ACCEL_HASH)
         case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
             target_operation->id = PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID;
             return( mbedtls_transparent_test_driver_hash_clone( &source_operation->ctx.test_ctx,
@@ -1174,7 +1174,7 @@
 {
     switch( operation->id )
     {
-#if defined(PSA_CRYPTO_DRIVER_TEST)
+#if defined(PSA_CRYPTO_DRIVER_TEST) && defined(MBEDTLS_PSA_ACCEL_HASH)
         case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
             return( mbedtls_transparent_test_driver_hash_update( &operation->ctx.test_ctx,
                                                   input, input_length ) );
@@ -1200,7 +1200,7 @@
 {
     switch( operation->id )
     {
-#if defined(PSA_CRYPTO_DRIVER_TEST)
+#if defined(PSA_CRYPTO_DRIVER_TEST) && defined(MBEDTLS_PSA_ACCEL_HASH)
         case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
             return( mbedtls_transparent_test_driver_hash_finish( &operation->ctx.test_ctx,
                                                   hash, hash_size, hash_length ) );
@@ -1225,7 +1225,7 @@
 {
     switch( operation->id )
     {
-#if defined(PSA_CRYPTO_DRIVER_TEST)
+#if defined(PSA_CRYPTO_DRIVER_TEST) && defined(MBEDTLS_PSA_ACCEL_HASH)
         case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
             return( mbedtls_transparent_test_driver_hash_abort( &operation->ctx.test_ctx ) );
 #endif
diff --git a/library/psa_crypto_hash.c b/library/psa_crypto_hash.c
index e622e0d..4d1afc2 100644
--- a/library/psa_crypto_hash.c
+++ b/library/psa_crypto_hash.c
@@ -72,15 +72,7 @@
  * transparent test driver, then the mbedtls_transparent_test_driver_hash_*
  * entry points need to be implemented.  */
 #if defined(PSA_CRYPTO_DRIVER_TEST) && \
-    ( defined(MBEDTLS_PSA_ACCEL_ALG_MD2) || \
-      defined(MBEDTLS_PSA_ACCEL_ALG_MD4) || \
-      defined(MBEDTLS_PSA_ACCEL_ALG_MD5) || \
-      defined(MBEDTLS_PSA_ACCEL_ALG_RIPEMD160) || \
-      defined(MBEDTLS_PSA_ACCEL_ALG_SHA_1) || \
-      defined(MBEDTLS_PSA_ACCEL_ALG_SHA_224) || \
-      defined(MBEDTLS_PSA_ACCEL_ALG_SHA_256) || \
-      defined(MBEDTLS_PSA_ACCEL_ALG_SHA_384) || \
-      defined(MBEDTLS_PSA_ACCEL_ALG_SHA_512) )
+    defined(MBEDTLS_PSA_ACCEL_HASH)
 #define INCLUDE_HASH_TEST_DRIVER
 #endif
 
@@ -558,9 +550,8 @@
  /*
   * BEYOND THIS POINT, TEST DRIVER ENTRY POINTS ONLY.
   */
-#if defined(PSA_CRYPTO_DRIVER_TEST)
-
 #if defined(INCLUDE_HASH_TEST_DRIVER)
+
 psa_status_t is_hash_accelerated( psa_algorithm_t alg )
 {
     switch( alg )
@@ -605,7 +596,6 @@
             return( PSA_ERROR_NOT_SUPPORTED );
     }
 }
-#endif /* INCLUDE_HASH_TEST_DRIVER */
 
 psa_status_t mbedtls_transparent_test_driver_hash_compute(
     psa_algorithm_t alg,
@@ -615,54 +605,32 @@
     size_t hash_size,
     size_t *hash_length)
 {
-#if defined(INCLUDE_HASH_TEST_DRIVER)
     if( is_hash_accelerated( alg ) == PSA_SUCCESS )
         return( hash_compute( alg, input, input_length,
                               hash, hash_size, hash_length ) );
     else
         return( PSA_ERROR_NOT_SUPPORTED );
-#else
-    (void) alg;
-    (void) input;
-    (void) input_length;
-    (void) hash;
-    (void) hash_size;
-    (void) hash_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
-#endif
 }
 
 psa_status_t mbedtls_transparent_test_driver_hash_setup(
     mbedtls_transparent_test_driver_hash_operation_t *operation,
     psa_algorithm_t alg )
 {
-#if defined(INCLUDE_HASH_TEST_DRIVER)
     if( is_hash_accelerated( alg ) == PSA_SUCCESS )
         return( hash_setup( &operation->operation, alg ) );
     else
         return( PSA_ERROR_NOT_SUPPORTED );
-#else
-    (void) alg;
-    (void) operation;
-    return( PSA_ERROR_NOT_SUPPORTED );
-#endif
 }
 
 psa_status_t mbedtls_transparent_test_driver_hash_clone(
     const mbedtls_transparent_test_driver_hash_operation_t *source_operation,
     mbedtls_transparent_test_driver_hash_operation_t *target_operation )
 {
-#if defined(INCLUDE_HASH_TEST_DRIVER)
     if( is_hash_accelerated( source_operation->operation.alg ) == PSA_SUCCESS )
         return( hash_clone( &source_operation->operation,
                             &target_operation->operation ) );
     else
         return( PSA_ERROR_BAD_STATE );
-#else
-    (void) source_operation;
-    (void) target_operation;
-    return( PSA_ERROR_NOT_SUPPORTED );
-#endif
 }
 
 psa_status_t mbedtls_transparent_test_driver_hash_update(
@@ -670,18 +638,11 @@
     const uint8_t *input,
     size_t input_length )
 {
-#if defined(INCLUDE_HASH_TEST_DRIVER)
     if( is_hash_accelerated( operation->operation.alg ) == PSA_SUCCESS )
         return( hash_update( &operation->operation,
                              input, input_length ) );
     else
         return( PSA_ERROR_BAD_STATE );
-#else
-    (void) operation;
-    (void) input;
-    (void) input_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
-#endif
 }
 
 psa_status_t mbedtls_transparent_test_driver_hash_finish(
@@ -690,32 +651,19 @@
     size_t hash_size,
     size_t *hash_length )
 {
-#if defined(INCLUDE_HASH_TEST_DRIVER)
     if( is_hash_accelerated( operation->operation.alg ) == PSA_SUCCESS )
         return( hash_finish( &operation->operation,
                              hash, hash_size, hash_length ) );
     else
         return( PSA_ERROR_BAD_STATE );
-#else
-    (void) operation;
-    (void) hash;
-    (void) hash_size;
-    (void) hash_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
-#endif
 }
 
 psa_status_t mbedtls_transparent_test_driver_hash_abort(
     mbedtls_transparent_test_driver_hash_operation_t *operation )
 {
-#if defined(INCLUDE_HASH_TEST_DRIVER)
     return( hash_abort( &operation->operation ) );
-#else
-    (void) operation;
-    return( PSA_ERROR_NOT_SUPPORTED );
-#endif
 }
 
-#endif /* PSA_CRYPTO_DRIVER_TEST */
+#endif /* INCLUDE_HASH_TEST_DRIVER */
 
 #endif /* MBEDTLS_PSA_CRYPTO_C */
