24#define WIN32_NO_STATUS
28#define CRYPT_OID_INFO_HAS_EXTRA_FIELDS
57 DWORD dwCertEncodingType,
const BYTE *pbCertEncoded,
DWORD cbCertEncoded,
61 pbCertEncoded, cbCertEncoded);
64 TRACE(
"(%p, %08lx, %p, %ld, %08lx, %p)\n", hCertStore, dwCertEncodingType,
65 pbCertEncoded, cbCertEncoded, dwAddDisposition, ppCertContext);
70 dwAddDisposition, ppCertContext);
79 const BYTE *pbCertEncoded,
DWORD cbCertEncoded)
98 const BYTE *pbCertEncoded,
DWORD cbCertEncoded)
160 cert->ctx.hCertStore = store;
176 switch (add_disposition)
202 FIXME(
"Unimplemented add disposition %ld\n", add_disposition);
207 switch (add_disposition)
214 TRACE(
"found matching certificate, not adding\n");
223 FIXME(
"CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES: semi-stub for links\n");
225 inherit_props =
TRUE;
229 FIXME(
"CERT_STORE_ADD_USE_EXISTING: semi-stub for links\n");
241 TRACE(
"existing certificate is newer, not adding\n");
251 TRACE(
"existing certificate is newer, not adding\n");
255 inherit_props =
TRUE;
268 (ret_context || inherit_props) ? &new_context :
NULL, use_link);
289 TRACE(
"(%p, %p, %08lx, %p)\n", hCertStore, pCertContext, dwAddDisposition, ppStoreContext);
302 FIXME(
"(%p, %p, %08lx, %p): semi-stub\n", hCertStore, pCertContext,
303 dwAddDisposition, ppCertContext);
315 const BYTE *pbCertEncoded,
DWORD cbCertEncoded)
323 TRACE(
"(%08lx, %p, %ld)\n", dwCertEncodingType, pbCertEncoded,
349 cert->ctx.dwCertEncodingType = dwCertEncodingType;
351 cert->ctx.cbCertEncoded = cbCertEncoded;
352 cert->ctx.pCertInfo = certInfo;
360 TRACE(
"(%p)\n", pCertContext);
371 TRACE(
"(%p)\n", pCertContext);
384 TRACE(
"(%p, %ld)\n", pCertContext, dwPropId);
386 if (
cert->base.properties)
431 dst->cbSize =
sizeof(*dst);
432 dst->hCryptProv =
src->hCryptProv;
433 dst->dwKeySpec =
src->dwKeySpec;
447 if (
info->pwszContainerName)
453 if (
info->pwszProvName)
461 for (
i = 0;
i <
info->cProvParam;
i++)
479 if (
from->pwszContainerName)
488 if (
from->pwszProvName)
503 for (
i = 0;
i <
from->cProvParam;
i++)
522 if (
cert->base.properties)
554 cert->ctx.pCertInfo->Subject.pbData,
555 cert->ctx.pCertInfo->Subject.cbData,
560 cert->ctx.pCertInfo->SubjectPublicKeyInfo.PublicKey.pbData,
561 cert->ctx.pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData,
566 cert->ctx.pCertInfo->SerialNumber.pbData,
567 cert->ctx.pCertInfo->SerialNumber.cbData,
585 cert->ctx.pCertInfo->rgExtension);
671 if (
info->pwszContainerName)
673 if (
info->pwszProvName)
676 for (
i = 0;
i <
info->cProvParam;
i++)
714 if (!
cert->base.properties)
817 keyContext.
cbSize =
sizeof(keyContext);
830 FIXME(
"%ld: stub\n", dwPropId);
904 for (
i = 0;
i <
info->cProvParam;
i++)
907 info->rgProvParam[
i].dwParam,
info->rgProvParam[
i].pbData,
908 info->rgProvParam[
i].dwFlags);
910 *pdwKeySpec =
info->dwKeySpec;
922 DWORD *pdwKeySpec,
BOOL *pfCallerFreeProv)
931 phCryptProv, pdwKeySpec, pfCallerFreeProv);
954 pCert = cert_in_store;
958 cert_in_store =
NULL;
980 size =
sizeof(keyContext);
988 if (pfCallerFreeProv)
989 *pfCallerFreeProv =
FALSE;
1003 keyContext.
cbSize =
sizeof(keyContext);
1007 if (pfCallerFreeProv)
1008 *pfCallerFreeProv =
FALSE;
1013 if (pfCallerFreeProv)
1014 *pfCallerFreeProv =
TRUE;
1076 copy = *keyProvInfo;
1077 copy.pwszContainerName = containerW;
1114 while (
ret && !found)
1119 (
BYTE *)containerA, &
size, enumFlags);
1124 enumFlags &= ~CRYPT_FIRST;
1141 memset(&keyProvInfo, 0,
sizeof(keyProvInfo));
1142 while (
ret && !found)
1150 if (
size <= cbProvName)
1180 keyProvInfo.
dwFlags &= ~CRYPT_USER_KEYSET;
1241 TRACE(
"(%08lx, %p, %p)\n", dwCertEncodingType, pCertId1, pCertId2);
1255 TRACE(
"(%08lx, %p, %p)\n", dwCertEncodingType, pCertName1, pCertName2);
1297 TRACE(
"(%p, %p)\n", pInt1, pInt2);
1319 TRACE(
"(%08lx, %p, %p)\n", dwCertEncodingType, pPublicKey1, pPublicKey2);
1325 dwCertEncodingType = 0;
1343 WARN(
"Unknown encoding type %08lx\n", dwCertEncodingType);
1360 *pk2 = (
LPVOID)(pblob2 + 1);
1380 TRACE(
"(%08lx, %p)\n", dwCertEncodingType, pPublicKey);
1390 FIXME(
"unimplemented for DH public keys\n");
1491 ERR(
"dwType %08lx doesn't specify SUBJECT or ISSUER\n", dwType);
1541 switch (
id->dwIdChoice)
1548 &
id->IssuerSerialNumber.SerialNumber);
1655 subject->pCertInfo->cExtension, subject->pCertInfo->rgExtension)))
1667 if (
info->CertIssuer.cbData &&
info->CertSerialNumber.cbData)
1670 memcpy(&
id.IssuerSerialNumber.Issuer, &
info->CertIssuer,
1672 memcpy(&
id.IssuerSerialNumber.SerialNumber,
1675 else if (
info->KeyId.cbData)
1689 subject->pCertInfo->cExtension, subject->pCertInfo->rgExtension)))
1701 if (
info->AuthorityCertIssuer.cAltEntry &&
1702 info->AuthorityCertSerialNumber.cbData)
1707 for (
i = 0; !directoryName &&
1708 i <
info->AuthorityCertIssuer.cAltEntry;
i++)
1709 if (
info->AuthorityCertIssuer.rgAltEntry[
i].dwAltNameChoice
1712 &
info->AuthorityCertIssuer.rgAltEntry[
i];
1716 memcpy(&
id.IssuerSerialNumber.Issuer,
1718 memcpy(&
id.IssuerSerialNumber.SerialNumber,
1719 &
info->AuthorityCertSerialNumber,
1724 FIXME(
"no supported name type in authority key id2\n");
1728 else if (
info->KeyId.cbData)
1744 dwFlags, &subject->pCertInfo->Issuer);
1839 TRACE(
"(%p, %08lx, %08lx, %08lx, %p, %p)\n", hCertStore, dwCertEncodingType,
1840 dwFlags, dwType, pvPara, pPrevCertContext);
1886 FIXME(
"find type %08lx unimplemented\n", dwType);
1890 ret =
find(hCertStore, dwType,
dwFlags, pvPara, pPrevCertContext);
1905 TRACE(
"(%p, %08lx, %p)\n", hCertStore, dwCertEncodingType, pCertId);
1922 if (*pdwFlags & ~supportedFlags)
1946 *pdwFlags &= ~CERT_STORE_TIME_VALIDITY_FLAG;
1953 *pdwFlags &= ~CERT_STORE_SIGNATURE_FLAG;
1964 TRACE(
"(%p, %p, %p, %08lx)\n", hCertStore, pSubjectContext,
1965 pPrevIssuerContext, *pdwFlags);
1967 if (!pSubjectContext)
1975 pSubjectContext, pPrevIssuerContext);
2011 TRACE(
"(%08lx, %ld, %ld, %p, %08lx, %p, %p)\n", dwEncodingType, dwRevType,
2012 cContext, rgpvContext,
dwFlags, pRevPara, pRevStatus);
2053 dwEncodingType,
ptr, 0, (
void **)&
func, &hFunc);
2056 ret =
func(dwEncodingType, dwRevType, cContext,
2057 rgpvContext,
dwFlags, pRevPara, pRevStatus);
2093 for (
i = 0; !
ret &&
i < cAttr;
i++)
2094 if (rgAttr[
i].pszObjId && !
strcmp(pszObjId, rgAttr[
i].pszObjId))
2105 TRACE(
"%s %ld %p\n",
debugstr_a(pszObjId), cExtensions, rgExtensions);
2115 for (
i = 0; !
ret &&
i < cExtensions;
i++)
2116 if (rgExtensions[
i].pszObjId && !
strcmp(pszObjId,
2117 rgExtensions[
i].pszObjId))
2118 ret = &rgExtensions[
i];
2137 if (
pName->rgRDN[
i].rgRDNAttr[
j].pszObjId && !
strcmp(pszObjId,
2138 pName->rgRDN[
i].rgRDNAttr[
j].pszObjId))
2151 for (
j = 0;
j <
name->rgRDN[
i].cRDNAttr;
j++)
2155 name->rgRDN[
i].rgRDNAttr[
j].dwValueType ==
2164 if (
attr->Value.cbData !=
2165 name->rgRDN[
i].rgRDNAttr[
j].Value.cbData)
2173 TRACE(
"%s : %s => %d\n",
2184 if (
attr->Value.cbData !=
2185 name->rgRDN[
i].rgRDNAttr[
j].Value.cbData)
2189 attr->Value.cbData);
2192 TRACE(
"%s : %s => %d\n",
2210 TRACE(
"(%08lx, %08lx, %p, %p)\n", dwCertEncodingType,
dwFlags, pCertName,
2238 pTimeToVerify = &fileTime;
2252 TRACE(
"(%p, %p)\n", pSubjectInfo, pIssuerInfo);
2260 DWORD *pcbComputedHash)
2265 TRACE(
"(%08Ix, %d, %08lx, %p, %ld, %p, %p)\n", hCryptProv, Algid,
dwFlags,
2266 pbEncoded, cbEncoded, pbComputedHash, pcbComputedHash);
2280 pcbComputedHash, 0);
2289 DWORD *pcbComputedHash)
2295 DWORD hash_len_size;
2297 TRACE(
"(%s, %08lx, %p, %p, %ld, %p, %p)\n",
debugstr_w(pwszCNGHashAlgid),
2313 if (!pbComputedHash)
2315 *pcbComputedHash = hash_len;
2319 if (*pcbComputedHash < hash_len)
2325 *pcbComputedHash = hash_len;
2342 BYTE *pbComputedHash,
DWORD *pcbComputedHash)
2347 TRACE(
"(%08Ix, %d, %08lx, %ld, %p, %p, %p)\n", hCryptProv, Algid,
dwFlags,
2348 dwCertEncodingType, pInfo, pbComputedHash, pcbComputedHash);
2375 pcbComputedHash, 0);
2385 DWORD dwCertEncodingType,
const BYTE *pbEncoded,
DWORD cbEncoded,
2386 BYTE *pbComputedHash,
DWORD *pcbComputedHash)
2392 TRACE(
"(%08Ix, %08lx, %p, %ld, %p, %ld)\n", hCryptProv, dwCertEncodingType,
2393 pbEncoded, cbEncoded, pbComputedHash, *pcbComputedHash);
2405 info->SignatureAlgorithm.pszObjId, 0);
2417 info->ToBeSigned.cbData, 0);
2420 pcbComputedHash, 0);
2430 DWORD dwKeySpec,
DWORD dwCertEncodingType,
const BYTE *pbEncodedToBeSigned,
2432 const void *pvHashAuxInfo,
BYTE *pbSignature,
DWORD *pcbSignature)
2438 TRACE(
"(%08Ix, %ld, %ld, %p, %ld, %p, %p, %p, %p)\n", hCryptProv,
2439 dwKeySpec, dwCertEncodingType, pbEncodedToBeSigned, cbEncodedToBeSigned,
2440 pSignatureAlgorithm, pvHashAuxInfo, pbSignature, pcbSignature);
2457 cbEncodedToBeSigned, 0);
2477 cbEncodedToBeSigned, 0);
2491 const void *pvHashAuxInfo,
BYTE *pbEncoded,
DWORD *pcbEncoded)
2494 DWORD encodedSize, hashSize;
2496 TRACE(
"(%08Ix, %ld, %ld, %s, %p, %p, %p, %p, %p)\n", hCryptProv, dwKeySpec,
2497 dwCertEncodingType,
debugstr_a(lpszStructType), pvStructInfo,
2498 pSignatureAlgorithm, pvHashAuxInfo, pbEncoded, pcbEncoded);
2501 NULL, &encodedSize);
2509 pvStructInfo, encoded, &encodedSize);
2513 dwCertEncodingType, encoded, encodedSize, pSignatureAlgorithm,
2514 pvHashAuxInfo,
NULL, &hashSize);
2522 dwCertEncodingType, encoded, encodedSize,
2523 pSignatureAlgorithm, pvHashAuxInfo,
hash, &hashSize);
2528 info.ToBeSigned.cbData = encodedSize;
2529 info.ToBeSigned.pbData = encoded;
2530 info.SignatureAlgorithm = *pSignatureAlgorithm;
2531 info.Signature.cbData = hashSize;
2533 info.Signature.cUnusedBits = 0;
2552 DWORD dwCertEncodingType,
const BYTE *pbEncoded,
DWORD cbEncoded,
2569 hashID =
info->Algid;
2570 if (
info->ExtraInfo.cbData >=
sizeof(
ALG_ID))
2571 pubKeyID = *(
ALG_ID *)
info->ExtraInfo.pbData;
2578 pubKeyInfo, pubKeyID, 0,
NULL, &
key);
2674 FIXME(
"Unsupported ecc curve type: %s\n", *ecc_curve);
2711 if (!
info->PublicKey.cbData)
2720 WARN(
"CryptDecodeObjectEx failed\n");
2730 FIXME(
"Unsupported RSA algorithm: %#x\n",
hdr->aiKeyAlg);
2738 modulus_len =
size -
sizeof(*hdr) -
sizeof(*rsapubkey);
2739 if (modulus_len != rsapubkey->
bitlen / 8)
2740 FIXME(
"RSA pubkey has wrong modulus_len %lu\n", modulus_len);
2742 size =
sizeof(*rsakey) +
sizeof(
ULONG) + modulus_len;
2753 d = (
BYTE *)(rsakey + 1);
2758 s = (
BYTE *)(rsapubkey + 1);
2759 for (
i = 0;
i < modulus_len;
i++)
2760 d[
i] =
s[modulus_len -
i - 1];
2786 DWORD size, r_size, s_size, r_offset, s_offset;
2793 if (!(r_size = ecc_sig->
r.
cbData) || !(s_size = ecc_sig->
s.
cbData))
2799 r_size = s_size =
max( r_size, s_size );
2801 *sig_len = r_size + s_size;
2808 memset( *sig_value, 0, *sig_len );
2810 r_offset = r_size - ecc_sig->
r.
cbData;
2811 s_offset = s_size - ecc_sig->
s.
cbData;
2816 (*sig_value)[r_size +
i + s_offset] = ecc_sig->
s.
pbData[ecc_sig->
s.
cbData -
i - 1];
2856 sig_value, sig_len);
2865 BYTE *hash_value =
NULL, *sig_value;
2866 DWORD hash_len, sig_len;
2882 FIXME(
"Failed to verify signature: %08lx\n",
status);
2915 DWORD dwCertEncodingType,
DWORD dwSubjectType,
void *pvSubject,
2921 TRACE(
"(%08Ix, %ld, %ld, %p, %ld, %p, %08lx, %p)\n", hCryptProv,
2922 dwCertEncodingType, dwSubjectType, pvSubject, dwIssuerType, pvIssuer,
2925 switch (dwSubjectType)
2964 &signedCert, &
size);
2967 switch (dwIssuerType)
2971 dwCertEncodingType, pvIssuer,
2981 FIXME(
"CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN: stub\n");
2992 FIXME(
"unimplemented for NULL signer\n");
3013 TRACE(
"(%08lx, %p, %p, %ld)\n", dwCertEncodingType, pCertInfo, pbKeyUsage,
3028 if (cbKeyUsage <
usage.cbData)
3033 if (cbKeyUsage >
usage.cbData)
3035 cbKeyUsage -
usage.cbData);
3051 if (!pCertContext || !pcbUsage)
3057 TRACE(
"(%p, %08lx, %p, %ld)\n", pCertContext,
dwFlags, pUsage, *pcbUsage);
3112 *pcbUsage = bytesNeeded;
3113 else if (*pcbUsage < bytesNeeded)
3116 *pcbUsage = bytesNeeded;
3121 *pcbUsage = bytesNeeded;
3132 for (
i = 0;
i <
usage->cUsageIdentifier;
i++)
3136 nextOID +=
strlen(nextOID) + 1;
3154 TRACE(
"(%p, %p)\n", pCertContext, pUsage);
3176 LPCSTR pszUsageIdentifier)
3198 for (
i = 0; !exists &&
i <
usage->cUsageIdentifier;
i++)
3201 pszUsageIdentifier))
3216 + (
usage->cUsageIdentifier + 1) *
sizeof(
LPSTR));
3217 for (
i = 0;
i <
usage->cUsageIdentifier;
i++)
3221 nextOID +=
strlen(nextOID) + 1;
3224 strcpy(nextOID, pszUsageIdentifier);
3245 usage->rgpszUsageIdentifier =
3249 strcpy(
usage->rgpszUsageIdentifier[0], pszUsageIdentifier);
3250 usage->cUsageIdentifier = 1;
3261 LPCSTR pszUsageIdentifier)
3290 pszUsageIdentifier))
3292 if (found && i < pUsage->cUsageIdentifier - 1)
3323#define BITS_PER_DWORD (sizeof(DWORD) * 8)
3329 if (indexIndex + 1 >
field->cIndexes)
3331 if (
field->cIndexes)
3333 (indexIndex + 1) *
sizeof(
DWORD));
3338 field->indexes[indexIndex] = 0;
3339 field->cIndexes = indexIndex + 1;
3357 int *cNumOIDs,
LPSTR *rghOIDs,
DWORD *pcbOIDs)
3364 TRACE(
"(%ld, %p, %d, %p, %ld)\n", cCerts, rghCerts, *cNumOIDs,
3367 for (
i = 0;
i < cCerts;
i++)
3378 allUsagesValid =
FALSE;
3443 -
j - 1) *
sizeof(
LPSTR));
3472 else if (*pcbOIDs < cbOIDs)
3486 rghOIDs[
i] = nextOID;
3493 TRACE(
"cNumOIDs: %d\n", *cNumOIDs);
3599 blob->pbData,
blob->cbData, sigAlgo,
NULL, sig, &sigSize);
3604 DWORD encodedSignedCertSize = 0;
3614 &encodedSignedCert, &encodedSignedCertSize);
3618 encodedSignedCert, encodedSignedCertSize);
3649 assert(pSubjectIssuerBlob);
3656 info->SerialNumber.cbData = pSerialNumber->
cbData;
3657 info->SerialNumber.pbData = pSerialNumber->
pbData;
3658 if (pSignatureAlgorithm)
3659 info->SignatureAlgorithm = *pSignatureAlgorithm;
3662 info->SignatureAlgorithm.pszObjId = oid;
3663 info->SignatureAlgorithm.Parameters.cbData = 0;
3664 info->SignatureAlgorithm.Parameters.pbData =
NULL;
3666 info->Issuer.cbData = pSubjectIssuerBlob->
cbData;
3667 info->Issuer.pbData = pSubjectIssuerBlob->
pbData;
3684 info->Subject.cbData = pSubjectIssuerBlob->
cbData;
3685 info->Subject.pbData = pSubjectIssuerBlob->
pbData;
3694 info->cExtension = 0;
3715 rpcrt,
"RpcStringFreeA");
3717 if (uuidCreate && uuidToString && rpcStringFree)
3724 unsigned char *uuidStr;
3740 rpcStringFree(&uuidStr);
3758 DWORD pubKeySize = 0, dwKeySpec;
3760 TRACE(
"(%08Ix, %p, %08lx, %p, %p, %p, %p, %p)\n",
hProv,
3761 pSubjectIssuerBlob,
dwFlags, pKeyProvInfo, pSignatureAlgorithm, pStartTime,
3762 pExtensions, pExtensions);
3764 if(!pSubjectIssuerBlob)
3776 releaseContext =
TRUE;
3817 releaseContext =
TRUE;
3839 pSignatureAlgorithm, pStartTime, pEndTime,
pubKey, pExtensions);
3847 &
info.SignatureAlgorithm);
3869 FIXME(
"(0x%lx, %ld, %p, %p, 0x%lx, %p, %p): stub\n", dwEncodingType,
3870 dwSubjectType, pvSubject, pSubjectUsage,
dwFlags, pVerifyUsagePara,
3871 pVerifyUsageStatus);
3880 TRACE(
"(0x%lx, 0x%lx, %p, %ld, 0x%08lx, %p)\n", dwContextType, dwEncodingType,
3881 pbEncoded, cbEncoded,
dwFlags, pCreatePara);
3890 FIXME(
"pCreatePara not handled\n");
3894 switch (dwContextType)
3903 WARN(
"unknown context type: 0x%lx\n", dwContextType);
3911 FIXME(
"(%p, 0x%lx, 0x%lx, %s, %p, %p): stub\n", pKeyIdentifier, dwPropId,
dwFlags,
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
#define BCRYPT_ECDSA_PUBLIC_P256_MAGIC
NTSTATUS WINAPI BCryptDestroyKey(BCRYPT_KEY_HANDLE)
static const WCHAR BCRYPT_HASH_LENGTH[]
#define BCRYPT_RSA_SIGN_ALG_HANDLE
#define BCRYPT_ECDSA_PUBLIC_P384_MAGIC
static const WCHAR BCRYPT_ECCPUBLIC_BLOB[]
NTSTATUS WINAPI BCryptVerifySignature(BCRYPT_KEY_HANDLE, void *, UCHAR *, ULONG, UCHAR *, ULONG, ULONG)
#define BCRYPT_RSA_ALG_HANDLE
#define BCRYPT_ECDSA_P384_ALG_HANDLE
struct _BCRYPT_ECCKEY_BLOB BCRYPT_ECCKEY_BLOB
#define BCRYPT_RSAPUBLIC_MAGIC
NTSTATUS WINAPI BCryptImportKeyPair(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE, LPCWSTR, BCRYPT_KEY_HANDLE *, UCHAR *, ULONG, ULONG)
static const WCHAR BCRYPT_RSAPUBLIC_BLOB[]
#define BCRYPT_ECDSA_P256_ALG_HANDLE
NTSTATUS WINAPI BCryptHashData(BCRYPT_HASH_HANDLE handle, UCHAR *input, ULONG size, ULONG flags)
NTSTATUS WINAPI BCryptGetProperty(BCRYPT_HANDLE handle, LPCWSTR prop, UCHAR *buffer, ULONG count, ULONG *res, ULONG flags)
NTSTATUS WINAPI BCryptDestroyHash(BCRYPT_HASH_HANDLE handle)
NTSTATUS WINAPI BCryptOpenAlgorithmProvider(BCRYPT_ALG_HANDLE *handle, LPCWSTR id, LPCWSTR implementation, DWORD flags)
NTSTATUS WINAPI BCryptCloseAlgorithmProvider(BCRYPT_ALG_HANDLE handle, DWORD flags)
NTSTATUS WINAPI BCryptCreateHash(BCRYPT_ALG_HANDLE algorithm, BCRYPT_HASH_HANDLE *handle, UCHAR *object, ULONG objectlen, UCHAR *secret, ULONG secretlen, ULONG flags)
NTSTATUS WINAPI BCryptFinishHash(BCRYPT_HASH_HANDLE handle, UCHAR *output, ULONG size, ULONG flags)
BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
BOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static void * context_ptr(context_t *context)
DWORD ContextPropertyList_EnumPropIDs(CONTEXT_PROPERTY_LIST *list, DWORD id)
BOOL WINAPI CRYPT_AsnEncodePubKeyInfoNoNull(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
#define CERT_CERT_PROP_ID
#define WINE_CRYPTCERTSTORE_MAGIC
HCRYPTPROV WINAPI I_CryptGetDefaultCryptProv(ALG_ID)
static context_t * context_from_ptr(const void *ptr)
BOOL ContextPropertyList_FindProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, PCRYPT_DATA_BLOB blob)
static cert_t * cert_from_ptr(const CERT_CONTEXT *ptr)
void ContextPropertyList_RemoveProperty(CONTEXT_PROPERTY_LIST *list, DWORD id)
WINECRYPT_CERTSTORE empty_store
BOOL ContextPropertyList_SetProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, const BYTE *pbData, size_t cbData)
#define STATUS_NOT_IMPLEMENTED
BOOL WINAPI CryptCreateHash(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash)
BOOL WINAPI CryptGenRandom(HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer)
BOOL WINAPI CryptSetProvParam(HCRYPTPROV hProv, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
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 CryptAcquireContextA(HCRYPTPROV *phProv, LPCSTR pszContainer, LPCSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
BOOL WINAPI CryptGenKey(HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey)
BOOL WINAPI CryptEnumProvidersW(DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszProvName, DWORD *pcbProvName)
BOOL WINAPI CryptVerifySignatureW(HCRYPTHASH hHash, const BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags)
BOOL WINAPI CryptGetUserKey(HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey)
BOOL WINAPI CryptGetKeyParam(HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
BOOL WINAPI CryptSignHashW(HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen)
BOOL WINAPI CryptAcquireContextW(HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
BOOL WINAPI CryptGetProvParam(HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey)
static BOOL compare_existing_cert(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
static BOOL CNG_ImportRSAPubKey(CERT_PUBLIC_KEY_INFO *info, BCRYPT_KEY_HANDLE *key)
static BOOL CRYPT_VerifySignature(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, CERT_PUBLIC_KEY_INFO *pubKeyInfo, const CERT_SIGNED_CONTENT_INFO *signedCert, const CRYPT_OID_INFO *info)
static PCCERT_CONTEXT find_cert_by_name_str_w(HCERTSTORE store, DWORD dwType, DWORD dwFlags, const void *pvPara, PCCERT_CONTEXT prev)
BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext)
static BOOL CNG_ImportECCPubKey(CERT_PUBLIC_KEY_INFO *pubKeyInfo, BCRYPT_KEY_HANDLE *key)
static HCRYPTPROV CRYPT_CreateKeyProv(void)
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded)
static const context_vtbl_t cert_vtbl
RPC_STATUS(RPC_ENTRY * UuidCreateFunc)(UUID *)
static BOOL CRYPT_VerifyCertSignatureFromPublicKeyInfo(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, CERT_PUBLIC_KEY_INFO *pubKeyInfo, const CERT_SIGNED_CONTENT_INFO *signedCert)
BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType, PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2)
static PCCERT_CONTEXT find_cert_by_name_str_a(HCERTSTORE store, DWORD dwType, DWORD dwFlags, const void *pvPara, PCCERT_CONTEXT prev)
PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFlags, DWORD dwType, const void *pvPara, PCCERT_CONTEXT pPrevCertContext)
static BOOL compare_cert_by_sha1_hash(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
static BOOL cert_prov_info_matches_cert(PCCERT_CONTEXT pCert)
BOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext, LPCSTR pszUsageIdentifier)
BOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo, PCERT_INFO pIssuerInfo)
BOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType, DWORD dwRevType, DWORD cContext, PVOID rgpvContext[], DWORD dwFlags, PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus)
static BOOL container_matches_cert(PCCERT_CONTEXT pCert, LPCSTR container, CRYPT_KEY_PROV_INFO *keyProvInfo)
static void CertContext_SetKeyProvInfo(PCCERT_CONTEXT context, const CRYPT_KEY_PROV_INFO *pInfo, HCRYPTPROV hProv)
static void Cert_free(context_t *context)
BOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert, DWORD dwFlags, void *pvReserved)
static BOOL compare_cert_by_md5_hash(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
static BOOL CertContext_GetHashProp(cert_t *cert, DWORD dwPropId, ALG_ID algID, const BYTE *toHash, DWORD toHashLen, void *pvData, DWORD *pcbData)
PCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId, DWORD cAttr, CRYPT_ATTRIBUTE rgAttr[])
PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, PCERT_INFO pCertId)
BOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR pszCertStoreName, const BYTE *pbCertEncoded, DWORD cbCertEncoded)
static BOOL CertContext_SetKeyProvInfoProperty(CONTEXT_PROPERTY_LIST *properties, const CRYPT_KEY_PROV_INFO *info)
BOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType, DWORD dwSubjectType, void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags, PCTL_VERIFY_USAGE_PARA pVerifyUsagePara, PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus)
static DWORD CRYPT_significantBytes(const CRYPT_INTEGER_BLOB *pInt)
BOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType, PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage)
BOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, PCERT_ENHKEY_USAGE pUsage)
static void CRYPT_MakeCertInfo(PCERT_INFO info, const CRYPT_DATA_BLOB *pSerialNumber, const CERT_NAME_BLOB *pSubjectIssuerBlob, const CRYPT_ALGORITHM_IDENTIFIER *pSignatureAlgorithm, const SYSTEMTIME *pStartTime, const SYSTEMTIME *pEndTime, const CERT_PUBLIC_KEY_INFO *pubKey, const CERT_EXTENSIONS *pExtensions)
BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert, DWORD dwFlags, void *pvReserved, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProv, DWORD *pdwKeySpec, BOOL *pfCallerFreeProv)
BOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType, DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN)
BOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext)
static PCCERT_CONTEXT find_cert_any(HCERTSTORE store, DWORD dwType, DWORD dwFlags, const void *pvPara, PCCERT_CONTEXT prev)
BOOL CNG_ImportPubKey(CERT_PUBLIC_KEY_INFO *pubKeyInfo, BCRYPT_KEY_HANDLE *key)
BOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext, LPCSTR pszUsageIdentifier)
BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject, DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved)
BOOL WINAPI CryptSetKeyIdentifierProperty(const CRYPT_HASH_BLOB *pKeyIdentifier, DWORD dwPropId, DWORD dwFlags, LPCWSTR pwszComputerName, void *pvReserved, const void *pvData)
static BOOL CNG_VerifySignature(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, CERT_PUBLIC_KEY_INFO *pubKeyInfo, const CERT_SIGNED_CONTENT_INFO *signedCert, const CRYPT_OID_INFO *info)
BOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, BYTE *pbComputedHash, DWORD *pcbComputedHash)
static PCCERT_CONTEXT find_cert_by_issuer(HCERTSTORE store, DWORD dwType, DWORD dwFlags, const void *pvPara, PCCERT_CONTEXT prev)
BOOL(WINAPI * CertVerifyRevocationFunc)(DWORD, DWORD, DWORD, void **, DWORD, PCERT_REVOCATION_PARA, PCERT_REVOCATION_STATUS)
static PCCERT_CONTEXT cert_compare_certs_in_store(HCERTSTORE store, PCCERT_CONTEXT prev, CertCompareFunc compare, DWORD dwType, DWORD dwFlags, const void *pvPara)
static BOOL CertContext_CopyParam(void *pvData, DWORD *pcbData, const void *pb, DWORD cb)
BOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType, PCERT_INFO pCertId1, PCERT_INFO pCertId2)
static BOOL add_cert_to_store(WINECRYPT_CERTSTORE *store, const CERT_CONTEXT *cert, DWORD add_disposition, BOOL use_link, PCCERT_CONTEXT *ret_context)
static BOOL CNG_CalcHash(const WCHAR *algorithm, const CERT_SIGNED_CONTENT_INFO *signedCert, BYTE **hash_value, DWORD *hash_len)
static BOOL compare_cert_by_name(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
BOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL(* CertCompareFunc)(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
static BOOL find_key_prov_info_in_provider(PCCERT_CONTEXT pCert, CRYPT_KEY_PROV_INFO *keyProvInfo)
static PCCERT_CONTEXT CRYPT_CreateSignedCert(const CRYPT_DER_BLOB *blob, HCRYPTPROV hProv, DWORD dwKeySpec, PCRYPT_ALGORITHM_IDENTIFIER sigAlgo)
PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext, DWORD *pdwFlags)
BOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded, DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext)
RPC_STATUS(RPC_ENTRY * RpcStringFreeFunc)(unsigned char **)
BOOL WINAPI CryptHashCertificate2(LPCWSTR pwszCNGHashAlgid, DWORD dwFlags, void *pvReserved, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash)
BOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, PCERT_PUBLIC_KEY_INFO pPublicKey)
static BOOL CRYPT_IsBitInFieldSet(const struct BitField *field, DWORD bit)
static BOOL CertContext_GetProperty(cert_t *cert, DWORD dwPropId, void *pvData, DWORD *pcbData)
BOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR pszCertStoreName, const BYTE *pbCertEncoded, DWORD cbCertEncoded)
PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv, PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags, PCRYPT_KEY_PROV_INFO pKeyProvInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime, PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions)
BOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned, DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature)
static BOOL compare_cert_by_name_str(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[])
RPC_STATUS(RPC_ENTRY * UuidToStringFunc)(UUID *, unsigned char **)
static BOOL compare_cert_by_signature_hash(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
BOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject, PCCERT_CONTEXT pIssuer, DWORD *pdwFlags)
BOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData)
static void fix_KeyProvInfoProperty(CRYPT_KEY_PROV_INFO *info)
BOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash)
static void copy_KeyProvInfoProperty(const CRYPT_KEY_PROV_INFO *from, CRYPT_KEY_PROV_INFO *to)
static BOOL find_matching_provider(PCCERT_CONTEXT pCert, DWORD dwFlags)
BOOL cng_prepare_signature(const char *alg_oid, BYTE *encoded_sig, DWORD encoded_sig_len, BYTE **sig_value, DWORD *sig_len)
static BOOL compare_cert_by_cert_id(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData)
static void CRYPT_SetBitInField(struct BitField *field, DWORD bit)
static BOOL compare_cert_by_subject_cert(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
static context_t * Cert_clone(context_t *context, WINECRYPT_CERTSTORE *store, BOOL use_link)
BOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2)
static BOOL CNG_PrepareCertSignature(CERT_PUBLIC_KEY_INFO *pubKeyInfo, const CERT_SIGNED_CONTENT_INFO *signedCert, BYTE **sig_value, DWORD *sig_len)
PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT pCertContext)
static BOOL compare_cert_by_public_key(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, const void *pvPara)
static BOOL CRYPT_AcquirePrivateKeyFromProvInfo(PCCERT_CONTEXT pCert, DWORD dwFlags, PCRYPT_KEY_PROV_INFO info, HCRYPTPROV *phCryptProv, DWORD *pdwKeySpec)
void CRYPT_ConvertKeyContext(const struct store_CERT_KEY_CONTEXT *src, CERT_KEY_CONTEXT *dst)
const void *WINAPI CertCreateContext(DWORD dwContextType, DWORD dwEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCERT_CREATE_CONTEXT_PARA pCreatePara)
DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext, DWORD dwPropId)
struct _OLD_CERT_REVOCATION_STATUS OLD_CERT_REVOCATION_STATUS
BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash)
BOOL WINAPI CertGetValidUsages(DWORD cCerts, PCCERT_CONTEXT *rghCerts, int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs)
static BOOL CertContext_SetProperty(cert_t *cert, DWORD dwPropId, DWORD dwFlags, const void *pvData)
LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify, PCERT_INFO pCertInfo)
static BOOL CNG_PrepareSignatureECC(BYTE *encoded_sig, DWORD encoded_size, BYTE **sig_value, DWORD *sig_len)
static BOOL find_matching_rdn_attr(DWORD dwFlags, const CERT_NAME_INFO *name, const CERT_RDN_ATTR *attr)
static BOOL CertContext_SetKeyContextProperty(CONTEXT_PROPERTY_LIST *properties, const CERT_KEY_CONTEXT *keyContext)
BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1, PCRYPT_INTEGER_BLOB pInt2)
BOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, DWORD dwFlags, PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage)
static BOOL key_prov_info_matches_cert(PCCERT_CONTEXT pCert, const CRYPT_KEY_PROV_INFO *keyProvInfo)
PCCERT_CONTEXT(* CertFindFunc)(HCERTSTORE store, DWORD dwType, DWORD dwFlags, const void *pvPara, PCCERT_CONTEXT prev)
PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName)
DWORD CRYPT_IsCertificateSelfSigned(const CERT_CONTEXT *cert)
void Context_AddRef(context_t *context)
void Context_Release(context_t *context)
context_t * Context_CreateLinkContext(unsigned int contextSize, context_t *linked, WINECRYPT_CERTSTORE *store)
context_t * Context_CreateDataContext(size_t contextSize, const context_vtbl_t *vtbl, WINECRYPT_CERTSTORE *store)
void Context_CopyProperties(const void *to, const void *from)
PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags)
PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded)
BOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType, PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[])
PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded)
BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
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)
BOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey)
BOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo)
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize)
VOID WINAPI CryptMemFree(LPVOID pv)
static struct list oidInfo
HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName, DWORD dwFlags)
BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr)
PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey, DWORD dwGroupId)
BOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList)
BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr, DWORD dwFlags)
HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwMsgAndCertEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara)
PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrev)
HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv, LPCSTR szSubSystemProtocol)
BOOL WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId, void *pvData, DWORD *pcbData)
HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv, LPCWSTR szSubSystemProtocol)
DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPWSTR psz, DWORD csz)
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define RtlUlongByteSwap(_x)
#define GetProcAddress(x, y)
static __inline const char * debugstr_an(const char *s, int n)
#define _strnicmp(_String1, _String2, _MaxCount)
#define MultiByteToWideChar
static const WCHAR *const ext[]
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP wchar_t *__cdecl wcsstr(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
_ACRTIMP int __cdecl strncmp(const char *, const char *, size_t)
static wchar_t * wcslwr(wchar_t *str)
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
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 const GLfloat const GLdouble const GLfloat GLint GLint GLint j
HLOCAL NTAPI LocalFree(HLOCAL hMem)
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static LPCWSTR LPVOID pvReserved
static const char szContainer[]
static const char * szProvider
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
_In_ _Out_writes_opt_ pcchValueName _Inout_opt_ LPDWORD _Out_opt_ _Out_writes_bytes_to_opt_ pcbData _Inout_opt_ LPDWORD pcbData
const store_vtbl_t * vtbl
CERT_NAME_BLOB DirectoryName
PCERT_EXTENSION rgExtension
PCERT_EXTENSION rgExtension
CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo
CRYPT_INTEGER_BLOB SerialNumber
CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm
CRYPT_ALGORITHM_IDENTIFIER Algorithm
CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm
CRYPT_DER_BLOB ToBeSigned
BOOL(* addContext)(struct WINE_CRYPTCERTSTORE *, context_t *, context_t *, context_t **, BOOL)
CRYPT_OBJID_BLOB Parameters
PCRYPT_KEY_PROV_PARAM rgProvParam
LPSTR * rgpszUsageIdentifier
DWORD WINAPI GetLastError(void)
#define CERT_SET_KEY_PROV_HANDLE_PROP_ID
ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE
#define X509_OBJECT_IDENTIFIER
#define CERT_PVK_FILE_PROP_ID
#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID
#define CERT_ENROLLMENT_PROP_ID
#define X509_AUTHORITY_KEY_ID2
#define szOID_AUTHORITY_KEY_IDENTIFIER
#define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL
#define CERT_ID_ISSUER_SERIAL_NUMBER
#define CERT_MD5_HASH_PROP_ID
#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID
#define CERT_COMPARE_MD5_HASH
#define CERT_ENCODING_TYPE_MASK
#define CERT_ENHKEY_USAGE_PROP_ID
#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID
#define CRYPT_DECODE_NOCOPY_FLAG
#define CRYPT_VERIFYCONTEXT
#define CERT_KEY_CONTEXT_PROP_ID
#define CERT_KEY_IDENTIFIER_PROP_ID
#define CERT_COMPARE_NAME_STR_W
#define CERT_COMPARE_ISSUER_OF
#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
#define X509_CERT_TO_BE_SIGNED
#define GET_CERT_ENCODING_TYPE(x)
#define X509_UNICODE_NAME
#define CERT_COMPARE_PUBLIC_KEY
#define CERT_COMPARE_SUBJECT_CERT
#define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID
ULONG_PTR HCRYPTPROV_LEGACY
#define CERT_STORE_REVOCATION_FLAG
#define CERT_STORE_ADD_REPLACE_EXISTING
#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN
#define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
#define CRYPT_USER_KEYSET
#define CERT_FIND_SUBJECT_CERT
#define CERT_ALT_NAME_DIRECTORY_NAME
#define CERT_KEY_PROV_INFO_PROP_ID
#define CERT_STORE_ADD_NEWER
#define CERT_ID_KEY_IDENTIFIER
#define CERT_FIRST_USER_PROP_ID
#define CERT_DESCRIPTION_PROP_ID
struct _CERT_REVOCATION_PARA * PCERT_REVOCATION_PARA
#define CERT_SET_KEY_CONTEXT_PROP_ID
#define CERT_OCSP_RESPONSE_PROP_ID
#define CERT_COMPARE_CERT_ID
#define CRYPT_OID_VERIFY_REVOCATION_FUNC
#define CRYPT_HASH_ALG_OID_GROUP_ID
#define CERT_INFO_ISSUER_FLAG
#define CERT_EXTENDED_ERROR_INFO_PROP_ID
#define CERT_COMPARE_MASK
#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
#define CERT_NEXT_UPDATE_LOCATION_PROP_ID
#define CRYPT_FIND_MACHINE_KEYSET_FLAG
#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG
struct _CTL_USAGE CERT_ENHKEY_USAGE
#define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY
#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
#define CALG_OID_INFO_CNG_ONLY
#define PP_ENUMCONTAINERS
#define szOID_ECC_CURVE_P256
#define szOID_ECC_PUBLIC_KEY
#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
#define X509_ASN_ENCODING
#define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
#define X509_ECC_SIGNATURE
#define CERT_COMPARE_NAME_STR_A
#define CRYPT_DECODE_ALLOC_FLAG
#define CERT_PUBKEY_ALG_PARA_PROP_ID
#define szOID_SUBJECT_KEY_IDENTIFIER
#define X509_AUTHORITY_KEY_ID
#define CERT_SIMPLE_NAME_STR
#define CRYPT_ACQUIRE_SILENT_FLAG
#define CERT_INFO_SUBJECT_FLAG
#define CERT_AUTO_ENROLL_PROP_ID
#define CERT_CREATE_SELFSIGN_NO_KEY_INFO
#define CERT_FRIENDLY_NAME_PROP_ID
#define szOID_ECC_CURVE_P384
#define CERT_CTL_USAGE_PROP_ID
#define CERT_STORE_NO_CRL_FLAG
#define CERT_STORE_CERTIFICATE_CONTEXT
#define CERT_ACCESS_STATE_PROP_ID
#define CERT_COMPARE_NAME
#define RSA_CSP_PUBLICKEYBLOB
#define CERT_COMPARE_SHIFT
const CERT_CONTEXT * PCCERT_CONTEXT
#define CERT_STORE_SIGNATURE_FLAG
#define CERT_STORE_ADD_USE_EXISTING
#define CERT_STORE_CTL_CONTEXT
#define szOID_ENHANCED_KEY_USAGE
#define CERT_STORE_ADD_NEW
#define CERT_COMPARE_SHA1_HASH
#define CERT_HASH_PROP_ID
#define CERT_CREATE_SELFSIGN_NO_SIGN
#define CRYPT_FIND_SILENT_KEYSET_FLAG
#define CERT_RENEWAL_PROP_ID
#define CERT_STORE_ADD_ALWAYS
#define CERT_STORE_PROV_SYSTEM_W
#define CERT_FIND_SUBJECT_NAME
#define CERT_SHA1_HASH_PROP_ID
#define CERT_FIND_SHA1_HASH
#define CRYPT_ENCODE_ALLOC_FLAG
#define szOID_RSA_SHA1RSA
#define CRYPT_FIND_USER_KEYSET_FLAG
#define X509_PUBLIC_KEY_INFO
#define CERT_SIGNATURE_HASH_PROP_ID
#define CRYPT_OID_INFO_OID_KEY
#define CERT_COMPARE_SIGNATURE_HASH
#define CERT_UNICODE_IS_RDN_ATTRS_FLAG
#define CERT_STORE_NO_CRYPT_RELEASE_FLAG
#define CERT_SYSTEM_STORE_CURRENT_USER
#define szOID_AUTHORITY_KEY_IDENTIFIER2
#define CERT_COMPARE_KEY_IDENTIFIER
#define CERT_FIND_EXISTING
#define CERT_ID_SHA1_HASH
#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB
#define CERT_LAST_USER_PROP_ID
struct _CRYPT_KEY_PROV_INFO CRYPT_KEY_PROV_INFO
#define CERT_KEY_PROV_HANDLE_PROP_ID
#define CERT_STORE_CRL_CONTEXT
struct _CERT_REVOCATION_STATUS * PCERT_REVOCATION_STATUS
#define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG
#define CERT_STORE_TIME_VALIDITY_FLAG
#define X509_ENHANCED_KEY_USAGE
#define CERT_FIND_ISSUER_OF
#define CRYPT_SIGN_ALG_OID_GROUP_ID
#define CRYPT_ACQUIRE_CACHE_FLAG
struct _CRYPT_KEY_PROV_PARAM CRYPT_KEY_PROV_PARAM
#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID
#define CRYPT_MACHINE_KEYSET
#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
#define CERT_DATE_STAMP_PROP_ID
#define CERT_COMPARE_EXISTING
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
#define CRYPT_E_NOT_FOUND
#define CRYPT_E_NO_REVOCATION_DLL
#define CRYPT_E_SELF_SIGNED
#define CRYPT_E_NO_KEY_PROPERTY
#define RPC_S_UUID_LOCAL_ONLY
#define CRYPT_E_ASN1_BADTAG
#define ERROR_INVALID_DATA