Adapt libcrypto functionality to specify the desired input structure

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/13248)
This commit is contained in:
Richard Levitte 2020-10-26 13:58:30 +01:00
parent 2c090c1d1b
commit 4f2abe4378
2 changed files with 7 additions and 13 deletions

View File

@ -24,23 +24,16 @@ static EVP_PKEY *pkey_type2param(int ptype, const void *pval,
if (ptype == V_ASN1_SEQUENCE) {
const ASN1_STRING *pstr = pval;
const unsigned char *pm = pstr->data;
int pmlen = pstr->length;
size_t pmlen = (size_t)pstr->length;
OSSL_DECODER_CTX *ctx = NULL;
BIO *membio = NULL;
int selection = OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
/* TODO(3.0): Need to be able to specify here that only params will do */
ctx = OSSL_DECODER_CTX_new_by_EVP_PKEY(&pkey, "DER", "EC", libctx,
propq);
ctx = OSSL_DECODER_CTX_new_by_EVP_PKEY(&pkey, "DER", NULL, "EC",
selection, libctx, propq);
if (ctx == NULL)
goto err;
membio = BIO_new_mem_buf(pm, pmlen);
if (membio == NULL) {
OSSL_DECODER_CTX_free(ctx);
goto err;
}
OSSL_DECODER_from_bio(ctx, membio);
BIO_free(membio);
OSSL_DECODER_from_data(ctx, &pm, &pmlen);
OSSL_DECODER_CTX_free(ctx);
} else if (ptype == V_ASN1_OBJECT) {
const ASN1_OBJECT *poid = pval;

View File

@ -255,7 +255,8 @@ static EVP_PKEY *try_key_value(struct extracted_param_data_st *data,
size_t pdatalen = data->octet_data_size;
decoderctx =
OSSL_DECODER_CTX_new_by_EVP_PKEY(&pk, "DER", NULL, libctx, propq);
OSSL_DECODER_CTX_new_by_EVP_PKEY(&pk, NULL, NULL, NULL, 0,
libctx, propq);
(void)OSSL_DECODER_CTX_set_passphrase_cb(decoderctx, cb, cbarg);
/* No error if this couldn't be decoded */