From: Neil Horman Date: Fri, 3 Jul 2026 13:05:58 +0000 (-0400) Subject: ugment p_ossltest with encoder/decoder/store algs X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=ac946a80d56672ad783f7239056357b11730e72d;p=thirdparty%2Fopenssl.git ugment p_ossltest with encoder/decoder/store algs Create dummy encoder/decoder and store algs in p_ossltest. They do nothing, except return algorithms on query. This allows our unit test 30-test_evp_list_noncache.t to exercise the refcounting of these objects when the provider requests no caching Reviewed-by: Bob Beck Reviewed-by: Paul Dale MergeDate: Tue Jul 14 05:21:38 2026 (Merged from https://github.com/openssl/openssl/pull/31844) --- diff --git a/test/p_ossltest.c b/test/p_ossltest.c index 78649944852..2f545ebf16d 100644 --- a/test/p_ossltest.c +++ b/test/p_ossltest.c @@ -1753,6 +1753,84 @@ static const OSSL_ALGORITHM ossltest_rands[] = { { NULL, NULL, NULL } }; +/* + * The implementations for the p_ossltest provider decoder/encoder/store objects + * are defined below, but they are dummy implementations and do nothing. They exist + * for the sole purpose of returning algorithms from this provider so that we can test if + * object creation and refcounting work when a provider requests no caching of the algorithm. + */ + +static int ossl_test_decode(void *ctx, OSSL_CORE_BIO *in, int selection, + OSSL_CALLBACK *cb, void *cbarg, + OSSL_PASSPHRASE_CALLBACK *pb, void *pbarg) +{ + return 1; +} + +static const OSSL_DISPATCH ossl_test_decoder_functions[] = { + { OSSL_FUNC_DECODER_DECODE, (void (*)(void))ossl_test_decode }, + OSSL_DISPATCH_END +}; + +static const OSSL_ALGORITHM ossl_test_decoders[] = { + ALG("p_ossltest_decoder", ossl_test_decoder_functions), + { NULL, NULL, NULL } +}; + +static int ossl_test_encode(void *ctx, OSSL_CORE_BIO *out, const void *obj, + const OSSL_PARAM obj_abstract[], + int selection, OSSL_PASSPHRASE_CALLBACK *pb, + void *pbarg) +{ + return 1; +} + +static const OSSL_DISPATCH ossl_test_encoder_functions[] = { + { OSSL_FUNC_ENCODER_ENCODE, (void (*)(void))ossl_test_encode }, + OSSL_DISPATCH_END +}; + +static const OSSL_ALGORITHM ossl_test_encoders[] = { + ALG("p_ossltest_encoder", ossl_test_encoder_functions), + { NULL, NULL, NULL } +}; + +static int dummy_store_value = 0; + +static void *ossl_test_store_open(void *provctx, const char *uri) +{ + return (void *)&dummy_store_value; +} + +static int ossl_test_store_load(void *ctx, OSSL_CALLBACK *object_fn, void *cbarg, + OSSL_PASSPHRASE_CALLBACK *pb, void *pbarg) +{ + return 0; +} + +static int ossl_test_store_eof(void *ctx) +{ + return 1; +} + +static int ossl_test_store_close(void *ctx) +{ + return 1; +} + +static const OSSL_DISPATCH ossl_test_store_functions[] = { + { OSSL_FUNC_STORE_OPEN, (void (*)(void))ossl_test_store_open }, + { OSSL_FUNC_STORE_LOAD, (void (*)(void))ossl_test_store_load }, + { OSSL_FUNC_STORE_EOF, (void (*)(void))ossl_test_store_eof }, + { OSSL_FUNC_STORE_CLOSE, (void (*)(void))ossl_test_store_close }, + OSSL_DISPATCH_END +}; + +static const OSSL_ALGORITHM ossl_test_stores[] = { + ALG("p_ossltest_store", ossl_test_store_functions), + { NULL, NULL, NULL } +}; + /** * @brief Implement ossltest query. * @@ -1777,6 +1855,12 @@ static const OSSL_ALGORITHM *ossltest_query(void *provctx, int operation_id, return ossltest_ciphers; case OSSL_OP_RAND: return ossltest_rands; + case OSSL_OP_DECODER: + return ossl_test_decoders; + case OSSL_OP_ENCODER: + return ossl_test_encoders; + case OSSL_OP_STORE: + return ossl_test_stores; } return NULL; }