ReactOS 0.4.17-dev-470-gf9e3448
crl.c File Reference
#include <assert.h>
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wincrypt.h"
#include "wine/debug.h"
#include "crypt32_private.h"
Include dependency graph for crl.c:

Go to the source code of this file.

Typedefs

typedef BOOL(* CrlCompareFunc) (PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (crypt)
 
static void CRL_free (context_t *context)
 
static charcopy_string (char *p, char **dst, const char *src)
 
static charcopy_blob (char *p, DATA_BLOB *dst, const DATA_BLOB *src)
 
static charcopy_extension (char *p, CERT_EXTENSION *dst, const CERT_EXTENSION *src)
 
static CRL_INFOclone_crl_info (const CRL_INFO *src)
 
static context_tCRL_clone (context_t *context, WINECRYPT_CERTSTORE *store, BOOL use_link)
 
PCCRL_CONTEXT WINAPI CertCreateCRLContext (DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded)
 
BOOL WINAPI CertAddEncodedCRLToStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded, DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext)
 
static BOOL compare_crl_any (PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
 
static BOOL compare_crl_issued_by (PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
 
static BOOL compare_crl_existing (PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
 
static BOOL compare_crl_issued_for (PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
 
PCCRL_CONTEXT WINAPI CertFindCRLInStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext)
 
PCCRL_CONTEXT WINAPI CertGetCRLFromStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags)
 
PCCRL_CONTEXT WINAPI CertDuplicateCRLContext (PCCRL_CONTEXT pCrlContext)
 
BOOL WINAPI CertFreeCRLContext (PCCRL_CONTEXT pCrlContext)
 
DWORD WINAPI CertEnumCRLContextProperties (PCCRL_CONTEXT pCRLContext, DWORD dwPropId)
 
static BOOL CRLContext_SetProperty (crl_t *crl, DWORD dwPropId, DWORD dwFlags, const void *pvData)
 
static BOOL CRLContext_GetHashProp (crl_t *crl, DWORD dwPropId, ALG_ID algID, const BYTE *toHash, DWORD toHashLen, void *pvData, DWORD *pcbData)
 
static BOOL CRLContext_GetProperty (crl_t *crl, DWORD dwPropId, void *pvData, DWORD *pcbData)
 
BOOL WINAPI CertGetCRLContextProperty (PCCRL_CONTEXT pCRLContext, DWORD dwPropId, void *pvData, DWORD *pcbData)
 
BOOL WINAPI CertSetCRLContextProperty (PCCRL_CONTEXT pCRLContext, DWORD dwPropId, DWORD dwFlags, const void *pvData)
 
static BOOL compare_dist_point_name (const CRL_DIST_POINT_NAME *name1, const CRL_DIST_POINT_NAME *name2)
 
static BOOL match_dist_point_with_issuing_dist_point (const CRL_DIST_POINT *distPoint, const CRL_ISSUING_DIST_POINT *idp)
 
BOOL WINAPI CertIsValidCRLForCertificate (PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved)
 
static PCRL_ENTRY CRYPT_FindCertificateInCRL (PCERT_INFO cert, const CRL_INFO *crl)
 
BOOL WINAPI CertFindCertificateInCRL (PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved, PCRL_ENTRY *ppCrlEntry)
 
BOOL WINAPI CertVerifyCRLRevocation (DWORD dwCertEncodingType, PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[])
 
LONG WINAPI CertVerifyCRLTimeValidity (LPFILETIME pTimeToVerify, PCRL_INFO pCrlInfo)
 

Variables

static const context_vtbl_t crl_vtbl
 

Typedef Documentation

◆ CrlCompareFunc

typedef BOOL(* CrlCompareFunc) (PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)

Definition at line 245 of file crl.c.

Function Documentation

◆ CertAddEncodedCRLToStore()

BOOL WINAPI CertAddEncodedCRLToStore ( HCERTSTORE  hCertStore,
DWORD  dwCertEncodingType,
const BYTE pbCrlEncoded,
DWORD  cbCrlEncoded,
DWORD  dwAddDisposition,
PCCRL_CONTEXT ppCrlContext 
)

Definition at line 223 of file crl.c.

226{
227 PCCRL_CONTEXT crl = CertCreateCRLContext(dwCertEncodingType,
228 pbCrlEncoded, cbCrlEncoded);
229 BOOL ret;
230
231 TRACE("(%p, %08lx, %p, %ld, %08lx, %p)\n", hCertStore, dwCertEncodingType,
232 pbCrlEncoded, cbCrlEncoded, dwAddDisposition, ppCrlContext);
233
234 if (crl)
235 {
236 ret = CertAddCRLContextToStore(hCertStore, crl, dwAddDisposition,
237 ppCrlContext);
239 }
240 else
241 ret = FALSE;
242 return ret;
243}
#define FALSE
Definition: types.h:117
BOOL WINAPI CertFreeCRLContext(PCCRL_CONTEXT pCrlContext)
Definition: crl.c:480
PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded)
Definition: crl.c:179
BOOL WINAPI CertAddCRLContextToStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext)
Definition: store.c:954
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
static const BYTE crl[]
Definition: message.c:817
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by CRYPT_MsgOpenStore(), test_crypt_ui_wiz_import(), test_I_UpdateStore(), test_verifyRevocation(), testAddCRL(), testCloseStore(), testFileNameStore(), testFileStore(), testFindCRL(), testGetCRLFromStore(), testIsValidCRLForCert(), and testVerifyRevocation().

◆ CertCreateCRLContext()

PCCRL_CONTEXT WINAPI CertCreateCRLContext ( DWORD  dwCertEncodingType,
const BYTE pbCrlEncoded,
DWORD  cbCrlEncoded 
)

Definition at line 179 of file crl.c.

