When exporting/importing decoded keys do not use 0 as selection
When decoding 0 as the selection means to decode anything you get. However when exporting and then importing the key data 0 as selection is not meaningful. So we set it to OSSL_KEYMGMT_SELECT_ALL to make the export/import function export/import everything that we have decoded. Fixes #21493 Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Todd Short <todd.short@me.com> (Merged from https://github.com/openssl/openssl/pull/21519)
This commit is contained in:
parent
1ae4678ceb
commit
2acb0d363c
4 changed files with 20 additions and 4 deletions
|
@ -155,7 +155,11 @@ static int decoder_construct_pkey(OSSL_DECODER_INSTANCE *decoder_inst,
|
|||
|
||||
import_data.keymgmt = keymgmt;
|
||||
import_data.keydata = NULL;
|
||||
import_data.selection = data->selection;
|
||||
if (data->selection == 0)
|
||||
/* import/export functions do not tolerate 0 selection */
|
||||
import_data.selection = OSSL_KEYMGMT_SELECT_ALL;
|
||||
else
|
||||
import_data.selection = data->selection;
|
||||
|
||||
/*
|
||||
* No need to check for errors here, the value of
|
||||
|
|
|
@ -317,10 +317,14 @@ static int der2key_export_object(void *vctx,
|
|||
void *keydata;
|
||||
|
||||
if (reference_sz == sizeof(keydata) && export != NULL) {
|
||||
int selection = ctx->selection;
|
||||
|
||||
if (selection == 0)
|
||||
selection = OSSL_KEYMGMT_SELECT_ALL;
|
||||
/* The contents of the reference is the address to our object */
|
||||
keydata = *(void **)reference;
|
||||
|
||||
return export(keydata, ctx->selection, export_cb, export_cbarg);
|
||||
return export(keydata, selection, export_cb, export_cbarg);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -221,10 +221,14 @@ msblob2key_export_object(void *vctx,
|
|||
void *keydata;
|
||||
|
||||
if (reference_sz == sizeof(keydata) && export != NULL) {
|
||||
int selection = ctx->selection;
|
||||
|
||||
if (selection == 0)
|
||||
selection = OSSL_KEYMGMT_SELECT_ALL;
|
||||
/* The contents of the reference is the address to our object */
|
||||
keydata = *(void **)reference;
|
||||
|
||||
return export(keydata, ctx->selection, export_cb, export_cbarg);
|
||||
return export(keydata, selection, export_cb, export_cbarg);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -190,10 +190,14 @@ static int pvk2key_export_object(void *vctx,
|
|||
void *keydata;
|
||||
|
||||
if (reference_sz == sizeof(keydata) && export != NULL) {
|
||||
int selection = ctx->selection;
|
||||
|
||||
if (selection == 0)
|
||||
selection = OSSL_KEYMGMT_SELECT_ALL;
|
||||
/* The contents of the reference is the address to our object */
|
||||
keydata = *(void **)reference;
|
||||
|
||||
return export(keydata, ctx->selection, export_cb, export_cbarg);
|
||||
return export(keydata, selection, export_cb, export_cbarg);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue