diff options
Diffstat (limited to 'crypto/x509/x_pubkey.c')
-rw-r--r-- | crypto/x509/x_pubkey.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/crypto/x509/x_pubkey.c b/crypto/x509/x_pubkey.c index cb47f917ad..a4d3c9fa5e 100644 --- a/crypto/x509/x_pubkey.c +++ b/crypto/x509/x_pubkey.c @@ -23,6 +23,7 @@ #include <openssl/rsa.h> #include <openssl/dsa.h> #include <openssl/encoder.h> +#include "internal/provider.h" struct X509_pubkey_st { X509_ALGOR *algor; @@ -96,10 +97,14 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) goto error; } } else if (pkey->keymgmt != NULL) { + const OSSL_PROVIDER *pkprov = EVP_KEYMGMT_provider(pkey->keymgmt); + OPENSSL_CTX *libctx = ossl_provider_library_context(pkprov); BIO *bmem = BIO_new(BIO_s_mem()); - const char *encprop = OSSL_ENCODER_PUBKEY_TO_DER_PQ; + int selection = (OSSL_KEYMGMT_SELECT_PUBLIC_KEY + | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS); OSSL_ENCODER_CTX *ectx = - OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, encprop); + OSSL_ENCODER_CTX_new_by_EVP_PKEY(pkey, "DER", selection, + libctx, NULL); if (OSSL_ENCODER_to_bio(ectx, bmem)) { const unsigned char *der = NULL; @@ -303,15 +308,17 @@ int i2d_PUBKEY(const EVP_PKEY *a, unsigned char **pp) } X509_PUBKEY_free(xpk); } else if (a->keymgmt != NULL) { - const char *encprop = OSSL_ENCODER_PUBKEY_TO_DER_PQ; + const OSSL_PROVIDER *pkprov = EVP_KEYMGMT_provider(a->keymgmt); + OPENSSL_CTX *libctx = ossl_provider_library_context(pkprov); + int selection = (OSSL_KEYMGMT_SELECT_PUBLIC_KEY + | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS); OSSL_ENCODER_CTX *ctx = - OSSL_ENCODER_CTX_new_by_EVP_PKEY(a, encprop); + OSSL_ENCODER_CTX_new_by_EVP_PKEY(a, "DER", selection, libctx, NULL); BIO *out = BIO_new(BIO_s_mem()); BUF_MEM *buf = NULL; - if (ctx != NULL + if (OSSL_ENCODER_CTX_get_num_encoders(ctx) != 0 && out != NULL - && OSSL_ENCODER_CTX_get_encoder(ctx) != NULL && OSSL_ENCODER_to_bio(ctx, out) && BIO_get_mem_ptr(out, &buf) > 0) { ret = buf->length; |