181{
182 crl_t *crl = NULL;
183 BOOL ret;
184 PCRL_INFO crlInfo = NULL;
185 BYTE *data = NULL;
186 DWORD size = 0;
187
188 TRACE("(%08lx, %p, %ld)\n", dwCertEncodingType, pbCrlEncoded,
189 cbCrlEncoded);
190
191 if ((dwCertEncodingType & CERT_ENCODING_TYPE_MASK) != X509_ASN_ENCODING)
192 {
194 return NULL;
195 }
197 pbCrlEncoded, cbCrlEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
198 &crlInfo, &size);
199 if (!ret)
200 return NULL;
201
203 if (!crl)
204 return NULL;
205
206 data = CryptMemAlloc(cbCrlEncoded);
207 if (!data)
208 {
209 Context_Release(&crl->base);
210 return NULL;
211 }
212
213 memcpy(data, pbCrlEncoded, cbCrlEncoded);
214 crl->ctx.dwCertEncodingType = dwCertEncodingType;
215 crl->ctx.pbCrlEncoded = data;
216 crl->ctx.cbCrlEncoded = cbCrlEncoded;
217 crl->ctx.pCrlInfo = crlInfo;
218 crl->ctx.hCertStore = &empty_store;
219
220 return &crl->ctx;
221}
BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
Definition: decode.c:6998
WINECRYPT_CERTSTORE empty_store
Definition: store.c:1503
#define E_INVALIDARG
Definition: ddrawi.h:101
#define NULL
Definition: types.h:112
void Context_Release(context_t *context)
Definition: context.c:106
context_t * Context_CreateDataContext(size_t contextSize, const context_vtbl_t *vtbl, WINECRYPT_CERTSTORE *store)
Definition: context.c:28
static const context_vtbl_t crl_vtbl
Definition: crl.c:39
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
Definition: main.c:136
#define SetLastError(x)
Definition: compat.h:752
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define CERT_ENCODING_TYPE_MASK
Definition: wincrypt.h:2494
#define X509_ASN_ENCODING
Definition: wincrypt.h:2501
#define CRYPT_DECODE_ALLOC_FLAG
Definition: wincrypt.h:3612
#define X509_CERT_CRL_TO_BE_SIGNED
Definition: wincrypt.h:3519
unsigned char BYTE
Definition: xxhash.c:193

Referenced by CertAddEncodedCRLToStore(), CertCreateContext(), test_crypt_ui_wiz_import(), test_sign_message(), testAddCRL(), testCreateCRL(), testCRLProperties(), testDupCRL(), testEmptyStore(), testFindCertInCRL(), testIsValidCRLForCert(), and testVerifyCRLRevocation().

◆ CertDuplicateCRLContext()

PCCRL_CONTEXT WINAPI CertDuplicateCRLContext ( PCCRL_CONTEXT  pCrlContext)

Definition at line 472 of file crl.c.

473{
474 TRACE("(%p)\n", pCrlContext);
475 if (pCrlContext)
476 Context_AddRef(&crl_from_ptr(pCrlContext)->base);
477 return pCrlContext;
478}
static crl_t * crl_from_ptr(const CRL_CONTEXT *ptr)
void Context_AddRef(context_t *context)
Definition: context.c:78

Referenced by CertAddCRLContextToStore(), and testDupCRL().

◆ CertEnumCRLContextProperties()

DWORD WINAPI CertEnumCRLContextProperties ( PCCRL_CONTEXT  pCRLContext,
DWORD  dwPropId 
)

Definition at line 489 of file crl.c.

491{
492 TRACE("(%p, %ld)\n", pCRLContext, dwPropId);
493
494 return ContextPropertyList_EnumPropIDs(crl_from_ptr(pCRLContext)->base.properties, dwPropId);
495}
DWORD ContextPropertyList_EnumPropIDs(CONTEXT_PROPERTY_LIST *list, DWORD id)
Definition: proplist.c:170

Referenced by testCRLProperties().

◆ CertFindCertificateInCRL()

BOOL WINAPI CertFindCertificateInCRL ( PCCERT_CONTEXT  pCert,
PCCRL_CONTEXT  pCrlContext,
DWORD  dwFlags,
void pvReserved,
PCRL_ENTRY ppCrlEntry 
)

Definition at line 844 of file crl.c.

847{
848 TRACE("(%p, %p, %08lx, %p, %p)\n", pCert, pCrlContext, dwFlags, pvReserved,
849 ppCrlEntry);
850
851 *ppCrlEntry = CRYPT_FindCertificateInCRL(pCert->pCertInfo,
852 pCrlContext->pCrlInfo);
853 return TRUE;
854}
#define TRUE
Definition: types.h:120
static PCRL_ENTRY CRYPT_FindCertificateInCRL(PCERT_INFO cert, const CRL_INFO *crl)
Definition: crl.c:832
static LPCWSTR LPVOID pvReserved
Definition: asmcache.c:749
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
PCERT_INFO pCertInfo
Definition: wincrypt.h:491
PCRL_INFO pCrlInfo
Definition: wincrypt.h:734

Referenced by testFindCertInCRL(), testFindCRL(), verify_cert_revocation_with_crl_offline(), and verify_cert_revocation_with_crl_online().

◆ CertFindCRLInStore()

PCCRL_CONTEXT WINAPI CertFindCRLInStore ( HCERTSTORE  hCertStore,
DWORD  dwCertEncodingType,
DWORD  dwFindFlags,
DWORD  dwFindType,
const void pvFindPara,
PCCRL_CONTEXT  pPrevCrlContext 
)

Definition at line 381 of file crl.c.

384{
387
388 TRACE("(%p, %ld, %ld, %ld, %p, %p)\n", hCertStore, dwCertEncodingType,
389 dwFindFlags, dwFindType, pvFindPara, pPrevCrlContext);
390
391 switch (dwFindType)
392 {
393 case CRL_FIND_ANY:
395 break;
398 break;
401 break;
404 break;
405 default:
406 FIXME("find type %08lx unimplemented\n", dwFindType);
407 compare = NULL;
408 }
409
410 if (compare)
411 {
413
414 ret = pPrevCrlContext;
415 do {
416 ret = CertEnumCRLsInStore(hCertStore, ret);
417 if (ret)
418 matches = compare(ret, dwFindType, dwFindFlags, pvFindPara);
419 } while (ret != NULL && !matches);
420 if (!ret)
422 }
423 else
424 {
426 ret = NULL;
427 }
428 return ret;
429}
#define compare
#define FIXME(fmt,...)
Definition: precomp.h:53
static BOOL compare_crl_issued_by(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:254
BOOL(* CrlCompareFunc)(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:245
static BOOL compare_crl_issued_for(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:370
static BOOL compare_crl_any(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:248
static BOOL compare_crl_existing(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:353
PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pPrev)
Definition: store.c:1095
#define matches(FN)
Definition: match.h:70
Definition: bug.cpp:8
#define CRL_FIND_ANY
Definition: wincrypt.h:3074
#define CRL_FIND_ISSUED_FOR
Definition: wincrypt.h:3077
#define CRL_FIND_ISSUED_BY
Definition: wincrypt.h:3075
#define CRL_FIND_EXISTING
Definition: wincrypt.h:3076
#define CRYPT_E_NOT_FOUND
Definition: winerror.h:4421

Referenced by CertAddCRLContextToStore(), CertGetCRLFromStore(), testFindCRL(), and verify_cert_revocation().

◆ CertFreeCRLContext()

◆ CertGetCRLContextProperty()

BOOL WINAPI CertGetCRLContextProperty ( PCCRL_CONTEXT  pCRLContext,
DWORD  dwPropId,
void pvData,
DWORD pcbData 
)

Definition at line 566 of file crl.c.

568{
569 BOOL ret;
570
571 TRACE("(%p, %ld, %p, %p)\n", pCRLContext, dwPropId, pvData, pcbData);
572
573 switch (dwPropId)
574 {
575 case 0:
577 case CERT_CRL_PROP_ID:
578 case CERT_CTL_PROP_ID:
580 ret = FALSE;
581 break;
583 if (!pvData)
584 {
585 *pcbData = sizeof(DWORD);
586 ret = TRUE;
587 }
588 else if (*pcbData < sizeof(DWORD))
589 {
591 *pcbData = sizeof(DWORD);
592 ret = FALSE;
593 }
594 else
595 {
596 ret = CertGetStoreProperty(pCRLContext->hCertStore, dwPropId, pvData, pcbData);
597 }
598 break;
599 default:
600 ret = CRLContext_GetProperty(crl_from_ptr(pCRLContext), dwPropId, pvData, pcbData);
601 }
602 return ret;
603}
#define CERT_CTL_PROP_ID
#define CERT_CRL_PROP_ID
#define CERT_CERT_PROP_ID
#define ERROR_MORE_DATA
Definition: dderror.h:13
static BOOL CRLContext_GetProperty(crl_t *crl, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: crl.c:515
BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: store.c:1166
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
Definition: netsh.h:116
#define DWORD
Definition: nt_native.h:44
_In_ _Out_writes_opt_ pcchValueName _Inout_opt_ LPDWORD _Out_opt_ _Out_writes_bytes_to_opt_ pcbData _Inout_opt_ LPDWORD pcbData
Definition: shlwapi.h:757
HCERTSTORE hCertStore
Definition: wincrypt.h:735
#define CERT_ACCESS_STATE_PROP_ID
Definition: wincrypt.h:2847

Referenced by checkCRLHash(), and testCRLProperties().

◆ CertGetCRLFromStore()

PCCRL_CONTEXT WINAPI CertGetCRLFromStore ( HCERTSTORE  hCertStore,
PCCERT_CONTEXT  pIssuerContext,
PCCRL_CONTEXT  pPrevCrlContext,
DWORD pdwFlags 
)

Definition at line 431 of file crl.c.

433{
434 static const DWORD supportedFlags = CERT_STORE_SIGNATURE_FLAG |
438
439 TRACE("(%p, %p, %p, %08lx)\n", hCertStore, pIssuerContext, pPrevCrlContext,
440 *pdwFlags);
441
442 if (*pdwFlags & ~supportedFlags)
443 {
445 return NULL;
446 }
447 if (pIssuerContext)
448 ret = CertFindCRLInStore(hCertStore, pIssuerContext->dwCertEncodingType,
449 0, CRL_FIND_ISSUED_BY, pIssuerContext, pPrevCrlContext);
450 else
451 ret = CertFindCRLInStore(hCertStore, 0, 0, CRL_FIND_ANY, NULL,
452 pPrevCrlContext);
453 if (ret)
454 {
455 if (*pdwFlags & CERT_STORE_TIME_VALIDITY_FLAG)
456 {
457 if (0 == CertVerifyCRLTimeValidity(NULL, ret->pCrlInfo))
458 *pdwFlags &= ~CERT_STORE_TIME_VALIDITY_FLAG;
459 }
460 if (*pdwFlags & CERT_STORE_SIGNATURE_FLAG)
461 {
462 if (CryptVerifyCertificateSignatureEx(0, ret->dwCertEncodingType,
464 CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT, (void *)pIssuerContext, 0,
465 NULL))
466 *pdwFlags &= ~CERT_STORE_SIGNATURE_FLAG;
467 }
468 }
469 return ret;
470}
BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject, DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved)
Definition: cert.c:2914
PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext)
Definition: crl.c:381
LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify, PCRL_INFO pCrlInfo)
Definition: crl.c:870
DWORD dwCertEncodingType
Definition: wincrypt.h:488
#define CERT_STORE_BASE_CRL_FLAG
Definition: wincrypt.h:3622
#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
Definition: wincrypt.h:3628
#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
Definition: wincrypt.h:3632
#define CERT_STORE_SIGNATURE_FLAG
Definition: wincrypt.h:3616
#define CERT_STORE_TIME_VALIDITY_FLAG
Definition: wincrypt.h:3617
#define CERT_STORE_DELTA_CRL_FLAG
Definition: wincrypt.h:3623

Referenced by CertVerifySubjectCertificateContext(), and testGetCRLFromStore().

◆ CertIsValidCRLForCertificate()

BOOL WINAPI CertIsValidCRLForCertificate ( PCCERT_CONTEXT  pCert,
PCCRL_CONTEXT  pCrl,
DWORD  dwFlags,
void pvReserved 
)

Definition at line 775 of file crl.c.

777{
779 BOOL ret;
780
781 TRACE("(%p, %p, %08lx, %p)\n", pCert, pCrl, dwFlags, pvReserved);
782
783 if (!pCert)
784 return TRUE;
785
787 pCrl->pCrlInfo->cExtension, pCrl->pCrlInfo->rgExtension)))
788 {
790 DWORD size;
791
793 X509_ISSUING_DIST_POINT, ext->Value.pbData, ext->Value.cbData,
795 {
797 pCert->pCertInfo->cExtension, pCert->pCertInfo->rgExtension)))
798 {
799 CRL_DIST_POINTS_INFO *distPoints;
800
802 X509_CRL_DIST_POINTS, ext->Value.pbData, ext->Value.cbData,
803 CRYPT_DECODE_ALLOC_FLAG, NULL, &distPoints, &size)))
804 {
805 DWORD i;
806
807 ret = FALSE;
808 for (i = 0; !ret && i < distPoints->cDistPoint; i++)
810 &distPoints->rgDistPoint[i], idp);
811 if (!ret)
813 LocalFree(distPoints);
814 }
815 }
816 else
817 {
818 /* no CRL dist points extension in cert, can't match the CRL
819 * (which has an issuing dist point extension)
820 */
821 ret = FALSE;
823 }
824 LocalFree(idp);
825 }
826 }
827 else
828 ret = TRUE;
829 return ret;
830}
PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[])
Definition: cert.c:2099
static BOOL match_dist_point_with_issuing_dist_point(const CRL_DIST_POINT *distPoint, const CRL_ISSUING_DIST_POINT *idp)
Definition: crl.c:740
static const WCHAR *const ext[]
Definition: module.c:53
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
PCERT_EXTENSION rgExtension
Definition: wincrypt.h:261
DWORD cExtension
Definition: wincrypt.h:260
DWORD dwCertEncodingType
Definition: wincrypt.h:731
PCRL_DIST_POINT rgDistPoint
Definition: wincrypt.h:542
DWORD cExtension
Definition: wincrypt.h:511
PCERT_EXTENSION rgExtension
Definition: wincrypt.h:512
#define X509_ISSUING_DIST_POINT
Definition: wincrypt.h:3576
#define szOID_CRL_DIST_POINTS
Definition: wincrypt.h:3352
#define szOID_ISSUING_DIST_POINT
Definition: wincrypt.h:3350
#define X509_CRL_DIST_POINTS
Definition: wincrypt.h:3554
#define CRYPT_E_NO_MATCH
Definition: winerror.h:4426

Referenced by testIsValidCRLForCert().

◆ CertSetCRLContextProperty()

BOOL WINAPI CertSetCRLContextProperty ( PCCRL_CONTEXT  pCRLContext,
DWORD  dwPropId,
DWORD  dwFlags,
const void pvData 
)

Definition at line 660 of file crl.c.

662{
663 BOOL ret;
664
665 TRACE("(%p, %ld, %08lx, %p)\n", pCRLContext, dwPropId, dwFlags, pvData);
666
667 /* Handle special cases for "read-only"/invalid prop IDs. Windows just
668 * crashes on most of these, I'll be safer.
669 */
670 switch (dwPropId)
671 {
672 case 0:
675 case CERT_CRL_PROP_ID:
676 case CERT_CTL_PROP_ID:
678 return FALSE;
679 }
680 ret = CRLContext_SetProperty(crl_from_ptr(pCRLContext), dwPropId, dwFlags, pvData);
681 TRACE("returning %d\n", ret);
682 return ret;
683}
static BOOL CRLContext_SetProperty(crl_t *crl, DWORD dwPropId, DWORD dwFlags, const void *pvData)
Definition: crl.c:605

Referenced by testCRLProperties().

◆ CertVerifyCRLRevocation()

BOOL WINAPI CertVerifyCRLRevocation ( DWORD  dwCertEncodingType,
PCERT_INFO  pCertId,
DWORD  cCrlInfo,
PCRL_INFO  rgpCrlInfo[] 
)

Definition at line 856 of file crl.c.

858{
859 DWORD i;
861
862 TRACE("(%08lx, %p, %ld, %p)\n", dwCertEncodingType, pCertId, cCrlInfo,
863 rgpCrlInfo);
864
865 for (i = 0; !entry && i < cCrlInfo; i++)
866 entry = CRYPT_FindCertificateInCRL(pCertId, rgpCrlInfo[i]);
867 return entry == NULL;
868}
uint32_t entry
Definition: isohybrid.c:63
Definition: wincrypt.h:496

Referenced by CertVerifySubjectCertificateContext(), and testVerifyCRLRevocation().

◆ CertVerifyCRLTimeValidity()

LONG WINAPI CertVerifyCRLTimeValidity ( LPFILETIME  pTimeToVerify,
PCRL_INFO  pCrlInfo 
)

Definition at line 870 of file crl.c.

872{
873 FILETIME fileTime;
874 LONG ret;
875
876 if (!pTimeToVerify)
877 {
878 GetSystemTimeAsFileTime(&fileTime);
879 pTimeToVerify = &fileTime;
880 }
881 if ((ret = CompareFileTime(pTimeToVerify, &pCrlInfo->ThisUpdate)) >= 0)
882 {
883 ret = CompareFileTime(pTimeToVerify, &pCrlInfo->NextUpdate);
884 if (ret < 0)
885 ret = 0;
886 }
887 return ret;
888}
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
Definition: time.c:128
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
long LONG
Definition: pedump.c:60
FILETIME NextUpdate
Definition: wincrypt.h:508
FILETIME ThisUpdate
Definition: wincrypt.h:507

Referenced by CertGetCRLFromStore().

◆ clone_crl_info()

static CRL_INFO * clone_crl_info ( const CRL_INFO src)
static

Definition at line 65 of file crl.c.

