summaryrefslogtreecommitdiffstats
path: root/winsup/w32api/include/wincrypt.h
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/w32api/include/wincrypt.h')
-rw-r--r--winsup/w32api/include/wincrypt.h366
1 files changed, 365 insertions, 1 deletions
diff --git a/winsup/w32api/include/wincrypt.h b/winsup/w32api/include/wincrypt.h
index 0feba9630..8ec97703b 100644
--- a/winsup/w32api/include/wincrypt.h
+++ b/winsup/w32api/include/wincrypt.h
@@ -43,6 +43,10 @@ extern "C" {
#define CALG_MD5 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD5)
#define CALG_SHA (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_SHA)
#define CALG_MAC (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MAC)
+#define CALG_3DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|3)
+#define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|12)
+#define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|10)
+#define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_STREAM|ALG_TYPE_DSS|4)
#define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
#define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_DSS|ALG_SID_DSS_ANY)
#define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
@@ -50,6 +54,8 @@ extern "C" {
#define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2)
#define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4)
#define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL)
+#define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_STREAM|ALG_TYPE_DSS|ALG_SID_DSS_DMS)
+
#define CRYPT_VERIFYCONTEXT 0xF0000000
#define CRYPT_NEWKEYSET 8
#define CRYPT_DELETEKEYSET 16
@@ -115,11 +121,346 @@ extern "C" {
#define PROV_STT_ISS 11
#define MAXUIDLEN 64
#define CUR_BLOB_VERSION 2
+#define X509_ASN_ENCODING 1
+#define PKCS_7_ASN_ENCODING 65536
+#define CERT_V1 0
+#define CERT_V2 1
+#define CERT_V3 2
+#define CERT_E_CHAINING (-2146762486)
+#define CERT_E_CN_NO_MATCH (-2146762481)
+#define CERT_E_EXPIRED (-2146762495)
+#define CERT_E_PURPOSE (-2146762490)
+#define CERT_E_REVOCATION_FAILURE (-2146762482)
+#define CERT_E_REVOKED (-2146762484)
+#define CERT_E_ROLE (-2146762493)
+#define CERT_E_UNTRUSTEDROOT (-2146762487)
+#define CERT_E_UNTRUSTEDTESTROOT (-2146762483)
+#define CERT_E_VALIDITYPERIODNESTING (-2146762494)
+#define CERT_E_WRONG_USAGE (-2146762480)
+#define CERT_E_PATHLENCONST (-2146762492)
+#define CERT_E_CRITICAL (-2146762491)
+#define CERT_E_ISSUERCHAINING (-2146762489)
+#define CERT_E_MALFORMED (-2146762488)
+#define CRYPT_E_REVOCATION_OFFLINE (-2146885613)
+#define CRYPT_E_REVOKED (-2146885616)
+#define TRUST_E_BASIC_CONSTRAINTS (-2146869223)
+#define TRUST_E_CERT_SIGNATURE (-2146869244)
+#define TRUST_E_FAIL (-2146762485)
+#define CERT_TRUST_NO_ERROR 0
+#define CERT_TRUST_IS_NOT_TIME_VALID 1
+#define CERT_TRUST_IS_NOT_TIME_NESTED 2
+#define CERT_TRUST_IS_REVOKED 4
+#define CERT_TRUST_IS_NOT_SIGNATURE_VALID 8
+#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 16
+#define CERT_TRUST_IS_UNTRUSTED_ROOT 32
+#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 64
+#define CERT_TRUST_IS_CYCLIC 128
+#define CERT_TRUST_IS_PARTIAL_CHAIN 65536
+#define CERT_TRUST_CTL_IS_NOT_TIME_VALID 131072
+#define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 262144
+#define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 524288
+#define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 1
+#define CERT_TRUST_HAS_KEY_MATCH_ISSUER 2
+#define CERT_TRUST_HAS_NAME_MATCH_ISSUER 4
+#define CERT_TRUST_IS_SELF_SIGNED 8
+#define CERT_TRUST_IS_COMPLEX_CHAIN 65536
+#define CERT_CHAIN_POLICY_BASE ((LPCSTR) 1)
+#define CERT_CHAIN_POLICY_AUTHENTICODE ((LPCSTR) 2)
+#define CERT_CHAIN_POLICY_AUTHENTICODE_TS ((LPCSTR) 3)
+#define CERT_CHAIN_POLICY_SSL ((LPCSTR) 4)
+#define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR) 5)
+#define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR) 6)
+#define USAGE_MATCH_TYPE_AND 0
+#define USAGE_MATCH_TYPE_OR 1
+#define CERT_SIMPLE_NAME_STR 1
+#define CERT_OID_NAME_STR 2
+#define CERT_X500_NAME_STR 3
+#define CERT_NAME_STR_SEMICOLON_FLAG 1073741824
+#define CERT_NAME_STR_CRLF_FLAG 134217728
+#define CERT_NAME_STR_NO_PLUS_FLAG 536870912
+#define CERT_NAME_STR_NO_QUOTING_FLAG 268435456
+#define CERT_NAME_STR_REVERSE_FLAG 33554432
+#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 131072
+#define CERT_FIND_ANY 0
+#define CERT_FIND_CERT_ID 1048576
+#define CERT_FIND_CTL_USAGE 655360
+#define CERT_FIND_ENHKEY_USAGE 655360
+#define CERT_FIND_EXISTING 851968
+#define CERT_FIND_HASH 65536
+#define CERT_FIND_ISSUER_ATTR 196612
+#define CERT_FIND_ISSUER_NAME 131076
+#define CERT_FIND_ISSUER_OF 786432
+#define CERT_FIND_KEY_IDENTIFIER 983040
+#define CERT_FIND_KEY_SPEC 589824
+#define CERT_FIND_MD5_HASH 262144
+#define CERT_FIND_PROPERTY 327680
+#define CERT_FIND_PUBLIC_KEY 393216
+#define CERT_FIND_SHA1_HASH 65536
+#define CERT_FIND_SIGNATURE_HASH 917504
+#define CERT_FIND_SUBJECT_ATTR 196615
+#define CERT_FIND_SUBJECT_CERT 720896
+#define CERT_FIND_SUBJECT_NAME 131079
+#define CERT_FIND_SUBJECT_STR_A 458759
+#define CERT_FIND_SUBJECT_STR_W 524295
+#define CERT_FIND_ISSUER_STR_A 458756
+#define CERT_FIND_ISSUER_STR_W 524292
+#define CERT_FIND_OR_ENHKEY_USAGE_FLAG 16
+#define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 1
+#define CERT_FIND_NO_ENHKEY_USAGE_FLAG 8
+#define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 32
+#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 2
+#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 2
+#define CERT_UNICODE_IS_RDN_ATTRS_FLAG 1
+#define CERT_CHAIN_FIND_BY_ISSUER 1
+#define CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG 1
+#define CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG 2
+#define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG 32768
+#define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG 4
+#define CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG 8
+#define CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG 16384
+#define CERT_STORE_PROV_SYSTEM 10
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE 131072
+#define szOID_PKIX_KP_SERVER_AUTH "4235600"
+#define szOID_SERVER_GATED_CRYPTO "4235658"
+#define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
+#define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
+
typedef UINT ALG_ID;
typedef struct _VTableProvStruc {FARPROC FuncVerifyImage;} VTableProvStruc,*PVTableProvStruc;
typedef ULONG HCRYPTPROV;
typedef ULONG HCRYPTKEY;
typedef ULONG HCRYPTHASH;
+typedef PVOID HCERTSTORE;
+typedef PVOID HCRYPTMSG;
+typedef PVOID HCERTCHAINENGINE;
+typedef struct _CRYPTOAPI_BLOB {
+ DWORD cbData;
+ BYTE* pbData;
+} CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
+ CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB,
+ CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
+ CERT_NAME_BLOB, *PCERT_NAME_BLOB,
+ CERT_RDN_VALUE_BLOB,*PCERT_RDN_VALUE_BLOB,
+ CERT_BLOB, *PCERT_BLOB,
+ CRL_BLOB, *PCRL_BLOB,
+ DATA_BLOB, *PDATA_BLOB,
+ CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB,
+ CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB,
+ CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
+ CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
+ CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
+/* not described in SDK; has the same layout as HTTPSPolicyCallbackData */
+typedef struct _SSL_EXTRA_CERT_CHAIN_POLICY_PARA {
+ DWORD cbStruct;
+ DWORD dwAuthType;
+ DWORD fdwChecks;
+ LPWSTR pwszServerName;
+} SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA,
+ HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData;
+/* #if (_WIN32_WINNT>=0x500) */
+typedef struct _CERT_CHAIN_POLICY_PARA {
+ DWORD cbSize;
+ DWORD dwFlags;
+ void* pvExtraPolicyPara;
+} CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
+typedef struct _CERT_CHAIN_POLICY_STATUS {
+ DWORD cbSize;
+ DWORD dwError;
+ LONG lChainIndex;
+ LONG lElementIndex;
+ void* pvExtraPolicyStatus;
+} CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;
+/* #endif */
+typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
+ LPSTR pszObjId;
+ CRYPT_OBJID_BLOB Parameters;
+} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
+typedef struct _CRYPT_BIT_BLOB {
+ DWORD cbData;
+ BYTE* pbData;
+ DWORD cUnusedBits;
+} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
+typedef struct _CERT_PUBLIC_KEY_INFO {
+ CRYPT_ALGORITHM_IDENTIFIER Algorithm;
+ CRYPT_BIT_BLOB PublicKey;
+} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
+typedef struct _CERT_EXTENSION {
+ LPSTR pszObjId;
+ BOOL fCritical;
+ CRYPT_OBJID_BLOB Value;
+} CERT_EXTENSION, *PCERT_EXTENSION;
+typedef struct _CERT_INFO {
+ DWORD dwVersion;
+ CRYPT_INTEGER_BLOB SerialNumber;
+ CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+ CERT_NAME_BLOB Issuer;
+ FILETIME NotBefore;
+ FILETIME NotAfter;
+ CERT_NAME_BLOB Subject;
+ CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
+ CRYPT_BIT_BLOB IssuerUniqueId;
+ CRYPT_BIT_BLOB SubjectUniqueId;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CERT_INFO, *PCERT_INFO;
+typedef struct _CERT_CONTEXT {
+ DWORD dwCertEncodingType;
+ BYTE* pbCertEncoded;
+ DWORD cbCertEncoded;
+ PCERT_INFO pCertInfo;
+ HCERTSTORE hCertStore;
+} CERT_CONTEXT, *PCERT_CONTEXT;
+typedef const CERT_CONTEXT *PCCERT_CONTEXT;
+typedef struct _CTL_USAGE {
+ DWORD cUsageIdentifier;
+ LPSTR *rgpszUsageIdentifier;
+} CTL_USAGE, *PCTRL_USAGE,
+ CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
+typedef struct _CERT_USAGE_MATCH {
+ DWORD dwType;
+ CERT_ENHKEY_USAGE Usage;
+} CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
+/* #if (_WIN32_WINNT>=0x500) */
+typedef struct _CERT_CHAIN_PARA {
+ DWORD cbSize;
+ CERT_USAGE_MATCH RequestedUsage;
+#if CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
+ CERT_USAGE_MATCH RequestedIssuancePolicy;
+ DWORD dwUrlRetrievalTimeout;
+ BOOL fCheckRevocationFreshnessTime;
+ DWORD dwRevocationFreshnessTime;
+#endif
+} CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;
+typedef BOOL (WINAPI *PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK)(PCCERT_CONTEXT,void*);
+typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
+ DWORD cbSize;
+ LPCSTR pszUsageIdentifier;
+ DWORD dwKeySpec;
+ DWORD dwAcquirePrivateKeyFlags;
+ DWORD cIssuer;
+ CERT_NAME_BLOB* rgIssuer;
+ PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFIndCallback;
+ void* pvFindArg;
+ DWORD* pdwIssuerChainIndex;
+ DWORD* pdwIssuerElementIndex;
+} CERT_CHAIN_FIND_BY_ISSUER_PARA, *PCERT_CHAIN_FIND_BY_ISSUER_PARA;
+/* #endif */
+typedef struct _CERT_TRUST_STATUS {
+ DWORD dwErrorStatus;
+ DWORD dwInfoStatus;
+} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
+typedef struct _CRL_ENTRY {
+ CRYPT_INTEGER_BLOB SerialNumber;
+ FILETIME RevocationDate;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CRL_ENTRY, *PCRL_ENTRY;
+typedef struct _CRL_INFO {
+ DWORD dwVersion;
+ CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+ CERT_NAME_BLOB Issuer;
+ FILETIME ThisUpdate;
+ FILETIME NextUpdate;
+ DWORD cCRLEntry;
+ PCRL_ENTRY rgCRLEntry;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CRL_INFO, *PCRL_INFO;
+typedef struct _CRL_CONTEXT {
+ DWORD dwCertEncodingType;
+ BYTE* pbCrlEncoded;
+ DWORD cbCrlEncoded;
+ PCRL_INFO pCrlInfo;
+ HCERTSTORE hCertStore;
+} CRL_CONTEXT, *PCRL_CONTEXT;
+typedef const CRL_CONTEXT *PCCRL_CONTEXT;
+typedef struct _CERT_REVOCATION_CRL_INFO {
+ DWORD cbSize;
+ PCCRL_CONTEXT pBaseCRLContext;
+ PCCRL_CONTEXT pDeltaCRLContext;
+ PCRL_ENTRY pCrlEntry;
+ BOOL fDeltaCrlEntry;
+} CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
+typedef struct _CERT_REVOCATION_INFO {
+ DWORD cbSize;
+ DWORD dwRevocationResult;
+ LPCSTR pszRevocationOid;
+ LPVOID pvOidSpecificInfo;
+ BOOL fHasFreshnessTime;
+ DWORD dwFreshnessTime;
+ PCERT_REVOCATION_CRL_INFO pCrlInfo;
+} CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
+/* #if (_WIN32_WINNT>=0x500) */
+typedef struct _CERT_CHAIN_ELEMENT {
+ DWORD cbSize;
+ PCCERT_CONTEXT pCertContext;
+ CERT_TRUST_STATUS TrustStatus;
+ PCERT_REVOCATION_INFO pRevocationInfo;
+ PCERT_ENHKEY_USAGE pIssuanceUsage;
+ PCERT_ENHKEY_USAGE pApplicationUsage;
+} CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
+/* #endif */
+typedef struct _CRYPT_ATTRIBUTE {
+ LPSTR pszObjId;
+ DWORD cValue;
+ PCRYPT_ATTR_BLOB rgValue;
+} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
+typedef struct _CTL_ENTRY {
+ CRYPT_DATA_BLOB SubjectIdentifier;
+ DWORD cAttribute;
+ PCRYPT_ATTRIBUTE rgAttribute;
+} CTL_ENTRY, *PCTL_ENTRY;
+typedef struct _CTL_INFO {
+ DWORD dwVersion;
+ CTL_USAGE SubjectUsage;
+ CRYPT_DATA_BLOB ListIdentifier;
+ CRYPT_INTEGER_BLOB SequenceNumber;
+ FILETIME ThisUpdate;
+ FILETIME NextUpdate;
+ CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
+ DWORD cCTLEntry;
+ PCTL_ENTRY rgCTLEntry;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CTL_INFO, *PCTL_INFO;
+typedef struct _CTL_CONTEXT {
+ DWORD dwMsgAndCertEncodingType;
+ BYTE* pbCtlEncoded;
+ DWORD cbCtlEncoded;
+ PCTL_INFO pCtlInfo;
+ HCERTSTORE hCertStore;
+ HCRYPTMSG hCryptMsg;
+ BYTE* pbCtlContent;
+ DWORD cbCtlContent;
+} CTL_CONTEXT, *PCTL_CONTEXT;
+typedef const CTL_CONTEXT *PCCTL_CONTEXT;
+typedef struct _CERT_TRUST_LIST_INFO {
+ DWORD cbSize;
+ PCTL_ENTRY pCtlEntry;
+ PCCTL_CONTEXT pCtlContext;
+} CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
+typedef struct _CERT_SIMPLE_CHAIN {
+ DWORD cbSize;
+ CERT_TRUST_STATUS TrustStatus;
+ DWORD cElement;
+ PCERT_CHAIN_ELEMENT* rgpElement;
+ PCERT_TRUST_LIST_INFO pTrustListInfo;
+ BOOL fHasRevocationFreshnessTime;
+ DWORD dwRevocationFreshnessTime;
+} CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
+/* #if (_WIN32_WINNT>=0x500) */
+typedef const struct _CERT_CHAIN_CONTEXT* PCCERT_CHAIN_CONTEXT;
+typedef struct _CERT_CHAIN_CONTEXT {
+ DWORD cbSize;
+ CERT_TRUST_STATUS TrustStatus;
+ DWORD cChain;
+ PCERT_SIMPLE_CHAIN* rgpChain;
+ DWORD cLowerQualityChainContext;
+ PCCERT_CHAIN_CONTEXT* rgpLowerQualityChainContext;
+ BOOL fHasRevocationFreshnessTime;
+ DWORD dwRevocationFreshnessTime;
+} CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
+/* #endif */
typedef struct _PROV_ENUMALGS {
ALG_ID aiAlgid;
DWORD dwBitLen;
@@ -137,6 +478,20 @@ typedef struct _RSAPUBKEY {
DWORD bitlen;
DWORD pubexp;
} RSAPUBKEY;
+
+BOOL WINAPI CertCloseStore(HCERTSTORE,DWORD);
+BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE,PCCERT_CONTEXT,LPFILETIME,HCERTSTORE,PCERT_CHAIN_PARA,DWORD,LPVOID,PCCERT_CHAIN_CONTEXT*);
+BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR,PCCERT_CHAIN_CONTEXT,PCERT_CHAIN_POLICY_PARA,PCERT_CHAIN_POLICY_STATUS);
+void WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT);
+DWORD WINAPI CertNameToStrA(DWORD,PCERT_NAME_BLOB,DWORD,LPSTR,DWORD);
+DWORD WINAPI CertNameToStrW(DWORD,PCERT_NAME_BLOB,DWORD,LPWSTR,DWORD);
+HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV,LPCSTR);
+HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV,LPCWSTR);
+HCERTSTORE WINAPI CertOpenStore(LPCSTR,DWORD,HCRYPTPROV,DWORD,const void*);
+PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CONTEXT);
+BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT);
+PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE,PCCERT_CONTEXT,PCCERT_CONTEXT,DWORD*);
+PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CHAIN_CONTEXT);
BOOL WINAPI CryptAcquireContextA(HCRYPTPROV*,LPCSTR,LPCSTR,DWORD,DWORD);
BOOL WINAPI CryptAcquireContextW(HCRYPTPROV*,LPCWSTR,LPCWSTR,DWORD,DWORD);
BOOL WINAPI CryptReleaseContext(HCRYPTPROV,DWORD);
@@ -166,20 +521,29 @@ BOOL WINAPI CryptVerifySignatureA(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCSTR,DWORD)
BOOL WINAPI CryptVerifySignatureW(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCWSTR,DWORD);
BOOL WINAPI CryptSetProviderA(LPCSTR,DWORD);
BOOL WINAPI CryptSetProviderW(LPCWSTR,DWORD);
+
#ifdef UNICODE
+#define CertNameToStr CertNameToStrW
#define CryptAcquireContext CryptAcquireContextW
#define CryptSignHash CryptSignHashW
#define CryptVerifySignature CryptVerifySignatureW
#define CryptSetProvider CryptSetProviderW
+#define CertOpenSystemStore CertOpenSystemStoreW
+#define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
+#define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
#define MS_DEF_PROV MS_DEF_PROV_W
#else
+#define CertNameToStr CertNameToStrA
#define CryptAcquireContext CryptAcquireContextA
#define CryptSignHash CryptSignHashA
#define CryptVerifySignature CryptVerifySignatureA
#define CryptSetProvider CryptSetProviderA
+#define CertOpenSystemStore CertOpenSystemStoreA
+#define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_A
+#define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_A
#define MS_DEF_PROV MS_DEF_PROV_A
#endif
#ifdef __cplusplus
}
#endif
-#endif
+#endif /* _WINCRYPT_H */