diff --git a/apps/dhparam.c b/apps/dhparam.c
index 30fdfbb..d3f96e6 100644
--- a/apps/dhparam.c
+++ b/apps/dhparam.c
@@ -254,14 +254,14 @@
             * We check that we got one of those key types afterwards.
             */
             decoderctx
-                = OSSL_DECODER_CTX_new_by_EVP_PKEY(&tmppkey,
-                                                    (informat == FORMAT_ASN1)
+                = OSSL_DECODER_CTX_new_for_pkey(&tmppkey,
+                                                (informat == FORMAT_ASN1)
                                                     ? "DER" : "PEM",
-                                                    NULL,
-                                                    (informat == FORMAT_ASN1)
+                                                NULL,
+                                                (informat == FORMAT_ASN1)
                                                     ? keytype : NULL,
-                                                    OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
-                                                    NULL, NULL);
+                                                OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+                                                NULL, NULL);
 
             if (decoderctx != NULL
                     && !OSSL_DECODER_from_bio(decoderctx, in)
@@ -328,11 +328,11 @@
 
     if (!noout) {
         OSSL_ENCODER_CTX *ectx =
-            OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey,
-                                             OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
-                                             outformat == FORMAT_ASN1
-                                             ? "DER" : "PEM",
-                                             NULL, NULL);
+            OSSL_ENCODER_CTX_new_for_pkey(pkey,
+                                          OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+                                          outformat == FORMAT_ASN1
+                                              ? "DER" : "PEM",
+                                          NULL, NULL);
 
         if (ectx == NULL || !OSSL_ENCODER_to_bio(ectx, out)) {
             OSSL_ENCODER_CTX_free(ectx);
diff --git a/apps/dsa.c b/apps/dsa.c
index c4baaf7..523dab8 100644
--- a/apps/dsa.c
+++ b/apps/dsa.c
@@ -260,8 +260,8 @@
     }
 
     /* Perform the encoding */
-    ectx = OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, selection, output_type,
-                                            output_structure, NULL);
+    ectx = OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, output_type,
+                                         output_structure, NULL);
     if (OSSL_ENCODER_CTX_get_num_encoders(ectx) == 0) {
         BIO_printf(bio_err, "%s format not supported\n", output_type);
         goto end;
diff --git a/apps/ec.c b/apps/ec.c
index d89c580..490a641 100644
--- a/apps/ec.c
+++ b/apps/ec.c
@@ -256,9 +256,9 @@
             assert(private);
         }
 
