Skip to content

Commit 548a2c6

Browse files
committed
Fixed issues building with nocrypt. Improved logic on ASN_BER_TO_DER. Improved logic on unknown extension callback (new WC_ASN_UNKNOWN_EXT_CB gate).
1 parent 877c1d7 commit 548a2c6

11 files changed

Lines changed: 97 additions & 93 deletions

File tree

src/ssl.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5359,8 +5359,7 @@ int AddCA(WOLFSSL_CERT_MANAGER* cm, DerBuffer** pDer, int type, int verify)
53595359

53605360
InitDecodedCert(cert, der->buffer, der->length, cm->heap);
53615361

5362-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) && \
5363-
defined(HAVE_OID_DECODING)
5362+
#ifdef WC_ASN_UNKNOWN_EXT_CB
53645363
if (cm->unknownExtCallback != NULL) {
53655364
wc_SetUnknownExtCallback(cert, cm->unknownExtCallback);
53665365
}

src/ssl_certman.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -609,8 +609,7 @@ void wolfSSL_CertManagerSetVerify(WOLFSSL_CERT_MANAGER* cm, VerifyCallback vc)
609609
}
610610
#endif /* NO_WOLFSSL_CM_VERIFY */
611611

612-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
613-
&& defined(HAVE_OID_DECODING)
612+
#ifdef WC_ASN_UNKNOWN_EXT_CB
614613
void wolfSSL_CertManagerSetUnknownExtCallback(WOLFSSL_CERT_MANAGER* cm,
615614
wc_UnknownExtCallback cb)
616615
{
@@ -620,7 +619,7 @@ void wolfSSL_CertManagerSetUnknownExtCallback(WOLFSSL_CERT_MANAGER* cm,
620619
}
621620

622621
}
623-
#endif /* WOLFSSL_CUSTOM_OID && WOLFSSL_ASN_TEMPLATE && HAVE_OID_DECODING */
622+
#endif /* WC_ASN_UNKNOWN_EXT_CB */
624623

625624
#if !defined(NO_WOLFSSL_CLIENT) || !defined(WOLFSSL_NO_CLIENT_AUTH)
626625
/* Verify the certificate.
@@ -690,8 +689,7 @@ int CM_VerifyBuffer_ex(WOLFSSL_CERT_MANAGER* cm, const unsigned char* buff,
690689
/* Create a decoded certificate with DER buffer. */
691690
InitDecodedCert(cert, buff, (word32)sz, cm->heap);
692691

693-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
694-
&& defined(HAVE_OID_DECODING)
692+
#ifdef WC_ASN_UNKNOWN_EXT_CB
695693
if (cm->unknownExtCallback != NULL)
696694
wc_SetUnknownExtCallback(cert, cm->unknownExtCallback);
697695
#endif

wolfcrypt/src/asn.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3660,7 +3660,7 @@ int StreamOctetString(const byte* inBuf, word32 inBufSz, byte* out, word32* outS
36603660

36613661
/* Convert BER to DER */
36623662

3663-
/* Pull informtation from the ASN.1 BER encoded item header */
3663+
/* Pull information from the ASN.1 BER encoded item header */
36643664
static int GetBerHeader(const byte* data, word32* idx, word32 maxIdx,
36653665
byte* pTag, word32* pLen, int* indef)
36663666
{
@@ -6226,7 +6226,8 @@ static int RsaPssHashOidToMgf1(word32 oid, int* mgf)
62266226
return ret;
62276227
}
62286228

6229-
#ifndef NO_CERTS
6229+
#if !defined(NO_CERTS) && !defined(NO_ASN_CRYPT)
6230+
62306231
/* Convert a hash OID to a fake signature OID.
62316232
*
62326233
* @param [in] oid Hash OID.
@@ -21407,8 +21408,7 @@ enum {
2140721408
#define certExtASN_Length (sizeof(certExtASN) / sizeof(ASNItem))
2140821409
#endif
2140921410

21410-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
21411-
&& defined(HAVE_OID_DECODING)
21411+
#ifdef WC_ASN_UNKNOWN_EXT_CB
2141221412
int wc_SetUnknownExtCallback(DecodedCert* cert,
2141321413
wc_UnknownExtCallback cb) {
2141421414
if (cert == NULL) {
@@ -21429,7 +21429,7 @@ int wc_SetUnknownExtCallbackEx(DecodedCert* cert,
2142921429
cert->unknownExtCallbackExCtx = ctx;
2143021430
return 0;
2143121431
}
21432-
#endif
21432+
#endif /* WC_ASN_UNKNOWN_EXT_CB */
2143321433

2143421434
/*
2143521435
* Processing the Certificate Extensions. This does not modify the current
@@ -21583,7 +21583,7 @@ static int DecodeCertExtensions(DecodedCert* cert)
2158321583
/* Decode the extension by type. */
2158421584
ret = DecodeExtensionType(input + idx, length, oid, critical, cert,
2158521585
&isUnknownExt);
21586-
#if defined(WOLFSSL_CUSTOM_OID) && defined(HAVE_OID_DECODING)
21586+
#ifdef WC_ASN_UNKNOWN_EXT_CB
2158721587
if (isUnknownExt && (cert->unknownExtCallback != NULL ||
2158821588
cert->unknownExtCallbackEx != NULL)) {
2158921589
word16 decOid[MAX_OID_SZ];
@@ -21612,8 +21612,9 @@ static int DecodeCertExtensions(DecodedCert* cert)
2161221612
cert->unknownExtCallbackExCtx);
2161321613
}
2161421614
}
21615-
#endif
21615+
#else
2161621616
(void)isUnknownExt;
21617+
#endif
2161721618

