diff --git a/programs/ssl/ssl_client2.c b/programs/ssl/ssl_client2.c
index af41e38..48a9d4c 100644
--- a/programs/ssl/ssl_client2.c
+++ b/programs/ssl/ssl_client2.c
@@ -757,10 +757,7 @@
 #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C)
     unsigned char alloc_buf[MEMORY_HEAP_SIZE];
 #endif
-
-#if defined(MBEDTLS_ECP_LIGHT)
     uint16_t group_list[CURVE_LIST_SIZE];
-#endif
 #if defined(MBEDTLS_SSL_DTLS_SRTP)
     unsigned char mki[MBEDTLS_TLS_SRTP_MAX_MKI_LENGTH];
     size_t mki_len = 0;
@@ -1494,16 +1491,11 @@
     }
 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
 
-#if defined(MBEDTLS_ECP_LIGHT) || \
-    (defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED) && \
-    defined(PSA_WANT_ALG_FFDH))
     if (opt.curves != NULL) {
         if (parse_curves(opt.curves, group_list, CURVE_LIST_SIZE) != 0) {
             goto exit;
         }
     }
-#endif /* MBEDTLS_ECP_LIGHT ||
-          (MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED && PSA_WANT_ALG_FFDH) */
 
 #if defined(MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED)
     if (opt.sig_algs != NULL) {
diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c
index 715fe0c..9ccaebb 100644
--- a/programs/ssl/ssl_server2.c
+++ b/programs/ssl/ssl_server2.c
@@ -1522,9 +1522,7 @@
 #if defined(SNI_OPTION)
     sni_entry *sni_info = NULL;
 #endif
-#if defined(MBEDTLS_ECP_LIGHT)
     uint16_t group_list[CURVE_LIST_SIZE];
-#endif
 #if defined(MBEDTLS_SSL_ALPN)
     const char *alpn_list[ALPN_LIST_SIZE];
 #endif
@@ -2388,16 +2386,11 @@
     }
 #endif /* MBEDTLS_SSL_HANDSHAKE_WITH_PSK_ENABLED */
 
-#if defined(MBEDTLS_ECP_LIGHT) || \
-    (defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED) && \
-    defined(PSA_WANT_ALG_FFDH))
     if (opt.curves != NULL) {
         if (parse_curves(opt.curves, group_list, CURVE_LIST_SIZE) != 0) {
             goto exit;
         }
     }
-#endif /* MBEDTLS_ECP_LIGHT ||
-          (MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED && PSA_WANT_ALG_FFDH) */
 
 #if defined(MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED)
     if (opt.sig_algs != NULL) {
diff --git a/programs/ssl/ssl_test_lib.c b/programs/ssl/ssl_test_lib.c
index 077df2e..fdb6a52 100644
--- a/programs/ssl/ssl_test_lib.c
+++ b/programs/ssl/ssl_test_lib.c
@@ -449,7 +449,9 @@
 
 #endif /* MBEDTLS_TEST_HOOKS */
 
-uint16_t mbedtls_ssl_ffdh_group_from_name(const char *name)
+#if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED) && \
+    defined(PSA_WANT_ALG_FFDH)
+static uint16_t mbedtls_ssl_ffdh_group_from_name(const char *name)
 {
     if (strcmp(name, MBEDTLS_SSL_IANA_TLS_GROUP_NAME_FFDHE2048) == 0) {
         return MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE2048;
@@ -465,8 +467,9 @@
     return 0;
 }
 
-const uint16_t *mbedtls_ssl_ffdh_supported_groups(void)
+static const uint16_t *mbedtls_ssl_ffdh_supported_groups(void)
 {
+#if defined(PSA_WANT_ALG_FFDH)
     static const uint16_t ffdh_groups[] = {
         MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE2048,
         MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE3072,
@@ -475,19 +478,18 @@
         MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE8192,
         0
     };
-
     return ffdh_groups;
+#else
+    return NULL;
+#endif
 }
+#endif /* MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED && PSA_WANT_ALG_FFDH */
 
-#if defined(MBEDTLS_ECP_LIGHT) || \
-    (defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED) && \
-    defined(PSA_WANT_ALG_FFDH))
 int parse_curves(const char *curves, uint16_t *group_list, size_t group_list_len)
 {
     char *p = (char *) curves;
     char *q = NULL;
     size_t i = 0;
-    const mbedtls_ecp_curve_info *curve_cur = NULL;
 
     if (strcmp(p, "none") == 0) {
         group_list[0] = 0;
@@ -495,8 +497,13 @@
         /* Leave room for a final NULL in curve list */
         while (i < group_list_len - 1 && *p != '\0') {
             q = p;
+#if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED) && \
+    defined(PSA_WANT_ALG_FFDH)
             uint16_t ffdh_group = 0;
-
+#endif
+#if defined(MBEDTLS_ECP_LIGHT)
+            const mbedtls_ecp_curve_info *curve_cur = NULL;
+#endif
             /* Terminate the current string */
             while (*p != ',' && *p != '\0') {
                 p++;
@@ -505,24 +512,36 @@
                 *p++ = '\0';
             }
 
+#if defined(MBEDTLS_ECP_LIGHT)
             if ((curve_cur = mbedtls_ecp_curve_info_from_name(q)) != NULL) {
                 group_list[i++] = curve_cur->tls_id;
-            } else if ((ffdh_group = mbedtls_ssl_ffdh_group_from_name(q)) != 0) {
+            } else
+#endif
+#if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED) && \
+    defined(PSA_WANT_ALG_FFDH)
+            if ((ffdh_group = mbedtls_ssl_ffdh_group_from_name(q)) != 0) {
                 group_list[i++] = ffdh_group;
-            } else {
+            } else
+#endif
+            {
                 mbedtls_printf("unknown curve %s\n", q);
+#if defined(MBEDTLS_ECP_LIGHT)
                 mbedtls_printf("supported curves: ");
                 for (curve_cur = mbedtls_ecp_curve_list();
                      curve_cur->grp_id != MBEDTLS_ECP_DP_NONE;
                      curve_cur++) {
                     mbedtls_printf("%s ", curve_cur->name);
                 }
+#endif
+#if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED) && \
+    defined(PSA_WANT_ALG_FFDH)
                 const uint16_t *supported_ffdh_group = mbedtls_ssl_ffdh_supported_groups();
                 while (*supported_ffdh_group != 0) {
                     mbedtls_printf("%s ",
                                    mbedtls_ssl_ffdh_name_from_group(*supported_ffdh_group));
                     supported_ffdh_group++;
                 }
+#endif
                 mbedtls_printf("\n");
                 return -1;
             }
@@ -541,7 +560,5 @@
 
     return 0;
 }
-#endif /* MBEDTLS_ECP_LIGHT ||
-          (MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED && PSA_WANT_ALG_FFDH) */
 
 #endif /* !defined(MBEDTLS_SSL_TEST_IMPOSSIBLE) */
diff --git a/programs/ssl/ssl_test_lib.h b/programs/ssl/ssl_test_lib.h
index eb29dc7..cf76992 100644
--- a/programs/ssl/ssl_test_lib.h
+++ b/programs/ssl/ssl_test_lib.h
@@ -312,13 +312,7 @@
 #endif /* !MBEDTLS_TEST_HOOKS */
 
 /* Helper functions for FFDH groups. */
-uint16_t mbedtls_ssl_ffdh_group_from_name(const char *name);
-const uint16_t *mbedtls_ssl_ffdh_supported_groups(void);
-#if defined(MBEDTLS_ECP_LIGHT) || \
-    (defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED) && \
-    defined(PSA_WANT_ALG_FFDH))
 int parse_curves(const char *curves, uint16_t *group_list, size_t group_list_len);
-#endif
 
 #endif /* MBEDTLS_SSL_TEST_IMPOSSIBLE conditions: else */
 #endif /* MBEDTLS_PROGRAMS_SSL_SSL_TEST_LIB_H */
