diff --git a/src/ssl.c b/src/ssl.c index abcb7d217..fb292e4e4 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -18028,6 +18028,12 @@ static void *wolfSSL_d2i_X509_fp_ex(XFILE file, void **x509, int type) else if(type == CRL_TYPE) newx509 = (void *)wolfSSL_d2i_X509_CRL(NULL, fileBuffer, (int)sz); #endif + else if(type == PKCS12_TYPE){ + if((newx509 = wc_PKCS12_new()) == NULL) + goto err_exit; + if(wc_d2i_PKCS12(fileBuffer, (int)sz, (WC_PKCS12*)newx509) < 0) + goto err_exit; + } else goto err_exit; if(newx509 == NULL) { @@ -18060,6 +18066,12 @@ _exit: return newx509; } +WOLFSSL_X509_PKCS12 *wolfSSL_d2i_PKCS12_fp(XFILE fp, WOLFSSL_X509_PKCS12 **pkcs12) +{ + WOLFSSL_ENTER("wolfSSL_d2i_PKCS12_fp"); + return (WOLFSSL_X509_PKCS12 *)wolfSSL_d2i_X509_fp_ex(fp, (void **)pkcs12, PKCS12_TYPE); +} + WOLFSSL_X509 *wolfSSL_d2i_X509_fp(XFILE fp, WOLFSSL_X509 **x509) { WOLFSSL_ENTER("wolfSSL_d2i_X509_fp"); diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index 0ab534153..bb0133cf3 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -121,6 +121,7 @@ typedef struct WOLFSSL_X509 WOLFSSL_X509; typedef struct WOLFSSL_X509_NAME WOLFSSL_X509_NAME; typedef struct WOLFSSL_X509_NAME_ENTRY WOLFSSL_X509_NAME_ENTRY; typedef struct WOLFSSL_X509_CHAIN WOLFSSL_X509_CHAIN; +typedef struct WC_PKCS12 WOLFSSL_X509_PKCS12; typedef struct WOLFSSL_CERT_MANAGER WOLFSSL_CERT_MANAGER; typedef struct WOLFSSL_SOCKADDR WOLFSSL_SOCKADDR; @@ -1555,8 +1556,8 @@ typedef struct WC_PKCS12 WC_PKCS12; WOLFSSL_API WC_PKCS12* wolfSSL_d2i_PKCS12_bio(WOLFSSL_BIO* bio, WC_PKCS12** pkcs12); #ifndef NO_FILESYSTEM -WOLFSSL_API WC_PKCS12* wolfSSL_d2i_PKCS12_fp(XFILE fp, - WC_PKCS12** pkcs12); +WOLFSSL_API WOLFSSL_X509_PKCS12* wolfSSL_d2i_PKCS12_fp(XFILE fp, + WOLFSSL_X509_PKCS12** pkcs12); #endif WOLFSSL_API int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, WOLFSSL_EVP_PKEY** pkey, WOLFSSL_X509** cert, diff --git a/wolfssl/wolfcrypt/asn_public.h b/wolfssl/wolfcrypt/asn_public.h index 312332f96..9bd337eff 100644 --- a/wolfssl/wolfcrypt/asn_public.h +++ b/wolfssl/wolfcrypt/asn_public.h @@ -72,7 +72,8 @@ enum CertType { ECC_PUBLICKEY_TYPE, TRUSTED_PEER_TYPE, EDDSA_PRIVATEKEY_TYPE, - ED25519_TYPE + ED25519_TYPE, + PKCS12_TYPE };