-        ectx = OSSL_ENCODER_CTX_new_by_EVP_PKEY(eckey, selection,
-                                                output_type, output_structure,
-                                                NULL);
+        ectx = OSSL_ENCODER_CTX_new_for_pkey(eckey, selection,
+                                             output_type, output_structure,
+                                             NULL);
         if (enc != NULL) {
             OSSL_ENCODER_CTX_set_cipher(ectx, EVP_CIPHER_name(enc), NULL);
             if (passout != NULL)
diff --git a/apps/ecparam.c b/apps/ecparam.c
index e05a3a4..fc19ab6 100644
--- a/apps/ecparam.c
+++ b/apps/ecparam.c
@@ -292,7 +292,7 @@
         noout = 1;
 
     if (!noout) {
-        ectx_params = OSSL_ENCODER_CTX_new_by_EVP_PKEY(
+        ectx_params = OSSL_ENCODER_CTX_new_for_pkey(
                           params_key, OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
                           outformat == FORMAT_ASN1 ? "DER" : "PEM", NULL, NULL);
         if (!OSSL_ENCODER_to_bio(ectx_params, out)) {
@@ -317,7 +317,7 @@
             goto end;
         }
         assert(private);
-        ectx_key = OSSL_ENCODER_CTX_new_by_EVP_PKEY(
+        ectx_key = OSSL_ENCODER_CTX_new_for_pkey(
                        key, OSSL_KEYMGMT_SELECT_ALL,
                        outformat == FORMAT_ASN1 ? "DER" : "PEM", NULL, NULL);
         if (!OSSL_ENCODER_to_bio(ectx_key, out)) {
diff --git a/apps/rsa.c b/apps/rsa.c
index 1a75681..8658f58 100644
--- a/apps/rsa.c
+++ b/apps/rsa.c
@@ -334,9 +334,9 @@
     }
 
     /* Now, perform the encoding */
-    ectx = OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, selection,
-                                            output_type, output_structure,
-                                            NULL);
+    ectx = OSSL_ENCODER_CTX_new_for_pkey(pkey, selection,
+                                         output_type, output_structure,
+                                         NULL);
     if (OSSL_ENCODER_CTX_get_num_encoders(ectx) == 0) {
         BIO_printf(bio_err, "%s format not supported\n", output_type);
         goto end;
diff --git a/crypto/asn1/i2d_evp.c b/crypto/asn1/i2d_evp.c
index 599c512..515a81d 100644
--- a/crypto/asn1/i2d_evp.c
+++ b/crypto/asn1/i2d_evp.c
@@ -42,8 +42,8 @@
          */
         size_t len = INT_MAX;
 
-        ctx = OSSL_ENCODER_CTX_new_by_EVP_PKEY(a, selection, "DER",
-                                               *output_structures, NULL);
+        ctx = OSSL_ENCODER_CTX_new_for_pkey(a, selection, "DER",
+                                            *output_structures, NULL);
         if (ctx == NULL)
             return -1;
         if (OSSL_ENCODER_to_data(ctx, pp, &len))
diff --git a/crypto/cms/cms_ec.c b/crypto/cms/cms_ec.c
index 8ae912c..79b96f5 100644
--- a/crypto/cms/cms_ec.c
+++ b/crypto/cms/cms_ec.c
@@ -27,8 +27,8 @@
         OSSL_DECODER_CTX *ctx = NULL;
         int selection = OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
 
-        ctx = OSSL_DECODER_CTX_new_by_EVP_PKEY(&pkey, "DER", NULL, "EC",
-                                               selection, libctx, propq);
+        ctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, "EC",
+                                            selection, libctx, propq);
         if (ctx == NULL)
             goto err;
 
diff --git a/crypto/encode_decode/decoder_pkey.c b/crypto/encode_decode/decoder_pkey.c
index c515cb6..3a97afb 100644
--- a/crypto/encode_decode/decoder_pkey.c
+++ b/crypto/encode_decode/decoder_pkey.c
@@ -48,13 +48,13 @@
 }
 
 /*
- * Support for OSSL_DECODER_CTX_new_by_EVP_PKEY:
+ * Support for OSSL_DECODER_CTX_new_for_pkey:
  * The construct data, and collecting keymgmt information for it
  */
 
 DEFINE_STACK_OF(EVP_KEYMGMT)
 
-struct decoder_EVP_PKEY_data_st {
+struct decoder_pkey_data_st {
     OSSL_LIB_CTX *libctx;
     char *propq;
 
@@ -62,11 +62,11 @@
     void **object;               /* Where the result should end up */
 };
 
-static int decoder_construct_EVP_PKEY(OSSL_DECODER_INSTANCE *decoder_inst,
-                                      const OSSL_PARAM *params,
-                                      void *construct_data)
+static int decoder_construct_pkey(OSSL_DECODER_INSTANCE *decoder_inst,
+                                  const OSSL_PARAM *params,
+                                  void *construct_data)
 {
-    struct decoder_EVP_PKEY_data_st *data = construct_data;
+    struct decoder_pkey_data_st *data = construct_data;
     OSSL_DECODER *decoder = OSSL_DECODER_INSTANCE_get_decoder(decoder_inst);
     void *decoderctx = OSSL_DECODER_INSTANCE_get_decoder_ctx(decoder_inst);
     EVP_KEYMGMT *keymgmt = NULL;
@@ -159,9 +159,9 @@
     return (*data->object != NULL);
 }
 
-static void decoder_clean_EVP_PKEY_construct_arg(void *construct_data)
+static void decoder_clean_pkey_construct_arg(void *construct_data)
 {
-    struct decoder_EVP_PKEY_data_st *data = construct_data;
+    struct decoder_pkey_data_st *data = construct_data;
 
     if (data != NULL) {
         OPENSSL_free(data->propq);
@@ -269,12 +269,12 @@
     data->error_occured = 0;         /* All is good now */
 }
 
-int ossl_decoder_ctx_setup_for_EVP_PKEY(OSSL_DECODER_CTX *ctx,
-                                        EVP_PKEY **pkey, const char *keytype,
-                                        OSSL_LIB_CTX *libctx,
-                                        const char *propquery)
+int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx,
+                                    EVP_PKEY **pkey, const char *keytype,
+                                    OSSL_LIB_CTX *libctx,
+                                    const char *propquery)
 {
-    struct decoder_EVP_PKEY_data_st *process_data = NULL;
+    struct decoder_pkey_data_st *process_data = NULL;
     STACK_OF(EVP_KEYMGMT) *keymgmts = NULL;
     STACK_OF(OPENSSL_CSTRING) *names = NULL;
     int ok = 0;
@@ -327,10 +327,10 @@
     }
 
     if (OSSL_DECODER_CTX_get_num_decoders(ctx) != 0) {
-        if (!OSSL_DECODER_CTX_set_construct(ctx, decoder_construct_EVP_PKEY)
+        if (!OSSL_DECODER_CTX_set_construct(ctx, decoder_construct_pkey)
             || !OSSL_DECODER_CTX_set_construct_data(ctx, process_data)
             || !OSSL_DECODER_CTX_set_cleanup(ctx,
-                                             decoder_clean_EVP_PKEY_construct_arg))
+                                             decoder_clean_pkey_construct_arg))
             goto err;
 
         process_data = NULL; /* Avoid it being freed */
@@ -338,16 +338,16 @@
 
     ok = 1;
  err:
-    decoder_clean_EVP_PKEY_construct_arg(process_data);
+    decoder_clean_pkey_construct_arg(process_data);
     return ok;
 }
 
 OSSL_DECODER_CTX *
-OSSL_DECODER_CTX_new_by_EVP_PKEY(EVP_PKEY **pkey,
-                                 const char *input_type,
-                                 const char *input_structure,
-                                 const char *keytype, int selection,
-                                 OSSL_LIB_CTX *libctx, const char *propquery)
+OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey,
+                              const char *input_type,
+                              const char *input_structure,
+                              const char *keytype, int selection,
+                              OSSL_LIB_CTX *libctx, const char *propquery)
 {
     OSSL_DECODER_CTX *ctx = NULL;
 
@@ -367,8 +367,8 @@
     if (OSSL_DECODER_CTX_set_input_type(ctx, input_type)
         && OSSL_DECODER_CTX_set_input_structure(ctx, input_structure)
         && OSSL_DECODER_CTX_set_selection(ctx, selection)
-        && ossl_decoder_ctx_setup_for_EVP_PKEY(ctx, pkey, keytype,
-                                               libctx, propquery)
+        && ossl_decoder_ctx_setup_for_pkey(ctx, pkey, keytype,
+                                           libctx, propquery)
         && OSSL_DECODER_CTX_add_extra(ctx, libctx, propquery)) {
         OSSL_TRACE_BEGIN(DECODER) {
             BIO_printf(trc_out, "(ctx %p) Got %d decoders\n",
diff --git a/crypto/encode_decode/encoder_pkey.c b/crypto/encode_decode/encoder_pkey.c
index e8e1c77..9604ae5 100644
--- a/crypto/encode_decode/encoder_pkey.c
+++ b/crypto/encode_decode/encoder_pkey.c
@@ -67,7 +67,7 @@
 }
 
 /*
- * Support for OSSL_ENCODER_CTX_new_by_TYPE:
+ * Support for OSSL_ENCODER_CTX_new_for_type:
  * finding a suitable encoder
  */
 
@@ -162,7 +162,7 @@
 }
 
 static const void *
-encoder_construct_EVP_PKEY(OSSL_ENCODER_INSTANCE *encoder_inst, void *arg)
+encoder_construct_pkey(OSSL_ENCODER_INSTANCE *encoder_inst, void *arg)
 {
     struct construct_data_st *data = arg;
 
@@ -188,7 +188,7 @@
     return data->obj;
 }
 
-static void encoder_destruct_EVP_PKEY(void *arg)
+static void encoder_destruct_pkey(void *arg)
 {
     struct construct_data_st *data = arg;
 
@@ -202,15 +202,15 @@
 }
 
 /*
- * OSSL_ENCODER_CTX_new_by_EVP_PKEY() returns a ctx with no encoder if
+ * OSSL_ENCODER_CTX_new_for_pkey() returns a ctx with no encoder if
  * it couldn't find a suitable encoder.  This allows a caller to detect if
  * a suitable encoder was found, with OSSL_ENCODER_CTX_get_num_encoder(),
  * and to use fallback methods if the result is NULL.
  */
-static int ossl_encoder_ctx_setup_for_EVP_PKEY(OSSL_ENCODER_CTX *ctx,
-                                               const EVP_PKEY *pkey,
-                                               int selection,
-                                               const char *propquery)
+static int ossl_encoder_ctx_setup_for_pkey(OSSL_ENCODER_CTX *ctx,
+                                           const EVP_PKEY *pkey,
+                                           int selection,
+                                           const char *propquery)
 {
     struct construct_data_st *data = NULL;
     OSSL_LIB_CTX *libctx = NULL;
@@ -262,9 +262,9 @@
     }
 
     if (OSSL_ENCODER_CTX_get_num_encoders(ctx) != 0) {
-        if (!OSSL_ENCODER_CTX_set_construct(ctx, encoder_construct_EVP_PKEY)
+        if (!OSSL_ENCODER_CTX_set_construct(ctx, encoder_construct_pkey)
             || !OSSL_ENCODER_CTX_set_construct_data(ctx, data)
-            || !OSSL_ENCODER_CTX_set_cleanup(ctx, encoder_destruct_EVP_PKEY))
+            || !OSSL_ENCODER_CTX_set_cleanup(ctx, encoder_destruct_pkey))
             goto err;
 
         data->pk = pkey;
@@ -282,11 +282,11 @@
     return ok;
 }
 
-OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_by_EVP_PKEY(const EVP_PKEY *pkey,
-                                                   int selection,
-                                                   const char *output_type,
-                                                   const char *output_struct,
-                                                   const char *propquery)
+OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_for_pkey(const EVP_PKEY *pkey,
+                                                int selection,
+                                                const char *output_type,
+                                                const char *output_struct,
+                                                const char *propquery)
 {
     OSSL_ENCODER_CTX *ctx = NULL;
     OSSL_LIB_CTX *libctx = NULL;
@@ -325,7 +325,7 @@
         && (output_struct == NULL
             || OSSL_ENCODER_CTX_set_output_structure(ctx, output_struct))
         && OSSL_ENCODER_CTX_set_selection(ctx, selection)
-        && ossl_encoder_ctx_setup_for_EVP_PKEY(ctx, pkey, selection, propquery)
+        && ossl_encoder_ctx_setup_for_pkey(ctx, pkey, selection, propquery)
         && OSSL_ENCODER_CTX_add_extra(ctx, libctx, propquery)) {
         OSSL_TRACE_BEGIN(ENCODER) {
             BIO_printf(trc_out, "(ctx %p) Got %d encoders\n",
diff --git a/crypto/evp/evp_pkey.c b/crypto/evp/evp_pkey.c
index dd20a52..87091cf 100644
--- a/crypto/evp/evp_pkey.c
+++ b/crypto/evp/evp_pkey.c
@@ -85,9 +85,9 @@
         size_t derlen = 0;
         const unsigned char *pp;
 
-        if ((ctx = OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, selection,
-                                                    "DER", "pkcs8",
-                                                    NULL)) == NULL
+        if ((ctx = OSSL_ENCODER_CTX_new_for_pkey(pkey, selection,
+                                                 "DER", "pkcs8",
+                                                 NULL)) == NULL
             || !OSSL_ENCODER_to_data(ctx, &der, &derlen))
             goto error;
 
diff --git a/crypto/evp/p_lib.c b/crypto/evp/p_lib.c
index 8cf65d6..e655add 100644
--- a/crypto/evp/p_lib.c
+++ b/crypto/evp/p_lib.c
@@ -1093,8 +1093,8 @@
     if (!print_set_indent(&out, &pop_f_prefix, &saved_indent, indent))
         return 0;
 
-    ctx = OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, selection, "TEXT", NULL,
-                                           propquery);
+    ctx = OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, "TEXT", NULL,
+                                        propquery);
     if (OSSL_ENCODER_CTX_get_num_encoders(ctx) != 0)
         ret = OSSL_ENCODER_to_bio(ctx, out);
     OSSL_ENCODER_CTX_free(ctx);
diff --git a/crypto/pem/pem_all.c b/crypto/pem/pem_all.c
index 8766395..222af64 100644
--- a/crypto/pem/pem_all.c
+++ b/crypto/pem/pem_all.c
@@ -223,4 +223,4 @@
 # endif
 
 #endif
-IMPLEMENT_PEM_provided_write(PUBKEY, EVP_PKEY, PEM_STRING_PUBLIC, PUBKEY)
+IMPLEMENT_PEM_provided_write(PUBKEY, EVP_PKEY, pkey, PEM_STRING_PUBLIC, PUBKEY)
diff --git a/crypto/pem/pem_local.h b/crypto/pem/pem_local.h
index 3f54644..732825c 100644
--- a/crypto/pem/pem_local.h
+++ b/crypto/pem/pem_local.h
@@ -47,7 +47,7 @@
 # define IMPLEMENT_PEM_provided_write_body_vars(type, asn1, pq)         \
     int ret = 0;                                                        \
     OSSL_ENCODER_CTX *ctx =                                             \
-        OSSL_ENCODER_CTX_new_by_##type(x, PEM_SELECTION_##asn1,         \
+        OSSL_ENCODER_CTX_new_for_##type(x, PEM_SELECTION_##asn1,        \
                                        "PEM", PEM_STRUCTURE_##asn1,     \
                                        (pq));                           \
                                                                         \
@@ -98,16 +98,16 @@
     return PEM_ASN1_##writename##((i2d_of_void *)i2d_##asn1, str, out,  \
                                   x, enc, kstr, klen, cb, u)
 
-# define IMPLEMENT_PEM_provided_write_to(name, type, str, asn1,         \
+# define IMPLEMENT_PEM_provided_write_to(name, TYPE, type, str, asn1,   \
                                          OUTTYPE, outtype, writename)   \
-    PEM_write_fnsig(name, type, OUTTYPE, writename)                     \
+    PEM_write_fnsig(name, TYPE, OUTTYPE, writename)                     \
     {                                                                   \
         IMPLEMENT_PEM_provided_write_body_vars(type, asn1, NULL);       \
         IMPLEMENT_PEM_provided_write_body_main(type, outtype);          \
         IMPLEMENT_PEM_provided_write_body_fallback(str, asn1,           \
                                                    writename);          \
     }                                                                   \
-    PEM_write_ex_fnsig(name, type, OUTTYPE, writename)                  \
+    PEM_write_ex_fnsig(name, TYPE, OUTTYPE, writename)                  \
     {                                                                   \
         IMPLEMENT_PEM_provided_write_body_vars(type, asn1, propq);      \
         IMPLEMENT_PEM_provided_write_body_main(type, outtype);          \
@@ -116,9 +116,9 @@
     }
 
 
-# define IMPLEMENT_PEM_provided_write_cb_to(name, type, str, asn1,      \
+# define IMPLEMENT_PEM_provided_write_cb_to(name, TYPE, type, str, asn1, \
                                             OUTTYPE, outtype, writename) \
