summaryrefslogtreecommitdiffstats
path: root/crypto/evp/evp_fetch.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/evp/evp_fetch.c')
-rw-r--r--crypto/evp/evp_fetch.c54
1 files changed, 42 insertions, 12 deletions
diff --git a/crypto/evp/evp_fetch.c b/crypto/evp/evp_fetch.c
index 596f592535..f63e135d3a 100644
--- a/crypto/evp/evp_fetch.c
+++ b/crypto/evp/evp_fetch.c
@@ -361,33 +361,63 @@ void *evp_generic_fetch_by_number(OPENSSL_CTX *libctx, int operation_id,
return ret;
}
-int EVP_set_default_properties(OPENSSL_CTX *libctx, const char *propq)
+static int evp_set_default_properties(OPENSSL_CTX *libctx,
+ OSSL_PROPERTY_LIST *def_prop)
{
OSSL_METHOD_STORE *store = get_evp_method_store(libctx);
-
- if (store != NULL)
- return ossl_method_store_set_global_properties(store, propq);
+ OSSL_PROPERTY_LIST **plp = ossl_ctx_global_properties(libctx);
+
+ if (plp != NULL) {
+ ossl_property_free(*plp);
+ *plp = def_prop;
+ if (store != NULL)
+ ossl_method_store_flush_cache(store);
+ return 1;
+ }
EVPerr(0, ERR_R_INTERNAL_ERROR);
return 0;
}
+int EVP_set_default_properties(OPENSSL_CTX *libctx, const char *propq)
+{
+ OSSL_PROPERTY_LIST *pl = NULL;
+
+ if (propq != NULL && (pl = ossl_parse_query(libctx, propq)) == NULL) {
+ EVPerr(0, EVP_R_DEFAULT_QUERY_PARSE_ERROR);
+ return 0;
+ }
+ return evp_set_default_properties(libctx, pl);
+}
+
static int evp_default_properties_merge(OPENSSL_CTX *libctx, const char *propq)
{
- OSSL_METHOD_STORE *store = get_evp_method_store(libctx);
-
- if (store != NULL)
- return ossl_method_store_merge_global_properties(store, propq);
- EVPerr(0, ERR_R_INTERNAL_ERROR);
- return 0;
+ OSSL_PROPERTY_LIST **plp = ossl_ctx_global_properties(libctx);
+ OSSL_PROPERTY_LIST *pl1, *pl2;
+
+ if (propq == NULL)
+ return 1;
+ if (plp == NULL || *plp == NULL)
+ return EVP_set_default_properties(libctx, propq);
+ if ((pl1 = ossl_parse_query(libctx, propq)) == NULL) {
+ EVPerr(0, EVP_R_DEFAULT_QUERY_PARSE_ERROR);
+ return 0;
+ }
+ pl2 = ossl_property_merge(pl1, *plp);
+ ossl_property_free(pl1);
+ if (pl2 == NULL) {
+ EVPerr(0, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ return evp_set_default_properties(libctx, pl2);
}
static int evp_default_property_is_enabled(OPENSSL_CTX *libctx,
const char *prop_name)
{
- OSSL_METHOD_STORE *store = get_evp_method_store(libctx);
+ OSSL_PROPERTY_LIST **plp = ossl_ctx_global_properties(libctx);
- return ossl_method_store_global_property_is_enabled(store, prop_name);
+ return plp != NULL && ossl_property_is_enabled(libctx, prop_name, *plp);
}
int EVP_default_properties_is_fips_enabled(OPENSSL_CTX *libctx)