diff --git a/crypto/encode_decode/decoder_meth.c b/crypto/encode_decode/decoder_meth.c index edbb140c44..0d389ac5a6 100644 --- a/crypto/encode_decode/decoder_meth.c +++ b/crypto/encode_decode/decoder_meth.c @@ -198,6 +198,11 @@ void *ossl_decoder_from_dispatch(int id, const OSSL_ALGORITHM *algodef, decoder->settable_ctx_params = OSSL_FUNC_decoder_settable_ctx_params(fns); break; + case OSSL_FUNC_DECODER_DOES_SELECTION: + if (decoder->does_selection == NULL) + decoder->does_selection = + OSSL_FUNC_decoder_does_selection(fns); + break; case OSSL_FUNC_DECODER_DECODE: if (decoder->decode == NULL) decoder->decode = OSSL_FUNC_decoder_decode(fns); diff --git a/crypto/encode_decode/encoder_local.h b/crypto/encode_decode/encoder_local.h index 9378393a42..18cddf50fb 100644 --- a/crypto/encode_decode/encoder_local.h +++ b/crypto/encode_decode/encoder_local.h @@ -46,6 +46,7 @@ struct ossl_decoder_st { OSSL_FUNC_decoder_gettable_params_fn *gettable_params; OSSL_FUNC_decoder_set_ctx_params_fn *set_ctx_params; OSSL_FUNC_decoder_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_decoder_does_selection_fn *does_selection; OSSL_FUNC_decoder_decode_fn *decode; OSSL_FUNC_decoder_export_object_fn *export_object; }; diff --git a/include/openssl/core_dispatch.h b/include/openssl/core_dispatch.h index 3b0cf3d3ed..cc8e6712ed 100644 --- a/include/openssl/core_dispatch.h +++ b/include/openssl/core_dispatch.h @@ -789,8 +789,9 @@ OSSL_CORE_MAKE_FUNC(void, encoder_free_object, (void *obj)) # define OSSL_FUNC_DECODER_GETTABLE_PARAMS 4 # define OSSL_FUNC_DECODER_SET_CTX_PARAMS 5 # define OSSL_FUNC_DECODER_SETTABLE_CTX_PARAMS 6 -# define OSSL_FUNC_DECODER_DECODE 10 -# define OSSL_FUNC_DECODER_EXPORT_OBJECT 11 +# define OSSL_FUNC_DECODER_DOES_SELECTION 10 +# define OSSL_FUNC_DECODER_DECODE 11 +# define OSSL_FUNC_DECODER_EXPORT_OBJECT 20 OSSL_CORE_MAKE_FUNC(void *, decoder_newctx, (void *provctx)) OSSL_CORE_MAKE_FUNC(void, decoder_freectx, (void *ctx)) OSSL_CORE_MAKE_FUNC(int, decoder_get_params, (OSSL_PARAM params[])) @@ -801,8 +802,10 @@ OSSL_CORE_MAKE_FUNC(int, decoder_set_ctx_params, OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_settable_ctx_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_does_selection, + (void *provctx, int selection)) OSSL_CORE_MAKE_FUNC(int, decoder_decode, - (void *ctx, OSSL_CORE_BIO *in, + (void *ctx, OSSL_CORE_BIO *in, int selection, OSSL_CALLBACK *metadata_cb, void *metadata_cbarg, OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) OSSL_CORE_MAKE_FUNC(int, decoder_export_object,