+ return test_encode_decode(__FILE__, __LINE__, type, key, OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "PEM", "pkcs8", NULL, NULL,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_text, check_unprotected_PKCS8_PEM,
+ dump_pem, 0);
+}
+
+#ifndef OPENSSL_NO_KEYPARAMS
+static int check_params_DER(const char *file, const int line,
+ const char *type, const void *data, size_t data_len)
+{
+ const unsigned char *datap = data;
+ int ok = 0;
+ int itype = NID_undef;
+ EVP_PKEY *pkey = NULL;
+
+ if (strcmp(type, "DH") == 0)
+ itype = EVP_PKEY_DH;
+ else if (strcmp(type, "X9.42 DH") == 0)
+ itype = EVP_PKEY_DHX;
+ else if (strcmp(type, "DSA") == 0)
+ itype = EVP_PKEY_DSA;
+ else if (strcmp(type, "EC") == 0)
+ itype = EVP_PKEY_EC;
+
+ if (itype != NID_undef) {
+ pkey = d2i_KeyParams(itype, NULL, &datap, data_len);
+ ok = (pkey != NULL);
+ EVP_PKEY_free(pkey);
+ }
+
+ return ok;
+}
+
+static int check_params_PEM(const char *file, const int line,
+ const char *type,
+ const void *data, size_t data_len)
+{
+ static char expected_pem_header[80];
+
+ return
+ TEST_FL_int_gt(BIO_snprintf(expected_pem_header,
+ sizeof(expected_pem_header),
+ "-----BEGIN %s PARAMETERS-----", type), 0)
+ && TEST_FL_strn_eq(data, expected_pem_header, strlen(expected_pem_header));
+}
+
+static int test_params_via_DER(const char *type, EVP_PKEY *key)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key, OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "DER", "type-specific", NULL, NULL,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_mem, check_params_DER,
+ dump_der, FLAG_DECODE_WITH_TYPE);