diff --git a/src/crl.c b/src/crl.c index dd3a18855..bdf3bac9f 100644 --- a/src/crl.c +++ b/src/crl.c @@ -497,7 +497,7 @@ int BufferLoadCRL(WOLFSSL_CRL* crl, const byte* buff, long sz, int type, #endif InitDecodedCRL(dcrl, crl->heap); - ret = ParseCRL(dcrl, myBuffer, (word32)sz, crl->cm); + ret = ParseCRL(dcrl, myBuffer, (word32)sz, verify, crl->cm); if (ret != 0 && !(ret == ASN_CRL_NO_SIGNER_E && verify == NO_VERIFY)) { WOLFSSL_MSG("ParseCRL error"); } diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index fc18cdb18..5d8c75ed6 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -31566,7 +31566,7 @@ static int PaseCRL_CheckSignature(DecodedCRL* dcrl, const byte* buff, void* cm) #ifndef WOLFSSL_ASN_TEMPLATE static int ParseCRL_CertList(DecodedCRL* dcrl, const byte* buf, - word32* inOutIdx, int sz) + word32* inOutIdx, int sz, int verify) { word32 oid, dateIdx, idx, checkIdx; int version; @@ -31616,7 +31616,8 @@ static int ParseCRL_CertList(DecodedCRL* dcrl, const byte* buf, #endif { #ifndef NO_ASN_TIME - if (!XVALIDATE_DATE(dcrl->nextDate, dcrl->nextDateFormat, AFTER)) { + if (verify != NO_VERIFY && + !XVALIDATE_DATE(dcrl->nextDate, dcrl->nextDateFormat, AFTER)) { WOLFSSL_MSG("CRL after date is no longer valid"); return CRL_CERT_DATE_ERR; } @@ -31927,7 +31928,8 @@ enum { #endif /* parse crl buffer into decoded state, 0 on success */ -int ParseCRL(DecodedCRL* dcrl, const byte* buff, word32 sz, void* cm) +int ParseCRL(DecodedCRL* dcrl, const byte* buff, word32 sz, int verify, + void* cm) { #ifndef WOLFSSL_ASN_TEMPLATE Signer* ca = NULL; @@ -31956,7 +31958,7 @@ int ParseCRL(DecodedCRL* dcrl, const byte* buff, word32 sz, void* cm) return ASN_PARSE_E; dcrl->sigIndex = len + idx; - if (ParseCRL_CertList(dcrl, buff, &idx, dcrl->sigIndex) < 0) + if (ParseCRL_CertList(dcrl, buff, &idx, dcrl->sigIndex, verify) < 0) return ASN_PARSE_E; if (ParseCRL_Extensions(dcrl, buff, &idx, dcrl->sigIndex) < 0) @@ -32079,7 +32081,8 @@ end: #ifndef NO_ASN_TIME if (dcrl->nextDateFormat != 0) { /* Next date was set, so validate it. */ - if (!XVALIDATE_DATE(dcrl->nextDate, dcrl->nextDateFormat, AFTER)) { + if (verify != NO_VERIFY && + !XVALIDATE_DATE(dcrl->nextDate, dcrl->nextDateFormat, AFTER)) { WOLFSSL_MSG("CRL after date is no longer valid"); ret = CRL_CERT_DATE_ERR; } diff --git a/wolfssl/wolfcrypt/asn.h b/wolfssl/wolfcrypt/asn.h index 7838fe9de..bf80d7ad0 100644 --- a/wolfssl/wolfcrypt/asn.h +++ b/wolfssl/wolfcrypt/asn.h @@ -2271,7 +2271,7 @@ WOLFSSL_LOCAL int VerifyCRL_Signature(SignatureCtx* sigCtx, word32 signatureOID, Signer *ca, void* heap); WOLFSSL_LOCAL int ParseCRL(DecodedCRL* dcrl, const byte* buff, word32 sz, - void* cm); + int verify, void* cm); WOLFSSL_LOCAL void FreeDecodedCRL(DecodedCRL* dcrl);