-    PEM_write_cb_fnsig(name, type, OUTTYPE, writename)                  \
+    PEM_write_cb_fnsig(name, TYPE, OUTTYPE, writename)                  \
     {                                                                   \
         IMPLEMENT_PEM_provided_write_body_vars(type, asn1, NULL);       \
         IMPLEMENT_PEM_provided_write_body_pass();                       \
@@ -126,7 +126,7 @@
         IMPLEMENT_PEM_provided_write_body_fallback_cb(str, asn1,        \
                                                       writename);       \
     }                                                                   \
-    PEM_write_ex_cb_fnsig(name, type, OUTTYPE, writename)               \
+    PEM_write_ex_cb_fnsig(name, TYPE, OUTTYPE, writename)               \
     {                                                                   \
         IMPLEMENT_PEM_provided_write_body_vars(type, asn1, propq);      \
         IMPLEMENT_PEM_provided_write_body_pass();                       \
@@ -137,36 +137,36 @@
 
 # ifdef OPENSSL_NO_STDIO
 
-#  define IMPLEMENT_PEM_provided_write_fp(name, type, str, asn1)
-#  define IMPLEMENT_PEM_provided_write_cb_fp(name, type, str, asn1)
+#  define IMPLEMENT_PEM_provided_write_fp(name, TYPE, type, str, asn1)
+#  define IMPLEMENT_PEM_provided_write_cb_fp(name, TYPE, type, str, asn1)
 
 # else
 
-#  define IMPLEMENT_PEM_provided_write_fp(name, type, str, asn1)        \
-    IMPLEMENT_PEM_provided_write_to(name, type, str, asn1, FILE, fp, write)
-#  define IMPLEMENT_PEM_provided_write_cb_fp(name, type, str, asn1)     \
-    IMPLEMENT_PEM_provided_write_cb_to(name, type, str, asn1, FILE, fp, write)
+#  define IMPLEMENT_PEM_provided_write_fp(name, TYPE, type, str, asn1)    \
+    IMPLEMENT_PEM_provided_write_to(name, TYPE, type, str, asn1, FILE, fp, write)
+#  define IMPLEMENT_PEM_provided_write_cb_fp(name, TYPE, type, str, asn1) \
+    IMPLEMENT_PEM_provided_write_cb_to(name, TYPE, type, str, asn1, FILE, fp, write)
 
 # endif
 
-# define IMPLEMENT_PEM_provided_write_bio(name, type, str, asn1)        \
-    IMPLEMENT_PEM_provided_write_to(name, type, str, asn1, BIO, bio, write_bio)
-# define IMPLEMENT_PEM_provided_write_cb_bio(name, type, str, asn1)     \
-    IMPLEMENT_PEM_provided_write_cb_to(name, type, str, asn1, BIO, bio, write_bio)
+# define IMPLEMENT_PEM_provided_write_bio(name, TYPE, type, str, asn1)    \
+    IMPLEMENT_PEM_provided_write_to(name, TYPE, type, str, asn1, BIO, bio, write_bio)
+# define IMPLEMENT_PEM_provided_write_cb_bio(name, TYPE, type, str, asn1) \
+    IMPLEMENT_PEM_provided_write_cb_to(name, TYPE, type, str, asn1, BIO, bio, write_bio)
 
-# define IMPLEMENT_PEM_provided_write(name, type, str, asn1)    \
-    IMPLEMENT_PEM_provided_write_bio(name, type, str, asn1)     \
-    IMPLEMENT_PEM_provided_write_fp(name, type, str, asn1)
+# define IMPLEMENT_PEM_provided_write(name, TYPE, type, str, asn1)        \
+    IMPLEMENT_PEM_provided_write_bio(name, TYPE, type, str, asn1)         \
+    IMPLEMENT_PEM_provided_write_fp(name, TYPE, type, str, asn1)
 
-# define IMPLEMENT_PEM_provided_write_cb(name, type, str, asn1)         \
-    IMPLEMENT_PEM_provided_write_cb_bio(name, type, str, asn1)          \
-    IMPLEMENT_PEM_provided_write_cb_fp(name, type, str, asn1)
+# define IMPLEMENT_PEM_provided_write_cb(name, TYPE, type, str, asn1)     \
+    IMPLEMENT_PEM_provided_write_cb_bio(name, TYPE, type, str, asn1)      \
+    IMPLEMENT_PEM_provided_write_cb_fp(name, TYPE, type, str, asn1)
 
-# define IMPLEMENT_PEM_provided_rw(name, type, str, asn1)       \
-    IMPLEMENT_PEM_read(name, type, str, asn1)                   \
-    IMPLEMENT_PEM_provided_write(name, type, str, asn1)
+# define IMPLEMENT_PEM_provided_rw(name, TYPE, type, str, asn1)           \
+    IMPLEMENT_PEM_read(name, TYPE, str, asn1)                             \
+    IMPLEMENT_PEM_provided_write(name, TYPE, type, str, asn1)
 
-# define IMPLEMENT_PEM_provided_rw_cb(name, type, str, asn1)    \
-    IMPLEMENT_PEM_read(name, type, str, asn1)                   \
-    IMPLEMENT_PEM_provided_write_cb(name, type, str, asn1)
+# define IMPLEMENT_PEM_provided_rw_cb(name, TYPE, type, str, asn1)        \
+    IMPLEMENT_PEM_read(name, TYPE, str, asn1)                             \
+    IMPLEMENT_PEM_provided_write_cb(name, TYPE, type, str, asn1)
 
diff --git a/crypto/pem/pem_pk8.c b/crypto/pem/pem_pk8.c
index 09d3885..62fa45f 100644
--- a/crypto/pem/pem_pk8.c
+++ b/crypto/pem/pem_pk8.c
@@ -73,8 +73,8 @@
     int ret = 0;
     const char *outtype = isder ? "DER" : "PEM";
     OSSL_ENCODER_CTX *ctx =
-        OSSL_ENCODER_CTX_new_by_EVP_PKEY(x, OSSL_KEYMGMT_SELECT_ALL,
-                                         outtype, "pkcs8", propq);
+        OSSL_ENCODER_CTX_new_for_pkey(x, OSSL_KEYMGMT_SELECT_ALL,
+                                      outtype, "pkcs8", propq);
 
     if (ctx == NULL)
         return 0;
diff --git a/crypto/pem/pem_pkey.c b/crypto/pem/pem_pkey.c
index c71bc24..f7cc7b8 100644
--- a/crypto/pem/pem_pkey.c
+++ b/crypto/pem/pem_pkey.c
@@ -153,10 +153,10 @@
 
 PEM_write_cb_ex_fnsig(PrivateKey, EVP_PKEY, BIO, write_bio)
 {
-    IMPLEMENT_PEM_provided_write_body_vars(EVP_PKEY, PrivateKey, propq);
+    IMPLEMENT_PEM_provided_write_body_vars(pkey, PrivateKey, propq);
 
     IMPLEMENT_PEM_provided_write_body_pass();
-    IMPLEMENT_PEM_provided_write_body_main(EVP_PKEY, bio);
+    IMPLEMENT_PEM_provided_write_body_main(pkey, bio);
 
  legacy:
     if (x->ameth == NULL || x->ameth->priv_encode != NULL)
@@ -218,9 +218,9 @@
 PEM_write_fnsig(Parameters, EVP_PKEY, BIO, write_bio)
 {
     char pem_str[80];
-    IMPLEMENT_PEM_provided_write_body_vars(EVP_PKEY, Parameters, NULL);
+    IMPLEMENT_PEM_provided_write_body_vars(pkey, Parameters, NULL);
 
-    IMPLEMENT_PEM_provided_write_body_main(EVP_PKEY, bio);
+    IMPLEMENT_PEM_provided_write_body_main(pkey, bio);
 
  legacy:
     if (!x->ameth || !x->ameth->param_encode)
diff --git a/crypto/store/store_result.c b/crypto/store/store_result.c
index e0c0532..6ac77b7 100644
--- a/crypto/store/store_result.c
+++ b/crypto/store/store_result.c
@@ -274,8 +274,8 @@
     }
 
     decoderctx =
-        OSSL_DECODER_CTX_new_by_EVP_PKEY(&pk, "DER", NULL, data->data_type,
-                                         selection, libctx, propq);
+        OSSL_DECODER_CTX_new_for_pkey(&pk, "DER", NULL, data->data_type,
+                                      selection, libctx, propq);
     (void)OSSL_DECODER_CTX_set_passphrase_cb(decoderctx, cb, cbarg);
 
     /* No error if this couldn't be decoded */
diff --git a/crypto/x509/x_pubkey.c b/crypto/x509/x_pubkey.c
index 740702d..5d500f0 100644
--- a/crypto/x509/x_pubkey.c
+++ b/crypto/x509/x_pubkey.c
@@ -122,9 +122,9 @@
         unsigned char *der = NULL;
         size_t derlen = 0;
         OSSL_ENCODER_CTX *ectx =
-            OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, EVP_PKEY_PUBLIC_KEY,
-                                             "DER", "SubjectPublicKeyInfo",
-                                             NULL);
+            OSSL_ENCODER_CTX_new_for_pkey(pkey, EVP_PKEY_PUBLIC_KEY,
+                                          "DER", "SubjectPublicKeyInfo",
+                                          NULL);
 
         if (OSSL_ENCODER_to_data(ectx, &der, &derlen)) {
             const unsigned char *pder = der;
@@ -325,9 +325,9 @@
         X509_PUBKEY_free(xpk);
     } else if (a->keymgmt != NULL) {
         OSSL_ENCODER_CTX *ctx =
-            OSSL_ENCODER_CTX_new_by_EVP_PKEY(a, EVP_PKEY_PUBLIC_KEY,
-                                             "DER", "SubjectPublicKeyInfo",
-                                             NULL);
+            OSSL_ENCODER_CTX_new_for_pkey(a, EVP_PKEY_PUBLIC_KEY,
+                                          "DER", "SubjectPublicKeyInfo",
+                                          NULL);
         BIO *out = BIO_new(BIO_s_mem());
         BUF_MEM *buf = NULL;
 
diff --git a/doc/man3/OSSL_DECODER.pod b/doc/man3/OSSL_DECODER.pod
index f87e693..9bc2a03 100644
--- a/doc/man3/OSSL_DECODER.pod
+++ b/doc/man3/OSSL_DECODER.pod
@@ -124,7 +124,7 @@
 =head1 SEE ALSO
 
 L<provider(7)>, L<OSSL_DECODER_CTX(3)>, L<OSSL_DECODER_from_bio(3)>,
-L<OSSL_DECODER_CTX_new_by_EVP_PKEY(3)>, L<OSSL_LIB_CTX(3)>
+L<OSSL_DECODER_CTX_new_for_pkey(3)>, L<OSSL_LIB_CTX(3)>
 
 =head1 HISTORY
 
diff --git a/doc/man3/OSSL_DECODER_CTX_new_by_EVP_PKEY.pod b/doc/man3/OSSL_DECODER_CTX_new_for_pkey.pod
similarity index 84%
rename from doc/man3/OSSL_DECODER_CTX_new_by_EVP_PKEY.pod
rename to doc/man3/OSSL_DECODER_CTX_new_for_pkey.pod
index 38425ae..acb28f8 100644
--- a/doc/man3/OSSL_DECODER_CTX_new_by_EVP_PKEY.pod
+++ b/doc/man3/OSSL_DECODER_CTX_new_for_pkey.pod
@@ -2,7 +2,7 @@
 
 =head1 NAME
 
-OSSL_DECODER_CTX_new_by_EVP_PKEY,
+OSSL_DECODER_CTX_new_for_pkey,
 OSSL_DECODER_CTX_set_passphrase,
 OSSL_DECODER_CTX_set_pem_password_cb,
 OSSL_DECODER_CTX_set_passphrase_ui,
@@ -14,11 +14,11 @@
  #include <openssl/decoder.h>
 
  OSSL_DECODER_CTX *
- OSSL_DECODER_CTX_new_by_EVP_PKEY(EVP_PKEY **pkey,
-                                  const char *input_type,
-                                  const char *input_struct,
-                                  const char *keytype, int selection,
-                                  OSSL_LIB_CTX *libctx, const char *propquery);
+ OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey,
+                               const char *input_type,
+                               const char *input_struct,
+                               const char *keytype, int selection,
+                               OSSL_LIB_CTX *libctx, const char *propquery);
 
  int OSSL_DECODER_CTX_set_passphrase(OSSL_DECODER_CTX *ctx,
                                      const unsigned char *kstr,
@@ -35,14 +35,17 @@
 
 =head1 DESCRIPTION
 
-OSSL_DECODER_CTX_new_by_EVP_PKEY() is a utility function that creates a
+OSSL_DECODER_CTX_new_for_pkey() is a utility function that creates a
 B<OSSL_DECODER_CTX>, finds all applicable decoder implementations and sets
 them up, so all the caller has to do next is call functions like
 L<OSSL_DECODER_from_bio(3)>.  The caller may use the optional I<input_type>,
 I<input_struct>, I<keytype> and I<selection> to specify what the input is
-expected to contain.
+expected to contain.  The I<pkey> must reference an B<EVP_PKEY *> variable
+that will be set to the newly created B<EVP_PKEY> on succesfull decoding.
+The referenced variable must be initialized to NULL before calling the
+function.
 
-Internally OSSL_DECODER_CTX_new_by_EVP_PKEY() searches for all available
+Internally OSSL_DECODER_CTX_new_for_pkey() searches for all available
 L<EVP_KEYMGMT(3)> implementations, and then builds a list of all potential
 decoder implementations that may be able to process the encoded input into
 data suitable for B<EVP_PKEY>s.  All these implementations are implicitly
@@ -62,7 +65,7 @@
 find out the keytype and key contents on their own from the input they get.
 
 If no suitable decoder implementation is found,
-OSSL_DECODER_CTX_new_by_EVP_PKEY() still creates a B<OSSL_DECODER_CTX>, but
+OSSL_DECODER_CTX_new_for_pkey() still creates a B<OSSL_DECODER_CTX>, but
 with no associated decoder (L<OSSL_DECODER_CTX_get_num_decoders(3)> returns
 zero).  This helps the caller to distinguish between an error when creating
 the B<OSSL_ENCODER_CTX> and missing encoder implementation, and allows it to
@@ -107,7 +110,7 @@
 
 =head1 RETURN VALUES
 
-OSSL_DECODER_CTX_new_by_EVP_PKEY() returns a pointer to a
+OSSL_DECODER_CTX_new_for_pkey() returns a pointer to a
 B<OSSL_DECODER_CTX>, or NULL if it couldn't be created.
 
 OSSL_DECODER_CTX_set_passphrase(), OSSL_DECODER_CTX_set_pem_password_cb(),
@@ -115,15 +118,6 @@
 OSSL_DECODER_CTX_set_passphrase_cb() all return 1 on success, or 0 on
 failure.
 
-=head1 NOTES
-
-Parts of the function names are made to match already existing OpenSSL
-names.
-
-B<EVP_PKEY> in OSSL_DECODER_CTX_new_by_EVP_PKEY() matches the type name,
-thus making for the naming pattern B<OSSL_DECODER_CTX_new_by_I<TYPE>>() when
-new types are handled.
-
 =head1 SEE ALSO
 
 L<provider(7)>, L<OSSL_DECODER(3)>, L<OSSL_DECODER_CTX(3)>
diff --git a/doc/man3/OSSL_ENCODER.pod b/doc/man3/OSSL_ENCODER.pod
index da1aa47..6952d85 100644
--- a/doc/man3/OSSL_ENCODER.pod
+++ b/doc/man3/OSSL_ENCODER.pod
@@ -117,7 +117,7 @@
 =head1 SEE ALSO
 
 L<provider(7)>, L<OSSL_ENCODER_CTX(3)>, L<OSSL_ENCODER_to_bio(3)>,
-L<OSSL_ENCODER_CTX_new_by_EVP_PKEY(3)>, L<OSSL_LIB_CTX(3)>
+L<OSSL_ENCODER_CTX_new_for_pkey(3)>, L<OSSL_LIB_CTX(3)>
 
 =head1 HISTORY
 
diff --git a/doc/man3/OSSL_ENCODER_CTX_new_by_EVP_PKEY.pod b/doc/man3/OSSL_ENCODER_CTX_new_for_pkey.pod
similarity index 86%
rename from doc/man3/OSSL_ENCODER_CTX_new_by_EVP_PKEY.pod
rename to doc/man3/OSSL_ENCODER_CTX_new_for_pkey.pod
index 403d7a0..dec4880 100644
--- a/doc/man3/OSSL_ENCODER_CTX_new_by_EVP_PKEY.pod
+++ b/doc/man3/OSSL_ENCODER_CTX_new_for_pkey.pod
@@ -2,7 +2,7 @@
 
 =head1 NAME
 
-OSSL_ENCODER_CTX_new_by_EVP_PKEY,
+OSSL_ENCODER_CTX_new_for_pkey,
 OSSL_ENCODER_CTX_set_cipher,
 OSSL_ENCODER_CTX_set_passphrase,
 OSSL_ENCODER_CTX_set_pem_password_cb,
@@ -15,10 +15,10 @@
  #include <openssl/encoder.h>
 
  OSSL_ENCODER_CTX *
- OSSL_ENCODER_CTX_new_by_EVP_PKEY(const EVP_PKEY *pkey, int selection,
-                                  const char *output_type,
-                                  const char *output_structure,
-                                  const char *propquery);
+ OSSL_ENCODER_CTX_new_for_pkey(const EVP_PKEY *pkey, int selection,
+                               const char *output_type,
+                               const char *output_structure,
+                               const char *propquery);
 
  int OSSL_ENCODER_CTX_set_cipher(OSSL_ENCODER_CTX *ctx,
                                  const char *cipher_name,
@@ -37,7 +37,7 @@
 
 =head1 DESCRIPTION
 
-OSSL_ENCODER_CTX_new_by_EVP_PKEY() is a utility function that creates a
+OSSL_ENCODER_CTX_new_for_pkey() is a utility function that creates a
 B<OSSL_ENCODER_CTX>, finds all applicable encoder implementations and sets
 them up, so almost all the caller has to do next is call functions like
 L<OSSL_ENCODER_to_bio(3)>.  I<output_type> determines the final output
@@ -46,7 +46,7 @@
 L</Output types> below, and I<selection> is further described in
 L</Selections>.
 
-Internally, OSSL_ENCODER_CTX_new_by_EVP_PKEY() uses the names from the
+Internally, OSSL_ENCODER_CTX_new_for_pkey() uses the names from the
 L<EVP_KEYMGMT(3)> implementation associated with I<pkey> to build a list of
 applicable encoder implementations that are used to process the I<pkey> into
 the encoding named by I<output_type>, with the outermost structure named by
@@ -54,7 +54,7 @@
 implicitly fetched, with I<propquery> for finer selection.
 
 If no suitable encoder implementation is found,
-OSSL_ENCODER_CTX_new_by_EVP_PKEY() still creates a B<OSSL_ENCODER_CTX>, but
+OSSL_ENCODER_CTX_new_for_pkey() still creates a B<OSSL_ENCODER_CTX>, but
 with no associated encoder (L<OSSL_ENCODER_CTX_get_num_encoders(3)> returns
 zero).  This helps the caller to distinguish between an error when creating
 the B<OSSL_ENCODER_CTX> and missing encoder implementation, and allows it to
@@ -146,23 +146,14 @@
 
 =head1 RETURN VALUES
 
-OSSL_ENCODER_CTX_new_by_EVP_PKEY() returns a pointer to a
-B<OSSL_ENCODER_CTX>, or NULL if it couldn't be created.
+OSSL_ENCODER_CTX_new_for_pkey() returns a pointer to an B<OSSL_ENCODER_CTX>,
+or NULL if it couldn't be created.
 
 OSSL_ENCODER_CTX_set_cipher(), OSSL_ENCODER_CTX_set_passphrase(),
 OSSL_ENCODER_CTX_set_pem_password_cb(), OSSL_ENCODER_CTX_set_passphrase_ui()
 and OSSL_ENCODER_CTX_set_passphrase_cb() all return 1 on success, or 0 on
 failure.
 
-=head1 NOTES
-
-Parts of the function names are made to match already existing OpenSSL
-names.
-
-B<EVP_PKEY> in OSSL_ENCODER_CTX_new_by_EVP_PKEY() matches the type name,
-thus making for the naming pattern B<OSSL_ENCODER_CTX_new_by_I<TYPE>>() when
-new types are handled.
-
 =head1 SEE ALSO
 
 L<provider(7)>, L<OSSL_ENCODER(3)>, L<OSSL_ENCODER_CTX(3)>
diff --git a/doc/man3/d2i_RSAPrivateKey.pod b/doc/man3/d2i_RSAPrivateKey.pod
index 41e8e3c..475c53c 100644
--- a/doc/man3/d2i_RSAPrivateKey.pod
+++ b/doc/man3/d2i_RSAPrivateKey.pod
@@ -222,8 +222,8 @@
  unsigned char *p = buffer;     /* |buffer| is supplied by the caller */
  size_t len = buffer_size;      /* assumed be the size of |buffer| */
  OSSL_ENCODER_CTX *ctx =
-     OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, selection, "DER", structure,
-                                      NULL, NULL);
+     OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, "DER", structure,
+                                   NULL, NULL);
  if (ctx == NULL) {
      /* fatal error handling */
  }
diff --git a/include/crypto/decoder.h b/include/crypto/decoder.h
index 5d055fe..a83615a 100644
--- a/include/crypto/decoder.h
+++ b/include/crypto/decoder.h
@@ -32,10 +32,10 @@
 int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx,
                                       OSSL_DECODER_INSTANCE *di);
 
