return ret;
}
+int ossl_method_store_global_property_is_enabled(OSSL_METHOD_STORE *store,
+ const char *prop_name)
+{
+ int ret = 0;
+
+ if (store == NULL)
+ return 0;
+
+ ossl_property_read_lock(store);
+ ret = ossl_property_is_enabled(store->ctx, prop_name,
+ store->global_properties);
+ ossl_property_unlock(store);
+ return ret;
+}
+
int ossl_method_store_set_global_properties(OSSL_METHOD_STORE *store,
- const char *prop_query) {
+ const char *prop_query)
+{
int ret = 0;
if (store == NULL)
ossl_property_write_lock(store);
ossl_method_cache_flush_all(store);
+
+ ossl_property_free(store->global_properties);
+ store->global_properties = NULL;
+
if (prop_query == NULL) {
- ossl_property_free(store->global_properties);
- store->global_properties = NULL;
ossl_property_unlock(store);
return 1;
}
return ret;
}
+int ossl_method_store_merge_global_properties(OSSL_METHOD_STORE *store,
+ const char *prop_query)
+{
+ int ret = 0;
+ OSSL_PROPERTY_LIST *prop = NULL, *global;
+
+ if (store == NULL)
+ return 1;
+
+ ossl_property_write_lock(store);
+ ossl_method_cache_flush_all(store);
+ if (prop_query == NULL) {
+ ossl_property_free(store->global_properties);
+ store->global_properties = NULL;
+ goto success;
+ }
+ prop = ossl_parse_query(store->ctx, prop_query);
+ if (prop == NULL)
+ goto end;
+
+ if (store->global_properties == NULL) {
+ store->global_properties = prop;
+ prop = NULL;
+ goto success;
+ }
+ global = ossl_property_merge(prop, store->global_properties);
+ if (global == NULL)
+ goto end;
+ ossl_property_free(store->global_properties);
+ store->global_properties = global;
+ success:
+ ret = 1;
+ end:
+ ossl_property_unlock(store);
+ ossl_property_free(prop);
+ return ret;
+}
+
+
static void impl_cache_flush_alg(ossl_uintmax_t idx, ALGORITHM *alg)
{
lh_QUERY_doall(alg->cache, &impl_cache_free);