Latest update.

This commit is contained in:
2019-05-23 12:02:56 +09:00
parent a7bf77581f
commit 64d458de91
185 changed files with 5859 additions and 2853 deletions
+20 -21
View File
@@ -54,6 +54,9 @@ struct ossl_provider_st {
OSSL_provider_get_param_types_fn *get_param_types;
OSSL_provider_get_params_fn *get_params;
OSSL_provider_query_operation_fn *query_operation;
/* Provider side data */
void *provctx;
};
DEFINE_STACK_OF(OSSL_PROVIDER)
@@ -76,7 +79,6 @@ struct provider_store_st {
CRYPTO_RWLOCK *lock;
unsigned int use_fallbacks:1;
};
static int provider_store_index = -1;
static void provider_store_free(void *vstore)
{
@@ -89,7 +91,7 @@ static void provider_store_free(void *vstore)
OPENSSL_free(store);
}
static void *provider_store_new(void)
static void *provider_store_new(OPENSSL_CTX *ctx)
{
struct provider_store_st *store = OPENSSL_zalloc(sizeof(*store));
const struct predefined_providers_st *p = NULL;
@@ -131,23 +133,12 @@ static const OPENSSL_CTX_METHOD provider_store_method = {
provider_store_free,
};
static CRYPTO_ONCE provider_store_init_flag = CRYPTO_ONCE_STATIC_INIT;
DEFINE_RUN_ONCE_STATIC(do_provider_store_init)
{
return OPENSSL_init_crypto(0, NULL)
&& (provider_store_index =
openssl_ctx_new_index(&provider_store_method)) != -1;
}
static struct provider_store_st *get_provider_store(OPENSSL_CTX *libctx)
{
struct provider_store_st *store = NULL;
if (!RUN_ONCE(&provider_store_init_flag, do_provider_store_init))
return NULL;
store = openssl_ctx_get_data(libctx, provider_store_index);
store = openssl_ctx_get_data(libctx, OPENSSL_CTX_PROVIDER_STORE_INDEX,
&provider_store_method);
if (store == NULL)
CRYPTOerr(CRYPTO_F_GET_PROVIDER_STORE, ERR_R_INTERNAL_ERROR);
return store;
@@ -275,7 +266,7 @@ void ossl_provider_free(OSSL_PROVIDER *prov)
*/
if (ref < 2 && prov->flag_initialized) {
if (prov->teardown != NULL)
prov->teardown();
prov->teardown(prov->provctx);
prov->flag_initialized = 0;
}
@@ -401,7 +392,8 @@ static int provider_activate(OSSL_PROVIDER *prov)
}
if (prov->init_function == NULL
|| !prov->init_function(prov, core_dispatch, &provider_dispatch)) {
|| !prov->init_function(prov, core_dispatch, &provider_dispatch,
&prov->provctx)) {
CRYPTOerr(CRYPTO_F_PROVIDER_ACTIVATE, ERR_R_INIT_FAIL);
ERR_add_error_data(2, "name=", prov->name);
DSO_free(prov->module);
@@ -448,6 +440,11 @@ int ossl_provider_activate(OSSL_PROVIDER *prov)
return 0;
}
void *ossl_provider_ctx(const OSSL_PROVIDER *prov)
{
return prov->provctx;
}
static int provider_forall_loaded(struct provider_store_st *store,
int *found_activated,
@@ -573,18 +570,20 @@ const char *ossl_provider_module_path(OSSL_PROVIDER *prov)
void ossl_provider_teardown(const OSSL_PROVIDER *prov)
{
if (prov->teardown != NULL)
prov->teardown();
prov->teardown(prov->provctx);
}
const OSSL_ITEM *ossl_provider_get_param_types(const OSSL_PROVIDER *prov)
{
return prov->get_param_types == NULL ? NULL : prov->get_param_types(prov);
return prov->get_param_types == NULL
? NULL : prov->get_param_types(prov->provctx);
}
int ossl_provider_get_params(const OSSL_PROVIDER *prov,
const OSSL_PARAM params[])
{
return prov->get_params == NULL ? 0 : prov->get_params(prov, params);
return prov->get_params == NULL
? 0 : prov->get_params(prov->provctx, params);
}
@@ -592,7 +591,7 @@ const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov,
int operation_id,
int *no_cache)
{
return prov->query_operation(prov, operation_id, no_cache);
return prov->query_operation(prov->provctx, operation_id, no_cache);
}
/*-