Remove frozen store. This is a mock up that will be replaced with the real implementation.

Reviewed-by: Saša Nedvědický <sashan@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Nikola Pajkovsky <nikolap@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/29331)
This commit is contained in:
Andrew Dinh
2025-12-19 01:10:27 +07:00
parent 5844109177
commit 9d4f44f3e7
3 changed files with 30 additions and 45 deletions

View File

@@ -388,6 +388,7 @@ inner_evp_generic_fetch(struct evp_method_data_st *methdata,
return method;
}
/* TODO: FREEZE: Replace with actual implementation */
/*
* Returns 1 if method store is frozen AND prop query is equal to frozen prop
* query. Only sets METHOD if found.
@@ -397,7 +398,6 @@ int evp_generic_fetch_frozen(OSSL_LIB_CTX *libctx, int operation_id,
OSSL_PROVIDER *prov, void **method)
{
OSSL_METHOD_STORE *store = get_evp_method_store(libctx);
OSSL_FROZEN_METHOD_STORE *frozen_store;
const char *store_propq;
OSSL_NAMEMAP *namemap;
uint32_t meth_id;
@@ -428,14 +428,12 @@ int evp_generic_fetch_frozen(OSSL_LIB_CTX *libctx, int operation_id,
}
/* Return 0 if not frozen or prop query is different than frozen prop query */
if (!ossl_method_store_is_frozen(store)
|| (frozen_store = ossl_get_frozen_method_store(store)) == NULL)
if (!ossl_method_store_is_frozen(store))
return 0;
if (strlen(propq) != 0
&& (store_propq = ossl_method_store_frozen_propq(store)) != NULL
&& strcmp(propq, store_propq) != 0) {
return 0;
if (strlen(propq) != 0) {
store_propq = ossl_get_frozen_method_store_propq(frozen_store);
if (strcmp(propq, store_propq) != 0)
return 0;
}
/* If we haven't received a name id yet, try to get one for the name */

View File

@@ -63,13 +63,6 @@ typedef struct {
LHASH_OF(QUERY) *cache;
} ALGORITHM;
struct ossl_frozen_method_store_st {
/* Property query associated with frozen state */
char *propq;
/* TODO: FREEZE */
};
struct ossl_method_store_st {
OSSL_LIB_CTX *ctx;
SPARSE_ARRAY_OF(ALGORITHM) * algs;
@@ -95,8 +88,11 @@ struct ossl_method_store_st {
/* Flag: 1 if query cache entries for all algs need flushing */
int cache_need_flush;
/* Non-null if method store is frozen */
OSSL_FROZEN_METHOD_STORE *frozen_store;
/* Flag: 1 if method store is frozen */
int frozen;
/* Property query associated with frozen state */
char *frozen_propq;
};
typedef struct {
@@ -276,9 +272,7 @@ void ossl_method_store_free(OSSL_METHOD_STORE *store)
ossl_sa_ALGORITHM_free(store->algs);
CRYPTO_THREAD_lock_free(store->lock);
CRYPTO_THREAD_lock_free(store->biglock);
if (store->frozen_store != NULL)
OPENSSL_free(store->frozen_store->propq);
OPENSSL_free(store->frozen_store);
OPENSSL_free(store->frozen_propq);
OPENSSL_free(store);
}
}
@@ -338,7 +332,7 @@ int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov,
int ret = 0;
int i;
if (nid <= 0 || method == NULL || store == NULL || store->frozen_store != NULL)
if (nid <= 0 || method == NULL || store == NULL || store->frozen == 1)
return 0;
if (properties == NULL)
@@ -452,7 +446,7 @@ int ossl_method_store_remove(OSSL_METHOD_STORE *store, int nid,
ALGORITHM *alg = NULL;
int i;
if (nid <= 0 || method == NULL || store == NULL || store->frozen_store != NULL)
if (nid <= 0 || method == NULL || store == NULL || store->frozen == 1)
return 0;
if (!ossl_property_write_lock(store))
@@ -554,7 +548,7 @@ int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store,
{
struct alg_cleanup_by_provider_data_st data;
if (store == NULL || store->frozen_store != NULL || !ossl_property_write_lock(store))
if (store == NULL || store->frozen == 1 || !ossl_property_write_lock(store))
return 0;
data.prov = prov;
data.store = store;
@@ -565,37 +559,30 @@ int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store,
int ossl_method_store_freeze(OSSL_METHOD_STORE *store, const char *propq)
{
if (store == NULL || store->frozen_store != NULL)
if (store == NULL || store->frozen == 1)
return 0;
store->frozen_store = OPENSSL_zalloc(sizeof(store->frozen_store));
if (store->frozen_store == NULL)
return 0;
if (propq != NULL) {
store->frozen_store->propq = OPENSSL_strdup(propq);
if (store->frozen_store->propq == NULL) {
OPENSSL_free(store->frozen_store);
store->frozen_store = NULL;
store->frozen_propq = OPENSSL_strdup(propq);
if (store->frozen_propq == NULL)
return 0;
}
}
/* TODO: FREEZE: Create frozen caches */
store->frozen = 1;
return 1;
}
int ossl_method_store_is_frozen(OSSL_METHOD_STORE *store)
{
return store != NULL && store->frozen_store != NULL;
return store != NULL && store->frozen == 1;
}
OSSL_FROZEN_METHOD_STORE *ossl_get_frozen_method_store(OSSL_METHOD_STORE *store)
const char *ossl_method_store_frozen_propq(OSSL_METHOD_STORE *store)
{
return store != NULL ? store->frozen_store : NULL;
}
const char *ossl_get_frozen_method_store_propq(OSSL_FROZEN_METHOD_STORE *store)
{
return (store != NULL && store->propq != NULL) ? store->propq : "";
if (store == NULL)
return NULL;
return store->frozen_propq;
}
static void alg_do_one(ALGORITHM *alg, IMPLEMENTATION *impl,
@@ -823,7 +810,7 @@ static void ossl_method_cache_flush(OSSL_METHOD_STORE *store, int nid)
int ossl_method_store_cache_flush_all(OSSL_METHOD_STORE *store)
{
if (store == NULL || store->frozen_store != NULL || !ossl_property_write_lock(store))
if (store == NULL || store->frozen == 1 || !ossl_property_write_lock(store))
return 0;
ossl_sa_ALGORITHM_doall(store->algs, &impl_cache_flush_alg);
store->cache_nelem = 0;
@@ -909,6 +896,7 @@ static void ossl_method_cache_flush_some(OSSL_METHOD_STORE *store)
static EVP_MD andrew_md;
static void *andrew_method = NULL;
/* TODO: FREEZE: Replace with actual implementation */
int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov,
int nid, const char *prop_query, void **method)
{
@@ -939,6 +927,7 @@ err:
return res;
}
/* TODO: FREEZE: Replace with actual implementation */
int ossl_frozen_method_store_cache_get(OSSL_METHOD_STORE *store,
OSSL_PROVIDER *prov, int nid,
const char *prop_query, void **method)
@@ -981,7 +970,7 @@ int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov,
size_t len;
int res = 1;
if (nid <= 0 || store == NULL || prop_query == NULL || store->frozen_store != NULL)
if (nid <= 0 || store == NULL || prop_query == NULL || store->frozen == 1)
return 0;
if (!ossl_assert(prov != NULL))

View File

@@ -15,7 +15,6 @@
#include "internal/cryptlib.h"
typedef struct ossl_method_store_st OSSL_METHOD_STORE;
typedef struct ossl_frozen_method_store_st OSSL_FROZEN_METHOD_STORE;
typedef struct ossl_property_list_st OSSL_PROPERTY_LIST;
typedef enum {
@@ -75,8 +74,7 @@ int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store,
/* Frozen method store related functions */
int ossl_method_store_freeze(OSSL_METHOD_STORE *store, const char *propq);
int ossl_method_store_is_frozen(OSSL_METHOD_STORE *store);
OSSL_FROZEN_METHOD_STORE *ossl_get_frozen_method_store(OSSL_METHOD_STORE *store);
const char *ossl_get_frozen_method_store_propq(OSSL_FROZEN_METHOD_STORE *store);
const char *ossl_method_store_frozen_propq(OSSL_METHOD_STORE *store);
/* Get the global properties associate with the specified library context */
OSSL_PROPERTY_LIST **ossl_ctx_global_properties(OSSL_LIB_CTX *ctx,