ALGORITHM *alg = ossl_method_store_retrieve(store, nid);
if (alg != NULL) {
- ossl_provider_clear_all_operation_bits(store->ctx);
store->nelem -= lh_QUERY_num_items(alg->cache);
impl_cache_flush_alg(0, alg, NULL);
}
if (!ossl_property_write_lock(store))
return 0;
- ossl_provider_clear_all_operation_bits(store->ctx);
ossl_sa_ALGORITHM_doall_arg(store->algs, &impl_cache_flush_alg, arg);
store->nelem = 0;
ossl_property_unlock(store);
state.nelem = 0;
if ((state.seed = OPENSSL_rdtsc()) == 0)
state.seed = 1;
- ossl_provider_clear_all_operation_bits(store->ctx);
store->need_flush = 0;
ossl_sa_ALGORITHM_doall_arg(store->algs, &impl_cache_flush_one_alg, &state);
store->nelem = state.nelem;
prov->unquery_operation(prov->provctx, operation_id, algs);
}
-int ossl_provider_clear_all_operation_bits(OSSL_LIB_CTX *libctx)
-{
- struct provider_store_st *store;
- OSSL_PROVIDER *provider;
- int i, num, res = 1;
-
- if ((store = get_provider_store(libctx)) != NULL) {
- if (!CRYPTO_THREAD_read_lock(store->lock))
- return 0;
- num = sk_OSSL_PROVIDER_num(store->providers);
- for (i = 0; i < num; i++) {
- provider = sk_OSSL_PROVIDER_value(store->providers, i);
- if (!CRYPTO_THREAD_write_lock(provider->opbits_lock)) {
- res = 0;
- continue;
- }
- if (provider->operation_bits != NULL)
- memset(provider->operation_bits, 0,
- provider->operation_bits_sz);
- CRYPTO_THREAD_unlock(provider->opbits_lock);
- }
- CRYPTO_THREAD_unlock(store->lock);
- return res;
- }
- return 0;
-}
-
int ossl_provider_set_operation_bit(OSSL_PROVIDER *provider, size_t bitnum)
{
size_t byte = bitnum / 8;
ossl_provider_module_name, ossl_provider_module_path,
ossl_provider_libctx,
ossl_provider_teardown, ossl_provider_gettable_params,
-ossl_provider_get_params, ossl_provider_clear_all_operation_bits,
+ossl_provider_get_params,
ossl_provider_query_operation, ossl_provider_unquery_operation,
ossl_provider_set_operation_bit, ossl_provider_test_operation_bit,
ossl_provider_get_capabilities
int ossl_provider_set_operation_bit(OSSL_PROVIDER *provider, size_t bitnum);
int ossl_provider_test_operation_bit(OSSL_PROVIDER *provider, size_t bitnum,
int *result);
- int ossl_provider_clear_all_operation_bits(OSSL_LIB_CTX *libctx);
int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx,
const OSSL_CORE_HANDLE *handle,
is set (1) or not (0) in the internal I<provider> bitstring, and sets
I<*result> to 1 or 0 accorddingly.
-ossl_provider_clear_all_operation_bits() clears all of the operation bits
-to (0) for all providers in the library context I<libctx>.
-
ossl_provider_init_as_child() stores in the library context I<ctx> references to
the necessary upcalls for managing child providers. The I<handle> and I<in>
parameters are the B<OSSL_CORE_HANDLE> and B<OSSL_DISPATCH> pointers that were
ossl_provider_set_operation_bit() and ossl_provider_test_operation_bit()
return 1 on success, or 0 on error.
-ossl_provider_clear_all_operation_bits() returns 1 on success, or 0 on error.
-
ossl_provider_get_capabilities() returns 1 on success, or 0 on error.
If this function isn't available in the provider or the provider does not
support the requested capability then 0 is returned.
int operation_id,
const OSSL_ALGORITHM *algs);
-/* Cache of bits to see if we already queried an operation */
+/*
+ * Cache of bits to see if we already added methods for an operation in
+ * the "permanent" method store.
+ * They should never be called for temporary method stores!
+ */
int ossl_provider_set_operation_bit(OSSL_PROVIDER *provider, size_t bitnum);
int ossl_provider_test_operation_bit(OSSL_PROVIDER *provider, size_t bitnum,
int *result);
-int ossl_provider_clear_all_operation_bits(OSSL_LIB_CTX *libctx);
/* Configuration */
void ossl_provider_add_conf_module(void);