2161821619
/* Move index on to next extension. */
2161921620
idx += length;
@@ -34482,7 +34483,7 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
3448234483
#endif /* WOLFSSL_ASN_TEMPLATE */
3448334484
}
3448434485

34485-
#if defined(HAVE_ECC_KEY_EXPORT) && !defined(NO_ASN_CRYPT)
34486+
#ifdef HAVE_ECC_KEY_EXPORT
3448634487
/* build DER formatted ECC key, include optional public key if requested,
3448734488
* return length on success, negative on error */
3448834489
int wc_BuildEccKeyDer(ecc_key* key, byte* output, word32 *inLen,
@@ -34913,7 +34914,7 @@ int wc_EccKeyToPKCS8(ecc_key* key, byte* output,
3491334914
return eccToPKCS8(key, output, outLen, 1);
3491434915
}
3491534916
#endif /* HAVE_PKCS8 */
34916-
#endif /* HAVE_ECC_KEY_EXPORT && !NO_ASN_CRYPT */
34917+
#endif /* HAVE_ECC_KEY_EXPORT */
3491734918
#endif /* HAVE_ECC */
3491834919

3491934920
#ifdef WC_ENABLE_ASYM_KEY_IMPORT

wolfcrypt/src/pkcs7.c

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -830,8 +830,7 @@ int wc_PKCS7_Init(PKCS7* pkcs7, void* heap, int devId)
830830
return 0;
831831
}
832832

