ReactOS 0.4.15-dev-7788-g1ad9096
crl.c
Go to the documentation of this file.
1/*
2 * Copyright 2006 Juan Lang
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 *
18 */
19
20#include <assert.h>
21#include <stdarg.h>
22#define NONAMELESSUNION
23#include "windef.h"
24#include "winbase.h"
25#include "wincrypt.h"
26#include "wine/debug.h"
27#include "wine/unicode.h"
28#include "crypt32_private.h"
29
31
33{
35
36 CryptMemFree(crl->ctx.pbCrlEncoded);
37 LocalFree(crl->ctx.pCrlInfo);
38}
39
41
43{
44 crl_t *crl;
45
46 if(use_link) {
48 if(!crl)
49 return NULL;
50 }else {
51 const crl_t *cloned = (const crl_t*)context;
52 DWORD size = 0;
53 BOOL res;
54
56 if(!crl)
57 return NULL;
58
59 Context_CopyProperties(&crl->ctx, &cloned->ctx);
60
61 crl->ctx.dwCertEncodingType = cloned->ctx.dwCertEncodingType;
62 crl->ctx.pbCrlEncoded = CryptMemAlloc(cloned->ctx.cbCrlEncoded);
63 memcpy(crl->ctx.pbCrlEncoded, cloned->ctx.pbCrlEncoded, cloned->ctx.cbCrlEncoded);
64 crl->ctx.cbCrlEncoded = cloned->ctx.cbCrlEncoded;
65
66 /* FIXME: We don't need to decode the object here, we could just clone crl info. */
67 res = CryptDecodeObjectEx(crl->ctx.dwCertEncodingType, X509_CERT_CRL_TO_BE_SIGNED,
68 crl->ctx.pbCrlEncoded, crl->ctx.cbCrlEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
69 &crl->ctx.pCrlInfo, &size);
70 if(!res) {
72 return NULL;
73 }
74 }
75
76 crl->ctx.hCertStore = store;
77 return &crl->base;
78}
79
80static const context_vtbl_t crl_vtbl = {
83};
84
86 const BYTE* pbCrlEncoded, DWORD cbCrlEncoded)
87{
88 crl_t *crl = NULL;
89 BOOL ret;
90 PCRL_INFO crlInfo = NULL;
91 BYTE *data = NULL;
92 DWORD size = 0;
93
94 TRACE("(%08x, %p, %d)\n", dwCertEncodingType, pbCrlEncoded,
96
98 {
100 return NULL;
101 }
104 &crlInfo, &size);
105 if (!ret)
106 return NULL;
107
109 if (!crl)
110 return NULL;
111
113 if (!data)
114 {
115 Context_Release(&crl->base);
116 return NULL;
117 }
118
119 memcpy(data, pbCrlEncoded, cbCrlEncoded);
120 crl->ctx.dwCertEncodingType = dwCertEncodingType;
121 crl->ctx.pbCrlEncoded = data;
122 crl->ctx.cbCrlEncoded = cbCrlEncoded;
123 crl->ctx.pCrlInfo = crlInfo;
124 crl->ctx.hCertStore = &empty_store;
125
126 return &crl->ctx;
127}
128
130 DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded,
132{
134 pbCrlEncoded, cbCrlEncoded);
135 BOOL ret;
136
137 TRACE("(%p, %08x, %p, %d, %08x, %p)\n", hCertStore, dwCertEncodingType,
139
140 if (crl)
141 {
145 }
146 else
147 ret = FALSE;
148 return ret;
149}
150
152 DWORD dwFlags, const void *pvPara);
153
155 DWORD dwFlags, const void *pvPara)
156{
157 return TRUE;
158}
159
161 DWORD dwFlags, const void *pvPara)
162{
163 BOOL ret;
164
165 if (pvPara)
166 {
168
169 ret = CertCompareCertificateName(issuer->dwCertEncodingType,
170 &issuer->pCertInfo->Subject, &pCrlContext->pCrlInfo->Issuer);
173 issuer->dwCertEncodingType,
177 {
181
182 if (ext)
183 {
185 DWORD size;
186
188 X509_AUTHORITY_KEY_ID2, ext->Value.pbData, ext->Value.cbData,
190 {
191 if (info->AuthorityCertIssuer.cAltEntry &&
192 info->AuthorityCertSerialNumber.cbData)
193 {
194 PCERT_ALT_NAME_ENTRY directoryName = NULL;
195 DWORD i;
196
197 for (i = 0; !directoryName &&
198 i < info->AuthorityCertIssuer.cAltEntry; i++)
199 if (info->AuthorityCertIssuer.rgAltEntry[i].
200 dwAltNameChoice == CERT_ALT_NAME_DIRECTORY_NAME)
201 directoryName =
202 &info->AuthorityCertIssuer.rgAltEntry[i];
203 if (directoryName)
204 {
206 issuer->dwCertEncodingType,
207 &issuer->pCertInfo->Subject,
208 &directoryName->u.DirectoryName);
209 if (ret)
211 &issuer->pCertInfo->SerialNumber,
212 &info->AuthorityCertSerialNumber);
213 }
214 else
215 {
216 FIXME("no supported name type in authority key id2\n");
217 ret = FALSE;
218 }
219 }
220 else if (info->KeyId.cbData)
221 {
222 DWORD size;
223
226 if (ret && size == info->KeyId.cbData)
227 {
229
230 if (buf)
231 {
234 ret = !memcmp(buf, info->KeyId.pbData, size);
236 }
237 else
238 ret = FALSE;
239 }
240 else
241 ret = FALSE;
242 }
243 else
244 {
245 FIXME("unsupported value for AKI extension\n");
246 ret = FALSE;
247 }
249 }
250 }
251 /* else: a CRL without an AKI matches any cert */
252 }
253 }
254 else
255 ret = TRUE;
256 return ret;
257}
258
260 DWORD dwFlags, const void *pvPara)
261{
262 BOOL ret;
263
264 if (pvPara)
265 {
267
269 &pCrlContext->pCrlInfo->Issuer, &crl->pCrlInfo->Issuer);
270 }
271 else
272 ret = TRUE;
273 return ret;
274}
275
277 DWORD dwFlags, const void *pvPara)
278{
279 const CRL_FIND_ISSUED_FOR_PARA *para = pvPara;
280 BOOL ret;
281
284 return ret;
285}
286
288 DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
289 const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext)
290{
293
294 TRACE("(%p, %d, %d, %d, %p, %p)\n", hCertStore, dwCertEncodingType,
295 dwFindFlags, dwFindType, pvFindPara, pPrevCrlContext);
296
297 switch (dwFindType)
298 {
299 case CRL_FIND_ANY:
301 break;
304 break;
307 break;
310 break;
311 default:
312 FIXME("find type %08x unimplemented\n", dwFindType);
313 compare = NULL;
314 }
315
316 if (compare)
317 {
319
321 do {
322 ret = CertEnumCRLsInStore(hCertStore, ret);
323 if (ret)
324 matches = compare(ret, dwFindType, dwFindFlags, pvFindPara);
325 } while (ret != NULL && !matches);
326 if (!ret)
328 }
329 else
330 {
332 ret = NULL;
333 }
334 return ret;
335}
336
338 PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags)
339{
340 static const DWORD supportedFlags = CERT_STORE_SIGNATURE_FLAG |
344
345 TRACE("(%p, %p, %p, %08x)\n", hCertStore, pIssuerContext, pPrevCrlContext,
346 *pdwFlags);
347
348 if (*pdwFlags & ~supportedFlags)
349 {
351 return NULL;
352 }
353 if (pIssuerContext)
354 ret = CertFindCRLInStore(hCertStore, pIssuerContext->dwCertEncodingType,
355 0, CRL_FIND_ISSUED_BY, pIssuerContext, pPrevCrlContext);
356 else
357 ret = CertFindCRLInStore(hCertStore, 0, 0, CRL_FIND_ANY, NULL,
359 if (ret)
360 {
361 if (*pdwFlags & CERT_STORE_TIME_VALIDITY_FLAG)
362 {
363 if (0 == CertVerifyCRLTimeValidity(NULL, ret->pCrlInfo))
364 *pdwFlags &= ~CERT_STORE_TIME_VALIDITY_FLAG;
365 }
366 if (*pdwFlags & CERT_STORE_SIGNATURE_FLAG)
367 {
368 if (CryptVerifyCertificateSignatureEx(0, ret->dwCertEncodingType,
370 CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT, (void *)pIssuerContext, 0,
371 NULL))
372 *pdwFlags &= ~CERT_STORE_SIGNATURE_FLAG;
373 }
374 }
375 return ret;
376}
377
379{
380 TRACE("(%p)\n", pCrlContext);
381 if (pCrlContext)
383 return pCrlContext;
384}
385
387{
388 TRACE("(%p)\n", pCrlContext);
389
390 if (pCrlContext)
392 return TRUE;
393}
394
397{
398 TRACE("(%p, %d)\n", pCRLContext, dwPropId);
399
400 return ContextPropertyList_EnumPropIDs(crl_from_ptr(pCRLContext)->base.properties, dwPropId);
401}
402
404 DWORD dwFlags, const void *pvData);
405
407 ALG_ID algID, const BYTE *toHash, DWORD toHashLen, void *pvData,
408 DWORD *pcbData)
409{
410 BOOL ret = CryptHashCertificate(0, algID, 0, toHash, toHashLen, pvData,
411 pcbData);
412 if (ret && pvData)
413 {
415
417 }
418 return ret;
419}
420
422 void *pvData, DWORD *pcbData)
423{
424 BOOL ret;
426
427 TRACE("(%p, %d, %p, %p)\n", crl, dwPropId, pvData, pcbData);
428
429 if (crl->base.properties)
431 else
432 ret = FALSE;
433 if (ret)
434 {
435 if (!pvData)
436 *pcbData = blob.cbData;
437 else if (*pcbData < blob.cbData)
438 {
440 *pcbData = blob.cbData;
441 ret = FALSE;
442 }
443 else
444 {
445 memcpy(pvData, blob.pbData, blob.cbData);
446 *pcbData = blob.cbData;
447 }
448 }
449 else
450 {
451 /* Implicit properties */
452 switch (dwPropId)
453 {
456 crl->ctx.pbCrlEncoded, crl->ctx.cbCrlEncoded, pvData,
457 pcbData);
458 break;
461 crl->ctx.pbCrlEncoded, crl->ctx.cbCrlEncoded, pvData,
462 pcbData);
463 break;
464 default:
466 }
467 }
468 TRACE("returning %d\n", ret);
469 return ret;
470}
471
474{
475 BOOL ret;
476
477 TRACE("(%p, %d, %p, %p)\n", pCRLContext, dwPropId, pvData, pcbData);
478
479 switch (dwPropId)
480 {
481 case 0:
483 case CERT_CRL_PROP_ID:
484 case CERT_CTL_PROP_ID:
486 ret = FALSE;
487 break;
489 if (!pvData)
490 {
491 *pcbData = sizeof(DWORD);
492 ret = TRUE;
493 }
494 else if (*pcbData < sizeof(DWORD))
495 {
497 *pcbData = sizeof(DWORD);
498 ret = FALSE;
499 }
500 else
501 {
503 }
504 break;
505 default:
507 }
508 return ret;
509}
510
512 DWORD dwFlags, const void *pvData)
513{
514 BOOL ret;
515
516 TRACE("(%p, %d, %08x, %p)\n", crl, dwPropId, dwFlags, pvData);
517
518 if (!crl->base.properties)
519 ret = FALSE;
520 else if (!pvData)
521 {
523 ret = TRUE;
524 }
525 else
526 {
527 switch (dwPropId)
528 {
530 case CERT_CTL_USAGE_PROP_ID: /* same as CERT_ENHKEY_USAGE_PROP_ID */
546 {
548
550 blob->pbData, blob->cbData);
551 break;
552 }
555 pvData, sizeof(FILETIME));
556 break;
557 default:
558 FIXME("%d: stub\n", dwPropId);
559 ret = FALSE;
560 }
561 }
562 TRACE("returning %d\n", ret);
563 return ret;
564}
565
567 DWORD dwPropId, DWORD dwFlags, const void *pvData)
568{
569 BOOL ret;
570
571 TRACE("(%p, %d, %08x, %p)\n", pCRLContext, dwPropId, dwFlags, pvData);
572
573 /* Handle special cases for "read-only"/invalid prop IDs. Windows just
574 * crashes on most of these, I'll be safer.
575 */
576 switch (dwPropId)
577 {
578 case 0:
581 case CERT_CRL_PROP_ID:
582 case CERT_CTL_PROP_ID:
584 return FALSE;
585 }
587 TRACE("returning %d\n", ret);
588 return ret;
589}
590
593{
594 BOOL match;
595
596 if (name1->dwDistPointNameChoice == name2->dwDistPointNameChoice)
597 {
598 match = TRUE;
599 if (name1->dwDistPointNameChoice == CRL_DIST_POINT_FULL_NAME)
600 {
601 if (name1->u.FullName.cAltEntry == name2->u.FullName.cAltEntry)
602 {
603 DWORD i;
604
605 for (i = 0; match && i < name1->u.FullName.cAltEntry; i++)
606 {
607 const CERT_ALT_NAME_ENTRY *entry1 =
608 &name1->u.FullName.rgAltEntry[i];
609 const CERT_ALT_NAME_ENTRY *entry2 =
610 &name2->u.FullName.rgAltEntry[i];
611
612 if (entry1->dwAltNameChoice == entry2->dwAltNameChoice)
613 {
614 switch (entry1->dwAltNameChoice)
615 {
617 match = !strcmpiW(entry1->u.pwszURL,
618 entry2->u.pwszURL);
619 break;
621 match = (entry1->u.DirectoryName.cbData ==
622 entry2->u.DirectoryName.cbData) &&
623 !memcmp(entry1->u.DirectoryName.pbData,
624 entry2->u.DirectoryName.pbData,
625 entry1->u.DirectoryName.cbData);
626 break;
627 default:
628 FIXME("unimplemented for type %d\n",
629 entry1->dwAltNameChoice);
630 match = FALSE;
631 }
632 }
633 else
634 match = FALSE;
635 }
636 }
637 else
638 match = FALSE;
639 }
640 }
641 else
642 match = FALSE;
643 return match;
644}
645
647 const CRL_DIST_POINT *distPoint, const CRL_ISSUING_DIST_POINT *idp)
648{
649 BOOL match;
650
651 /* While RFC 5280, section 4.2.1.13 recommends against segmenting
652 * CRL distribution points by reasons, it doesn't preclude doing so.
653 * "This profile RECOMMENDS against segmenting CRLs by reason code."
654 * If the issuing distribution point for this CRL is only valid for
655 * some reasons, only match if the reasons covered also match the
656 * reasons in the CRL distribution point.
657 */
659 {
660 if (idp->OnlySomeReasonFlags.cbData == distPoint->ReasonFlags.cbData)
661 {
662 DWORD i;
663
664 match = TRUE;
665 for (i = 0; match && i < distPoint->ReasonFlags.cbData; i++)
666 if (idp->OnlySomeReasonFlags.pbData[i] !=
667 distPoint->ReasonFlags.pbData[i])
668 match = FALSE;
669 }
670 else
671 match = FALSE;
672 }
673 else
674 match = TRUE;
675 if (match)
677 &distPoint->DistPointName);
678 return match;
679}
680
683{
685 BOOL ret;
686
687 TRACE("(%p, %p, %08x, %p)\n", pCert, pCrl, dwFlags, pvReserved);
688
689 if (!pCert)
690 return TRUE;
691
693 pCrl->pCrlInfo->cExtension, pCrl->pCrlInfo->rgExtension)))
694 {
696 DWORD size;
697
699 X509_ISSUING_DIST_POINT, ext->Value.pbData, ext->Value.cbData,
701 {
703 pCert->pCertInfo->cExtension, pCert->pCertInfo->rgExtension)))
704 {
705 CRL_DIST_POINTS_INFO *distPoints;
706
708 X509_CRL_DIST_POINTS, ext->Value.pbData, ext->Value.cbData,
709 CRYPT_DECODE_ALLOC_FLAG, NULL, &distPoints, &size)))
710 {
711 DWORD i;
712
713 ret = FALSE;
714 for (i = 0; !ret && i < distPoints->cDistPoint; i++)
716 &distPoints->rgDistPoint[i], idp);
717 if (!ret)
719 LocalFree(distPoints);
720 }
721 }
722 else
723 {
724 /* no CRL dist points extension in cert, can't match the CRL
725 * (which has an issuing dist point extension)
726 */
727 ret = FALSE;
729 }
730 LocalFree(idp);
731 }
732 }
733 else
734 ret = TRUE;
735 return ret;
736}
737
739{
740 DWORD i;
742
743 for (i = 0; !entry && i < crl->cCRLEntry; i++)
744 if (CertCompareIntegerBlob(&crl->rgCRLEntry[i].SerialNumber,
745 &cert->SerialNumber))
746 entry = &crl->rgCRLEntry[i];
747 return entry;
748}
749
752 PCRL_ENTRY *ppCrlEntry)
753{
754 TRACE("(%p, %p, %08x, %p, %p)\n", pCert, pCrlContext, dwFlags, pvReserved,
755 ppCrlEntry);
756
757 *ppCrlEntry = CRYPT_FindCertificateInCRL(pCert->pCertInfo,
759 return TRUE;
760}
761
763 PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[])
764{
765 DWORD i;
767
768 TRACE("(%08x, %p, %d, %p)\n", dwCertEncodingType, pCertId, cCrlInfo,
769 rgpCrlInfo);
770
771 for (i = 0; !entry && i < cCrlInfo; i++)
772 entry = CRYPT_FindCertificateInCRL(pCertId, rgpCrlInfo[i]);
773 return entry == NULL;
774}
775
777 PCRL_INFO pCrlInfo)
778{
779 FILETIME fileTime;
780 LONG ret;
781
782 if (!pTimeToVerify)
783 {
784 GetSystemTimeAsFileTime(&fileTime);
785 pTimeToVerify = &fileTime;
786 }
787 if ((ret = CompareFileTime(pTimeToVerify, &pCrlInfo->ThisUpdate)) >= 0)
788 {
789 ret = CompareFileTime(pTimeToVerify, &pCrlInfo->NextUpdate);
790 if (ret < 0)
791 ret = 0;
792 }
793 return ret;
794}
#define compare
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: debug.h:111
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:6286
#define CERT_CTL_PROP_ID
DWORD ContextPropertyList_EnumPropIDs(CONTEXT_PROPERTY_LIST *list, DWORD id) DECLSPEC_HIDDEN
Definition: proplist.c:170
#define CERT_CRL_PROP_ID
static crl_t * crl_from_ptr(const CRL_CONTEXT *ptr)
BOOL ContextPropertyList_FindProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, PCRYPT_DATA_BLOB blob) DECLSPEC_HIDDEN
Definition: proplist.c:72
#define CERT_CERT_PROP_ID
BOOL ContextPropertyList_SetProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, const BYTE *pbData, size_t cbData) DECLSPEC_HIDDEN
Definition: proplist.c:95
void ContextPropertyList_RemoveProperty(CONTEXT_PROPERTY_LIST *list, DWORD id) DECLSPEC_HIDDEN
Definition: proplist.c:149
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define E_INVALIDARG
Definition: ddrawi.h:101
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType, PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2)
Definition: cert.c:1180
BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject, DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved)
Definition: cert.c:2717
PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[])
Definition: cert.c:2028
BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: cert.c:551
BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash)
Definition: cert.c:2187
BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1, PCRYPT_INTEGER_BLOB pInt2)
Definition: cert.c:1221
void Context_AddRef(context_t *context)
Definition: context.c:78
void Context_Release(context_t *context)
Definition: context.c:106
context_t * Context_CreateLinkContext(unsigned int contextSize, context_t *linked, WINECRYPT_CERTSTORE *store)
Definition: context.c:54
context_t * Context_CreateDataContext(size_t contextSize, const context_vtbl_t *vtbl, WINECRYPT_CERTSTORE *store)
Definition: context.c:28
void Context_CopyProperties(const void *to, const void *from)
Definition: context.c:123
BOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCRLContext, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: crl.c:472
DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext, DWORD dwPropId)
Definition: crl.c:395
static BOOL CRLContext_SetProperty(crl_t *crl, DWORD dwPropId, DWORD dwFlags, const void *pvData)
Definition: crl.c:511
BOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved)
Definition: crl.c:681
BOOL WINAPI CertFreeCRLContext(PCCRL_CONTEXT pCrlContext)
Definition: crl.c:386
static BOOL compare_crl_issued_by(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:160
static PCRL_ENTRY CRYPT_FindCertificateInCRL(PCERT_INFO cert, const CRL_INFO *crl)
Definition: crl.c:738
BOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved, PCRL_ENTRY *ppCrlEntry)
Definition: crl.c:750
BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext, DWORD dwPropId, DWORD dwFlags, const void *pvData)
Definition: crl.c:566
static BOOL CRLContext_GetHashProp(crl_t *crl, DWORD dwPropId, ALG_ID algID, const BYTE *toHash, DWORD toHashLen, void *pvData, DWORD *pcbData)
Definition: crl.c:406
PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext)
Definition: crl.c:378
PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext)
Definition: crl.c:287
static const context_vtbl_t crl_vtbl
Definition: crl.c:40
BOOL(* CrlCompareFunc)(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:151
static BOOL compare_crl_issued_for(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:276
static BOOL compare_crl_any(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:154
PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags)
Definition: crl.c:337
static BOOL match_dist_point_with_issuing_dist_point(const CRL_DIST_POINT *distPoint, const CRL_ISSUING_DIST_POINT *idp)
Definition: crl.c:646
BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded, DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext)
Definition: crl.c:129
static context_t * CRL_clone(context_t *context, WINECRYPT_CERTSTORE *store, BOOL use_link)
Definition: crl.c:42
static BOOL CRLContext_GetProperty(crl_t *crl, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: crl.c:421
static BOOL compare_crl_existing(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:259
LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify, PCRL_INFO pCrlInfo)
Definition: crl.c:776
static void CRL_free(context_t *context)
Definition: crl.c:32
PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded)
Definition: crl.c:85
static BOOL compare_dist_point_name(const CRL_DIST_POINT_NAME *name1, const CRL_DIST_POINT_NAME *name2)
Definition: crl.c:591
BOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType, PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[])
Definition: crl.c:762
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
Definition: main.c:131
VOID WINAPI CryptMemFree(LPVOID pv)
Definition: main.c:141
static WCHAR issuer[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1905
BOOL WINAPI CertAddCRLContextToStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext)
Definition: store.c:960
PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pPrev)
Definition: store.c:1101
WINECRYPT_CERTSTORE empty_store
Definition: store.c:1509
BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: store.c:1172
#define SetLastError(x)
Definition: compat.h:752
static const WCHAR *const ext[]
Definition: module.c:53
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
unsigned int BOOL
Definition: ntddk_ex.h:94
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
GLuint res
Definition: glext.h:9613
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
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
uint32_t entry
Definition: isohybrid.c:63
#define matches(FN)
Definition: match.h:70
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const BYTE crl[]
Definition: message.c:864
static BYTE cert[]
Definition: msg.c:1437
static LPCSTR DWORD void * pvReserved
Definition: str.c:196
static WCHAR name1[]
Definition: record.c:34
static WCHAR name2[]
Definition: record.c:35
#define BOOL
Definition: nt_native.h:43
#define DWORD
Definition: nt_native.h:44
long LONG
Definition: pedump.c:60
#define strcmpiW(s1, s2)
Definition: unicode.h:39
#define TRACE(s)
Definition: solgame.cpp:4
Definition: wincrypt.h:332
LPWSTR pwszURL
Definition: wincrypt.h:339
DWORD dwAltNameChoice
Definition: wincrypt.h:333
CERT_NAME_BLOB DirectoryName
Definition: wincrypt.h:338
DWORD dwCertEncodingType
Definition: wincrypt.h:479
PCERT_INFO pCertInfo
Definition: wincrypt.h:482
PCERT_EXTENSION rgExtension
Definition: wincrypt.h:252
CERT_NAME_BLOB Issuer
Definition: wincrypt.h:244
DWORD cExtension
Definition: wincrypt.h:251
DWORD cbCrlEncoded
Definition: wincrypt.h:621
DWORD dwCertEncodingType
Definition: wincrypt.h:619
HCERTSTORE hCertStore
Definition: wincrypt.h:623
BYTE * pbCrlEncoded
Definition: wincrypt.h:620
PCRL_INFO pCrlInfo
Definition: wincrypt.h:622
PCRL_DIST_POINT rgDistPoint
Definition: wincrypt.h:533
CRYPT_BIT_BLOB ReasonFlags
Definition: wincrypt.h:519
CRL_DIST_POINT_NAME DistPointName
Definition: wincrypt.h:518
Definition: wincrypt.h:487
PCCERT_CONTEXT pIssuerCert
Definition: wincrypt.h:2940
DWORD cExtension
Definition: wincrypt.h:502
FILETIME NextUpdate
Definition: wincrypt.h:499
CERT_NAME_BLOB Issuer
Definition: wincrypt.h:497
FILETIME ThisUpdate
Definition: wincrypt.h:498
PCERT_EXTENSION rgExtension
Definition: wincrypt.h:503
CRL_DIST_POINT_NAME DistPointName
Definition: wincrypt.h:563
CRYPT_BIT_BLOB OnlySomeReasonFlags
Definition: wincrypt.h:566
BYTE * pbData
Definition: wincrypt.h:103
BYTE * pbData
Definition: wincrypt.h:197
Definition: image.c:134
Definition: bug.cpp:8
Definition: http.c:7252
CRL_CONTEXT ctx
Definition: match.c:28
unsigned char * LPBYTE
Definition: typedefs.h:53
int ret
#define CERT_PVK_FILE_PROP_ID
Definition: wincrypt.h:2698
#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID
Definition: wincrypt.h:2709
#define CERT_ENROLLMENT_PROP_ID
Definition: wincrypt.h:2712
#define X509_ISSUING_DIST_POINT
Definition: wincrypt.h:3424
_In_ PCCRL_CONTEXT pCrlContext
Definition: wincrypt.h:4992
#define X509_AUTHORITY_KEY_ID2
Definition: wincrypt.h:3398
#define CERT_MD5_HASH_PROP_ID
Definition: wincrypt.h:2689
#define CERT_STORE_BASE_CRL_FLAG
Definition: wincrypt.h:3464
#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID
Definition: wincrypt.h:2710
#define CERT_ENCODING_TYPE_MASK
Definition: wincrypt.h:2290
#define CRL_FIND_ISSUED_BY_AKI_FLAG
Definition: wincrypt.h:2932
#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID
Definition: wincrypt.h:2711
#define CALG_SHA1
Definition: wincrypt.h:1807
#define CERT_KEY_IDENTIFIER_PROP_ID
Definition: wincrypt.h:2706
#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
Definition: wincrypt.h:3470
#define CERT_ALT_NAME_URL
Definition: wincrypt.h:351
#define szOID_CRL_DIST_POINTS
Definition: wincrypt.h:3196
_In_ DWORD dwPropId
Definition: wincrypt.h:4948
#define CERT_ALT_NAME_DIRECTORY_NAME
Definition: wincrypt.h:349
#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG
Definition: wincrypt.h:2933
#define CALG_MD5
Definition: wincrypt.h:1805
_In_ PCCERT_CONTEXT _In_ DWORD dwAddDisposition
Definition: wincrypt.h:4984
#define CERT_DESCRIPTION_PROP_ID
Definition: wincrypt.h:2699
struct _CRYPTOAPI_BLOB * PCRYPT_DATA_BLOB
#define CRL_FIND_ANY
Definition: wincrypt.h:2927
#define CERT_NEXT_UPDATE_LOCATION_PROP_ID
Definition: wincrypt.h:2696
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
Definition: wincrypt.h:3474
#define CRL_FIND_ISSUED_FOR
Definition: wincrypt.h:2930
#define X509_ASN_ENCODING
Definition: wincrypt.h:2297
_In_ DWORD dwCertEncodingType
Definition: wincrypt.h:5037
#define CRYPT_DECODE_ALLOC_FLAG
Definition: wincrypt.h:3454
#define CERT_PUBKEY_ALG_PARA_PROP_ID
Definition: wincrypt.h:2708
#define CRL_DIST_POINT_FULL_NAME
Definition: wincrypt.h:514
#define CERT_AUTO_ENROLL_PROP_ID
Definition: wincrypt.h:2707
_In_ void * pvPara
Definition: wincrypt.h:6077
#define CERT_FRIENDLY_NAME_PROP_ID
Definition: wincrypt.h:2697
#define CERT_CTL_USAGE_PROP_ID
Definition: wincrypt.h:2695
#define CERT_ACCESS_STATE_PROP_ID
Definition: wincrypt.h:2700
#define CERT_STORE_SIGNATURE_FLAG
Definition: wincrypt.h:3458
#define CERT_HASH_PROP_ID
Definition: wincrypt.h:2688
#define CERT_RENEWAL_PROP_ID
Definition: wincrypt.h:2724
_In_ DWORD _In_ DWORD _In_ DWORD _Outptr_opt_ PCCRL_CONTEXT * ppCrlContext
Definition: wincrypt.h:5069
#define CERT_SHA1_HASH_PROP_ID
Definition: wincrypt.h:2687
_In_ DWORD _In_ DWORD cbCrlEncoded
Definition: wincrypt.h:5067
#define CERT_SIGNATURE_HASH_PROP_ID
Definition: wincrypt.h:2701
_In_ PCCERT_STORE_PROV_FIND_INFO _In_ PCCRL_CONTEXT pPrevCrlContext
Definition: wincrypt.h:1307
#define szOID_AUTHORITY_KEY_IDENTIFIER2
Definition: wincrypt.h:3200
_In_ DWORD _Out_writes_bytes_to_opt_ pcbData void _Inout_ DWORD * pcbData
Definition: wincrypt.h:4950
#define szOID_ISSUING_DIST_POINT
Definition: wincrypt.h:3194
#define X509_CRL_DIST_POINTS
Definition: wincrypt.h:3402
#define X509_CERT_CRL_TO_BE_SIGNED
Definition: wincrypt.h:3367
#define CERT_STORE_TIME_VALIDITY_FLAG
Definition: wincrypt.h:3459
#define CERT_STORE_DELTA_CRL_FLAG
Definition: wincrypt.h:3465
#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID
Definition: wincrypt.h:2715
#define CERT_DATE_STAMP_PROP_ID
Definition: wincrypt.h:2713
#define CRL_FIND_ISSUED_BY
Definition: wincrypt.h:2928
#define CRL_FIND_EXISTING
Definition: wincrypt.h:2929
unsigned int ALG_ID
Definition: wincrypt.h:45
_In_ ULONG _In_opt_ PVOID pvData
Definition: winddi.h:3749
#define WINAPI
Definition: msvc.h:6
#define CRYPT_E_NO_MATCH
Definition: winerror.h:3012
#define CRYPT_E_NOT_FOUND
Definition: winerror.h:3007
unsigned char BYTE
Definition: xxhash.c:193