-int ossl_decoder_ctx_setup_for_EVP_PKEY(OSSL_DECODER_CTX *ctx,
-                                        EVP_PKEY **pkey, const char *keytype,
-                                        OSSL_LIB_CTX *libctx,
-                                        const char *propquery);
+int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx,
+                                    EVP_PKEY **pkey, const char *keytype,
+                                    OSSL_LIB_CTX *libctx,
+                                    const char *propquery);
 
 #endif
 
diff --git a/include/openssl/decoder.h b/include/openssl/decoder.h
index 3c3a9a1..29ccb0a 100644
--- a/include/openssl/decoder.h
+++ b/include/openssl/decoder.h
@@ -120,11 +120,11 @@
  * an implicit OSSL_DECODER_fetch(), suitable for the object of that type.
  */
 OSSL_DECODER_CTX *
-OSSL_DECODER_CTX_new_by_EVP_PKEY(EVP_PKEY **pkey,
-                                 const char *input_type,
-                                 const char *input_struct,
-                                 const char *keytype, int selection,
-                                 OSSL_LIB_CTX *libctx, const char *propquery);
+OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey,
+                              const char *input_type,
+                              const char *input_struct,
+                              const char *keytype, int selection,
+                              OSSL_LIB_CTX *libctx, const char *propquery);
 
 # ifdef __cplusplus
 }