833-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
834-
&& defined(HAVE_OID_DECODING)
833+
#ifdef WC_ASN_UNKNOWN_EXT_CB
835834
void wc_PKCS7_SetUnknownExtCallback(PKCS7* pkcs7, wc_UnknownExtCallback cb)
836835
{
837836
if (pkcs7 != NULL) {
@@ -1083,8 +1082,7 @@ int wc_PKCS7_InitWithCert(PKCS7* pkcs7, byte* derCert, word32 derCertSz)
10831082
int devId;
10841083
Pkcs7Cert* cert;
10851084
Pkcs7Cert* lastCert;
1086-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
1087-
&& defined(HAVE_OID_DECODING)
1085+
#ifdef WC_ASN_UNKNOWN_EXT_CB
10881086
wc_UnknownExtCallback cb;
10891087
#endif
10901088

@@ -1095,16 +1093,14 @@ int wc_PKCS7_InitWithCert(PKCS7* pkcs7, byte* derCert, word32 derCertSz)
10951093
heap = pkcs7->heap;
10961094
devId = pkcs7->devId;
10971095
cert = pkcs7->certList;
1098-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
1099-
&& defined(HAVE_OID_DECODING)
1100-
cb = pkcs7->unknownExtCallback;
1096+
#ifdef WC_ASN_UNKNOWN_EXT_CB
1097+
cb = pkcs7->unknownExtCallback; /* save / restore callback */
11011098
#endif
11021099
ret = wc_PKCS7_Init(pkcs7, heap, devId);
11031100
if (ret != 0)
11041101
return ret;
11051102

1106-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
1107-
&& defined(HAVE_OID_DECODING)
1103+
#ifdef WC_ASN_UNKNOWN_EXT_CB
11081104
pkcs7->unknownExtCallback = cb;
11091105
#endif
11101106
pkcs7->certList = cert;
@@ -1155,8 +1151,7 @@ int wc_PKCS7_InitWithCert(PKCS7* pkcs7, byte* derCert, word32 derCertSz)
11551151
}
11561152

11571153
InitDecodedCert(dCert, derCert, derCertSz, pkcs7->heap);
1158-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
1159-
&& defined(HAVE_OID_DECODING)
1154+
#ifdef WC_ASN_UNKNOWN_EXT_CB
11601155
if (pkcs7->unknownExtCallback != NULL)
11611156
wc_SetUnknownExtCallback(dCert, pkcs7->unknownExtCallback);
11621157
#endif

wolfcrypt/test/test.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -711,9 +711,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mp_test(void);
711711
#if defined(WOLFSSL_PUBLIC_MP) && defined(WOLFSSL_KEY_GEN)
712712
WOLFSSL_TEST_SUBROUTINE wc_test_ret_t prime_test(void);
713713
#endif
714-
#if defined(ASN_BER_TO_DER) && \
715-
(defined(WOLFSSL_TEST_CERT) || defined(OPENSSL_EXTRA) || \
716-
defined(OPENSSL_EXTRA_X509_SMALL))
714+
#ifdef ASN_BER_TO_DER
717715
WOLFSSL_TEST_SUBROUTINE wc_test_ret_t berder_test(void);
718716
#endif
719717
WOLFSSL_TEST_SUBROUTINE wc_test_ret_t logging_test(void);
@@ -53957,9 +53955,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t prime_test(void)
5395753955
#endif /* WOLFSSL_PUBLIC_MP */
5395853956

5395953957

53960-
#if defined(ASN_BER_TO_DER) && \
53961-
(defined(WOLFSSL_TEST_CERT) || defined(OPENSSL_EXTRA) || \
53962-
defined(OPENSSL_EXTRA_X509_SMALL))
53958+
#ifdef ASN_BER_TO_DER
5396353959
/* wc_BerToDer is only public facing in the case of test cert or opensslextra */
5396453960
typedef struct berDerTestData {
5396553961
const byte *in;
@@ -54075,7 +54071,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t berder_test(void)
5407554071

5407654072
return 0;
5407754073
}
54078-
#endif
54074+
#endif /* ASN_BER_TO_DER */
5407954075

5408054076
#ifdef DEBUG_WOLFSSL
5408154077
static THREAD_LS_T int log_cnt = 0;

wolfssl/internal.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2650,8 +2650,7 @@ struct WOLFSSL_CERT_MANAGER {
26502650
#ifdef HAVE_DILITHIUM
26512651
short minDilithiumKeySz; /* minimum allowed Dilithium key size */
26522652
#endif
2653-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
2654-
&& defined(HAVE_OID_DECODING)
2653+
#ifdef WC_ASN_UNKNOWN_EXT_CB
26552654
wc_UnknownExtCallback unknownExtCallback;
26562655
#endif
26572656
};

wolfssl/ssl.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3690,8 +3690,7 @@ WOLFSSL_API void wolfSSL_CTX_SetPerformTlsRecordProcessingCb(WOLFSSL_CTX* ctx,
36903690
WOLFSSL_API void wolfSSL_CertManagerFree(WOLFSSL_CERT_MANAGER* cm);
36913691
WOLFSSL_API int wolfSSL_CertManager_up_ref(WOLFSSL_CERT_MANAGER* cm);
36923692

3693-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
3694-
&& defined(HAVE_OID_DECODING)
3693+
#ifdef WC_ASN_UNKNOWN_EXT_CB
36953694
WOLFSSL_API void wolfSSL_CertManagerSetUnknownExtCallback(
36963695
WOLFSSL_CERT_MANAGER* cm,
36973696
wc_UnknownExtCallback cb);

wolfssl/wolfcrypt/asn.h

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1660,8 +1660,7 @@ typedef struct TrustedPeerCert TrustedPeerCert;
16601660
typedef struct SignatureCtx SignatureCtx;
16611661
typedef struct CertSignCtx CertSignCtx;
16621662

1663-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
1664-
&& defined(HAVE_OID_DECODING)
1663+
#ifdef WC_ASN_UNKNOWN_EXT_CB
16651664
typedef int (*wc_UnknownExtCallback)(const word16* oid, word32 oidSz, int crit,
16661665
const unsigned char* der, word32 derSz);
16671666
typedef int (*wc_UnknownExtCallbackEx)(const word16* oid, word32 oidSz,
@@ -1887,7 +1886,7 @@ struct DecodedCert {
18871886
/* WOLFSSL_X509_NAME structures (used void* to avoid including ssl.h) */
18881887
void* issuerName;
18891888
void* subjectName;
1890-
#endif /* OPENSSL_EXTRA */
1889+
#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
18911890
#ifdef WOLFSSL_SEP
18921891
int deviceTypeSz;
18931892
byte* deviceType;
@@ -1997,8 +1996,7 @@ struct DecodedCert {
19971996
#ifdef HAVE_RPK
19981997
byte isRPK : 1; /* indicate the cert is Raw-Public-Key cert in RFC7250 */
19991998
#endif
2000-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
2001-
&& defined(HAVE_OID_DECODING)
1999+
#ifdef WC_ASN_UNKNOWN_EXT_CB
20022000
wc_UnknownExtCallback unknownExtCallback;
20032001
wc_UnknownExtCallbackEx unknownExtCallbackEx;
20042002
void *unknownExtCallbackExCtx;
@@ -2141,15 +2139,16 @@ typedef enum MimeStatus
21412139
} MimeStatus;
21422140
#endif /* HAVE_SMIME */
21432141

2144-
21452142
WOLFSSL_LOCAL int HashIdAlg(word32 oidSum);
21462143
WOLFSSL_LOCAL int CalcHashId(const byte* data, word32 len, byte* hash);
21472144
WOLFSSL_LOCAL int CalcHashId_ex(const byte* data, word32 len, byte* hash,
21482145
int hashAlg);
21492146
WOLFSSL_LOCAL int GetName(DecodedCert* cert, int nameType, int maxIdx);
21502147

2151-
WOLFSSL_ASN_API int wc_BerToDer(const byte* ber, word32 berSz, byte* der,
2148+
#ifdef ASN_BER_TO_DER
2149+
WOLFSSL_API int wc_BerToDer(const byte* ber, word32 berSz, byte* der,
21522150
word32* derSz);
2151+
#endif
21532152
WOLFSSL_LOCAL int StreamOctetString(const byte* inBuf, word32 inBufSz,
21542153
byte* out, word32* outSz, word32* idx);
21552154

@@ -2167,11 +2166,10 @@ WOLFSSL_ASN_API void FreeDecodedCert(DecodedCert* cert);
21672166
WOLFSSL_ASN_API int ParseCert(DecodedCert* cert, int type, int verify,
21682167
void* cm);
21692168

2170-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
2171-
&& defined(HAVE_OID_DECODING)
2172-
WOLFSSL_ASN_API int wc_SetUnknownExtCallback(DecodedCert* cert,
2169+
#ifdef WC_ASN_UNKNOWN_EXT_CB
2170+
WOLFSSL_API int wc_SetUnknownExtCallback(DecodedCert* cert,
21732171
wc_UnknownExtCallback cb);
2174-
WOLFSSL_ASN_API int wc_SetUnknownExtCallbackEx(DecodedCert* cert,
2172+
WOLFSSL_API int wc_SetUnknownExtCallbackEx(DecodedCert* cert,
21752173
wc_UnknownExtCallbackEx cb,
21762174
void *ctx);
21772175
#endif

wolfssl/wolfcrypt/pkcs7.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,7 @@ struct PKCS7 {
345345
word32 plainDigestSz;
346346
word32 pkcs7DigestSz;
347347

348-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
349-
&& defined(HAVE_OID_DECODING)
348+
#ifdef WC_ASN_UNKNOWN_EXT_CB
350349
wc_UnknownExtCallback unknownExtCallback;
351350
#endif
352351

@@ -363,8 +362,7 @@ struct PKCS7 {
363362
};
364363

365364
WOLFSSL_API PKCS7* wc_PKCS7_New(void* heap, int devId);
366-
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \
367-
&& defined(HAVE_OID_DECODING)
365+
#ifdef WC_ASN_UNKNOWN_EXT_CB
368366
WOLFSSL_API void wc_PKCS7_SetUnknownExtCallback(PKCS7* pkcs7,
369367
wc_UnknownExtCallback cb);
370368
#endif

0 commit comments

Comments
 (0)