diff --git a/tests/scripts/generate_psa_tests.py b/tests/scripts/generate_psa_tests.py
index c549fc3..851fe66 100755
--- a/tests/scripts/generate_psa_tests.py
+++ b/tests/scripts/generate_psa_tests.py
@@ -115,28 +115,33 @@
                for dep in dependencies):
         dependencies.append('DEPENDENCY_NOT_IMPLEMENTED_YET')
 
-# PSA_WANT_KEY_TYPE_xxx_KEY_PAIR symbols have a GENERATE suffix to state that
-# they support key generation.
-def fix_key_pair_dependencies(dep_list: List[str], usage: str):
+# This helper function add the proper suffix to PSA_WANT_KEY_TYPE_xxx_KEY_PAIR
+# symbols according to the required usage.
+def tweak_key_pair_dependency(dep: str, usage: str):
+    ret_list = list()
     # Note: this LEGACY replacement for RSA is temporary and it's going to be
     # aligned with ECC one in #7772.
-    new_list = [re.sub(r'RSA_KEY_PAIR\Z', r'RSA_KEY_PAIR_LEGACY', dep)
-                for dep in dep_list]
-    new_list = [re.sub(r'ECC_KEY_PAIR\Z', r'ECC_KEY_PAIR_' + usage, dep)
-                for dep in new_list]
-    # BASIC automatically includes IMPORT and EXPORT for test purposes (see
-    # config_psa.h).
-    if any([re.match(r'[!]?\w+ECC_KEY_PAIR_BASIC', dep) for dep in new_list]):
-        match_pattern = next((dep for dep in new_list
-                             if re.match(r'([!]?\w+ECC_KEY_PAIR_BASIC)', dep) is not None), None)
-        new_list.append(re.sub(r'ECC_KEY_PAIR_BASIC', r'ECC_KEY_PAIR_IMPORT', match_pattern))
-        new_list.append(re.sub(r'ECC_KEY_PAIR_BASIC', r'ECC_KEY_PAIR_EXPORT', match_pattern))
-        #if any([re.match(r'!\w+ECC_KEY_PAIR_BASIC\w+', dep) for dep in new_list]):
-        #    new_list.append('!PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT')
-        #    new_list.append('!PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT')
-        #elif any([re.match(r'\w+ECC_KEY_PAIR\w+', dep) for dep in new_list]):
-        #    new_list.append('PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT')
-        #    new_list.append('PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT')
+    if dep.endswith('RSA_KEY_PAIR'):
+        ret_list.append(re.sub(r'RSA_KEY_PAIR\Z', r'RSA_KEY_PAIR_LEGACY', dep))
+    elif dep.endswith('ECC_KEY_PAIR'):
+        if usage == "BASIC":
+            # BASIC automatically includes IMPORT and EXPORT for test purposes (see
+            # config_psa.h).
+            ret_list.append(re.sub(r'ECC_KEY_PAIR', r'ECC_KEY_PAIR_BASIC', dep))
+            ret_list.append(re.sub(r'ECC_KEY_PAIR', r'ECC_KEY_PAIR_IMPORT', dep))
+            ret_list.append(re.sub(r'ECC_KEY_PAIR', r'ECC_KEY_PAIR_EXPORT', dep))
+        elif usage == "GENERATE":
+            ret_list.append(re.sub(r'ECC_KEY_PAIR', r'ECC_KEY_PAIR_GENERATE', dep))
+    else:
+        # No replacement to do in this case
+        ret_list.append(dep)
+    return ret_list
+
+def fix_key_pair_dependencies(dep_list: List[str], usage: str):
+    new_list = [new_deps
+                for dep in dep_list
+                for new_deps in tweak_key_pair_dependency(dep, usage)]
+
     return new_list
 
 class Information:
