diff --git a/t/cli.c b/t/cli.c
index dc52bae..27777d8 100644
--- a/t/cli.c
+++ b/t/cli.c
@@ -548,32 +548,18 @@
                 /* disable use of key exchanges entirely */
                 ctx.key_exchanges = NULL;
             } else {
-                ptls_key_exchange_algorithm_t *algo = NULL;
-#define MATCH(name)                                                                                                                \
-    if (algo == NULL && strcasecmp(optarg, #name) == 0)                                                                            \
-    algo = (&ptls_openssl_##name)
-                MATCH(secp256r1);
-#if PTLS_OPENSSL_HAVE_SECP384R1
-                MATCH(secp384r1);
-#endif
-#if PTLS_OPENSSL_HAVE_SECP521R1
-                MATCH(secp521r1);
-#endif
-#if PTLS_OPENSSL_HAVE_X25519
-                MATCH(x25519);
-#endif
-#if PTLS_OPENSSL_HAVE_X25519MLKEM768
-                MATCH(x25519mlkem768);
-#endif
-#undef MATCH
-                if (algo == NULL) {
+                ptls_key_exchange_algorithm_t **named;
+                for (named = ptls_openssl_key_exchanges_all; *named != NULL; ++named)
+                    if (strcasecmp((*named)->name, optarg) == 0)
+                        break;
+                if (*named == NULL) {
                     fprintf(stderr, "could not find key exchange: %s\n", optarg);
                     return 1;
                 }
                 size_t i;
                 for (i = 0; key_exchanges[i] != NULL; ++i)
                     ;
-                key_exchanges[i++] = algo;
+                key_exchanges[i++] = *named;
             }
             break;
         case 'u':