diff --git a/include/openssl/encoder.h b/include/openssl/encoder.h
index 122a46b..c6a300b 100644
--- a/include/openssl/encoder.h
+++ b/include/openssl/encoder.h
@@ -113,11 +113,11 @@
  * an implicit OSSL_ENCODER_fetch(), suitable for the object of that type.
  * This is more useful than calling OSSL_ENCODER_CTX_new().
  */
-OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_by_EVP_PKEY(const EVP_PKEY *pkey,
-                                                   int selection,
-                                                   const char *output_type,
-                                                   const char *output_struct,
-                                                   const char *propquery);
+OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_for_pkey(const EVP_PKEY *pkey,
+                                                int selection,
+                                                const char *output_type,
+                                                const char *output_struct,
+                                                const char *propquery);
 
 # ifdef __cplusplus
 }
diff --git a/providers/encoders.inc b/providers/encoders.inc
index f2b59e0..356e2f2 100644
--- a/providers/encoders.inc
+++ b/providers/encoders.inc
@@ -74,16 +74,16 @@
  * created like this:
  *
  * OSSL_ENCODER_CTX *ctx =
- *     OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, selection, "DER", "type-specific",
- *                                      NULL, NULL);
+ *     OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, "DER", "type-specific",
+ *                                   NULL, NULL);
  *
  * To replace PEM_write_bio_{TYPE}PrivateKey(), PEM_write_bio_{TYPE}PublicKey()
  * and PEM_write_bio_{TYPE}Params(), use OSSL_ENCODER functions with an
  * OSSL_ENCODER_CTX created like this:
  *
  * OSSL_ENCODER_CTX *ctx =
