Skip to content

Commit

Permalink
Don't add the msblob/pvk decoders if they're not suitable
Browse files Browse the repository at this point in the history
msblob only decodes public/private keys (not just params).
pvk only decodes private keys.

If the requested selection doesn't intersect with the above then don't
consider those decoders.

Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from #21603)

(cherry picked from commit 6207f2b)
  • Loading branch information
mattcaswell authored and t8m committed Aug 1, 2023
1 parent 0059bb5 commit 64683ba
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
14 changes: 14 additions & 0 deletions providers/implementations/encode_decode/decode_msblob2key.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,18 @@ static void msblob2key_freectx(void *vctx)
OPENSSL_free(ctx);
}

static int msblob2key_does_selection(void *provctx, int selection)
{
if (selection == 0)
return 1;

if ((selection & (OSSL_KEYMGMT_SELECT_PRIVATE_KEY
| OSSL_KEYMGMT_SELECT_PUBLIC_KEY)) != 0)
return 1;

return 0;
}

static int msblob2key_decode(void *vctx, OSSL_CORE_BIO *cin, int selection,
OSSL_CALLBACK *data_cb, void *data_cbarg,
OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)
Expand Down Expand Up @@ -260,6 +272,8 @@ static void rsa_adjust(void *key, struct msblob2key_ctx_st *ctx)
(void (*)(void))msblob2##keytype##_newctx }, \
{ OSSL_FUNC_DECODER_FREECTX, \
(void (*)(void))msblob2key_freectx }, \
{ OSSL_FUNC_DECODER_DOES_SELECTION, \
(void (*)(void))msblob2key_does_selection }, \
{ OSSL_FUNC_DECODER_DECODE, \
(void (*)(void))msblob2key_decode }, \
{ OSSL_FUNC_DECODER_EXPORT_OBJECT, \
Expand Down
13 changes: 13 additions & 0 deletions providers/implementations/encode_decode/decode_pvk2key.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,17 @@ static void pvk2key_freectx(void *vctx)
OPENSSL_free(ctx);
}

static int pvk2key_does_selection(void *provctx, int selection)
{
if (selection == 0)
return 1;

if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0)
return 1;

return 0;
}

static int pvk2key_decode(void *vctx, OSSL_CORE_BIO *cin, int selection,
OSSL_CALLBACK *data_cb, void *data_cbarg,
OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)
Expand Down Expand Up @@ -226,6 +237,8 @@ static void rsa_adjust(void *key, struct pvk2key_ctx_st *ctx)
(void (*)(void))pvk2##keytype##_newctx }, \
{ OSSL_FUNC_DECODER_FREECTX, \
(void (*)(void))pvk2key_freectx }, \
{ OSSL_FUNC_DECODER_DOES_SELECTION, \
(void (*)(void))pvk2key_does_selection }, \
{ OSSL_FUNC_DECODER_DECODE, \
(void (*)(void))pvk2key_decode }, \
{ OSSL_FUNC_DECODER_EXPORT_OBJECT, \
Expand Down

0 comments on commit 64683ba

Please sign in to comment.