From: Richard Levitte Date: Wed, 28 Oct 2020 09:13:24 +0000 (+0100) Subject: DECODER: Add tracing X-Git-Tag: openssl-3.0.0-alpha9~141 X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff_plain;h=de5008a4076e36f7038180d60ae1521afb524d68;hp=df65c06b59f0ccd06398c0ff3034371fdefd8e70 DECODER: Add tracing Reviewed-by: Shane Lontis (Merged from https://github.com/openssl/openssl/pull/13248) --- diff --git a/crypto/encode_decode/decoder_lib.c b/crypto/encode_decode/decoder_lib.c index 64e6bcc185..8e9af13bbb 100644 --- a/crypto/encode_decode/decoder_lib.c +++ b/crypto/encode_decode/decoder_lib.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "internal/passphrase.h" #include "crypto/decoder.h" #include "encoder_local.h" @@ -210,6 +211,8 @@ void ossl_decoder_instance_free(OSSL_DECODER_INSTANCE *decoder_inst) int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx, OSSL_DECODER_INSTANCE *di) { + int ok; + if (ctx->decoder_insts == NULL && (ctx->decoder_insts = sk_OSSL_DECODER_INSTANCE_new_null()) == NULL) { @@ -217,7 +220,18 @@ int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx, return 0; } - return (sk_OSSL_DECODER_INSTANCE_push(ctx->decoder_insts, di) > 0); + ok = (sk_OSSL_DECODER_INSTANCE_push(ctx->decoder_insts, di) > 0); + if (ok) { + OSSL_TRACE_BEGIN(DECODER) { + BIO_printf(trc_out, + "(ctx %p) Added decoder instance %p (decoder %p) with:\n", + (void *)ctx, (void *)di, (void *)di->decoder); + BIO_printf(trc_out, + " input type: %s, input structure: %s\n", + di->input_type, di->input_structure); + } OSSL_TRACE_END(DECODER); + } + return ok; } int OSSL_DECODER_CTX_add_decoder(OSSL_DECODER_CTX *ctx, OSSL_DECODER *decoder) @@ -615,6 +629,13 @@ static int decoder_process(const OSSL_PARAM params[], void *arg) decoder_process, &new_data, ossl_pw_passphrase_callback_dec, &new_data.ctx->pwdata); + + OSSL_TRACE_BEGIN(DECODER) { + BIO_printf(trc_out, + "(ctx %p) Running decoder instance %p => %d\n", + (void *)new_data.ctx, (void *)new_decoder_inst, ok); + } OSSL_TRACE_END(DECODER); + if (ok) break; err = ERR_peek_last_error(); diff --git a/crypto/encode_decode/decoder_pkey.c b/crypto/encode_decode/decoder_pkey.c index 1835106b95..3a765c5986 100644 --- a/crypto/encode_decode/decoder_pkey.c +++ b/crypto/encode_decode/decoder_pkey.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "crypto/evp.h" #include "crypto/decoder.h" #include "encoder_local.h" @@ -388,13 +389,27 @@ OSSL_DECODER_CTX_new_by_EVP_PKEY(EVP_PKEY **pkey, ERR_raise(ERR_LIB_OSSL_DECODER, ERR_R_MALLOC_FAILURE); return NULL; } + + OSSL_TRACE_BEGIN(DECODER) { + BIO_printf(trc_out, + "(ctx %p) Looking for %s decoders with selection %d\n", + (void *)ctx, keytype, selection); + BIO_printf(trc_out, " input type: %s, input structure: %s\n", + input_type, input_structure); + } OSSL_TRACE_END(DECODER); + if (OSSL_DECODER_CTX_set_input_type(ctx, input_type) && OSSL_DECODER_CTX_set_input_structure(ctx, input_structure) && OSSL_DECODER_CTX_set_selection(ctx, selection) && ossl_decoder_ctx_setup_for_EVP_PKEY(ctx, pkey, keytype, libctx, propquery) - && OSSL_DECODER_CTX_add_extra(ctx, libctx, propquery)) + && OSSL_DECODER_CTX_add_extra(ctx, libctx, propquery)) { + OSSL_TRACE_BEGIN(DECODER) { + BIO_printf(trc_out, "(ctx %p) Got %d decoders\n", + (void *)ctx, OSSL_DECODER_CTX_get_num_decoders(ctx)); + } OSSL_TRACE_END(DECODER); return ctx; + } OSSL_DECODER_CTX_free(ctx); return NULL; diff --git a/crypto/trace.c b/crypto/trace.c index a8316c12b1..46a1800753 100644 --- a/crypto/trace.c +++ b/crypto/trace.c @@ -136,6 +136,7 @@ static const struct trace_category_st trace_categories[] = { TRACE_CATEGORY_(X509V3_POLICY), TRACE_CATEGORY_(BN_CTX), TRACE_CATEGORY_(STORE), + TRACE_CATEGORY_(DECODER), }; const char *OSSL_trace_get_category_name(int num) diff --git a/include/openssl/trace.h b/include/openssl/trace.h index e1c66e00f8..d3e1e95df2 100644 --- a/include/openssl/trace.h +++ b/include/openssl/trace.h @@ -53,7 +53,8 @@ extern "C" { # define OSSL_TRACE_CATEGORY_BN_CTX 12 # define OSSL_TRACE_CATEGORY_CMP 13 # define OSSL_TRACE_CATEGORY_STORE 14 -# define OSSL_TRACE_CATEGORY_NUM 15 +# define OSSL_TRACE_CATEGORY_DECODER 15 +# define OSSL_TRACE_CATEGORY_NUM 16 /* Returns the trace category number for the given |name| */ int OSSL_trace_get_category_num(const char *name);