- *     OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, selection, "PEM", "type-specific",
- *                                      NULL, NULL);
+ *     OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, "PEM", "type-specific",
+ *                                   NULL, NULL);
  *
  * We only implement those for which there are current i2d_ and PEM_write_bio
  * implementations.
@@ -197,7 +197,7 @@
  * Entries for key type specific output formats.  These are exactly the
  * same as the type specific above, except that they use the key type
  * name as structure name instead of "type-specific", in the call on
- * OSSL_ENCODER_CTX_new_by_EVP_PKEY().
+ * OSSL_ENCODER_CTX_new_for_pkey().
  */
 
 /* The RSA encoders only support private key and public key output */
diff --git a/providers/implementations/storemgmt/file_store.c b/providers/implementations/storemgmt/file_store.c
index a5edc53..ab4b405 100644
--- a/providers/implementations/storemgmt/file_store.c
+++ b/providers/implementations/storemgmt/file_store.c
@@ -59,7 +59,7 @@
  * internal OpenSSL functions, thereby bypassing the need for a surrounding
  * provider.  This is ok, since this is a local decoder, not meant for
  * public consumption.  It also uses the libcrypto internal decoder
- * setup function ossl_decoder_ctx_setup_for_EVP_PKEY(), to allow the
+ * setup function ossl_decoder_ctx_setup_for_pkey(), to allow the
  * last resort decoder to be added first (and thereby be executed last).
  * Finally, it sets up its own construct and cleanup functions.
  *