66{
67 size_t size = sizeof(CRL_INFO);
69 DWORD i, j;
70 char *p;
71
72 if (src->SignatureAlgorithm.pszObjId)
73 size += strlen(src->SignatureAlgorithm.pszObjId) + 1;
74 size += src->SignatureAlgorithm.Parameters.cbData;
75 size += src->Issuer.cbData;
76 for (i = 0; i < src->cCRLEntry; ++i)
77 {
78 const CRL_ENTRY *entry = &src->rgCRLEntry[i];
79
80 size += sizeof(CRL_ENTRY);
81 size += entry->SerialNumber.cbData;
82 for (j = 0; j < entry->cExtension; ++j)
83 {
84 const CERT_EXTENSION *ext = &entry->rgExtension[j];
85
86 size += sizeof(CERT_EXTENSION);
87 size += strlen(ext->pszObjId) + 1;
88 size += ext->Value.cbData;
89 }
90 }
91
92 for (j = 0; j < src->cExtension; ++j)
93 {
94 const CERT_EXTENSION *ext = &src->rgExtension[j];
95
96 size += sizeof(CERT_EXTENSION);
97 size += strlen(ext->pszObjId) + 1;
98 size += ext->Value.cbData;
99 }
100
101 if (!(dst = LocalAlloc(LPTR, size)))
102 return NULL;
103 p = (char *)(dst + 1);
104
105 dst->dwVersion = src->dwVersion;
106 if (src->SignatureAlgorithm.pszObjId)
107 p = copy_string(p, &dst->SignatureAlgorithm.pszObjId, src->SignatureAlgorithm.pszObjId);
108 p = copy_blob(p, &dst->SignatureAlgorithm.Parameters, &src->SignatureAlgorithm.Parameters);
109 p = copy_blob(p, &dst->Issuer, &src->Issuer);
110 dst->ThisUpdate = src->ThisUpdate;
111 dst->NextUpdate = src->NextUpdate;
112
113 dst->cCRLEntry = src->cCRLEntry;
114 dst->rgCRLEntry = (CRL_ENTRY *)p;
115 p += src->cCRLEntry * sizeof(CRL_ENTRY);
116
117 dst->cExtension = src->cExtension;
118 dst->rgExtension = (CERT_EXTENSION *)p;
119 p += src->cExtension * sizeof(CERT_EXTENSION);
120
121 for (i = 0; i < src->cCRLEntry; ++i)
122 {
123 const CRL_ENTRY *src_entry = &src->rgCRLEntry[i];
124 CRL_ENTRY *dst_entry = &dst->rgCRLEntry[i];
125
126 p = copy_blob(p, &dst_entry->SerialNumber, &src_entry->SerialNumber);
127 dst_entry->RevocationDate = src_entry->RevocationDate;
128 dst_entry->cExtension = src_entry->cExtension;
129 dst_entry->rgExtension = (CERT_EXTENSION *)p;
130 p += src_entry->cExtension * sizeof(CERT_EXTENSION);
131
132 for (j = 0; j < src_entry->cExtension; ++j)
133 p = copy_extension(p, &dst_entry->rgExtension[j], &src_entry->rgExtension[j]);
134 }
135
136 for (j = 0; j < src->cExtension; ++j)
137 p = copy_extension(p, &dst->rgExtension[j], &src->rgExtension[j]);
138
139 assert(p - (char *)dst == size);
140 return dst;
141}
static char * copy_extension(char *p, CERT_EXTENSION *dst, const CERT_EXTENSION *src)
Definition: crl.c:58
static char * copy_blob(char *p, DATA_BLOB *dst, const DATA_BLOB *src)
Definition: crl.c:49
#define assert(_expr)
Definition: assert.h:32
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
GLfloat GLfloat p
Definition: glext.h:8902
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
#define LPTR
Definition: minwinbase.h:93
#define copy_string(dst, src)
Definition: environ.c:899
FILETIME RevocationDate
Definition: wincrypt.h:498
PCERT_EXTENSION rgExtension
Definition: wincrypt.h:500
CRYPT_INTEGER_BLOB SerialNumber
Definition: wincrypt.h:497
DWORD cExtension
Definition: wincrypt.h:499
Definition: tcpcore.h:1673
struct _CRL_INFO CRL_INFO
struct _CRL_ENTRY CRL_ENTRY
struct _CERT_EXTENSION CERT_EXTENSION

Referenced by CRL_clone().

◆ compare_crl_any()

static BOOL compare_crl_any ( PCCRL_CONTEXT  pCrlContext,
DWORD  dwType,
DWORD  dwFlags,
const void pvPara 
)
static

Definition at line 248 of file crl.c.

250{
251 return TRUE;
252}

Referenced by CertFindCRLInStore().

◆ compare_crl_existing()

static BOOL compare_crl_existing ( PCCRL_CONTEXT  pCrlContext,
DWORD  dwType,
DWORD  dwFlags,
const void pvPara 
)
static

Definition at line 353 of file crl.c.

355{
356 BOOL ret;
357
358 if (pvPara)
359 {
360 PCCRL_CONTEXT crl = pvPara;
361
363 &pCrlContext->pCrlInfo->Issuer, &crl->pCrlInfo->Issuer);
364 }
365 else
366 ret = TRUE;
367 return ret;
368}
BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType, PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2)
Definition: cert.c:1250
CERT_NAME_BLOB Issuer
Definition: wincrypt.h:506

Referenced by CertFindCRLInStore().

◆ compare_crl_issued_by()

static BOOL compare_crl_issued_by ( PCCRL_CONTEXT  pCrlContext,
DWORD  dwType,
DWORD  dwFlags,
const void pvPara 
)
static

Definition at line 254 of file crl.c.

