DECODER & ENCODER: Add better tracing

Now that we have functions to get the name and properties of the
diverse implementations, we can as well display them for clarity.

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15604)
master
Richard Levitte 2 years ago
parent cd77073879
commit 27fb7a0a27

@ -219,6 +219,7 @@ struct collect_decoder_data_st {
STACK_OF(OPENSSL_CSTRING) *names;
OSSL_DECODER_CTX *ctx;
int total;
unsigned int error_occurred:1;
};
@ -247,6 +248,15 @@ static void collect_decoder(OSSL_DECODER *decoder, void *arg)
&& !decoder->does_selection(provctx, data->ctx->selection))
return;
OSSL_TRACE_BEGIN(DECODER) {
BIO_printf(trc_out,
"(ctx %p) Checking out decoder %p:\n"
" %s with %s\n",
(void *)data->ctx, (void *)decoder,
OSSL_DECODER_get0_name(decoder),
OSSL_DECODER_get0_properties(decoder));
} OSSL_TRACE_END(DECODER);
end_i = sk_OPENSSL_CSTRING_num(data->names);
for (i = 0; i < end_i; i++) {
const char *name = sk_OPENSSL_CSTRING_value(data->names, i);
@ -288,6 +298,7 @@ static void collect_decoder(OSSL_DECODER *decoder, void *arg)
data->error_occurred = 1;
return;
}
data->total++;
/* Success */
return;
@ -306,6 +317,8 @@ int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx,
struct decoder_pkey_data_st *process_data = NULL;
STACK_OF(EVP_KEYMGMT) *keymgmts = NULL;
STACK_OF(OPENSSL_CSTRING) *names = NULL;
const char *input_type = ctx->start_input_type;
const char *input_structure = ctx->input_structure;
int ok = 0;
int isecoid = 0;
@ -314,6 +327,18 @@ int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx,
|| strcmp(keytype, "1.2.840.10045.2.1") == 0))
isecoid = 1;
OSSL_TRACE_BEGIN(DECODER) {
BIO_printf(trc_out,
"(ctx %p) Looking for decoders producing %s%s%s%s%s%s\n",
(void *)ctx,
keytype != NULL ? keytype : "",
keytype != NULL ? " keys" : "keys of any type",
input_type != NULL ? " from " : "",
input_type != NULL ? input_type : "",
input_structure != NULL ? " with " : "",
input_structure != NULL ? input_structure : "");
} OSSL_TRACE_END(DECODER);
if ((process_data = OPENSSL_zalloc(sizeof(*process_data))) == NULL
|| (propquery != NULL
&& (process_data->propq = OPENSSL_strdup(propquery)) == NULL)
@ -354,6 +379,19 @@ int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx,
sk_EVP_KEYMGMT_free(keymgmts);
keymgmts = NULL;
OSSL_TRACE_BEGIN(DECODER) {
int i, end = sk_OPENSSL_CSTRING_num(names);
BIO_printf(trc_out,
" Found %d keytypes (possibly with duplicates)",
end);
for (i = 0; i < end; i++)
BIO_printf(trc_out, "%s%s",
i == 0 ? ": " : ", ",
sk_OPENSSL_CSTRING_value(names, i));
BIO_printf(trc_out, "\n");
} OSSL_TRACE_END(DECODER);
/*
* Finally, find all decoders that have any keymgmt of the collected
* keymgmt names
@ -370,6 +408,12 @@ int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx,
if (collect_decoder_data.error_occurred)
goto err;
OSSL_TRACE_BEGIN(DECODER) {
BIO_printf(trc_out,
"(ctx %p) Got %d decoders producing keys\n",
(void *)ctx, collect_decoder_data.total);
} OSSL_TRACE_END(DECODER);
}
if (OSSL_DECODER_CTX_get_num_decoders(ctx) != 0) {

Loading…
Cancel
Save