Path: blob/main/crypto/openssl/include/internal/provider.h
34879 views
/*1* Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved.2*3* Licensed under the Apache License 2.0 (the "License"). You may not use4* this file except in compliance with the License. You can obtain a copy5* in the file LICENSE in the source distribution or at6* https://www.openssl.org/source/license.html7*/89#ifndef OSSL_INTERNAL_PROVIDER_H10# define OSSL_INTERNAL_PROVIDER_H11# pragma once1213# include <openssl/core.h>14# include <openssl/core_dispatch.h>15# include "internal/dso.h"16# include "internal/symhacks.h"1718# ifdef __cplusplus19extern "C" {20# endif2122/*23* namespaces:24*25* ossl_provider_ Provider Object internal API26* OSSL_PROVIDER Provider Object27*/2829/* Provider Object finder, constructor and destructor */30OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name,31int noconfig);32OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name,33OSSL_provider_init_fn *init_function,34OSSL_PARAM *params, int noconfig);35int ossl_provider_up_ref(OSSL_PROVIDER *prov);36void ossl_provider_free(OSSL_PROVIDER *prov);3738/* Setters */39int ossl_provider_set_module_path(OSSL_PROVIDER *prov, const char *module_path);4041int ossl_provider_is_child(const OSSL_PROVIDER *prov);42int ossl_provider_set_child(OSSL_PROVIDER *prov, const OSSL_CORE_HANDLE *handle);43const OSSL_CORE_HANDLE *ossl_provider_get_parent(OSSL_PROVIDER *prov);44int ossl_provider_up_ref_parent(OSSL_PROVIDER *prov, int activate);45int ossl_provider_free_parent(OSSL_PROVIDER *prov, int deactivate);46int ossl_provider_default_props_update(OSSL_LIB_CTX *libctx, const char *props);4748/* Disable fallback loading */49int ossl_provider_disable_fallback_loading(OSSL_LIB_CTX *libctx);5051/*52* Activate the Provider53* If the Provider is a module, the module will be loaded54*/55int ossl_provider_activate(OSSL_PROVIDER *prov, int upcalls, int aschild);56int ossl_provider_deactivate(OSSL_PROVIDER *prov, int removechildren);57int ossl_provider_add_to_store(OSSL_PROVIDER *prov, OSSL_PROVIDER **actualprov,58int retain_fallbacks);5960/* Return pointer to the provider's context */61void *ossl_provider_ctx(const OSSL_PROVIDER *prov);6263/* Force loading of fallback providers if necessary */64int ossl_provider_activate_fallbacks(OSSL_LIB_CTX *ctx);6566/* Iterate over all loaded providers */67int ossl_provider_doall_activated(OSSL_LIB_CTX *,68int (*cb)(OSSL_PROVIDER *provider,69void *cbdata),70void *cbdata);7172/* Getters for other library functions */73const char *ossl_provider_name(const OSSL_PROVIDER *prov);74const DSO *ossl_provider_dso(const OSSL_PROVIDER *prov);75const char *ossl_provider_module_name(const OSSL_PROVIDER *prov);76const char *ossl_provider_module_path(const OSSL_PROVIDER *prov);77const OSSL_DISPATCH *ossl_provider_get0_dispatch(const OSSL_PROVIDER *prov);78OSSL_LIB_CTX *ossl_provider_libctx(const OSSL_PROVIDER *prov);7980/* Thin wrappers around calls to the provider */81void ossl_provider_teardown(const OSSL_PROVIDER *prov);82const OSSL_PARAM *ossl_provider_gettable_params(const OSSL_PROVIDER *prov);83int ossl_provider_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]);84int ossl_provider_get_capabilities(const OSSL_PROVIDER *prov,85const char *capability,86OSSL_CALLBACK *cb,87void *arg);88int ossl_provider_self_test(const OSSL_PROVIDER *prov);89int ossl_provider_random_bytes(const OSSL_PROVIDER *prov, int which,90void *buf, size_t n, unsigned int strength);91const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov,92int operation_id,93int *no_cache);94void ossl_provider_unquery_operation(const OSSL_PROVIDER *prov,95int operation_id,96const OSSL_ALGORITHM *algs);9798/*99* Cache of bits to see if we already added methods for an operation in100* the "permanent" method store.101* They should never be called for temporary method stores!102*/103int ossl_provider_set_operation_bit(OSSL_PROVIDER *provider, size_t bitnum);104int ossl_provider_test_operation_bit(OSSL_PROVIDER *provider, size_t bitnum,105int *result);106107/* Configuration */108void ossl_provider_add_conf_module(void);109110/* Child providers */111int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx,112const OSSL_CORE_HANDLE *handle,113const OSSL_DISPATCH *in);114void ossl_provider_deinit_child(OSSL_LIB_CTX *ctx);115116# ifdef __cplusplus117}118# endif119120#endif121122123