256{
257 BOOL ret;
258
259 if (pvPara)
260 {
261 PCCERT_CONTEXT issuer = pvPara;
262
263 ret = CertCompareCertificateName(issuer->dwCertEncodingType,
264 &issuer->pCertInfo->Subject, &pCrlContext->pCrlInfo->Issuer);
267 issuer->dwCertEncodingType,
268 CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL, (void *)pCrlContext,
271 {
274 pCrlContext->pCrlInfo->rgExtension);
275
276 if (ext)
277 {
279 DWORD size;
280
282 X509_AUTHORITY_KEY_ID2, ext->Value.pbData, ext->Value.cbData,
284 {
285 if (info->AuthorityCertIssuer.cAltEntry &&
286 info->AuthorityCertSerialNumber.cbData)
287 {
288 PCERT_ALT_NAME_ENTRY directoryName = NULL;
289 DWORD i;
290
291 for (i = 0; !directoryName &&
292 i < info->AuthorityCertIssuer.cAltEntry; i++)
293 if (info->AuthorityCertIssuer.rgAltEntry[i].
294 dwAltNameChoice == CERT_ALT_NAME_DIRECTORY_NAME)
295 directoryName =
296 &info->AuthorityCertIssuer.rgAltEntry[i];
297 if (directoryName)
298 {
300 issuer->dwCertEncodingType,
301 &issuer->pCertInfo->Subject,
302 &directoryName->DirectoryName);
303 if (ret)
305 &issuer->pCertInfo->SerialNumber,
306 &info->AuthorityCertSerialNumber);
307 }
308 else
309 {
310 FIXME("no supported name type in authority key id2\n");
311 ret = FALSE;
312 }
313 }
314 else if (info->KeyId.cbData)
315 {
316 DWORD size;
317
320 if (ret && size == info->KeyId.cbData)
321 {
323
324 if (buf)
325 {
328 ret = !memcmp(buf, info->KeyId.pbData, size);
330 }
331 else
332 ret = FALSE;
333 }
334 else
335 ret = FALSE;
336 }
337 else
338 {
339 FIXME("unsupported value for AKI extension\n");
340 ret = FALSE;
341 }
343 }
344 }
345 /* else: a CRL without an AKI matches any cert */
346 }
347 }
348 else
349 ret = TRUE;
350 return ret;
351}
BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: cert.c:615
BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1, PCRYPT_INTEGER_BLOB pInt2)
Definition: cert.c:1291
VOID WINAPI CryptMemFree(LPVOID pv)
Definition: main.c:146
static WCHAR issuer[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1972
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
Definition: wincrypt.h:341
CERT_NAME_BLOB DirectoryName
Definition: wincrypt.h:347
unsigned char * LPBYTE
Definition: typedefs.h:53
#define X509_AUTHORITY_KEY_ID2
Definition: wincrypt.h:3550
#define CRL_FIND_ISSUED_BY_AKI_FLAG
Definition: wincrypt.h:3079
#define CERT_KEY_IDENTIFIER_PROP_ID
Definition: wincrypt.h:2853
#define CERT_ALT_NAME_DIRECTORY_NAME
Definition: wincrypt.h:358
#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG
Definition: wincrypt.h:3080
#define szOID_AUTHORITY_KEY_IDENTIFIER2
Definition: wincrypt.h:3356

Referenced by CertFindCRLInStore().

◆ compare_crl_issued_for()

static BOOL compare_crl_issued_for ( PCCRL_CONTEXT  pCrlContext,
DWORD  dwType,
DWORD  dwFlags,
const void pvPara 
)
static

Definition at line 370 of file crl.c.

372{
373 const CRL_FIND_ISSUED_FOR_PARA *para = pvPara;
374 BOOL ret;
375
377 &para->pIssuerCert->pCertInfo->Issuer, &pCrlContext->pCrlInfo->Issuer);
378 return ret;
379}
CERT_NAME_BLOB Issuer
Definition: wincrypt.h:253
PCCERT_CONTEXT pIssuerCert
Definition: wincrypt.h:3087

Referenced by CertFindCRLInStore().

◆ compare_dist_point_name()

static BOOL compare_dist_point_name ( const CRL_DIST_POINT_NAME name1,
const CRL_DIST_POINT_NAME name2 
)
static

Definition at line 685 of file crl.c.

687{
688 BOOL match;
689
690 if (name1->dwDistPointNameChoice == name2->dwDistPointNameChoice)
691 {
692 match = TRUE;
693 if (name1->dwDistPointNameChoice == CRL_DIST_POINT_FULL_NAME)
694 {
695 if (name1->FullName.cAltEntry == name2->FullName.cAltEntry)
696 {
697 DWORD i;
698
699 for (i = 0; match && i < name1->FullName.cAltEntry; i++)
700 {
701 const CERT_ALT_NAME_ENTRY *entry1 =
702 &name1->FullName.rgAltEntry[i];
703 const CERT_ALT_NAME_ENTRY *entry2 =
704 &name2->FullName.rgAltEntry[i];
705
706 if (entry1->dwAltNameChoice == entry2->dwAltNameChoice)
707 {
708 switch (entry1->dwAltNameChoice)
709 {
711 match = !wcsicmp(entry1->pwszURL,
712 entry2->pwszURL);
713 break;
715 match = (entry1->DirectoryName.cbData ==
716 entry2->DirectoryName.cbData) &&
717 !memcmp(entry1->DirectoryName.pbData,
718 entry2->DirectoryName.pbData,
719 entry1->DirectoryName.cbData);
720 break;
721 default:
722 FIXME("unimplemented for type %ld\n",
723 entry1->dwAltNameChoice);
724 match = FALSE;
725 }
726 }
727 else
728 match = FALSE;
729 }
730 }
731 else
732 match = FALSE;
733 }
734 }
735 else
736 match = FALSE;
737 return match;
738}
#define wcsicmp
Definition: compat.h:15
static WCHAR name1[]
Definition: record.c:34
static WCHAR name2[]
Definition: record.c:35
LPWSTR pwszURL
Definition: wincrypt.h:348
DWORD dwAltNameChoice
Definition: wincrypt.h:342
BYTE * pbData
Definition: wincrypt.h:112
Definition: match.c:28
#define CERT_ALT_NAME_URL
Definition: wincrypt.h:360
#define CRL_DIST_POINT_FULL_NAME
Definition: wincrypt.h:523

Referenced by match_dist_point_with_issuing_dist_point().

◆ copy_blob()

