Lines Matching refs:prov

130     OSSL_PROVIDER *prov;
235 static void provider_deactivate_free(OSSL_PROVIDER *prov)
237 if (prov->flag_activated)
238 ossl_provider_deactivate(prov, 1);
239 ossl_provider_free(prov);
414 OSSL_PROVIDER *prov = NULL;
439 prov = sk_OSSL_PROVIDER_value(store->providers, i);
441 if (prov != NULL && !ossl_provider_up_ref(prov))
442 prov = NULL;
445 return prov;
457 OSSL_PROVIDER *prov = NULL;
459 if ((prov = OPENSSL_zalloc(sizeof(*prov))) == NULL
461 || (prov->refcnt_lock = CRYPTO_THREAD_lock_new()) == NULL
464 OPENSSL_free(prov);
469 prov->refcnt = 1; /* 1 One reference to be returned */
471 if ((prov->opbits_lock = CRYPTO_THREAD_lock_new()) == NULL
472 || (prov->flag_lock = CRYPTO_THREAD_lock_new()) == NULL
473 || (prov->name = OPENSSL_strdup(name)) == NULL
474 || (prov->parameters = sk_INFOPAIR_deep_copy(parameters,
477 ossl_provider_free(prov);
482 prov->init_function = init_function;
484 return prov;
487 int ossl_provider_up_ref(OSSL_PROVIDER *prov)
491 if (CRYPTO_UP_REF(&prov->refcnt, &ref, prov->refcnt_lock) <= 0)
495 if (prov->ischild) {
496 if (!ossl_provider_up_ref_parent(prov, 0)) {
497 ossl_provider_free(prov);
507 static int provider_up_ref_intern(OSSL_PROVIDER *prov, int activate)
510 return ossl_provider_activate(prov, 1, 0);
512 return ossl_provider_up_ref(prov);
515 static int provider_free_intern(OSSL_PROVIDER *prov, int deactivate)
518 return ossl_provider_deactivate(prov, 1);
520 ossl_provider_free(prov);
536 OSSL_PROVIDER *prov = NULL;
570 if ((prov = provider_new(name, template.init, template.parameters)) == NULL)
573 prov->libctx = libctx;
575 prov->error_lib = ERR_get_next_error_library();
584 return prov;
588 static int create_provider_children(OSSL_PROVIDER *prov)
592 struct provider_store_st *store = prov->store;
603 ret &= child_cb->create_cb((OSSL_CORE_HANDLE *)prov, child_cb->cbdata);
610 int ossl_provider_add_to_store(OSSL_PROVIDER *prov, OSSL_PROVIDER **actualprov,
621 if ((store = get_provider_store(prov->libctx)) == NULL)
627 tmpl.name = (char *)prov->name;
630 actualtmp = prov;
635 if (sk_OSSL_PROVIDER_push(store->providers, prov) == 0)
637 prov->store = store;
638 if (!create_provider_children(prov)) {
639 sk_OSSL_PROVIDER_delete_ptr(store->providers, prov);
668 ossl_provider_deactivate(prov, 0);
669 ossl_provider_free(prov);
679 void ossl_provider_free(OSSL_PROVIDER *prov)
681 if (prov != NULL) {
684 CRYPTO_DOWN_REF(&prov->refcnt, &ref, prov->refcnt_lock);
695 if (prov->flag_initialized) {
696 ossl_provider_teardown(prov);
699 if (prov->error_strings != NULL) {
700 ERR_unload_strings(prov->error_lib, prov->error_strings);
701 OPENSSL_free(prov->error_strings);
702 prov->error_strings = NULL;
706 OPENSSL_free(prov->operation_bits);
707 prov->operation_bits = NULL;
708 prov->operation_bits_sz = 0;
709 prov->flag_initialized = 0;
718 ossl_init_thread_deregister(prov);
719 DSO_free(prov->module);
721 OPENSSL_free(prov->name);
722 OPENSSL_free(prov->path);
723 sk_INFOPAIR_pop_free(prov->parameters, infopair_free);
724 CRYPTO_THREAD_lock_free(prov->opbits_lock);
725 CRYPTO_THREAD_lock_free(prov->flag_lock);
727 CRYPTO_THREAD_lock_free(prov->refcnt_lock);
729 OPENSSL_free(prov);
732 else if (prov->ischild) {
733 ossl_provider_free_parent(prov, 0);
740 int ossl_provider_set_module_path(OSSL_PROVIDER *prov, const char *module_path)
742 OPENSSL_free(prov->path);
743 prov->path = NULL;
746 if ((prov->path = OPENSSL_strdup(module_path)) != NULL)
774 int ossl_provider_add_parameter(OSSL_PROVIDER *prov,
777 return infopair_add(&prov->parameters, name, value);
830 static int provider_init(OSSL_PROVIDER *prov)
841 if (!ossl_assert(!prov->flag_initialized)) {
850 if (prov->init_function == NULL) {
854 if (prov->module == NULL) {
862 if ((prov->module = DSO_new()) == NULL) {
867 if ((store = get_provider_store(prov->libctx)) == NULL
889 DSO_ctrl(prov->module, DSO_CTRL_SET_FLAGS,
892 module_path = prov->path;
895 DSO_convert_filename(prov->module, prov->name);
897 merged_path = DSO_merge(prov->module, module_path, load_dir);
900 || (DSO_load(prov->module, merged_path, NULL, 0)) == NULL) {
901 DSO_free(prov->module);
902 prov->module = NULL;
910 if (prov->module == NULL) {
913 "name=%s", prov->name);
917 prov->init_function = (OSSL_provider_init_fn *)
918 DSO_bind_func(prov->module, "OSSL_provider_init");
923 if (prov->init_function == NULL) {
926 prov->name);
930 if (!prov->init_function((OSSL_CORE_HANDLE *)prov, core_dispatch,
933 "name=%s", prov->name);
936 prov->provctx = tmp_provctx;
937 prov->dispatch = provider_dispatch;
942 prov->teardown =
946 prov->gettable_params =
950 prov->get_params =
954 prov->self_test =
958 prov->get_capabilities =
962 prov->query_operation =
966 prov->unquery_operation =
983 const OSSL_ITEM *reasonstrings = p_get_reason_strings(prov->provctx);
1002 prov->error_strings =
1004 if (prov->error_strings == NULL)
1010 prov->error_strings[0].error = ERR_PACK(prov->error_lib, 0, 0);
1011 prov->error_strings[0].string = prov->name;
1013 * Copy reasonstrings item 0..cnt-1 to prov->error_trings positions
1017 prov->error_strings[cnt2].error = (int)reasonstrings[cnt2-1].id;
1018 prov->error_strings[cnt2].string = reasonstrings[cnt2-1].ptr;
1021 ERR_load_strings(prov->error_lib, prov->error_strings);
1027 prov->flag_initialized = 1;
1040 static int provider_deactivate(OSSL_PROVIDER *prov, int upcalls,
1050 if (!ossl_assert(prov != NULL))
1057 store = get_provider_store(prov->libctx);
1063 if (lock && !CRYPTO_THREAD_write_lock(prov->flag_lock)) {
1069 if (prov->activatecnt >= 2 && prov->ischild && upcalls) {
1080 if ((count = --prov->activatecnt) < 1)
1081 prov->flag_activated = 0;
1094 child_cb->remove_cb((OSSL_CORE_HANDLE *)prov, child_cb->cbdata);
1099 CRYPTO_THREAD_unlock(prov->flag_lock);
1104 ossl_provider_free_parent(prov, 1);
1115 static int provider_activate(OSSL_PROVIDER *prov, int lock, int upcalls)
1121 store = prov->store;
1128 if (!provider_init(prov))
1133 if (prov->ischild && upcalls && !ossl_provider_up_ref_parent(prov, 1))
1139 if (prov->ischild && upcalls)
1140 ossl_provider_free_parent(prov, 1);
1145 if (lock && !CRYPTO_THREAD_write_lock(prov->flag_lock)) {
1148 if (prov->ischild && upcalls)
1149 ossl_provider_free_parent(prov, 1);
1154 count = ++prov->activatecnt;
1155 prov->flag_activated = 1;
1157 if (prov->activatecnt == 1 && store != NULL) {
1158 ret = create_provider_children(prov);
1161 CRYPTO_THREAD_unlock(prov->flag_lock);
1171 static int provider_flush_store_cache(const OSSL_PROVIDER *prov)
1176 if ((store = get_provider_store(prov->libctx)) == NULL)
1186 = evp_method_store_cache_flush(prov->libctx)
1188 + ossl_encoder_store_cache_flush(prov->libctx)
1189 + ossl_decoder_store_cache_flush(prov->libctx)
1190 + ossl_store_loader_store_cache_flush(prov->libctx)
1203 static int provider_remove_store_methods(OSSL_PROVIDER *prov)
1208 if ((store = get_provider_store(prov->libctx)) == NULL)
1219 if (!CRYPTO_THREAD_write_lock(prov->opbits_lock))
1221 OPENSSL_free(prov->operation_bits);
1222 prov->operation_bits = NULL;
1223 prov->operation_bits_sz = 0;
1224 CRYPTO_THREAD_unlock(prov->opbits_lock);
1226 acc = evp_method_store_remove_all_provided(prov)
1228 + ossl_encoder_store_remove_all_provided(prov)
1229 + ossl_decoder_store_remove_all_provided(prov)
1230 + ossl_store_loader_store_remove_all_provided(prov)
1243 int ossl_provider_activate(OSSL_PROVIDER *prov, int upcalls, int aschild)
1247 if (prov == NULL)
1254 if (aschild && !prov->ischild)
1257 if ((count = provider_activate(prov, 1, upcalls)) > 0)
1258 return count == 1 ? provider_flush_store_cache(prov) : 1;
1263 int ossl_provider_deactivate(OSSL_PROVIDER *prov, int removechildren)
1267 if (prov == NULL
1268 || (count = provider_deactivate(prov, 1, removechildren)) < 0)
1270 return count == 0 ? provider_remove_store_methods(prov) : 1;
1273 void *ossl_provider_ctx(const OSSL_PROVIDER *prov)
1275 return prov != NULL ? prov->provctx : NULL;
1307 OSSL_PROVIDER *prov = NULL;
1315 prov = provider_new(p->name, p->init, NULL);
1316 if (prov == NULL)
1318 prov->libctx = store->libctx;
1320 prov->error_lib = ERR_get_next_error_library();
1329 if (provider_activate(prov, 0, 0) < 0) {
1330 ossl_provider_free(prov);
1333 prov->store = store;
1334 if (sk_OSSL_PROVIDER_push(store->providers, prov) == 0) {
1335 ossl_provider_free(prov);
1390 OSSL_PROVIDER *prov = sk_OSSL_PROVIDER_value(provs, curr);
1392 if (!CRYPTO_THREAD_write_lock(prov->flag_lock))
1394 if (prov->flag_activated) {
1400 if (CRYPTO_UP_REF(&prov->refcnt, &ref, prov->refcnt_lock) <= 0) {
1401 CRYPTO_THREAD_unlock(prov->flag_lock);
1412 if (provider_activate(prov, 0, 0) < 0) {
1413 CRYPTO_DOWN_REF(&prov->refcnt, &ref, prov->refcnt_lock);
1414 CRYPTO_THREAD_unlock(prov->flag_lock);
1421 CRYPTO_THREAD_unlock(prov->flag_lock);
1429 OSSL_PROVIDER *prov = sk_OSSL_PROVIDER_value(provs, curr);
1431 if (!cb(prov, cbdata)) {
1450 OSSL_PROVIDER *prov = sk_OSSL_PROVIDER_value(provs, curr);
1452 provider_deactivate(prov, 0, 1);
1458 CRYPTO_DOWN_REF(&prov->refcnt, &ref, prov->refcnt_lock);
1471 OSSL_PROVIDER *prov = NULL;
1478 prov = ossl_provider_find(libctx, name, 0);
1479 if (prov != NULL) {
1480 if (!CRYPTO_THREAD_read_lock(prov->flag_lock))
1482 available = prov->flag_activated;
1483 CRYPTO_THREAD_unlock(prov->flag_lock);
1484 ossl_provider_free(prov);
1490 int ossl_provider_set_fallback(OSSL_PROVIDER *prov)
1492 if (prov == NULL)
1495 prov->flag_fallback = 1;
1500 const char *ossl_provider_name(const OSSL_PROVIDER *prov)
1502 return prov->name;
1505 const DSO *ossl_provider_dso(const OSSL_PROVIDER *prov)
1507 return prov->module;
1510 const char *ossl_provider_module_name(const OSSL_PROVIDER *prov)
1515 return DSO_get_filename(prov->module);
1519 const char *ossl_provider_module_path(const OSSL_PROVIDER *prov)
1525 return DSO_get_filename(prov->module);
1529 void *ossl_provider_prov_ctx(const OSSL_PROVIDER *prov)
1531 if (prov != NULL)
1532 return prov->provctx;
1537 const OSSL_DISPATCH *ossl_provider_get0_dispatch(const OSSL_PROVIDER *prov)
1539 if (prov != NULL)
1540 return prov->dispatch;
1545 OSSL_LIB_CTX *ossl_provider_libctx(const OSSL_PROVIDER *prov)
1547 return prov != NULL ? prov->libctx : NULL;
1551 void ossl_provider_teardown(const OSSL_PROVIDER *prov)
1553 if (prov->teardown != NULL
1555 && !prov->ischild
1558 prov->teardown(prov->provctx);
1561 const OSSL_PARAM *ossl_provider_gettable_params(const OSSL_PROVIDER *prov)
1563 return prov->gettable_params == NULL
1564 ? NULL : prov->gettable_params(prov->provctx);
1567 int ossl_provider_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[])
1569 return prov->get_params == NULL
1570 ? 0 : prov->get_params(prov->provctx, params);
1573 int ossl_provider_self_test(const OSSL_PROVIDER *prov)
1577 if (prov->self_test == NULL)
1579 ret = prov->self_test(prov->provctx);
1581 (void)provider_remove_store_methods((OSSL_PROVIDER *)prov);
1585 int ossl_provider_get_capabilities(const OSSL_PROVIDER *prov,
1590 return prov->get_capabilities == NULL
1591 ? 1 : prov->get_capabilities(prov->provctx, capability, cb, arg);
1594 const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov,
1600 if (prov->query_operation == NULL)
1602 res = prov->query_operation(prov->provctx, operation_id, no_cache);
1611 void ossl_provider_unquery_operation(const OSSL_PROVIDER *prov,
1615 if (prov->unquery_operation != NULL)
1616 prov->unquery_operation(prov->provctx, operation_id, algs);
1666 const OSSL_CORE_HANDLE *ossl_provider_get_parent(OSSL_PROVIDER *prov)
1668 return prov->handle;
1671 int ossl_provider_is_child(const OSSL_PROVIDER *prov)
1673 return prov->ischild;
1676 int ossl_provider_set_child(OSSL_PROVIDER *prov, const OSSL_CORE_HANDLE *handle)
1678 prov->handle = handle;
1679 prov->ischild = 1;
1725 OSSL_PROVIDER *prov;
1738 child_cb->prov = thisprov;
1758 prov = sk_OSSL_PROVIDER_value(store->providers, i);
1760 if (!CRYPTO_THREAD_read_lock(prov->flag_lock))
1762 activated = prov->flag_activated;
1763 CRYPTO_THREAD_unlock(prov->flag_lock);
1773 if (activated && !create_cb((OSSL_CORE_HANDLE *)prov, cbdata))
1783 prov = sk_OSSL_PROVIDER_value(store->providers, i);
1784 remove_cb((OSSL_CORE_HANDLE *)prov, cbdata);
1814 if (child_cb->prov == thisprov) {
1917 OSSL_PROVIDER *prov = (OSSL_PROVIDER *)handle;
1922 OSSL_PARAM_set_utf8_ptr(p, prov->name);
1927 OSSL_PARAM_set_utf8_ptr(p, ossl_provider_module_path(prov));
1930 if (prov->parameters == NULL)
1933 for (i = 0; i < sk_INFOPAIR_num(prov->parameters); i++) {
1934 INFOPAIR *pair = sk_INFOPAIR_value(prov->parameters, i);
1948 OSSL_PROVIDER *prov = (OSSL_PROVIDER *)handle;
1952 * NULL for |prov| == NULL and NULL libctx has a special meaning
1953 * that does not apply here. Here |prov| == NULL can happen only in
1956 assert(prov != NULL);
1957 return (OPENSSL_CORE_CTX *)prov->libctx;
1968 OSSL_PROVIDER *prov = (OSSL_PROVIDER *)handle;
1970 return ossl_init_thread_start(prov, arg, handfn);
2004 OSSL_PROVIDER *prov = (OSSL_PROVIDER *)handle;
2014 ERR_vset_error(prov->error_lib, (int)reason, fmt, args);
2039 static const char *core_provider_get0_name(const OSSL_CORE_HANDLE *prov)
2041 return OSSL_PROVIDER_get0_name((const OSSL_PROVIDER *)prov);
2044 static void *core_provider_get0_provider_ctx(const OSSL_CORE_HANDLE *prov)
2046 return OSSL_PROVIDER_get0_provider_ctx((const OSSL_PROVIDER *)prov);
2050 core_provider_get0_dispatch(const OSSL_CORE_HANDLE *prov)
2052 return OSSL_PROVIDER_get0_dispatch((const OSSL_PROVIDER *)prov);
2055 static int core_provider_up_ref_intern(const OSSL_CORE_HANDLE *prov,
2058 return provider_up_ref_intern((OSSL_PROVIDER *)prov, activate);
2061 static int core_provider_free_intern(const OSSL_CORE_HANDLE *prov,
2064 return provider_free_intern((OSSL_PROVIDER *)prov, deactivate);
2067 static int core_obj_add_sigid(const OSSL_CORE_HANDLE *prov,
2095 static int core_obj_create(const OSSL_CORE_HANDLE *prov, const char *oid,