21#define CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS
45#define IS_INTOID(x) (((ULONG_PTR)(x) >> 16) == 0)
49#define SHGetKnownFolderPath(a,b,c,out) CryptnetSHGetKnownFolderPath(out)
71 L"cryptnet.dll",
"LdapProvOpenStore");
99#define _x(oid) case LOWORD(oid): return #oid
136 cert->pCertInfo->cExtension,
cert->pCertInfo->rgExtension)))
148 for (
i = 0, cUrl = 0;
i <
aia->cAccDescr;
i++)
149 if (!
strcmp(
aia->rgAccDescr[
i].pszAccessMethod,
152 if (
aia->rgAccDescr[
i].AccessLocation.dwAltNameChoice ==
155 if (
aia->rgAccDescr[
i].AccessLocation.pwszURL)
158 bytesNeeded +=
sizeof(
LPWSTR) +
160 pwszURL) + 1) *
sizeof(
WCHAR);
164 FIXME(
"unsupported alt name type %ld\n",
165 aia->rgAccDescr[
i].AccessLocation.dwAltNameChoice);
173 *pcbUrlArray = bytesNeeded;
174 else if (*pcbUrlArray < bytesNeeded)
177 *pcbUrlArray = bytesNeeded;
184 *pcbUrlArray = bytesNeeded;
190 for (
i = 0;
i <
aia->cAccDescr;
i++)
191 if (!
strcmp(
aia->rgAccDescr[
i].pszAccessMethod,
194 if (
aia->rgAccDescr[
i].AccessLocation.dwAltNameChoice
197 if (
aia->rgAccDescr[
i].AccessLocation.pwszURL)
200 aia->rgAccDescr[
i].AccessLocation.pwszURL);
212 FIXME(
"url info: stub\n");
250 for (
i = 0, cUrl = 0;
i <
info->cDistPoint;
i++)
251 if (
info->rgDistPoint[
i].DistPointName.dwDistPointNameChoice
256 &
info->rgDistPoint[
i].DistPointName.FullName;
258 for (
j = 0;
j <
name->cAltEntry;
j++)
259 if (
name->rgAltEntry[
j].dwAltNameChoice ==
262 if (
name->rgAltEntry[
j].pwszURL)
265 bytesNeeded +=
sizeof(
LPWSTR) +
277 *pcbUrlArray = bytesNeeded;
278 else if (*pcbUrlArray < bytesNeeded)
281 *pcbUrlArray = bytesNeeded;
288 *pcbUrlArray = bytesNeeded;
294 for (
i = 0;
i <
info->cDistPoint;
i++)
295 if (
info->rgDistPoint[
i].DistPointName.dwDistPointNameChoice
300 &
info->rgDistPoint[
i].DistPointName.FullName;
302 for (
j = 0;
j <
name->cAltEntry;
j++)
303 if (
name->rgAltEntry[
j].dwAltNameChoice ==
306 if (
name->rgAltEntry[
j].pwszURL)
309 name->rgAltEntry[
j].pwszURL);
322 FIXME(
"url info: stub\n");
358 cert->pCertInfo->cExtension,
cert->pCertInfo->rgExtension)))
360 pcbUrlArray, pUrlInfo, pcbUrlInfo);
382 switch (
LOWORD(pszUrlOid))
402 (
void **)&
func, &hFunc);
423 TRACE(
"(%s, %s, %08lx, %ld, %p, %p, %p, %p, %p)\n",
debugstr_a(pszURL),
424 debugstr_a(pszObjectOid), dwRetrievalFlags, dwTimeout, ppvObject,
425 hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo);
441 dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve,
442 pCredentials, pvVerify, pAuxInfo);
470 WARN(
"file too big\n");
583 components->dwStructSize =
sizeof(*components);
654 DWORD bytesAvailable;
664 object.
cbData + bytesAvailable);
672 buffer.lpvBuffer =
object.pbData +
object.cbData;
688 object.cbData +=
buffer.dwBufferLength;
705 }
while (
ret && bytesAvailable);
717 pObject->rgBlob[0].cbData =
object.cbData;
718 pObject->rgBlob[0].pbData =
object.pbData;
745 ERR(
"out of memory\n");
763 info->ExpireTime = expires;
788 memset(&ft, 0,
sizeof(ft));
861 FIXME(
"(%s, %s, %08lx, %ld, %p, %p, %p, %p, %p, %p)\n",
debugstr_w(pszURL),
863 ppfnFreeObject, ppvFreeContext, hAsyncRetrieve, pCredentials, pAuxInfo);
868 *ppvFreeContext =
NULL;
880 TRACE(
"(%s, %s, %08lx, %ld, %p, %p, %p, %p, %p, %p)\n",
debugstr_w(pszURL),
882 ppfnFreeObject, ppvFreeContext, hAsyncRetrieve, pCredentials, pAuxInfo);
887 *ppvFreeContext =
NULL;
909 L"application/x-x509-ca-cert",
L"application/x-x509-email-cert",
910 L"application/x-x509-server-cert",
L"application/x-x509-user-cert",
911 L"application/x-pkcs7-certificates",
L"application/pkix-crl",
912 L"application/x-pkcs7-crl",
L"application/x-pkcs7-signature",
913 L"application/x-pkcs7-mime",
NULL
928 &dwTimeout,
sizeof(dwTimeout));
990 TRACE(
"(%s, %s, %08lx, %ld, %p, %p, %p, %p, %p, %p)\n",
debugstr_w(pszURL),
992 ppfnFreeObject, ppvFreeContext, hAsyncRetrieve, pCredentials, pAuxInfo);
997 *ppvFreeContext =
NULL;
1081 void **ppvFreeContext,
HCRYPTASYNC hAsyncRetrieve,
1132 scheme, 0, (
void **)pFunc, phFunc);
1174 context->rgBlob[
i].pbData = nextData;
1176 nextData +=
pObject->rgBlob[
i].cbData;
1186 const void *pContext,
DWORD dwAddDisposition,
const void **ppStoreContext);
1259 &
pObject->rgBlob[
i], dwExpectedContentTypeFlags,
1277 *ppvContext = store;
1321 FIXME(
"multiple messages unimplemented\n");
1367 DWORD contentType, expectedContentTypes =
1377 &
pObject->rgBlob[
i], expectedContentTypes,
1381 switch (contentType)
1412 *ppvContext = store;
1431 switch (
LOWORD(pszObjectOid))
1461 0, (
void **)pFunc, phFunc);
1472 switch (
LOWORD(pszObjectOid)) {
1474 *expiration = ((
const CERT_CONTEXT*)
object)->pCertInfo->NotAfter;
1477 *expiration = ((
const CRL_CONTEXT*)
object)->pCrlInfo->NextUpdate;
1480 *expiration = ((
const CTL_CONTEXT*)
object)->pCtlInfo->NextUpdate;
1500 TRACE(
"(%s, %s, %08lx, %ld, %p, %p, %p, %p, %p)\n",
debugstr_w(pszURL),
1501 debugstr_a(pszObjectOid), dwRetrievalFlags, dwTimeout, ppvObject,
1502 hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo);
1519 ret = retrieve(pszURL, pszObjectOid, dwRetrievalFlags, dwTimeout,
1520 &
object, &freeObject, &freeContext, hAsyncRetrieve, pCredentials,
1524 ret =
create(pszObjectOid, dwRetrievalFlags, &
object, ppvObject);
1530 freeObject(pszObjectOid, &
object, freeContext);
1560#define CACHED_CERT_HASH_SIZE 20
1567 WCHAR *appdata_path;
1573 if (
FAILED(
hr = SHGetKnownFolderPath(&FOLDERID_LocalAppDataLow, 0,
NULL, &appdata_path)))
1575 ERR(
"Failed to get LocalAppDataLow path, hr %#lx.\n",
hr);
1584 WARN(
"Hash length exceeds static buffer; not caching.\n");
1631 ERR(
"Invalid cache signature.\n");
1636 if (
fread(&update_time,
sizeof(update_time), 1,
file) != 1)
1638 ERR(
"Failed to read update time.\n");
1645 TRACE(
"Cached revocation status is potentially out of date.\n");
1652 ERR(
"Failed to read error code.\n");
1659 ERR(
"Failed to read revocation reason.\n");
1664 TRACE(
"Using cached status %#lx, reason %#lx.\n",
status->dwError,
status->dwReason);
1701 DWORD retrieve_flags = 0;
1740 TRACE(
"no issuer certificate\n");
1767 *next_update =
crl->pCrlInfo->NextUpdate;
1794 BYTE issuer_name_hash[20], issuer_key_hash[20], *
buf, *
ret;
1795 DWORD size = 0, hash_len =
sizeof(issuer_name_hash);
1801 entry.CertId.IssuerNameHash.cbData =
sizeof(issuer_name_hash);
1802 entry.CertId.IssuerNameHash.pbData = issuer_name_hash;
1804 sha1_hash(
issuer->SubjectPublicKeyInfo.PublicKey.pbData,
issuer->SubjectPublicKeyInfo.PublicKey.cbData,
1805 issuer_key_hash, &hash_len);
1806 entry.CertId.IssuerKeyHash.cbData =
sizeof(issuer_key_hash);
1807 entry.CertId.IssuerKeyHash.pbData = issuer_key_hash;
1809 entry.CertId.SerialNumber.cbData =
cert->pCertInfo->SerialNumber.cbData;
1810 entry.CertId.SerialNumber.pbData =
cert->pCertInfo->SerialNumber.pbData;
1842 static const WCHAR hex[] =
L"0123456789ABCDEF";
1847 for (
i = 0;
i < src_len;
i++)
1926 FIXME(
"hash algorithm %s not supported\n",
debugstr_a(
id->HashAlgorithm.pszObjId));
1931 if (
id->IssuerNameHash.cbData != hash_len)
return FALSE;
1935 issuer->SubjectPublicKeyInfo.PublicKey.cbData,
hash, &hash_len);
1936 if (
id->IssuerKeyHash.cbData != hash_len)
return FALSE;
1939 if (
cert->SerialNumber.cbData !=
id->SerialNumber.cbData)
return FALSE;
1940 return !
memcmp(
cert->SerialNumber.pbData,
id->SerialNumber.pbData,
id->SerialNumber.cbData);
1949 memset(next_update, 0,
sizeof(*next_update));
1953 FIXME(
"check responder id\n");
1954 for (
i = 0;
i <
info->cResponseEntry;
i++)
1960 *next_update =
entry->NextUpdate;
1985 alg = &
info->SignatureInfo.SignatureAlgorithm;
1997 sig = &
info->SignatureInfo.Signature;
2002 TRACE(
"failed to import public key %#lx\n",
error);
2007 TRACE(
"failed to verify signature %#lx\n",
error);
2029 switch (
info->dwStatus)
2041 FIXME(
"unhandled status %lu\n",
info->dwStatus);
2060 TRACE(
"no issuer certificate\n");
2070 memset(&comp, 0,
sizeof(comp));
2114 size =
sizeof(response_len);
2116 !response_len || !(response_data =
malloc(response_len)) ||
2124 free(response_data);
2143 for (
i = 0;
i <
aia->cAccDescr;
i++)
2149 const WCHAR *
url =
aia->rgAccDescr[
i].AccessLocation.pwszURL;
2155 FIXME(
"unsupported AccessLocation type %lu\n",
aia->rgAccDescr[
i].AccessLocation.dwAltNameChoice);
2178 TRACE(
"CRL not old enough\n");
2189 TRACE(
"certificate not found\n");
2204 TRACE(
"Returning cached status.\n");
2213 TRACE(
"verify_cert_revocation_from_aia_ext() returned %08lx\n",
error);
2220 TRACE(
"verify_cert_revocation_from_dist_points_ext() returned %08lx\n",
error);
2241 ext->Value.pbData,
ext->Value.cbData,
2243 canSignCRLs =
FALSE;
2244 else if (
usage.cbData > 2)
2249 canSignCRLs =
FALSE;
2266 cert->dwCertEncodingType,
2278 TRACE(
"no CRL found\n");
2285 WARN(
"no CERT_REVOCATION_PARA\n");
2287 WARN(
"no dist points/aia extension and no CRL store\n");
2289 WARN(
"no dist points/aia extension and no issuer\n");
2299 memset(&rev_status, 0,
sizeof(rev_status));
2300 rev_status.
cbSize =
sizeof(rev_status);
2334 TRACE(
"(%08lx, %ld, %ld, %p, %08lx, %p, %p)\n", dwEncodingType, dwRevType,
2335 cContext, rgpvContext,
dwFlags, pRevPara, pRevStatus);
2348 if (pRevPara && pRevPara->
cbSize >=
2361 for (
i = 0;
i < cContext;
i++)
ios_base &_STLP_CALL hex(ios_base &__s)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority)
BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static DWORD verify_cert_revocation_with_crl_offline(PCCERT_CONTEXT cert, const CRL_CONTEXT *crl, FILETIME *pTime, CERT_REVOCATION_STATUS *pRevStatus)
static BOOL find_cached_revocation_status(const CERT_CONTEXT *cert, const CERT_REVOCATION_PARA *params, const FILETIME *time, CERT_REVOCATION_STATUS *status)
static void cache_revocation_status(const CERT_CONTEXT *cert, const CERT_REVOCATION_PARA *params, const FILETIME *time, const CERT_REVOCATION_STATUS *status)
static BOOL WINAPI CRYPT_GetUrlFromCertificateCRLDistPoint(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags, PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo, DWORD *pcbUrlInfo, LPVOID pvReserved)
static DWORD handle_ocsp_response(const CERT_INFO *cert, const CERT_INFO *issuer, const BYTE *encoded, DWORD encoded_size, FILETIME *next_update)
static BOOL WINAPI CRYPT_CreateCert(LPCSTR pszObjectOid, DWORD dwRetrievalFlags, const CRYPT_BLOB_ARRAY *pObject, void **ppvContext)
HRESULT WINAPI DllRegisterServer(void)
static BOOL decode_base64_blob(const CRYPT_DATA_BLOB *in, CRYPT_DATA_BLOB *out)
static BOOL CRYPT_GetRetrieveFunction(LPCWSTR pszURL, SchemeDllRetrieveEncodedObjectW *pFunc, HCRYPTOIDFUNCADDR *phFunc)
static FILE * open_cached_revocation_file(const CERT_CONTEXT *cert, const CERT_REVOCATION_PARA *params, const WCHAR *mode, int sharing)
static BOOL CRYPT_Connect(const URL_COMPONENTSW *components, struct InetContext *context, PCRYPT_CREDENTIALS pCredentials, HINTERNET *phInt, HINTERNET *phHost)
BOOL WINAPI CertDllVerifyRevocation(DWORD dwEncodingType, DWORD dwRevType, DWORD cContext, PVOID rgpvContext[], DWORD dwFlags, PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus)
static DWORD check_ocsp_response_info(const CERT_INFO *cert, const CERT_INFO *issuer, const CRYPT_OBJID_BLOB *blob, DWORD *status, FILETIME *next_update)
static BOOL CRYPT_GetCreateFunction(LPCSTR pszObjectOid, ContextDllCreateObjectContext *pFunc, HCRYPTOIDFUNCADDR *phFunc)
static struct InetContext * CRYPT_MakeInetContext(DWORD dwTimeout)
static void CRYPT_CacheURL(LPCWSTR pszURL, const CRYPT_BLOB_ARRAY *pObject, DWORD dwRetrievalFlags, FILETIME expires)
BOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszURL, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo)
static DWORD map_ocsp_status(DWORD status)
static BOOL CRYPT_GetExpiration(const void *object, const char *pszObjectOid, FILETIME *expiration)
static DWORD verify_cert_revocation_from_dist_points_ext(const CRYPT_DATA_BLOB *value, const CERT_CONTEXT *cert, FILETIME *time, DWORD flags, const CERT_REVOCATION_PARA *params, CERT_REVOCATION_STATUS *status, FILETIME *next_update)
static DWORD verify_cert_revocation(const CERT_CONTEXT *cert, FILETIME *pTime, DWORD dwFlags, CERT_REVOCATION_PARA *pRevPara, CERT_REVOCATION_STATUS *pRevStatus)
static void CALLBACK CRYPT_InetStatusCallback(HINTERNET hInt, DWORD_PTR dwContext, DWORD status, void *statusInfo, DWORD statusInfoLen)
HRESULT WINAPI DllUnregisterServer(void)
static BOOL CRYPT_DownloadObject(DWORD dwRetrievalFlags, HINTERNET hHttp, struct InetContext *context, PCRYPT_BLOB_ARRAY pObject, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo)
static BOOL WINAPI CRYPT_CreatePKCS7(LPCSTR pszObjectOid, DWORD dwRetrievalFlags, const CRYPT_BLOB_ARRAY *pObject, void **ppvContext)
static DWORD verify_signed_ocsp_response_info(const CERT_INFO *cert, const CERT_INFO *issuer, const CRYPT_OBJID_BLOB *blob, FILETIME *next_update)
static BOOL match_cert_id(const OCSP_CERT_ID *id, const CERT_INFO *cert, const CERT_INFO *issuer)
static void sha1_hash(const BYTE *data, DWORD datalen, BYTE *buf, DWORD *buflen)
BOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszURL, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo)
static WCHAR * build_request_url(const WCHAR *base_url, const BYTE *data, DWORD data_size)
static BOOL WINAPI CRYPT_CreateBlob(LPCSTR pszObjectOid, DWORD dwRetrievalFlags, const CRYPT_BLOB_ARRAY *pObject, void **ppvContext)
struct _CERT_REVOCATION_PARA_NO_EXTRA_FIELDS CERT_REVOCATION_PARA_NO_EXTRA_FIELDS
static DWORD verify_cert_revocation_from_aia_ext(const CRYPT_DATA_BLOB *value, const CERT_CONTEXT *cert, FILETIME *pTime, DWORD dwFlags, CERT_REVOCATION_PARA *pRevPara, CERT_REVOCATION_STATUS *pRevStatus, FILETIME *next_update)
static DWORD verify_cert_revocation_with_ocsp(const CERT_CONTEXT *cert, const WCHAR *base_url, const CERT_REVOCATION_PARA *revpara, FILETIME *next_update)
static DWORD verify_cert_revocation_with_crl_online(const CERT_CONTEXT *cert, const CRL_CONTEXT *crl, FILETIME *pTime, CERT_REVOCATION_STATUS *pRevStatus)
static BOOL CRYPT_GetObjectFromCache(LPCWSTR pszURL, PCRYPT_BLOB_ARRAY pObject, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo)
static BOOL WINAPI File_RetrieveEncodedObjectW(LPCWSTR pszURL, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject, void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo)
static BYTE * build_ocsp_request(const CERT_CONTEXT *cert, const CERT_CONTEXT *issuer_cert, DWORD *ret_size)
static WCHAR * build_request_path(const BYTE *data, DWORD data_size)
static BOOL CRYPT_GetObjectFromFile(HANDLE hFile, PCRYPT_BLOB_ARRAY pObject)
static const CRL_CONTEXT * retrieve_crl_from_dist_points(const CRYPT_URL_ARRAY *array, DWORD verify_flags, DWORD timeout)
static BOOL WINAPI FTP_RetrieveEncodedObjectW(LPCWSTR pszURL, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject, void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo)
static BOOL WINAPI CRYPT_CreateCTL(LPCSTR pszObjectOid, DWORD dwRetrievalFlags, const CRYPT_BLOB_ARRAY *pObject, void **ppvContext)
static BOOL WINAPI HTTP_RetrieveEncodedObjectW(LPCWSTR pszURL, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject, void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo)
BOOL(WINAPI * AddContextToStore)(HCERTSTORE hCertStore, const void *pContext, DWORD dwAddDisposition, const void **ppStoreContext)
static void escape_path(const WCHAR *src, DWORD src_len, WCHAR *dst, DWORD *dst_len)
static const char * url_oid_to_str(LPCSTR oid)
struct _OLD_CERT_REVOCATION_STATUS OLD_CERT_REVOCATION_STATUS
#define CACHED_CERT_HASH_SIZE
BOOL(WINAPI * ContextDllCreateObjectContext)(LPCSTR pszObjectOid, DWORD dwRetrievalFlags, const CRYPT_BLOB_ARRAY *pObject, void **ppvContext)
BOOL(WINAPI * SchemeDllRetrieveEncodedObjectW)(LPCWSTR pwszUrl, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject, void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo)
BOOL(WINAPI * UrlDllGetObjectUrlFunc)(LPCSTR, LPVOID, DWORD, PCRYPT_URL_ARRAY, DWORD *, PCRYPT_URL_INFO, DWORD *, LPVOID)
BOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags, PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo, DWORD *pcbUrlInfo, LPVOID pvReserved)
static const char revocation_cache_signature[]
static BOOL CRYPT_GetUrlFromCRLDistPointsExt(const CRYPT_DATA_BLOB *value, PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo, DWORD *pcbUrlInfo)
static void WINAPI CRYPT_FreeBlob(LPCSTR pszObjectOid, PCRYPT_BLOB_ARRAY pObject, void *pvFreeContext)
static BOOL WINAPI CRYPT_CreateCRL(LPCSTR pszObjectOid, DWORD dwRetrievalFlags, const CRYPT_BLOB_ARRAY *pObject, void **ppvContext)
static BOOL CRYPT_CreateContext(const CRYPT_BLOB_ARRAY *pObject, DWORD dwExpectedContentTypeFlags, AddContextToStore addFunc, void **ppvContext)
static BOOL WINAPI CRYPT_CreateAny(LPCSTR pszObjectOid, DWORD dwRetrievalFlags, const CRYPT_BLOB_ARRAY *pObject, void **ppvContext)
static BOOL CRYPT_CrackUrl(LPCWSTR pszURL, URL_COMPONENTSW *components)
static BOOL WINAPI CRYPT_GetUrlFromCertificateIssuer(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags, PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo, DWORD *pcbUrlInfo, LPVOID pvReserved)
#define ERROR_INSUFFICIENT_BUFFER
BOOL WINAPI CryptCreateHash(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash)
BOOL WINAPI CryptGetHashParam(HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
BOOL WINAPI CryptDestroyKey(HCRYPTKEY hKey)
BOOL WINAPI CryptDestroyHash(HCRYPTHASH hHash)
BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags)
BOOL WINAPI CryptHashData(HCRYPTHASH hHash, const BYTE *pbData, DWORD dwDataLen, DWORD dwFlags)
BOOL WINAPI CryptVerifySignatureW(HCRYPTHASH hHash, const BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags)
BOOL WINAPI CryptAcquireContextW(HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
void WINAPI CoTaskMemFree(void *ptr)
BOOL WINAPI CryptBinaryToStringW(const BYTE *pbBinary, DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString)
BOOL WINAPI CryptStringToBinaryA(LPCSTR pszString, DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, DWORD *pdwSkip, DWORD *pdwFlags)
BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext)
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[])
BOOL WINAPI CertFreeCRLContext(PCCRL_CONTEXT pCrlContext)
BOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved, PCRL_ENTRY *ppCrlEntry)
PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext)
BOOL WINAPI CertFreeCTLContext(PCCTL_CONTEXT pCTLContext)
BOOL WINAPI CertAddCTLContextToStore(HCERTSTORE hCertStore, PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, PCCTL_CONTEXT *ppStoreContext)
BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, void *pvEncoded, DWORD *pcbEncoded)
BOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg, DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey)
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize)
VOID WINAPI CryptMemFree(LPVOID pv)
static WCHAR aia[MAX_STRING_RESOURCE_LEN]
BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD dwFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, DWORD *pdwFormatType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg, const void **ppvContext)
static WCHAR issuer[MAX_STRING_RESOURCE_LEN]
BOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, DWORD dwIndex, LPCWSTR pwszDll)
BOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, LPCWSTR pwszDll)
HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName, DWORD dwFlags)
BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr)
BOOL WINAPI CryptRegisterOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszDll, LPCSTR pszOverrideFuncName)
DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId)
BOOL WINAPI CryptUnregisterOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID)
BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr, DWORD dwFlags)
BOOL WINAPI CertAddCRLContextToStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext)
HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwMsgAndCertEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara)
BOOL WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
#define ERROR_INVALID_PARAMETER
#define GetCurrentDirectoryW(x, y)
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
#define ERROR_NOT_SUPPORTED
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
#define MultiByteToWideChar
static const WCHAR *const ext[]
BOOL WINAPI GetFileTime(IN HANDLE hFile, OUT LPFILETIME lpCreationTime OPTIONAL, OUT LPFILETIME lpLastAccessTime OPTIONAL, OUT LPFILETIME lpLastWriteTime OPTIONAL)
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
FILE *CDECL _wfsopen(const wchar_t *path, const wchar_t *mode, int share)
int CDECL fclose(FILE *file)
size_t CDECL fread(void *ptr, size_t size, size_t nmemb, FILE *file)
size_t CDECL fwrite(const void *ptr, size_t size, size_t nmemb, FILE *file)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
HRESULT WINAPI SHStrDupW(const WCHAR *src, WCHAR **dest)
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
BOOL WINAPI HttpEndRequestW(HINTERNET hRequest, LPINTERNET_BUFFERSW lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext)
BOOL WINAPI HttpSendRequestW(HINTERNET hHttpRequest, LPCWSTR lpszHeaders, DWORD dwHeaderLength, LPVOID lpOptional, DWORD dwOptionalLength)
BOOL WINAPI HttpQueryInfoW(HINTERNET hHttpRequest, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex)
BOOL WINAPI HttpSendRequestExW(HINTERNET hRequest, LPINTERNET_BUFFERSW lpBuffersIn, LPINTERNET_BUFFERSW lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext)
HINTERNET WINAPI HttpOpenRequestW(HINTERNET hHttpSession, LPCWSTR lpszVerb, LPCWSTR lpszObjectName, LPCWSTR lpszVersion, LPCWSTR lpszReferrer, LPCWSTR *lpszAcceptTypes, DWORD dwFlags, DWORD_PTR dwContext)
BOOL WINAPI InternetCrackUrlW(const WCHAR *lpszUrl, DWORD dwUrlLength, DWORD dwFlags, URL_COMPONENTSW *lpUC)
BOOL WINAPI InternetReadFile(HINTERNET hFile, LPVOID lpBuffer, DWORD dwNumOfBytesToRead, LPDWORD pdwNumOfBytesRead)
BOOL WINAPI InternetReadFileExA(HINTERNET hFile, LPINTERNET_BUFFERSA lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext)
INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackW(HINTERNET hInternet, INTERNET_STATUS_CALLBACK lpfnIntCB)
BOOL WINAPI InternetCloseHandle(HINTERNET hInternet)
BOOL WINAPI InternetQueryDataAvailable(HINTERNET hFile, LPDWORD lpdwNumberOfBytesAvailable, DWORD dwFlags, DWORD_PTR dwContext)
HINTERNET WINAPI InternetConnectW(HINTERNET hInternet, LPCWSTR lpszServerName, INTERNET_PORT nServerPort, LPCWSTR lpszUserName, LPCWSTR lpszPassword, DWORD dwService, DWORD dwFlags, DWORD_PTR dwContext)
HINTERNET WINAPI InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType, LPCWSTR lpszProxy, LPCWSTR lpszProxyBypass, DWORD dwFlags)
BOOL WINAPI InternetSetOptionW(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength)
BOOL WINAPI SetUrlCacheEntryInfoW(LPCWSTR lpszUrl, LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo, DWORD dwFieldControl)
BOOL WINAPI GetUrlCacheEntryInfoW(LPCWSTR lpszUrl, LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo, LPDWORD lpdwCacheEntryInfoBufferSize)
BOOL WINAPI UnlockUrlCacheEntryFileW(LPCWSTR lpszUrlName, DWORD dwReserved)
BOOL WINAPI CreateUrlCacheEntryW(LPCWSTR lpszUrlName, DWORD dwExpectedFileSize, LPCWSTR lpszFileExtension, LPWSTR lpszFileName, DWORD dwReserved)
BOOL WINAPI RetrieveUrlCacheEntryFileW(LPCWSTR lpszUrlName, LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo, LPDWORD lpdwCacheEntryInfoBufferSize, DWORD dwReserved)
BOOL WINAPI CommitUrlCacheEntryW(LPCWSTR lpszUrlName, LPCWSTR lpszLocalFileName, FILETIME ExpireTime, FILETIME LastModifiedTime, DWORD CacheEntryType, LPWSTR lpHeaderInfo, DWORD dwHeaderSize, LPCWSTR lpszFileExtension, LPCWSTR lpszOriginalUrl)
BOOL WINAPI DeleteUrlCacheEntryW(LPCWSTR lpszUrlName)
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLenum GLuint components
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizeiptr const GLvoid GLenum usage
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
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 * u
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
HLOCAL NTAPI LocalFree(HLOCAL hMem)
int const JOCTET unsigned int datalen
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static LPCWSTR LPVOID pvReserved
static JOBOBJECTINFOCLASS LPVOID DWORD LPDWORD ret_len
static const struct @1831 hash_data[]
static const struct access_res create[16]
static void ULONG ULONG * ret_size
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define RTL_SIZEOF_THROUGH_FIELD(type, field)
static OBJECT_ATTRIBUTES *static ULONG POBJECT_ATTRIBUTES PIO_STATUS_BLOCK ULONG sharing
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
int WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
#define CSIDL_LOCAL_APPDATA
PCERT_EXTENSION rgExtension
PCCERT_CONTEXT pIssuerCert
POCSP_SIGNATURE_INFO pOptionalSignatureInfo
CRYPT_DER_BLOB ToBeSigned
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
#define URL_OID_CRL_ISSUER
#define szOID_PKIX_OCSP_BASIC_SIGNED_RESPONSE
#define OCSP_BASIC_GOOD_CERT_STATUS
#define CONTEXT_OID_CERTIFICATE
#define CRL_FIND_ISSUED_BY_AKI_FLAG
struct _CRYPT_URL_ARRAY * PCRYPT_URL_ARRAY
#define CRYPT_DECODE_NOCOPY_FLAG
#define CRYPT_VERIFYCONTEXT
#define CERT_QUERY_CONTENT_FLAG_CTL
#define URL_OID_CERTIFICATE_ISSUER
#define CERT_STORE_PROV_COLLECTION
#define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG
#define CRYPT_DONT_CACHE_RESULT
#define CERT_STORE_PROV_LDAP_W
#define CONTEXT_OID_CAPI2_ANY
#define CERT_ALT_NAME_URL
#define OCSP_BASIC_UNKNOWN_CERT_STATUS
#define CRYPT_GET_URL_FROM_EXTENSION
#define szOID_CRL_DIST_POINTS
#define CERT_QUERY_CONTENT_FLAG_CRL
#define CERT_QUERY_CONTENT_FLAG_CERT
#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG
#define CERT_QUERY_CONTENT_CRL
#define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED
#define X509_AUTHORITY_INFO_ACCESS
#define OCSP_BASIC_RESPONSE
#define CERT_STORE_CREATE_NEW_FLAG
#define CRYPT_OID_VERIFY_REVOCATION_FUNC
#define CERT_QUERY_OBJECT_BLOB
#define URL_OID_CTL_NEXT_UPDATE
#define CRYPT_STRING_BASE64
#define CRYPT_STRING_BASE64_ANY
#define OCSP_SUCCESSFUL_RESPONSE
#define CERT_CRL_SIGN_KEY_USAGE
#define CERT_QUERY_FORMAT_FLAG_BINARY
#define CERT_QUERY_CONTENT_CTL
struct _CRYPT_URL_ARRAY CRYPT_URL_ARRAY
#define OCSP_BASIC_SIGNED_RESPONSE
void(WINAPI * PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid, PCRYPT_BLOB_ARRAY pObject, void *pvFreeContext)
#define X509_ASN_ENCODING
#define OCSP_BASIC_REVOKED_CERT_STATUS
#define URL_OID_CROSS_CERT_DIST_POINT
#define CRYPT_DECODE_ALLOC_FLAG
#define CERT_STORE_PROV_MEMORY
#define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC
#define CRL_DIST_POINT_FULL_NAME
#define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION
#define CRYPT_STRING_NOCRLF
#define CONTEXT_OID_PKCS7
#define CRYPT_OID_OPEN_STORE_PROV_FUNC
#define URL_OID_GET_OBJECT_URL_FUNC
#define CRYPT_WIRE_ONLY_RETRIEVAL
#define CRYPT_STICKY_CACHE_RETRIEVAL
#define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG
#define szOID_OIWSEC_sha1
#define CERT_CONTEXT_REVOCATION_TYPE
#define URL_OID_CERTIFICATE_CRL_DIST_POINT
#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED
#define CERT_STORE_ADD_ALWAYS
#define URL_OID_CERTIFICATE_FRESHEST_CRL
#define CRYPT_ENCODE_ALLOC_FLAG
#define szOID_AUTHORITY_INFO_ACCESS
struct _CRYPT_BLOB_ARRAY CRYPT_BLOB_ARRAY
struct _CRYPT_URL_INFO CRYPT_URL_INFO
#define URL_OID_CRL_FRESHEST_CRL
#define OCSP_SIGNED_REQUEST
struct _CRYPT_URL_INFO * PCRYPT_URL_INFO
#define CERT_QUERY_CONTENT_CERT
#define X509_CRL_DIST_POINTS
#define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC
#define CRYPT_CACHE_ONLY_RETRIEVAL
#define URL_OID_CTL_ISSUER
#define szOID_PKIX_CA_ISSUERS
#define CRL_FIND_ISSUED_BY
#define CRYPT_E_NOT_FOUND
#define CRYPT_E_NO_REVOCATION_CHECK
#define CRYPT_E_REVOCATION_OFFLINE
#define ERROR_INVALID_DATA
#define INTERNET_SCHEME_FTP
#define INTERNET_SCHEME_HTTP
#define INTERNET_DEFAULT_HTTP_PORT
#define INTERNET_SCHEME_HTTPS
#define INTERNET_DEFAULT_FTP_PORT
#define HTTP_QUERY_FLAG_SYSTEMTIME
#define INTERNET_FLAG_ASYNC
#define INTERNET_MAX_HOST_NAME_LENGTH
#define INTERNET_FLAG_NO_COOKIES
#define CACHE_ENTRY_EXPTIME_FC
#define INTERNET_SERVICE_FTP
#define HTTP_QUERY_FLAG_NUMBER
#define NORMAL_CACHE_ENTRY
#define INTERNET_FLAG_SECURE
#define STICKY_CACHE_ENTRY
#define INTERNET_FLAG_NO_UI
#define INTERNET_STATUS_REQUEST_COMPLETE
#define INTERNET_MAX_PATH_LENGTH
#define INTERNET_OPTION_SEND_TIMEOUT
#define HTTP_QUERY_STATUS_CODE
#define INTERNET_OPEN_TYPE_PRECONFIG
#define INTERNET_OPTION_RECEIVE_TIMEOUT
#define HTTP_QUERY_EXPIRES
#define HTTP_QUERY_CONTENT_LENGTH
#define INTERNET_SERVICE_HTTP