static char * copy_blob ( char p,
DATA_BLOB dst,
const DATA_BLOB src 
)
static

Definition at line 49 of file crl.c.

50{
51 size_t size = src->cbData;
52
53 dst->cbData = size;
54 dst->pbData = memcpy(p, src->pbData, size);
55 return p + size;
56}

Referenced by clone_crl_info(), and copy_extension().

◆ copy_extension()

static char * copy_extension ( char p,
CERT_EXTENSION dst,
const CERT_EXTENSION src 
)
static

Definition at line 58 of file crl.c.

59{
60 p = copy_string(p, &dst->pszObjId, src->pszObjId);
61 dst->fCritical = src->fCritical;
62 return copy_blob(p, &dst->Value, &src->Value);
63}

Referenced by clone_crl_info().

◆ copy_string()

static char * copy_string ( char p,
char **  dst,
const char src 
)
static

Definition at line 41 of file crl.c.

42{
43 size_t size = strlen(src) + 1;
44
45 *dst = memcpy(p, src, size);
46 return p + size;
47}

◆ CRL_clone()

static context_t * CRL_clone ( context_t context,
WINECRYPT_CERTSTORE store,
BOOL  use_link 
)
static

Definition at line 143 of file crl.c.

144{
145 crl_t *dst;
146
147 if(use_link) {
148 if (!(dst = (crl_t *)Context_CreateLinkContext(sizeof(CRL_CONTEXT), context, store)))
149 return NULL;
150 }else {
151 const crl_t *src = (const crl_t*)context;
152
153 if (!(dst = (crl_t *)Context_CreateDataContext(sizeof(CRL_CONTEXT), &crl_vtbl, store)))
154 return NULL;
155
156 Context_CopyProperties(&dst->ctx, &src->ctx);
157
158 dst->ctx.dwCertEncodingType = src->ctx.dwCertEncodingType;
159 dst->ctx.pbCrlEncoded = CryptMemAlloc(src->ctx.cbCrlEncoded);
160 memcpy(dst->ctx.pbCrlEncoded, src->ctx.pbCrlEncoded, src->ctx.cbCrlEncoded);
161 dst->ctx.cbCrlEncoded = src->ctx.cbCrlEncoded;
162
163 if (!(dst->ctx.pCrlInfo = clone_crl_info(src->ctx.pCrlInfo)))
164 {
165 CertFreeCRLContext(&dst->ctx);
166 return NULL;
167 }
168 }
169
170 dst->ctx.hCertStore = store;
171 return &dst->base;
172}
context_t * Context_CreateLinkContext(unsigned int contextSize, context_t *linked, WINECRYPT_CERTSTORE *store)
Definition: context.c:54
void Context_CopyProperties(const void *to, const void *from)
Definition: context.c:123
static CRL_INFO * clone_crl_info(const CRL_INFO *src)
Definition: crl.c:65
Definition: http.c:7252

◆ CRL_free()

static void CRL_free ( context_t context)
static

Definition at line 31 of file crl.c.

32{
34
35 CryptMemFree(crl->ctx.pbCrlEncoded);
36 LocalFree(crl->ctx.pCrlInfo);
37}

◆ CRLContext_GetHashProp()

static BOOL CRLContext_GetHashProp ( crl_t crl,
DWORD  dwPropId,
ALG_ID  algID,
const BYTE toHash,
DWORD  toHashLen,
void pvData,
DWORD pcbData 
)
static

Definition at line 500 of file crl.c.

503{
504 BOOL ret = CryptHashCertificate(0, algID, 0, toHash, toHashLen, pvData,
505 pcbData);
506 if (ret && pvData)
507 {
509
510 ret = CRLContext_SetProperty(crl, dwPropId, 0, &blob);
511 }
512 return ret;
513}
BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash)
Definition: cert.c:2258
Definition: image.c:134

Referenced by CRLContext_GetProperty().

◆ CRLContext_GetProperty()

static BOOL CRLContext_GetProperty ( crl_t crl,
DWORD  dwPropId,
void pvData,
DWORD pcbData 
)
static

Definition at line 515 of file crl.c.

517{
518 BOOL ret;
520
521 TRACE("(%p, %ld, %p, %p)\n", crl, dwPropId, pvData, pcbData);
522
523 if (crl->base.properties)
524 ret = ContextPropertyList_FindProperty(crl->base.properties, dwPropId, &blob);
525 else
526 ret = FALSE;
527 if (ret)
528 {
529 if (!pvData)
530 *pcbData = blob.cbData;
531 else if (*pcbData < blob.cbData)
532 {
534 *pcbData = blob.cbData;
535 ret = FALSE;
536 }
537 else
538 {
539 memcpy(pvData, blob.pbData, blob.cbData);
540 *pcbData = blob.cbData;
541 }
542 }
543 else
544 {
545 /* Implicit properties */
546 switch (dwPropId)
547 {
550 crl->ctx.pbCrlEncoded, crl->ctx.cbCrlEncoded, pvData,
551 pcbData);
552 break;
555 crl->ctx.pbCrlEncoded, crl->ctx.cbCrlEncoded, pvData,
556 pcbData);
557 break;
558 default:
560 }
561 }
562 TRACE("returning %d\n", ret);
563 return ret;
564}
BOOL ContextPropertyList_FindProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, PCRYPT_DATA_BLOB blob)
Definition: proplist.c:72
static BOOL CRLContext_GetHashProp(crl_t *crl, DWORD dwPropId, ALG_ID algID, const BYTE *toHash, DWORD toHashLen, void *pvData, DWORD *pcbData)
Definition: crl.c:500
#define CERT_MD5_HASH_PROP_ID
Definition: wincrypt.h:2836
#define CALG_SHA1
Definition: wincrypt.h:2060
#define CALG_MD5
Definition: wincrypt.h:2058
#define CERT_SHA1_HASH_PROP_ID
Definition: wincrypt.h:2834

Referenced by CertGetCRLContextProperty().

◆ CRLContext_SetProperty()

