diff options
Diffstat (limited to 'crypto/encode_decode/decoder_pkey.c')
| -rw-r--r-- | crypto/encode_decode/decoder_pkey.c | 173 |
1 files changed, 95 insertions, 78 deletions
diff --git a/crypto/encode_decode/decoder_pkey.c b/crypto/encode_decode/decoder_pkey.c index ad5e2805319b..38fa7e5b5db5 100644 --- a/crypto/encode_decode/decoder_pkey.c +++ b/crypto/encode_decode/decoder_pkey.c @@ -20,28 +20,28 @@ #include "encoder_local.h" int OSSL_DECODER_CTX_set_passphrase(OSSL_DECODER_CTX *ctx, - const unsigned char *kstr, - size_t klen) + const unsigned char *kstr, + size_t klen) { return ossl_pw_set_passphrase(&ctx->pwdata, kstr, klen); } int OSSL_DECODER_CTX_set_passphrase_ui(OSSL_DECODER_CTX *ctx, - const UI_METHOD *ui_method, - void *ui_data) + const UI_METHOD *ui_method, + void *ui_data) { return ossl_pw_set_ui_method(&ctx->pwdata, ui_method, ui_data); } int OSSL_DECODER_CTX_set_pem_password_cb(OSSL_DECODER_CTX *ctx, - pem_password_cb *cb, void *cbarg) + pem_password_cb *cb, void *cbarg) { return ossl_pw_set_pem_password_cb(&ctx->pwdata, cb, cbarg); } int OSSL_DECODER_CTX_set_passphrase_cb(OSSL_DECODER_CTX *ctx, - OSSL_PASSPHRASE_CALLBACK *cb, - void *cbarg) + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg) { return ossl_pw_set_ossl_passphrase_cb(&ctx->pwdata, cb, cbarg); } @@ -59,13 +59,13 @@ struct decoder_pkey_data_st { int selection; STACK_OF(EVP_KEYMGMT) *keymgmts; - char *object_type; /* recorded object data type, may be NULL */ - void **object; /* Where the result should end up */ + char *object_type; /* recorded object data type, may be NULL */ + void **object; /* Where the result should end up */ }; static int decoder_construct_pkey(OSSL_DECODER_INSTANCE *decoder_inst, - const OSSL_PARAM *params, - void *construct_data) + const OSSL_PARAM *params, + void *construct_data) { struct decoder_pkey_data_st *data = construct_data; OSSL_DECODER *decoder = OSSL_DECODER_INSTANCE_get_decoder(decoder_inst); @@ -126,8 +126,9 @@ static int decoder_construct_pkey(OSSL_DECODER_INSTANCE *decoder_inst, if (!EVP_KEYMGMT_up_ref(keymgmt)) return 0; } else if ((keymgmt = EVP_KEYMGMT_fetch(data->libctx, - data->object_type, - data->propq)) != NULL) { + data->object_type, + data->propq)) + != NULL) { keymgmt_prov = EVP_KEYMGMT_get0_provider(keymgmt); } @@ -161,9 +162,9 @@ static int decoder_construct_pkey(OSSL_DECODER_INSTANCE *decoder_inst, * |import_data.keydata| is as much an indicator. */ (void)decoder->export_object(decoderctx, - object_ref, object_ref_sz, - &evp_keymgmt_util_try_import, - &import_data); + object_ref, object_ref_sz, + &evp_keymgmt_util_try_import, + &import_data); keydata = import_data.keydata; import_data.keydata = NULL; } @@ -213,7 +214,7 @@ static void collect_keymgmt(EVP_KEYMGMT *keymgmt, void *arg) if (!EVP_KEYMGMT_up_ref(keymgmt) /* ref++ */) return; if (sk_EVP_KEYMGMT_push(keymgmts, keymgmt) <= 0) { - EVP_KEYMGMT_free(keymgmt); /* ref-- */ + EVP_KEYMGMT_free(keymgmt); /* ref-- */ return; } } @@ -223,7 +224,7 @@ struct collect_decoder_data_st { OSSL_DECODER_CTX *ctx; int total; - unsigned int error_occurred:1; + unsigned int error_occurred : 1; }; static void collect_decoder(OSSL_DECODER *decoder, void *arg) @@ -248,17 +249,19 @@ static void collect_decoder(OSSL_DECODER *decoder, void *arg) * it's seen as taking anything. */ if (decoder->does_selection != NULL - && !decoder->does_selection(provctx, data->ctx->selection)) + && !decoder->does_selection(provctx, data->ctx->selection)) return; - OSSL_TRACE_BEGIN(DECODER) { + 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); + "(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++) { @@ -278,14 +281,16 @@ static void collect_decoder(OSSL_DECODER *decoder, void *arg) return; } - OSSL_TRACE_BEGIN(DECODER) { + 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); + "(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); if (!ossl_decoder_ctx_add_decoder_inst(data->ctx, di)) { ossl_decoder_instance_free(di); @@ -304,9 +309,9 @@ static void collect_decoder(OSSL_DECODER *decoder, void *arg) } int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, - EVP_PKEY **pkey, const char *keytype, - OSSL_LIB_CTX *libctx, - const char *propquery) + EVP_PKEY **pkey, const char *keytype, + OSSL_LIB_CTX *libctx, + const char *propquery) { struct decoder_pkey_data_st *process_data = NULL; STACK_OF(OPENSSL_CSTRING) *names = NULL; @@ -317,21 +322,23 @@ int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, int i, end; if (keytype != NULL - && (strcmp(keytype, "id-ecPublicKey") == 0 - || strcmp(keytype, "1.2.840.10045.2.1") == 0)) + && (strcmp(keytype, "id-ecPublicKey") == 0 + || strcmp(keytype, "1.2.840.10045.2.1") == 0)) isecoid = 1; - OSSL_TRACE_BEGIN(DECODER) { + 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); + "(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 @@ -348,7 +355,7 @@ int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, /* First, find all keymgmts to form goals */ EVP_KEYMGMT_do_all_provided(libctx, collect_keymgmt, - process_data->keymgmts); + process_data->keymgmts); /* Then, we collect all the keymgmt names */ end = sk_EVP_KEYMGMT_num(process_data->keymgmts); @@ -363,8 +370,8 @@ int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, * we have seen that OID we try both key types */ if (keytype == NULL - || EVP_KEYMGMT_is_a(keymgmt, keytype) - || (isecoid && EVP_KEYMGMT_is_a(keymgmt, "SM2"))) { + || EVP_KEYMGMT_is_a(keymgmt, keytype) + || (isecoid && EVP_KEYMGMT_is_a(keymgmt, "SM2"))) { if (!EVP_KEYMGMT_names_do_all(keymgmt, collect_name, names)) { ERR_raise(ERR_LIB_OSSL_DECODER, ERR_R_INTERNAL_ERROR); goto err; @@ -372,54 +379,60 @@ int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, } } - OSSL_TRACE_BEGIN(DECODER) { + OSSL_TRACE_BEGIN(DECODER) + { end = sk_OPENSSL_CSTRING_num(names); BIO_printf(trc_out, - " Found %d keytypes (possibly with duplicates)", - end); + " 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)); + i == 0 ? ": " : ", ", + sk_OPENSSL_CSTRING_value(names, i)); BIO_printf(trc_out, "\n"); - } OSSL_TRACE_END(DECODER); + } + OSSL_TRACE_END(DECODER); /* * Finally, find all decoders that have any keymgmt of the collected * keymgmt names */ { - struct collect_decoder_data_st collect_decoder_data = { NULL, }; + struct collect_decoder_data_st collect_decoder_data = { + NULL, + }; collect_decoder_data.names = names; collect_decoder_data.ctx = ctx; OSSL_DECODER_do_all_provided(libctx, - collect_decoder, &collect_decoder_data); + collect_decoder, &collect_decoder_data); sk_OPENSSL_CSTRING_free(names); names = NULL; if (collect_decoder_data.error_occurred) goto err; - OSSL_TRACE_BEGIN(DECODER) { + 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); + "(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) { if (!OSSL_DECODER_CTX_set_construct(ctx, decoder_construct_pkey) || !OSSL_DECODER_CTX_set_construct_data(ctx, process_data) || !OSSL_DECODER_CTX_set_cleanup(ctx, - decoder_clean_pkey_construct_arg)) + decoder_clean_pkey_construct_arg)) goto err; process_data = NULL; /* Avoid it being freed */ } ok = 1; - err: +err: decoder_clean_pkey_construct_arg(process_data); sk_OPENSSL_CSTRING_free(names); @@ -428,10 +441,10 @@ int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, OSSL_DECODER_CTX * OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey, - const char *input_type, - const char *input_structure, - const char *keytype, int selection, - OSSL_LIB_CTX *libctx, const char *propquery) + const char *input_type, + const char *input_structure, + const char *keytype, int selection, + OSSL_LIB_CTX *libctx, const char *propquery) { OSSL_DECODER_CTX *ctx = NULL; @@ -440,24 +453,28 @@ OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey, return NULL; } - OSSL_TRACE_BEGIN(DECODER) { + OSSL_TRACE_BEGIN(DECODER) + { BIO_printf(trc_out, - "(ctx %p) Looking for %s decoders with selection %d\n", - (void *)ctx, keytype, selection); + "(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); + 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_pkey(ctx, pkey, keytype, - libctx, propquery) + libctx, propquery) && OSSL_DECODER_CTX_add_extra(ctx, libctx, propquery)) { - OSSL_TRACE_BEGIN(DECODER) { + 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); + (void *)ctx, OSSL_DECODER_CTX_get_num_decoders(ctx)); + } + OSSL_TRACE_END(DECODER); return ctx; } |
