=head1 NAME
EVP_PBE_CipherInit, EVP_PBE_CipherInit_ex,
-EVP_PBE_find, EVP_PBE_find_ex - Password based encryption routines
+EVP_PBE_find, EVP_PBE_find_ex,
+EVP_PBE_alg_add_type, EVP_PBE_alg_add - Password based encryption routines
=head1 SYNOPSIS
int EVP_PBE_find_ex(int type, int pbe_nid, int *pcnid, int *pmnid,
EVP_PBE_KEYGEN **pkeygen, EVP_PBE_KEYGEN_EX **keygen_ex);
+ int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid,
+ int md_nid, EVP_PBE_KEYGEN *keygen);
+ int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md,
+ EVP_PBE_KEYGEN *keygen);
+
=head1 DESCRIPTION
=head2 PBE operations
If a NULL is supplied for any of I<pcnid>, I<pmnid>, I<pkeygen> or I<pkeygen_ex>
then this parameter is not returned.
+=head2 PBE algorithm add
+
+EVP_PBE_alg_add_type() and EVP_PBE_alg_add() add an algorithm to the list
+of known algorithms. Their parameters have the same meaning as for
+EVP_PBE_find() and EVP_PBE_find_ex() functions.
+
=head1 NOTES
The arguments I<pbe_obj> and I<param> to EVP_PBE_CipherInit() and EVP_PBE_CipherInit_ex()
return ret;
}
+#if !defined OPENSSL_NO_DES && !defined OPENSSL_NO_MD5
+static int test_evp_pbe_alg_add(void)
+{
+ int ret = 0;
+ int cipher_nid = 0, md_nid = 0;
+ EVP_PBE_KEYGEN_EX *keygen_ex = NULL;
+ EVP_PBE_KEYGEN *keygen = NULL;
+
+ if (!TEST_true(EVP_PBE_alg_add(NID_pbeWithMD5AndDES_CBC, EVP_des_cbc(), EVP_md5(),
+ PKCS5_PBE_keyivgen)))
+ goto err;
+
+ if (!TEST_true(EVP_PBE_find_ex(EVP_PBE_TYPE_OUTER, NID_pbeWithMD5AndDES_CBC,
+ &cipher_nid, &md_nid, &keygen, &keygen_ex)))
+ goto err;
+
+ if (!TEST_true(keygen != NULL))
+ goto err;
+ if (!TEST_true(keygen_ex == NULL))
+ goto err;
+
+ ret = 1;
+
+err:
+ return ret;
+}
+#endif
+
int setup_tests(void)
{
if (!test_get_libctx(&mainctx, &nullprov, NULL, NULL, NULL)) {
ADD_TEST(test_rsa_pss_sign);
ADD_TEST(test_evp_md_ctx_copy);
ADD_ALL_TESTS(test_provider_unload_effective, 2);
+#if !defined OPENSSL_NO_DES && !defined OPENSSL_NO_MD5
+ ADD_TEST(test_evp_pbe_alg_add);
+#endif
return 1;
}