static BOOL CRLContext_SetProperty ( crl_t crl,
DWORD  dwPropId,
DWORD  dwFlags,
const void pvData 
)
static

Definition at line 605 of file crl.c.

607{
608 BOOL ret;
609
610 TRACE("(%p, %ld, %08lx, %p)\n", crl, dwPropId, dwFlags, pvData);
611
612 if (!crl->base.properties)
613 ret = FALSE;
614 else if (!pvData)
615 {
616 ContextPropertyList_RemoveProperty(crl->base.properties, dwPropId);
617 ret = TRUE;
618 }
619 else
620 {
621 switch (dwPropId)
622 {
624 case CERT_CTL_USAGE_PROP_ID: /* same as CERT_ENHKEY_USAGE_PROP_ID */
640 {
642
643 ret = ContextPropertyList_SetProperty(crl->base.properties, dwPropId,
644 blob->pbData, blob->cbData);
645 break;
646 }
648 ret = ContextPropertyList_SetProperty(crl->base.properties, dwPropId,
649 pvData, sizeof(FILETIME));
650 break;
651 default:
652 FIXME("%ld: stub\n", dwPropId);
653 ret = FALSE;
654 }
655 }
656 TRACE("returning %d\n", ret);
657 return ret;
658}
void ContextPropertyList_RemoveProperty(CONTEXT_PROPERTY_LIST *list, DWORD id)
Definition: proplist.c:149
BOOL ContextPropertyList_SetProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, const BYTE *pbData, size_t cbData)
Definition: proplist.c:95
#define CERT_PVK_FILE_PROP_ID
Definition: wincrypt.h:2845
#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID
Definition: wincrypt.h:2856
#define CERT_ENROLLMENT_PROP_ID
Definition: wincrypt.h:2859
#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID
Definition: wincrypt.h:2857
#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID
Definition: wincrypt.h:2858
#define CERT_DESCRIPTION_PROP_ID
Definition: wincrypt.h:2846
struct _CRYPTOAPI_BLOB * PCRYPT_DATA_BLOB
#define CERT_NEXT_UPDATE_LOCATION_PROP_ID
Definition: wincrypt.h:2843
#define CERT_PUBKEY_ALG_PARA_PROP_ID
Definition: wincrypt.h:2855
#define CERT_AUTO_ENROLL_PROP_ID
Definition: wincrypt.h:2854
#define CERT_FRIENDLY_NAME_PROP_ID
Definition: wincrypt.h:2844
#define CERT_CTL_USAGE_PROP_ID
Definition: wincrypt.h:2842
#define CERT_HASH_PROP_ID
Definition: wincrypt.h:2835
#define CERT_RENEWAL_PROP_ID
Definition: wincrypt.h:2871
#define CERT_SIGNATURE_HASH_PROP_ID
Definition: wincrypt.h:2848
#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID
Definition: wincrypt.h:2862
#define CERT_DATE_STAMP_PROP_ID
Definition: wincrypt.h:2860

Referenced by CertSetCRLContextProperty(), and CRLContext_GetHashProp().

◆ CRYPT_FindCertificateInCRL()

static PCRL_ENTRY CRYPT_FindCertificateInCRL ( PCERT_INFO  cert,
const CRL_INFO crl 
)
static

Definition at line 832 of file crl.c.

833{
834 DWORD i;
836
837 for (i = 0; !entry && i < crl->cCRLEntry; i++)
838 if (CertCompareIntegerBlob(&crl->rgCRLEntry[i].SerialNumber,
839 &cert->SerialNumber))
840 entry = &crl->rgCRLEntry[i];
841 return entry;
842}
static BYTE cert[]
Definition: msg.c:1374

Referenced by CertFindCertificateInCRL(), and CertVerifyCRLRevocation().

◆ match_dist_point_with_issuing_dist_point()

static BOOL match_dist_point_with_issuing_dist_point ( const CRL_DIST_POINT distPoint,
const CRL_ISSUING_DIST_POINT idp 
)
static

Definition at line 740 of file crl.c.

742{
743 BOOL match;
744
745 /* While RFC 5280, section 4.2.1.13 recommends against segmenting
746 * CRL distribution points by reasons, it doesn't preclude doing so.
747 * "This profile RECOMMENDS against segmenting CRLs by reason code."
748 * If the issuing distribution point for this CRL is only valid for
749 * some reasons, only match if the reasons covered also match the
750 * reasons in the CRL distribution point.
751 */
753 {
754 if (idp->OnlySomeReasonFlags.cbData == distPoint->ReasonFlags.cbData)
755 {
756 DWORD i;
757
758 match = TRUE;
759 for (i = 0; match && i < distPoint->ReasonFlags.cbData; i++)
760 if (idp->OnlySomeReasonFlags.pbData[i] !=
761 distPoint->ReasonFlags.pbData[i])
762 match = FALSE;
763 }
764 else
765 match = FALSE;
766 }
767 else
768 match = TRUE;
769 if (match)
771 &distPoint->DistPointName);
772 return match;
773}
static BOOL compare_dist_point_name(const CRL_DIST_POINT_NAME *name1, const CRL_DIST_POINT_NAME *name2)
Definition: crl.c:685
CRYPT_BIT_BLOB ReasonFlags
Definition: wincrypt.h:528
CRL_DIST_POINT_NAME DistPointName
Definition: wincrypt.h:527
CRL_DIST_POINT_NAME DistPointName
Definition: wincrypt.h:576
CRYPT_BIT_BLOB OnlySomeReasonFlags
Definition: wincrypt.h:579
BYTE * pbData
Definition: wincrypt.h:206

Referenced by CertIsValidCRLForCertificate().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( crypt  )

Variable Documentation

◆ crl_vtbl

static const context_vtbl_t crl_vtbl
static
Initial value:
= {
}
static context_t * CRL_clone(context_t *context, WINECRYPT_CERTSTORE *store, BOOL use_link)
Definition: crl.c:143
static void CRL_free(context_t *context)
Definition: crl.c:31

Definition at line 39 of file crl.c.

Referenced by CertCreateCRLContext(), and CRL_clone().