diff --git a/src/ssl.c b/src/ssl.c index cdbd8bb8b..60e1653b5 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -16073,6 +16073,11 @@ int wolfSSL_set_compression(WOLFSSL* ssl) FreeDer(&der); ret = PemToDer(buf, sz, DH_PARAM_TYPE, &der, ctx->heap, NULL, NULL); + if (ret < 0) { + /* Also try X9.42 format */ + ret = PemToDer(buf, sz, X942_PARAM_TYPE, &der, ctx->heap, + NULL, NULL); + } #ifdef WOLFSSL_WPAS #ifndef NO_DSA if (ret < 0) { @@ -44834,6 +44839,10 @@ WOLFSSL_DH *wolfSSL_PEM_read_bio_DHparams(WOLFSSL_BIO *bio, WOLFSSL_DH **x, } ret = PemToDer(mem, size, DH_PARAM_TYPE, &der, NULL, NULL, NULL); + if (ret < 0) { + /* Also try X9.42 format */ + ret = PemToDer(mem, size, X942_PARAM_TYPE, &der, NULL, NULL, NULL); + } if (ret != 0) goto end; diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index e33e17d2c..b80543310 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -18215,6 +18215,8 @@ wcchar END_CERT = "-----END CERTIFICATE-----"; #ifndef NO_DH wcchar BEGIN_DH_PARAM = "-----BEGIN DH PARAMETERS-----"; wcchar END_DH_PARAM = "-----END DH PARAMETERS-----"; + wcchar BEGIN_X942_PARAM = "-----BEGIN X9.42 DH PARAMETERS-----"; + wcchar END_X942_PARAM = "-----END X9.42 DH PARAMETERS-----"; #endif #ifndef NO_DSA wcchar BEGIN_DSA_PARAM = "-----BEGIN DSA PARAMETERS-----"; @@ -18289,6 +18291,11 @@ int wc_PemGetHeaderFooter(int type, const char** header, const char** footer) if (footer) *footer = END_DH_PARAM; ret = 0; break; + case X942_PARAM_TYPE: + if (header) *header = BEGIN_X942_PARAM; + if (footer) *footer = END_X942_PARAM; + ret = 0; + break; #endif #ifndef NO_DSA case DSA_PARAM_TYPE: diff --git a/wolfssl/wolfcrypt/asn_public.h b/wolfssl/wolfcrypt/asn_public.h index f39272a8a..778ea65e1 100644 --- a/wolfssl/wolfcrypt/asn_public.h +++ b/wolfssl/wolfcrypt/asn_public.h @@ -133,6 +133,7 @@ enum CertType { PKCS8_ENC_PRIVATEKEY_TYPE, DETECT_CERT_TYPE, DH_PRIVATEKEY_TYPE, + X942_PARAM_TYPE, };