Commit 85e2417c authored by Richard Levitte's avatar Richard Levitte
Browse files

Replumbing: Add an OSSL_PROVIDER iterator with callback

parent e2146e12
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -328,6 +328,30 @@ int ossl_provider_activate(OSSL_PROVIDER *prov)
    return 1;
}

int ossl_provider_forall_loaded(OPENSSL_CTX *ctx,
                                int (*cb)(OSSL_PROVIDER *provider,
                                          void *cbdata),
                                void *cbdata)
{
    int ret = 1;
    int i;
    struct provider_store_st *store = get_provider_store(ctx);

    if (store != NULL) {
        CRYPTO_THREAD_read_lock(store->lock);
        for (i = 0; i < sk_OSSL_PROVIDER_num(store->providers); i++) {
            OSSL_PROVIDER *prov = sk_OSSL_PROVIDER_value(store->providers, i);

            if (prov->flag_initialized
                && !(ret = cb(prov, cbdata)))
                break;
        }
        CRYPTO_THREAD_unlock(store->lock);
    }

    return ret;
}

/* Getters of Provider Object data */
const char *ossl_provider_name(OSSL_PROVIDER *prov)
{
+11 −1
Original line number Diff line number Diff line
@@ -4,7 +4,8 @@

ossl_provider_find, ossl_provider_new, ossl_provider_upref,
ossl_provider_free, ossl_provider_add_module_location,
ossl_provider_activate, ossl_provider_name, ossl_provider_dso,
ossl_provider_activate, ossl_provider_forall_loaded,
ossl_provider_name, ossl_provider_dso,
ossl_provider_module_name, ossl_provider_module_path,
ossl_provider_teardown, ossl_provider_get_param_types,
ossl_provider_get_params - internal provider routines
@@ -25,6 +26,12 @@ ossl_provider_get_params - internal provider routines
 /* Load and initialize the Provider */
 int ossl_provider_activate(OSSL_PROVIDER *prov);

 /* Iterate over all loaded providers */
 int ossl_provider_forall_loaded(OPENSSL_CTX *,
                                 int (*cb)(OSSL_PROVIDER *provider,
                                           void *cbdata),
                                 void *cbdata);

 /* Getters for other library functions */
 const char *ossl_provider_name(OSSL_PROVIDER *prov);
 const DSO *ossl_provider_dso(OSSL_PROVIDER *prov);
@@ -102,6 +109,9 @@ be located in that module, and called.

=back

ossl_provider_forall_loaded() iterates over all the currently
"activated" providers, and calls C<cb> for each of them.

ossl_provider_name() returns the name that was given with
ossl_provider_new().

+6 −0
Original line number Diff line number Diff line
@@ -42,6 +42,12 @@ int ossl_provider_add_module_location(OSSL_PROVIDER *prov, const char *loc);
 */
int ossl_provider_activate(OSSL_PROVIDER *prov);

/* Iterate over all loaded providers */
int ossl_provider_forall_loaded(OPENSSL_CTX *,
                                int (*cb)(OSSL_PROVIDER *provider,
                                          void *cbdata),
                                void *cbdata);

/* Getters for other library functions */
const char *ossl_provider_name(OSSL_PROVIDER *prov);
const DSO *ossl_provider_dso(OSSL_PROVIDER *prov);