ReactOS 0.4.17-dev-470-gf9e3448
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
23#include "windef.h"
24#include "winbase.h"
25#include "wincrypt.h"
26#include "wine/debug.h"
27#include "crypt32_private.h"
28
30
32{
34
35 CryptMemFree(crl->ctx.pbCrlEncoded);
36 LocalFree(crl->ctx.pCrlInfo);
37}
38
40
41static char *copy_string(char *p, char **dst, const char *src)
42{
43 size_t size = strlen(src) + 1;
44
45 *dst = memcpy(p, src, size);
46 return p + size;
47}
48
49static char *copy_blob(char *p, DATA_BLOB *dst, const DATA_BLOB *src)
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}
57
58static char *copy_extension(char *p, CERT_EXTENSION *dst, const CERT_EXTENSION *src)
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}
64
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}
142
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}
173
174static const context_vtbl_t crl_vtbl = {
175 CRL_free,
177};
178
180 const BYTE* pbCrlEncoded, DWORD cbCrlEncoded)
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}
222
224 DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded,
225 DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext)
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}
244
245typedef BOOL (*CrlCompareFunc)(PCCRL_CONTEXT pCrlContext, DWORD dwType,
246 DWORD dwFlags, const void *pvPara);
247
248static BOOL compare_crl_any(PCCRL_CONTEXT pCrlContext, DWORD dwType,
249 DWORD dwFlags, const void *pvPara)
250{
251 return TRUE;
252}
253
255 DWORD dwFlags, const void *pvPara)
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 {
273 szOID_AUTHORITY_KEY_IDENTIFIER2, pCrlContext->pCrlInfo->cExtension,
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}
352
353static BOOL compare_crl_existing(PCCRL_CONTEXT pCrlContext, DWORD dwType,
354 DWORD dwFlags, const void *pvPara)
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}
369
371 DWORD dwFlags, const void *pvPara)
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}
380
382 DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
383 const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext)
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}
430
432 PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags)
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}
471
473{
474 TRACE("(%p)\n", pCrlContext);
475 if (pCrlContext)
476 Context_AddRef(&crl_from_ptr(pCrlContext)->base);
477 return pCrlContext;
478}
479
481{
482 TRACE("(%p)\n", pCrlContext);
483
484 if (pCrlContext)
485 Context_Release(&crl_from_ptr(pCrlContext)->base);
486 return TRUE;
487}
488
490 DWORD dwPropId)
491{
492 TRACE("(%p, %ld)\n", pCRLContext, dwPropId);
493
494 return ContextPropertyList_EnumPropIDs(crl_from_ptr(pCRLContext)->base.properties, dwPropId);
495}
496
497static BOOL CRLContext_SetProperty(crl_t *crl, DWORD dwPropId,
498 DWORD dwFlags, const void *pvData);
499
501 ALG_ID algID, const BYTE *toHash, DWORD toHashLen, void *pvData,
502 DWORD *pcbData)
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}
514
516 void *pvData, DWORD *pcbData)
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}
565
567 DWORD dwPropId, void *pvData, DWORD *pcbData)
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}
604
606 DWORD dwFlags, const void *pvData)
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}
659
661 DWORD dwPropId, DWORD dwFlags, const void *pvData)
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}
684
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}
739
741 const CRL_DIST_POINT *distPoint, const CRL_ISSUING_DIST_POINT *idp)
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}
774
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}
831
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}
843
845 PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved,
846 PCRL_ENTRY *ppCrlEntry)
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}
855
857 PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[])
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}
869
871 PCRL_INFO pCrlInfo)
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}
#define compare
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
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
DWORD ContextPropertyList_EnumPropIDs(CONTEXT_PROPERTY_LIST *list, DWORD id)
Definition: proplist.c:170
#define CERT_CTL_PROP_ID
#define CERT_CRL_PROP_ID
static crl_t * crl_from_ptr(const CRL_CONTEXT *ptr)
#define CERT_CERT_PROP_ID
BOOL ContextPropertyList_FindProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, PCRYPT_DATA_BLOB blob)
Definition: proplist.c:72
void ContextPropertyList_RemoveProperty(CONTEXT_PROPERTY_LIST *list, DWORD id)
Definition: proplist.c:149
WINECRYPT_CERTSTORE empty_store
Definition: store.c:1503
BOOL ContextPropertyList_SetProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, const BYTE *pbData, size_t cbData)
Definition: proplist.c:95
#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:1250
BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject, DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved)
Definition: cert.c:2914
PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[])
Definition: cert.c:2099
BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: cert.c:615
BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash)
Definition: cert.c:2258
BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1, PCRYPT_INTEGER_BLOB pInt2)
Definition: cert.c:1291
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:566
DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext, DWORD dwPropId)
Definition: crl.c:489
static BOOL CRLContext_SetProperty(crl_t *crl, DWORD dwPropId, DWORD dwFlags, const void *pvData)
Definition: crl.c:605
BOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved)
Definition: crl.c:775
static char * copy_extension(char *p, CERT_EXTENSION *dst, const CERT_EXTENSION *src)
Definition: crl.c:58
BOOL WINAPI CertFreeCRLContext(PCCRL_CONTEXT pCrlContext)
Definition: crl.c:480
static char * copy_blob(char *p, DATA_BLOB *dst, const DATA_BLOB *src)
Definition: crl.c:49
static BOOL compare_crl_issued_by(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:254
static CRL_INFO * clone_crl_info(const CRL_INFO *src)
Definition: crl.c:65
static PCRL_ENTRY CRYPT_FindCertificateInCRL(PCERT_INFO cert, const CRL_INFO *crl)
Definition: crl.c:832
BOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved, PCRL_ENTRY *ppCrlEntry)
Definition: crl.c:844
BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext, DWORD dwPropId, DWORD dwFlags, const void *pvData)
Definition: crl.c:660
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
PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext)
Definition: crl.c:472
PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext)
Definition: crl.c:381
static const context_vtbl_t crl_vtbl
Definition: crl.c:39
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
PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags)
Definition: crl.c:431
static BOOL match_dist_point_with_issuing_dist_point(const CRL_DIST_POINT *distPoint, const CRL_ISSUING_DIST_POINT *idp)
Definition: crl.c:740
BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded, DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext)
Definition: crl.c:223
static context_t * CRL_clone(context_t *context, WINECRYPT_CERTSTORE *store, BOOL use_link)
Definition: crl.c:143
static BOOL CRLContext_GetProperty(crl_t *crl, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: crl.c:515
static BOOL compare_crl_existing(PCCRL_CONTEXT pCrlContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
Definition: crl.c:353
LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify, PCRL_INFO pCrlInfo)
Definition: crl.c:870
static void CRL_free(context_t *context)
Definition: crl.c:31
PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded)
Definition: crl.c:179
static BOOL compare_dist_point_name(const CRL_DIST_POINT_NAME *name1, const CRL_DIST_POINT_NAME *name2)
Definition: crl.c:685
BOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType, PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[])
Definition: crl.c:856
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
Definition: main.c:136
VOID WINAPI CryptMemFree(LPVOID pv)
Definition: main.c:146
static WCHAR issuer[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1972
BOOL WINAPI CertAddCRLContextToStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext)
Definition: store.c:954
PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pPrev)
Definition: store.c:1095
BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: store.c:1166
#define SetLastError(x)
Definition: compat.h:752
#define wcsicmp
Definition: compat.h:15
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
#define assert(_expr)
Definition: assert.h:32
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
return ret
Definition: mutex.c:146
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
GLenum src
Definition: glext.h:6340
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
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 i
Definition: glfuncs.h:248
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
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
uint32_t entry
Definition: isohybrid.c:63
#define LPTR
Definition: minwinbase.h:93
#define matches(FN)
Definition: match.h:70
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const BYTE crl[]
Definition: message.c:817
static BYTE cert[]
Definition: msg.c:1374
static WCHAR name1[]
Definition: record.c:34
static WCHAR name2[]
Definition: record.c:35
static LPCWSTR LPVOID pvReserved
Definition: asmcache.c:749
#define copy_string(dst, src)
Definition: environ.c:899
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
Definition: netsh.h:116
#define BOOL
Definition: nt_native.h:43
#define DWORD
Definition: nt_native.h:44
long LONG
Definition: pedump.c:60
_In_ _Out_writes_opt_ pcchValueName _Inout_opt_ LPDWORD _Out_opt_ _Out_writes_bytes_to_opt_ pcbData _Inout_opt_ LPDWORD pcbData
Definition: shlwapi.h:757
#define TRACE(s)
Definition: solgame.cpp:4
Definition: wincrypt.h:341
LPWSTR pwszURL
Definition: wincrypt.h:348
DWORD dwAltNameChoice
Definition: wincrypt.h:342
CERT_NAME_BLOB DirectoryName
Definition: wincrypt.h:347
DWORD dwCertEncodingType
Definition: wincrypt.h:488
PCERT_INFO pCertInfo
Definition: wincrypt.h:491
PCERT_EXTENSION rgExtension
Definition: wincrypt.h:261
CERT_NAME_BLOB Issuer
Definition: wincrypt.h:253
DWORD cExtension
Definition: wincrypt.h:260
DWORD dwCertEncodingType
Definition: wincrypt.h:731
HCERTSTORE hCertStore
Definition: wincrypt.h:735
PCRL_INFO pCrlInfo
Definition: wincrypt.h:734
PCRL_DIST_POINT rgDistPoint
Definition: wincrypt.h:542
CRYPT_BIT_BLOB ReasonFlags
Definition: wincrypt.h:528
CRL_DIST_POINT_NAME DistPointName
Definition: wincrypt.h:527
Definition: wincrypt.h:496
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
PCCERT_CONTEXT pIssuerCert
Definition: wincrypt.h:3087
DWORD cExtension
Definition: wincrypt.h:511
FILETIME NextUpdate
Definition: wincrypt.h:508
CERT_NAME_BLOB Issuer
Definition: wincrypt.h:506
FILETIME ThisUpdate
Definition: wincrypt.h:507
PCERT_EXTENSION rgExtension
Definition: wincrypt.h:512
CRL_DIST_POINT_NAME DistPointName
Definition: wincrypt.h:576
CRYPT_BIT_BLOB OnlySomeReasonFlags
Definition: wincrypt.h:579
BYTE * pbData
Definition: wincrypt.h:112
BYTE * pbData
Definition: wincrypt.h:206
Definition: image.c:134
Definition: bug.cpp:8
Definition: http.c:7252
Definition: tcpcore.h:1673
Definition: match.c:28
unsigned char * LPBYTE
Definition: typedefs.h:53
#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 X509_ISSUING_DIST_POINT
Definition: wincrypt.h:3576
#define X509_AUTHORITY_KEY_ID2
Definition: wincrypt.h:3550
#define CERT_MD5_HASH_PROP_ID
Definition: wincrypt.h:2836
#define CERT_STORE_BASE_CRL_FLAG
Definition: wincrypt.h:3622
#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID
Definition: wincrypt.h:2857
#define CERT_ENCODING_TYPE_MASK
Definition: wincrypt.h:2494
#define CRL_FIND_ISSUED_BY_AKI_FLAG
Definition: wincrypt.h:3079
#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID
Definition: wincrypt.h:2858
#define CALG_SHA1
Definition: wincrypt.h:2060
#define CERT_KEY_IDENTIFIER_PROP_ID
Definition: wincrypt.h:2853
struct _CRL_INFO CRL_INFO
#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
Definition: wincrypt.h:3628
struct _CRL_ENTRY CRL_ENTRY
#define CERT_ALT_NAME_URL
Definition: wincrypt.h:360
#define szOID_CRL_DIST_POINTS
Definition: wincrypt.h:3352
struct _CERT_EXTENSION CERT_EXTENSION
#define CERT_ALT_NAME_DIRECTORY_NAME
Definition: wincrypt.h:358
#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG
Definition: wincrypt.h:3080
#define CALG_MD5
Definition: wincrypt.h:2058
#define CERT_DESCRIPTION_PROP_ID
Definition: wincrypt.h:2846
unsigned int ALG_ID
Definition: wincrypt.h:54
struct _CRYPTOAPI_BLOB * PCRYPT_DATA_BLOB
#define CRL_FIND_ANY
Definition: wincrypt.h:3074
#define CERT_NEXT_UPDATE_LOCATION_PROP_ID
Definition: wincrypt.h:2843
#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
Definition: wincrypt.h:3632
#define CRL_FIND_ISSUED_FOR
Definition: wincrypt.h:3077
#define X509_ASN_ENCODING
Definition: wincrypt.h:2501
#define CRYPT_DECODE_ALLOC_FLAG
Definition: wincrypt.h:3612
#define CERT_PUBKEY_ALG_PARA_PROP_ID
Definition: wincrypt.h:2855
#define CRL_DIST_POINT_FULL_NAME
Definition: wincrypt.h:523
#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_ACCESS_STATE_PROP_ID
Definition: wincrypt.h:2847
#define CERT_STORE_SIGNATURE_FLAG
Definition: wincrypt.h:3616
#define CERT_HASH_PROP_ID
Definition: wincrypt.h:2835
#define CERT_RENEWAL_PROP_ID
Definition: wincrypt.h:2871
#define CERT_SHA1_HASH_PROP_ID
Definition: wincrypt.h:2834
#define CERT_SIGNATURE_HASH_PROP_ID
Definition: wincrypt.h:2848
#define szOID_AUTHORITY_KEY_IDENTIFIER2
Definition: wincrypt.h:3356
#define szOID_ISSUING_DIST_POINT
Definition: wincrypt.h:3350
#define X509_CRL_DIST_POINTS
Definition: wincrypt.h:3554
#define X509_CERT_CRL_TO_BE_SIGNED
Definition: wincrypt.h:3519
#define CERT_STORE_TIME_VALIDITY_FLAG
Definition: wincrypt.h:3617
#define CERT_STORE_DELTA_CRL_FLAG
Definition: wincrypt.h:3623
#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID
Definition: wincrypt.h:2862
#define CERT_DATE_STAMP_PROP_ID
Definition: wincrypt.h:2860
#define CRL_FIND_ISSUED_BY
Definition: wincrypt.h:3075
#define CRL_FIND_EXISTING
Definition: wincrypt.h:3076
#define WINAPI
Definition: msvc.h:6
#define CRYPT_E_NO_MATCH
Definition: winerror.h:4426
#define CRYPT_E_NOT_FOUND
Definition: winerror.h:4421
unsigned char BYTE
Definition: xxhash.c:193