From 1d1d8ff41e37d09d554f418e320c31437698b9fe Mon Sep 17 00:00:00 2001 From: Eric Blankenhorn Date: Tue, 24 Mar 2026 07:41:40 -0500 Subject: [PATCH] Fix OCSP tests to use Alloc/FreeDer --- examples/ocsp_responder/ocsp_responder.c | 28 ++++++++++++++---------- wolfcrypt/src/asn.c | 2 ++ wolfssl/wolfcrypt/asn.h | 6 +++-- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/examples/ocsp_responder/ocsp_responder.c b/examples/ocsp_responder/ocsp_responder.c index dcf9658a71..79c9c0e286 100644 --- a/examples/ocsp_responder/ocsp_responder.c +++ b/examples/ocsp_responder/ocsp_responder.c @@ -199,23 +199,29 @@ static int ConvertPemToDer(const byte* pem, word32 pemSz, byte** der, word32* derSz, int type) { int ret; - DerBuffer* derBuf = NULL; - ret = wc_PemToDer(pem, pemSz, type, &derBuf, NULL, NULL, NULL); - if (ret != 0 || derBuf == NULL) { - return ret; - } - - *der = (byte*)XMALLOC(derBuf->length, NULL, DYNAMIC_TYPE_TMP_BUFFER); + /* Allocate buffer large enough for DER (always smaller than PEM) */ + *der = (byte*)XMALLOC(pemSz, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (*der == NULL) { - wc_FreeDer(&derBuf); return MEMORY_E; } - XMEMCPY(*der, derBuf->buffer, derBuf->length); - *derSz = derBuf->length; - wc_FreeDer(&derBuf); + if (type == PRIVATEKEY_TYPE) { + ret = wc_KeyPemToDer(pem, (int)pemSz, *der, (int)pemSz, NULL); + } + else { + ret = wc_CertPemToDer(pem, (int)pemSz, *der, (int)pemSz, type); + } + if (ret <= 0) { + XFREE(*der, NULL, DYNAMIC_TYPE_TMP_BUFFER); + *der = NULL; + if (ret == 0) + ret = BAD_FUNC_ARG; + return ret; + } + + *derSz = (word32)ret; return 0; } diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 5d71e65d64..005420db4c 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -27240,6 +27240,7 @@ void FreeDer(DerBuffer** pDer) } } +#ifndef WOLFSSL_API_PREFIX_MAP int wc_AllocDer(DerBuffer** pDer, word32 length, int type, void* heap) { return AllocDer(pDer, length, type, heap); @@ -27248,6 +27249,7 @@ void wc_FreeDer(DerBuffer** pDer) { FreeDer(pDer); } +#endif #if defined(WOLFSSL_PEM_TO_DER) || defined(WOLFSSL_DER_TO_PEM) diff --git a/wolfssl/wolfcrypt/asn.h b/wolfssl/wolfcrypt/asn.h index d23b98ad54..4102387178 100644 --- a/wolfssl/wolfcrypt/asn.h +++ b/wolfssl/wolfcrypt/asn.h @@ -2257,6 +2257,8 @@ typedef enum MimeStatus #define FillSigner wc_FillSigner #define MakeSigner wc_MakeSigner #define FreeSigner wc_FreeSigner + #define AllocDer wc_AllocDer + #define FreeDer wc_FreeDer #endif /* WOLFSSL_API_PREFIX_MAP */ WOLFSSL_LOCAL int HashIdAlg(word32 oidSum); @@ -2611,11 +2613,11 @@ WOLFSSL_LOCAL int wc_EncryptedInfoParse(EncryptedInfo* info, WOLFSSL_LOCAL int PemToDer(const unsigned char* buff, long longSz, int type, DerBuffer** pDer, void* heap, EncryptedInfo* info, int* keyFormat); -WOLFSSL_TEST_VIS int AllocDer(DerBuffer** der, word32 length, int type, +WOLFSSL_API int AllocDer(DerBuffer** der, word32 length, int type, void* heap); WOLFSSL_LOCAL int AllocCopyDer(DerBuffer** der, const unsigned char* buff, word32 length, int type, void* heap); -WOLFSSL_TEST_VIS void FreeDer(DerBuffer** der); +WOLFSSL_API void FreeDer(DerBuffer** der); #ifdef WOLFSSL_ASN_PARSE_KEYUSAGE WOLFSSL_LOCAL int ParseKeyUsageStr(const char* value, word16* keyUsage,