@@ -535,7 +535,7 @@
 
 static int file_setup_decoders(struct file_ctx_st *ctx)
 {
-    EVP_PKEY *dummy; /* for OSSL_DECODER_CTX_new_by_EVP_PKEY() */
+    EVP_PKEY *dummy; /* for ossl_decoder_ctx_setup_for_pkey() */
     OSSL_LIB_CTX *libctx = ossl_prov_ctx_get0_libctx(ctx->provctx);
     OSSL_DECODER *to_obj = NULL; /* Last resort decoder */
     OSSL_DECODER_INSTANCE *to_obj_inst = NULL;
@@ -588,9 +588,9 @@
          * Since we're setting up our own constructor, we don't need to care
          * more than that...
          */
-        if (!ossl_decoder_ctx_setup_for_EVP_PKEY(ctx->_.file.decoderctx,
-                                                 &dummy, NULL,
-                                                 libctx, ctx->_.file.propq)
+        if (!ossl_decoder_ctx_setup_for_pkey(ctx->_.file.decoderctx,
+                                             &dummy, NULL,
+                                             libctx, ctx->_.file.propq)
             || !OSSL_DECODER_CTX_add_extra(ctx->_.file.decoderctx,
                                            libctx, ctx->_.file.propq)) {
             ERR_raise(ERR_LIB_PROV, ERR_R_OSSL_DECODER_LIB);
diff --git a/ssl/ssl_conf.c b/ssl/ssl_conf.c
index edd3fd7..12e765c 100644
--- a/ssl/ssl_conf.c
+++ b/ssl/ssl_conf.c
@@ -587,9 +587,9 @@
             goto end;
 
         decoderctx
-            = OSSL_DECODER_CTX_new_by_EVP_PKEY(&dhpkey, "PEM", NULL, "DH",
-                                               OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
-                                               sslctx->libctx, sslctx->propq);
+            = OSSL_DECODER_CTX_new_for_pkey(&dhpkey, "PEM", NULL, "DH",
+                                            OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+                                            sslctx->libctx, sslctx->propq);
         if (decoderctx == NULL
                 || !OSSL_DECODER_from_bio(decoderctx, in)) {
             OSSL_DECODER_CTX_free(decoderctx);
diff --git a/test/endecode_test.c b/test/endecode_test.c
index 178d0ca..b5da47d 100644
--- a/test/endecode_test.c
+++ b/test/endecode_test.c
@@ -198,10 +198,10 @@
     const unsigned char *upass = (const unsigned char *)pass;
     int ok = 0;
 
-    if (!TEST_ptr(ectx = OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, selection,
-                                                          output_type,
-                                                          output_structure,
-                                                          NULL))
+    if (!TEST_ptr(ectx = OSSL_ENCODER_CTX_new_for_pkey(pkey, selection,
+                                                       output_type,
+                                                       output_structure,
+                                                       NULL))
         || !TEST_int_gt(OSSL_ENCODER_CTX_get_num_encoders(ectx), 0)
         || (pass != NULL
             && !TEST_true(OSSL_ENCODER_CTX_set_passphrase(ectx, upass,
@@ -256,12 +256,12 @@
         const char *testtype = (i == 0) ? input_type
                                         : ((i == 1) ? NULL : badtype);
 
-        if (!TEST_ptr(dctx = OSSL_DECODER_CTX_new_by_EVP_PKEY(&testpkey,
-                                                              testtype,
-                                                              NULL,
-                                                              keytype,
-                                                              selection,
-                                                              NULL, NULL))
+        if (!TEST_ptr(dctx = OSSL_DECODER_CTX_new_for_pkey(&testpkey,
+                                                           testtype,
+                                                           NULL,
+                                                           keytype,
+                                                           selection,
+                                                           NULL, NULL))
             || (pass != NULL
                 && !OSSL_DECODER_CTX_set_passphrase(dctx, upass, strlen(pass)))
             || !TEST_int_gt(BIO_reset(encoded_bio), 0)
diff --git a/test/endecoder_legacy_test.c b/test/endecoder_legacy_test.c
index ffaa25d..64bbea0 100644
--- a/test/endecoder_legacy_test.c
+++ b/test/endecoder_legacy_test.c
@@ -317,9 +317,9 @@
         goto end;
 
     if (!TEST_ptr(ectx =
-                  OSSL_ENCODER_CTX_new_by_EVP_PKEY(provided_pkey, selection,
-                                                   "PEM", structure,
-                                                   NULL))
+                  OSSL_ENCODER_CTX_new_for_pkey(provided_pkey, selection,
+                                                "PEM", structure,
+                                                NULL))
         || !TEST_true(OSSL_ENCODER_to_bio(ectx, membio_provided))
         || !TEST_true(pem_write_bio(membio_legacy, legacy_key,
                                    NULL, NULL, 0, NULL, NULL))
@@ -331,10 +331,10 @@
 
         if (!TEST_ptr(decoded_legacy_pkey = EVP_PKEY_new())
             || !TEST_ptr(dctx =
-                         OSSL_DECODER_CTX_new_by_EVP_PKEY(&decoded_provided_pkey,
-                                                          "PEM", structure,
-                                                          keytype, selection,
-                                                          NULL, NULL))
+                         OSSL_DECODER_CTX_new_for_pkey(&decoded_provided_pkey,
+                                                       "PEM", structure,
+                                                       keytype, selection,
+                                                       NULL, NULL))
             || !TEST_true(OSSL_DECODER_from_bio(dctx, membio_provided))
             || !TEST_ptr(decoded_legacy_key =
                          pem_read_bio(membio_legacy, NULL, NULL, NULL))
@@ -385,9 +385,9 @@
         goto end;
 
     if (!TEST_ptr(ectx =
-                  OSSL_ENCODER_CTX_new_by_EVP_PKEY(provided_pkey, selection,
-                                                   "PEM", structure,
-                                                   NULL))
+                  OSSL_ENCODER_CTX_new_for_pkey(provided_pkey, selection,
+                                                "PEM", structure,
+                                                NULL))
         || !TEST_true(OSSL_ENCODER_to_bio(ectx, membio_provided))
         || !TEST_true(pem_write_bio(membio_legacy, legacy_key))
         || !test_membio_str_eq(membio_provided, membio_legacy))
@@ -398,10 +398,10 @@
 
         if (!TEST_ptr(decoded_legacy_pkey = EVP_PKEY_new())
             || !TEST_ptr(dctx =
-                         OSSL_DECODER_CTX_new_by_EVP_PKEY(&decoded_provided_pkey,
-                                                          "PEM", structure,
-                                                          keytype, selection,
-                                                          NULL, NULL))
+                         OSSL_DECODER_CTX_new_for_pkey(&decoded_provided_pkey,
+                                                       "PEM", structure,
+                                                       keytype, selection,
+                                                       NULL, NULL))
             || !TEST_true(OSSL_DECODER_from_bio(dctx, membio_provided))
             || !TEST_ptr(decoded_legacy_key =
                          pem_read_bio(membio_legacy, NULL, NULL, NULL))
@@ -450,9 +450,9 @@
     EVP_PKEY *decoded_provided_pkey = NULL;
 
     if (!TEST_ptr(ectx =
-                 OSSL_ENCODER_CTX_new_by_EVP_PKEY(provided_pkey, selection,
-                                                  "DER", structure,
-                                                  NULL))
+                 OSSL_ENCODER_CTX_new_for_pkey(provided_pkey, selection,
+                                               "DER", structure,
+                                               NULL))
         || !TEST_true(OSSL_ENCODER_to_data(ectx,
                                           &der_provided, &der_provided_len))
         || !TEST_size_t_gt(der_legacy_len = i2d(legacy_key, &der_legacy), 0)
@@ -465,10 +465,10 @@
 
         if (!TEST_ptr(decoded_legacy_pkey = EVP_PKEY_new())
             || !TEST_ptr(dctx =
-                         OSSL_DECODER_CTX_new_by_EVP_PKEY(&decoded_provided_pkey,
-                                                          "DER", structure,
-                                                          keytype, selection,
-                                                          NULL, NULL))
+                         OSSL_DECODER_CTX_new_for_pkey(&decoded_provided_pkey,
+                                                       "DER", structure,
+                                                       keytype, selection,
+                                                       NULL, NULL))
             || !TEST_true((pder_provided = der_provided,
                            tmp_size = der_provided_len,
                            OSSL_DECODER_from_data(dctx, &pder_provided,
diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c
index b3f2ec6..2d32eb9 100644
--- a/test/evp_extra_test.c
+++ b/test/evp_extra_test.c
@@ -419,8 +419,8 @@
     const unsigned char **pdata = &data;
     EVP_PKEY *pkey = NULL;
     OSSL_DECODER_CTX *dctx =
-        OSSL_DECODER_CTX_new_by_EVP_PKEY(&pkey, "DER", NULL, keytype, 0,
-                                         testctx, NULL);
+        OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, keytype, 0,
+                                      testctx, NULL);
 
     /* |pkey| will be NULL on error */
     (void)OSSL_DECODER_from_data(dctx, pdata, &data_len);
diff --git a/test/evp_libctx_test.c b/test/evp_libctx_test.c
index 0b8ea1c..302ec2c 100644
--- a/test/evp_libctx_test.c
+++ b/test/evp_libctx_test.c
@@ -474,10 +474,10 @@
         || !TEST_true(EVP_PKEY_CTX_set_rsa_keygen_bits(keygen_ctx, bits))
         || !TEST_int_gt(EVP_PKEY_keygen(keygen_ctx, priv), 0)
         || !TEST_ptr(ectx =
-                     OSSL_ENCODER_CTX_new_by_EVP_PKEY(*priv,
-                                                      EVP_PKEY_PUBLIC_KEY,
-                                                      "DER", "type-specific",
-                                                      NULL))
+                     OSSL_ENCODER_CTX_new_for_pkey(*priv,
+                                                   EVP_PKEY_PUBLIC_KEY,
+                                                   "DER", "type-specific",
+                                                   NULL))
         || !TEST_true(OSSL_ENCODER_to_data(ectx, &pub_der, &len)))
         goto err;
     pp = pub_der;
diff --git a/test/evp_pkey_provided_test.c b/test/evp_pkey_provided_test.c
index 85ae542..62a9346 100644
--- a/test/evp_pkey_provided_test.c
+++ b/test/evp_pkey_provided_test.c
@@ -219,10 +219,10 @@
 
     /* Make a context, it's valid for several prints */
     TEST_note("Setting up a OSSL_ENCODER context with passphrase");
-    if (!TEST_ptr(ctx = OSSL_ENCODER_CTX_new_by_EVP_PKEY(pk, selection,
-                                                         output_type,
-                                                         output_structure,
-                                                         NULL))
+    if (!TEST_ptr(ctx = OSSL_ENCODER_CTX_new_for_pkey(pk, selection,
+                                                      output_type,
+                                                      output_structure,
+                                                      NULL))
         /* Check that this operation is supported */
         || !TEST_int_ne(OSSL_ENCODER_CTX_get_num_encoders(ctx), 0))
         goto err;
diff --git a/util/libcrypto.num b/util/libcrypto.num
index 5e3ee9e..c2e5c75 100644
--- a/util/libcrypto.num
+++ b/util/libcrypto.num
@@ -4838,7 +4838,7 @@
 OSSL_ENCODER_properties                 ?	3_0_0	EXIST::FUNCTION:
 OSSL_ENCODER_to_bio                     ?	3_0_0	EXIST::FUNCTION:
 OSSL_ENCODER_to_fp                      ?	3_0_0	EXIST::FUNCTION:STDIO
-OSSL_ENCODER_CTX_new_by_EVP_PKEY        ?	3_0_0	EXIST::FUNCTION:
+OSSL_ENCODER_CTX_new_for_pkey           ?	3_0_0	EXIST::FUNCTION:
 OSSL_ENCODER_CTX_set_cipher             ?	3_0_0	EXIST::FUNCTION:
 OSSL_ENCODER_CTX_set_passphrase         ?	3_0_0	EXIST::FUNCTION:
 OSSL_ENCODER_CTX_set_pem_password_cb    ?	3_0_0	EXIST::FUNCTION:
@@ -5127,7 +5127,7 @@
 OSSL_DECODER_INSTANCE_get_decoder_ctx   ?	3_0_0	EXIST::FUNCTION:
 OSSL_DECODER_gettable_params            ?	3_0_0	EXIST::FUNCTION:
 OSSL_DECODER_get_params                 ?	3_0_0	EXIST::FUNCTION:
-OSSL_DECODER_CTX_new_by_EVP_PKEY        ?	3_0_0	EXIST::FUNCTION:
+OSSL_DECODER_CTX_new_for_pkey           ?	3_0_0	EXIST::FUNCTION:
 OSSL_DECODER_CTX_set_construct          ?	3_0_0	EXIST::FUNCTION:
 OSSL_DECODER_CTX_set_construct_data     ?	3_0_0	EXIST::FUNCTION:
 OSSL_DECODER_CTX_set_cleanup            ?	3_0_0	EXIST::FUNCTION:
