ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

wincrypt.h
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2002 Travis Michielsen
00003  * Copyright (C) 2004-2005 Juan Lang
00004  * Copyright (C) 2007 Vijay Kiran Kamuju
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00019  */
00020 
00021 #ifndef __WINE_WINCRYPT_H
00022 #define __WINE_WINCRYPT_H
00023 
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027 
00028 #ifdef _MSC_VER
00029 #pragma warning(push)
00030 #pragma warning(disable:4201)
00031 #endif
00032 
00033 #include <bcrypt.h>
00034 /* FIXME: #include <ncrypt.h> */
00035 
00036 #ifdef _ADVAPI32_
00037 # define WINADVAPI
00038 #else
00039 # define WINADVAPI DECLSPEC_IMPORT
00040 #endif
00041 
00042 /* some typedefs for function parameters */
00043 typedef unsigned int ALG_ID;
00044 typedef ULONG_PTR HCRYPTPROV;
00045 typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;
00046 typedef ULONG_PTR HCRYPTPROV_LEGACY;
00047 typedef ULONG_PTR HCRYPTKEY;
00048 typedef ULONG_PTR HCRYPTHASH;
00049 typedef void *HCERTSTORE;
00050 typedef void *HCRYPTMSG;
00051 typedef void *HCERTSTOREPROV;
00052 typedef void *HCRYPTOIDFUNCSET;
00053 typedef void *HCRYPTOIDFUNCADDR;
00054 typedef void *HCRYPTDEFAULTCONTEXT;
00055 
00056 /* CSP Structs */
00057 
00058 typedef struct _PROV_ENUMALGS {
00059   ALG_ID aiAlgid;
00060   DWORD  dwBitLen;
00061   DWORD  dwNameLen;
00062   CHAR   szName[20];
00063 } PROV_ENUMALGS;
00064 
00065 typedef struct _PROV_ENUMALGS_EX {
00066   ALG_ID aiAlgid;
00067   DWORD  dwDefaultLen;
00068   DWORD  dwMinLen;
00069   DWORD  dwMaxLen;
00070   DWORD  dwProtocols;
00071   DWORD  dwNameLen;
00072   CHAR   szName[20];
00073   DWORD  dwLongNameLen;
00074   CHAR   szLongName[40];
00075 } PROV_ENUMALGS_EX;
00076 
00077 #define SCHANNEL_MAC_KEY 0
00078 #define SCHANNEL_ENC_KEY 1
00079 
00080 typedef struct _SCHANNEL_ALG {
00081   DWORD  dwUse;
00082   ALG_ID Algid;
00083   DWORD  cBits;
00084   DWORD  dwFlags;
00085   DWORD  dwReserved;
00086 } SCHANNEL_ALG, *PSCHANNEL_ALG;
00087 
00088 
00089 #define CRYPT_IPSEC_HMAC_KEY 0x0100
00090 
00091 typedef struct _HMAC_INFO {
00092   ALG_ID HashAlgid;
00093   BYTE*  pbInnerString;
00094   DWORD  cbInnerString;
00095   BYTE*  pbOuterString;
00096   DWORD  cbOuterString;
00097 } HMAC_INFO, *PHMAC_INFO;
00098         
00099 typedef struct _CRYPTOAPI_BLOB {
00100   DWORD    cbData;
00101   BYTE*    pbData;
00102 } CRYPT_INTEGER_BLOB,  *PCRYPT_INTEGER_BLOB,
00103   CRYPT_UINT_BLOB,     *PCRYPT_UINT_BLOB,
00104   CRYPT_OBJID_BLOB,    *PCRYPT_OBJID_BLOB,
00105   CERT_NAME_BLOB,      *PCERT_NAME_BLOB,
00106   CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
00107   CERT_BLOB,           *PCERT_BLOB,
00108   CRL_BLOB,            *PCRL_BLOB,
00109   DATA_BLOB,           *PDATA_BLOB,
00110   CRYPT_DATA_BLOB,     *PCRYPT_DATA_BLOB,
00111   CRYPT_HASH_BLOB,     *PCRYPT_HASH_BLOB,
00112   CRYPT_DIGEST_BLOB,   *PCRYPT_DIGEST_BLOB,
00113   CRYPT_DER_BLOB,      *PCRYPT_DER_BLOB,
00114   CRYPT_ATTR_BLOB,     *PCRYPT_ATTR_BLOB;
00115 
00116 typedef struct _CRYPTPROTECT_PROMPTSTRUCT{
00117   DWORD   cbSize;
00118   DWORD   dwPromptFlags;
00119   HWND    hwndApp;
00120   LPCWSTR szPrompt;
00121 } CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;
00122 
00123 typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
00124   LPSTR            pszObjId;
00125   CRYPT_OBJID_BLOB Parameters;
00126 } CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
00127 
00128 typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
00129   LPSTR               pszObjId;
00130   CRYPT_OBJID_BLOB    Value;
00131 } CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
00132 
00133 typedef struct _PUBLICKEYSTRUC {
00134     BYTE   bType;
00135     BYTE   bVersion;
00136     WORD   reserved;
00137     ALG_ID aiKeyAlg;
00138 } BLOBHEADER, PUBLICKEYSTRUC;
00139 
00140 typedef struct _RSAPUBKEY {
00141     DWORD   magic;
00142     DWORD   bitlen;
00143     DWORD   pubexp;
00144 } RSAPUBKEY;
00145 
00146 typedef struct _PUBKEY {
00147     DWORD   magic;
00148     DWORD   bitlen;
00149 } DHPUBKEY, DSSPUBKEY, KEAPUBKEY, TEKPUBKEY;
00150 
00151 typedef struct _DSSSEED {
00152     DWORD   counter;
00153     BYTE    seed[20];
00154 } DSSSEED;
00155 
00156 typedef struct _PUBKEYVER3 {
00157     DWORD   magic;
00158     DWORD   bitlenP;
00159     DWORD   bitlenQ;
00160     DWORD   bitlenJ;
00161     DSSSEED DSSSeed;
00162 } DHPUBKEY_VER3, DSSPUBKEY_VER3;
00163 
00164 typedef struct _PRIVKEYVER3 {
00165     DWORD   magic;
00166     DWORD   bitlenP;
00167     DWORD   bitlenQ;
00168     DWORD   bitlenJ;
00169     DWORD   bitlenX;
00170     DSSSEED DSSSeed;
00171 } DHPRIVKEY_VER3, DSSPRIVKEY_VER3;
00172 
00173 typedef struct _KEY_TYPE_SUBTYPE {
00174     DWORD   dwKeySpec;
00175     GUID    Type;
00176     GUID    SubType;
00177 } KEY_TYPE_SUBTYPE, *PKEY_TYPE_SUBTYPE;
00178 
00179 typedef struct _CERT_FORTEZZA_DATA_PROP {
00180     unsigned char   SerialNumber[8];
00181     int             CertIndex;
00182     unsigned char   CertLabel[36];
00183 } CERT_FORTEZZA_DATA_PROP;
00184 
00185 typedef struct _CMS_DH_KEY_INFO {
00186     DWORD             dwVersion;
00187     ALG_ID            Algid;
00188     LPSTR             pszContentEncObjId;
00189     CRYPT_DATA_BLOB   PubInfo;
00190     void              *pReserved;
00191 } CMS_DH_KEY_INFO, *PCMS_DH_KEY_INFO;
00192 
00193 typedef struct _CRYPT_BIT_BLOB {
00194     DWORD cbData;
00195     BYTE  *pbData;
00196     DWORD cUnusedBits;
00197 } CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
00198 
00199 typedef struct _CRYPT_KEY_PROV_PARAM {
00200     DWORD dwParam;
00201     BYTE *pbData;
00202     DWORD cbData;
00203     DWORD dwFlags;
00204 } CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;
00205 
00206 typedef struct _CRYPT_KEY_PROV_INFO {
00207     LPWSTR                pwszContainerName;
00208     LPWSTR                pwszProvName;
00209     DWORD                 dwProvType;
00210     DWORD                 dwFlags;
00211     DWORD                 cProvParam;
00212     PCRYPT_KEY_PROV_PARAM rgProvParam;
00213     DWORD                 dwKeySpec;
00214 } CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
00215 
00216 typedef struct _CERT_KEY_CONTEXT {
00217     DWORD      cbSize;
00218     HCRYPTPROV hCryptProv;
00219     DWORD      dwKeySpec;
00220 } CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT;
00221 
00222 typedef struct _CERT_PUBLIC_KEY_INFO {
00223     CRYPT_ALGORITHM_IDENTIFIER Algorithm;
00224     CRYPT_BIT_BLOB             PublicKey;
00225 } CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
00226 
00227 typedef struct _CERT_EXTENSION {
00228     LPSTR               pszObjId;
00229     BOOL                fCritical;
00230     CRYPT_OBJID_BLOB    Value;
00231 } CERT_EXTENSION, *PCERT_EXTENSION;
00232 
00233 typedef struct _CERT_EXTENSIONS {
00234     DWORD           cExtension;
00235     PCERT_EXTENSION rgExtension;
00236 } CERT_EXTENSIONS, *PCERT_EXTENSIONS;
00237 
00238 typedef struct _CERT_INFO {
00239     DWORD                      dwVersion;
00240     CRYPT_INTEGER_BLOB         SerialNumber;
00241     CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
00242     CERT_NAME_BLOB             Issuer;
00243     FILETIME                   NotBefore;
00244     FILETIME                   NotAfter;
00245     CERT_NAME_BLOB             Subject;
00246     CERT_PUBLIC_KEY_INFO       SubjectPublicKeyInfo;
00247     CRYPT_BIT_BLOB             IssuerUniqueId;
00248     CRYPT_BIT_BLOB             SubjectUniqueId;
00249     DWORD                      cExtension;
00250     PCERT_EXTENSION            rgExtension;
00251 } CERT_INFO, *PCERT_INFO;
00252 
00253 typedef struct _CERT_RDN_ATTR {
00254     LPSTR               pszObjId;
00255     DWORD               dwValueType;
00256     CERT_RDN_VALUE_BLOB Value;
00257 } CERT_RDN_ATTR, *PCERT_RDN_ATTR;
00258 
00259 typedef struct _CERT_RDN {
00260     DWORD          cRDNAttr;
00261     PCERT_RDN_ATTR rgRDNAttr;
00262 } CERT_RDN, *PCERT_RDN;
00263 
00264 typedef struct _CERT_NAME_INFO {
00265     DWORD     cRDN;
00266     PCERT_RDN rgRDN;
00267 } CERT_NAME_INFO, *PCERT_NAME_INFO;
00268 
00269 typedef struct _CERT_NAME_VALUE {
00270     DWORD               dwValueType;
00271     CERT_RDN_VALUE_BLOB Value;
00272 } CERT_NAME_VALUE, *PCERT_NAME_VALUE;
00273 
00274 typedef struct _CERT_ENCRYPTED_PRIVATE_KEY_INFO {
00275     CRYPT_ALGORITHM_IDENTIFIER EncryptionAlgorithm;
00276     CRYPT_DATA_BLOB            EncryptedPrivateKey;
00277 } CERT_ENCRYPTED_PRIVATE_KEY_INFO, *PCERT_ENCRYPTED_PRIVATE_KEY_INFO;
00278 
00279 typedef struct _CERT_AUTHORITY_KEY_ID_INFO {
00280     CRYPT_DATA_BLOB    KeyId;
00281     CERT_NAME_BLOB     CertIssuer;
00282     CRYPT_INTEGER_BLOB CertSerialNumber;
00283 } CERT_AUTHORITY_KEY_ID_INFO, *PCERT_AUTHORITY_KEY_ID_INFO;
00284 
00285 typedef struct _CERT_PRIVATE_KEY_VALIDITY {
00286     FILETIME NotBefore;
00287     FILETIME NotAfter;
00288 } CERT_PRIVATE_KEY_VALIDITY, *PCERT_PRIVATE_KEY_VALIDITY;
00289 
00290 typedef struct _CERT_KEY_ATTRIBUTES_INFO {
00291     CRYPT_DATA_BLOB            KeyId;
00292     CRYPT_BIT_BLOB             IntendedKeyUsage;
00293     PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod;
00294 } CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO;
00295 
00296 /* byte 0 */
00297 #define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80
00298 #define CERT_NON_REPUDIATION_KEY_USAGE   0x40
00299 #define CERT_KEY_ENCIPHERMENT_KEY_USAGE  0x20
00300 #define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10
00301 #define CERT_KEY_AGREEMENT_KEY_USAGE     0x08
00302 #define CERT_KEY_CERT_SIGN_KEY_USAGE     0x04
00303 #define CERT_OFFLINE_CRL_SIGN_KEY_USAGE  0x02
00304 #define CERT_CRL_SIGN_KEY_USAGE          0x02
00305 #define CERT_ENCIPHER_ONLY_KEY_USAGE     0x01
00306 /* byte 1 */
00307 #define CERT_DECIPHER_ONLY_KEY_USAGE     0x80
00308 
00309 typedef struct _CERT_POLICY_ID {
00310     DWORD  cCertPolicyElementId;
00311     LPSTR *rgbszCertPolicyElementId;
00312 } CERT_POLICY_ID, *PCERT_POLICY_ID;
00313 
00314 typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO {
00315     DWORD           cCertPolicyId;
00316     PCERT_POLICY_ID rgCertPolicyId;
00317     CRYPT_BIT_BLOB  RestrictedKeyUsage;
00318 } CERT_KEY_USAGE_RESTRICTION_INFO, *PCERT_KEY_USAGE_RESTRICTION_INFO;
00319 
00320 typedef struct _CERT_OTHER_NAME {
00321     LPSTR            pszObjId;
00322     CRYPT_OBJID_BLOB Value;
00323 } CERT_OTHER_NAME, *PCERT_OTHER_NAME;
00324 
00325 typedef struct _CERT_ALT_NAME_ENTRY {
00326     DWORD dwAltNameChoice;
00327     union {
00328         PCERT_OTHER_NAME pOtherName;
00329         LPWSTR           pwszRfc822Name;
00330         LPWSTR           pwszDNSName;
00331         CERT_NAME_BLOB   DirectoryName;
00332         LPWSTR           pwszURL;
00333         CRYPT_DATA_BLOB  IPAddress;
00334         LPSTR            pszRegisteredID;
00335     } DUMMYUNIONNAME;
00336 } CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY;
00337 
00338 #define CERT_ALT_NAME_OTHER_NAME     1
00339 #define CERT_ALT_NAME_RFC822_NAME    2
00340 #define CERT_ALT_NAME_DNS_NAME       3
00341 #define CERT_ALT_NAME_X400_ADDRESS   4
00342 #define CERT_ALT_NAME_DIRECTORY_NAME 5
00343 #define CERT_ALT_NAME_EDI_PARTY_NAME 6
00344 #define CERT_ALT_NAME_URL            7
00345 #define CERT_ALT_NAME_IP_ADDRESS     8
00346 #define CERT_ALT_NAME_REGISTERED_ID  9
00347 
00348 typedef struct _CERT_ALT_NAME_INFO {
00349     DWORD                cAltEntry;
00350     PCERT_ALT_NAME_ENTRY rgAltEntry;
00351 } CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO;
00352 
00353 #define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK  0xff
00354 #define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16
00355 #define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK  0x0000ffff
00356 #define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0
00357 #define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(x) \
00358  (((x) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & \
00359   CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
00360 #define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(x) \
00361  ((x) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
00362 
00363 typedef struct _CERT_BASIC_CONSTRAINTS_INFO {
00364     CRYPT_BIT_BLOB  SubjectType;
00365     BOOL            fPathLenConstraint;
00366     DWORD           dwPathLenConstraint;
00367     DWORD           cSubtreesConstraint;
00368     CERT_NAME_BLOB *rgSubtreesConstraint;
00369 } CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO;
00370 
00371 #define CERT_CA_SUBJECT_FLAG         0x80
00372 #define CERT_END_ENTITY_SUBJECT_FLAG 0x40
00373 
00374 typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
00375     BOOL  fCA;
00376     BOOL  fPathLenConstraint;
00377     DWORD dwPathLenConstraint;
00378 } CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO;
00379 
00380 typedef struct _CERT_POLICY_QUALIFIER_INFO {
00381     LPSTR            pszPolicyQualifierId;
00382     CRYPT_OBJID_BLOB Qualifier;
00383 } CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO;
00384 
00385 typedef struct _CERT_POLICY_INFO {
00386     LPSTR                       pszPolicyIdentifier;
00387     DWORD                       cPolicyQualifier;
00388     CERT_POLICY_QUALIFIER_INFO *rgPolicyQualifier;
00389 } CERT_POLICY_INFO, *PCERT_POLICY_INFO;
00390 
00391 typedef struct _CERT_POLICIES_INFO {
00392     DWORD             cPolicyInfo;
00393     CERT_POLICY_INFO *rgPolicyInfo;
00394 } CERT_POLICIES_INFO, *PCERT_POLICIES_INFO;
00395 
00396 typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
00397     LPSTR pszOrganization;
00398     DWORD cNoticeNumbers;
00399     int  *rgNoticeNumbers;
00400 } CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,
00401  *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
00402 
00403 typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE {
00404     CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *pNoticeReference;
00405     LPWSTR                                  pszDisplayText;
00406 } CERT_POLICY_QUALIFIER_USER_NOTICE, *PCERT_POLICY_QUALIFIER_USER_NOTICE;
00407 
00408 typedef struct _CPS_URLS {
00409     LPWSTR                      pszURL;
00410     CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm;
00411     CRYPT_DATA_BLOB            *pDigest;
00412 } CPS_URLS, *PCPS_URLS;
00413 
00414 typedef struct _CERT_POLICY95_QUALIFIER1 {
00415     LPWSTR    pszPracticesReference;
00416     LPSTR     pszNoticeIdentifier;
00417     LPSTR     pszNSINoticeIdentifier;
00418     DWORD     cCPSURLs;
00419     CPS_URLS *rgCPSURLs;
00420 } CERT_POLICY95_QUALIFIER1, *PCERT_POLICY95_QUALIFIER1;
00421 
00422 typedef struct _CERT_POLICY_MAPPING {
00423     LPSTR pszIssuerDomainPolicy;
00424     LPSTR pszSubjectDomainPolicy;
00425 } CERT_POLICY_MAPPING, *PCERT_POLICY_MAPPING;
00426 
00427 typedef struct _CERT_POLICY_MAPPINGS_INFO {
00428     DWORD                cPolicyMapping;
00429     PCERT_POLICY_MAPPING rgPolicyMapping;
00430 } CERT_POLICY_MAPPINGS_INFO, *PCERT_POLICY_MAPPINGS_INFO;
00431 
00432 typedef struct _CERT_POLICY_CONSTRAINTS_INFO {
00433     BOOL  fRequireExplicitPolicy;
00434     DWORD dwRequireExplicitPolicySkipCerts;
00435     BOOL  fInhibitPolicyMapping;
00436     DWORD dwInhibitPolicyMappingSkipCerts;
00437 } CERT_POLICY_CONSTRAINTS_INFO, *PCERT_POLICY_CONSTRAINTS_INFO;
00438 
00439 typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {
00440     LPSTR           pszObjId;
00441     DWORD           cValue;
00442     PCRYPT_DER_BLOB rgValue;
00443 } CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY, *PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;
00444 
00445 typedef struct _CRYPT_CONTENT_INFO {
00446     LPSTR          pszObjId;
00447     CRYPT_DER_BLOB Content;
00448 } CRYPT_CONTENT_INFO, *PCRYPT_CONTENT_INFO;
00449 
00450 typedef struct _CRYPT_SEQUENCE_OF_ANY {
00451     DWORD           cValue;
00452     PCRYPT_DER_BLOB rgValue;
00453 } CRYPT_SEQUENCE_OF_ANY, *PCRYPT_SEQUENCE_OF_ANY;
00454 
00455 typedef struct _CERT_AUTHORITY_KEY_ID2_INFO {
00456     CRYPT_DATA_BLOB    KeyId;
00457     CERT_ALT_NAME_INFO AuthorityCertIssuer;
00458     CRYPT_INTEGER_BLOB AuthorityCertSerialNumber;
00459 } CERT_AUTHORITY_KEY_ID2_INFO, *PCERT_AUTHORITY_KEY_ID2_INFO;
00460 
00461 typedef struct _CERT_ACCESS_DESCRIPTION {
00462     LPSTR               pszAccessMethod;
00463     CERT_ALT_NAME_ENTRY AccessLocation;
00464 } CERT_ACCESS_DESCRIPTION, *PCERT_ACCESS_DESCRIPTION;
00465 
00466 typedef struct _CERT_AUTHORITY_INFO_ACCESS {
00467     DWORD                    cAccDescr;
00468     PCERT_ACCESS_DESCRIPTION rgAccDescr;
00469 } CERT_AUTHORITY_INFO_ACCESS, *PCERT_AUTHORITY_INFO_ACCESS;
00470 
00471 typedef struct _CERT_CONTEXT {
00472     DWORD      dwCertEncodingType;
00473     BYTE       *pbCertEncoded;
00474     DWORD      cbCertEncoded;
00475     PCERT_INFO pCertInfo;
00476     HCERTSTORE hCertStore;
00477 } CERT_CONTEXT, *PCERT_CONTEXT;
00478 typedef const CERT_CONTEXT *PCCERT_CONTEXT;
00479 
00480 typedef struct _CRL_ENTRY {
00481     CRYPT_INTEGER_BLOB SerialNumber;
00482     FILETIME           RevocationDate;
00483     DWORD              cExtension;
00484     PCERT_EXTENSION    rgExtension;
00485 } CRL_ENTRY, *PCRL_ENTRY;
00486 
00487 typedef struct _CRL_INFO {
00488     DWORD           dwVersion;
00489     CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
00490     CERT_NAME_BLOB  Issuer;
00491     FILETIME        ThisUpdate;
00492     FILETIME        NextUpdate;
00493     DWORD           cCRLEntry;
00494     PCRL_ENTRY      rgCRLEntry;
00495     DWORD           cExtension;
00496     PCERT_EXTENSION rgExtension;
00497 } CRL_INFO, *PCRL_INFO;
00498 
00499 typedef struct _CRL_DIST_POINT_NAME {
00500     DWORD dwDistPointNameChoice;
00501     union {
00502         CERT_ALT_NAME_INFO FullName;
00503     } DUMMYUNIONNAME;
00504 } CRL_DIST_POINT_NAME, *PCRL_DIST_POINT_NAME;
00505 
00506 #define CRL_DIST_POINT_NO_NAME         0
00507 #define CRL_DIST_POINT_FULL_NAME       1
00508 #define CRL_DIST_POINT_ISSUER_RDN_NAME 2
00509 
00510 typedef struct _CRL_DIST_POINT {
00511     CRL_DIST_POINT_NAME DistPointName;
00512     CRYPT_BIT_BLOB      ReasonFlags;
00513     CERT_ALT_NAME_INFO  CRLIssuer;
00514 } CRL_DIST_POINT, *PCRL_DIST_POINT;
00515 
00516 #define CRL_REASON_UNUSED_FLAG                 0x80
00517 #define CRL_REASON_KEY_COMPROMISE_FLAG         0x40
00518 #define CRL_REASON_CA_COMPROMISE_FLAG          0x20
00519 #define CRL_REASON_AFFILIATION_CHANGED_FLAG    0x10
00520 #define CRL_REASON_SUPERSEDED_FLAG             0x08
00521 #define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x04
00522 #define CRL_REASON_CERTIFICATE_HOLD_FLAG       0x02
00523 
00524 typedef struct _CRL_DIST_POINTS_INFO {
00525     DWORD           cDistPoint;
00526     PCRL_DIST_POINT rgDistPoint;
00527 } CRL_DIST_POINTS_INFO, *PCRL_DIST_POINTS_INFO;
00528 
00529 #define CRL_DIST_POINT_ERR_INDEX_MASK  0x7f
00530 #define CRL_DIST_POINT_ERR_INDEX_SHIFT 24
00531 #define GET_CRL_DIST_POINT_ERR_INDEX(x) \
00532  (((x) >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK)
00533 
00534 #define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT 0x80000000L
00535 #define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(x) \
00536  ((x) & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT)
00537 
00538 typedef struct _CROSS_CERT_DIST_POINTS_INFO {
00539     DWORD               dwSyncDeltaTime;
00540     DWORD               cDistPoint;
00541     PCERT_ALT_NAME_INFO rgDistPoint;
00542 } CROSS_CERT_DIST_POINTS_INFO, *PCROSS_CERT_DIST_POINTS_INFO;
00543 
00544 #define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK  0xff
00545 #define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24
00546 #define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(x) \
00547  (((x) >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & \
00548  CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)
00549 
00550 typedef struct _CERT_PAIR {
00551     CERT_BLOB Forward;
00552     CERT_BLOB Reverse;
00553 } CERT_PAIR, *PCERT_PAIR;
00554 
00555 typedef struct _CRL_ISSUING_DIST_POINT {
00556     CRL_DIST_POINT_NAME DistPointName;
00557     BOOL                fOnlyContainsUserCerts;
00558     BOOL                fOnlyContainsCACerts;
00559     CRYPT_BIT_BLOB      OnlySomeReasonFlags;
00560     BOOL                fIndirectCRL;
00561 } CRL_ISSUING_DIST_POINT, *PCRL_ISSUING_DIST_POINT;
00562 
00563 typedef struct _CERT_GENERAL_SUBTREE {
00564     CERT_ALT_NAME_ENTRY Base;
00565     DWORD               dwMinimum;
00566     BOOL                fMaximum;
00567     DWORD               dwMaximum;
00568 } CERT_GENERAL_SUBTREE, *PCERT_GENERAL_SUBTREE;
00569 
00570 typedef struct _CERT_NAME_CONSTRAINTS_INFO {
00571     DWORD                 cPermittedSubtree;
00572     PCERT_GENERAL_SUBTREE rgPermittedSubtree;
00573     DWORD                 cExcludedSubtree;
00574     PCERT_GENERAL_SUBTREE rgExcludedSubtree;
00575 } CERT_NAME_CONSTRAINTS_INFO, *PCERT_NAME_CONSTRAINTS_INFO;
00576 
00577 #define CERT_EXCLUDED_SUBTREE_BIT 0x80000000L
00578 #define IS_CERT_EXCLUDED_SUBTREE(x) ((x) & CERT_EXCLUDED_SUBTREE_BIT)
00579 
00580 typedef struct _CRYPT_ATTRIBUTE {
00581     LPSTR            pszObjId;
00582     DWORD            cValue;
00583     PCRYPT_DATA_BLOB rgValue;
00584 } CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
00585 
00586 typedef struct _CRYPT_ATTRIBUTES {
00587     DWORD            cAttr;
00588     PCRYPT_ATTRIBUTE rgAttr;
00589 } CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
00590 
00591 typedef struct _CERT_REQUEST_INFO {
00592     DWORD                dwVersion;
00593     CERT_NAME_BLOB       Subject;
00594     CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
00595     DWORD                cAttribute;
00596     PCRYPT_ATTRIBUTE     rgAttribute;
00597 } CERT_REQUEST_INFO, *PCERT_REQUEST_INFO;
00598 
00599 typedef struct _CERT_KEYGEN_REQUEST_INFO {
00600     DWORD                dwVersion;
00601     CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
00602     LPWSTR               pwszChallengeString;
00603 } CERT_KEYGEN_REQUEST_INFO, *PCERT_KEYGEN_REQUEST_INFO;
00604 
00605 typedef struct _CERT_SIGNED_CONTENT_INFO {
00606     CRYPT_DER_BLOB             ToBeSigned;
00607     CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
00608     CRYPT_BIT_BLOB             Signature;
00609 } CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO;
00610 
00611 typedef struct _CRL_CONTEXT {
00612     DWORD      dwCertEncodingType;
00613     BYTE      *pbCrlEncoded;
00614     DWORD      cbCrlEncoded;
00615     PCRL_INFO  pCrlInfo;
00616     HCERTSTORE hCertStore;
00617 } CRL_CONTEXT, *PCRL_CONTEXT;
00618 typedef const CRL_CONTEXT *PCCRL_CONTEXT;
00619 
00620 #define SORTED_CTL_EXT_FLAGS_OFFSET                (0*4)
00621 #define SORTED_CTL_EXT_COUNT_OFFSET                (1*4)
00622 #define SORTED_CTL_EXT_MAX_COLLISION_OFFSET        (2*4)
00623 #define SORTED_CTL_EXT_HASH_BUCKET_OFFSET          (3*4)
00624 
00625 #define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG    0x1
00626 
00627 typedef struct _CERT_DSS_PARAMETERS {
00628     CRYPT_UINT_BLOB    p;
00629     CRYPT_UINT_BLOB    q;
00630     CRYPT_UINT_BLOB    g;
00631 } CERT_DSS_PARAMETERS, *PCERT_DSS_PARAMETERS;
00632 
00633 #define CERT_DSS_R_LEN            20
00634 #define CERT_DSS_S_LEN            20
00635 #define CERT_DSS_SIGNATURE_LEN    (CERT_DSS_R_LEN + CERT_DSS_S_LEN)
00636 
00637 #define CERT_MAX_ENCODED_DSS_SIGNATURE_LEN    (2 + 2*(2 + 20 +1))
00638 
00639 typedef struct _CERT_DH_PARAMETERS {
00640     CRYPT_UINT_BLOB    p;
00641     CRYPT_UINT_BLOB    g;
00642 } CERT_DH_PARAMETERS, *PCERT_DH_PARAMETERS;
00643 
00644 typedef struct _CERT_X942_DH_VALIDATION_PARAMS {
00645     CRYPT_BIT_BLOB     seed;
00646     DWORD              pgenCounter;
00647 } CERT_X942_DH_VALIDATION_PARAMS, *PCERT_X942_DH_VALIDATION_PARAMS;
00648 
00649 typedef struct _CERT_X942_DH_PARAMETERS {
00650     CRYPT_UINT_BLOB                    p;
00651     CRYPT_UINT_BLOB                    g;
00652     CRYPT_UINT_BLOB                    q;
00653     CRYPT_UINT_BLOB                    j;
00654     PCERT_X942_DH_VALIDATION_PARAMS    pValidationParams;
00655 } CERT_X942_DH_PARAMETERS, *PCERT_X942_DH_PARAMETERS;
00656 
00657 #define CRYPT_X942_COUNTER_BYTE_LENGTH        4
00658 #define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH     4
00659 #define CRYPT_X942_PUB_INFO_BYTE_LENGTH       (512/8)
00660 
00661 typedef struct _CRYPT_X942_OTHER_INFO {
00662     LPSTR              pszContentEncryptionObjId;
00663     BYTE               rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH];
00664     BYTE               rgbKeyLength[CRYPT_X942_KEY_LENGTH_BYTE_LENGTH];
00665     CRYPT_DATA_BLOB    PubInfo;
00666 } CRYPT_X942_OTHER_INFO, *PCRYPT_X942_OTHER_INFO;
00667 
00668 typedef struct _CRYPT_RC2_CBC_PARAMETERS {
00669     DWORD    dwVersion;
00670     BOOL     fIV;
00671     BYTE     rgbIV[4];
00672 } CRYPT_RC2_CBC_PARAMETERS, *PCRYPT_RC2_CBC_PARAMETERS;
00673 
00674 #define CRYPT_RC2_40BIT_VERSION    160
00675 #define CRYPT_RC2_56BIT_VERSION    52
00676 #define CRYPT_RC2_64BIT_VERSION    120
00677 #define CRYPT_RC2_128BIT_VERSION   58
00678 
00679 typedef struct _CRYPT_SMIME_CAPABILITY {
00680     LPSTR               pszObjId;
00681     CRYPT_OBJID_BLOB    Parameters;
00682 } CRYPT_SMIME_CAPABILITY, *PCRYPT_SMIME_CAPABILITY;
00683 
00684 typedef struct _CRYPT_SMIME_CAPABILITIES {
00685     DWORD                   cCapability;
00686     PCRYPT_SMIME_CAPABILITY rgCapability;
00687 } CRYPT_SMIME_CAPABILITIES, *PCRYPT_SMIME_CAPABILITIES;
00688 
00689 typedef struct _VTableProvStruc {
00690     DWORD    Version;
00691 #ifdef WINE_STRICT_PROTOTYPES
00692     BOOL     (WINAPI *FuncVerifyImage)(LPCSTR,BYTE*);
00693     void     (WINAPI *FuncReturnhWnd)(HWND*);
00694 #else
00695     FARPROC  FuncVerifyImage;
00696     FARPROC  FuncReturnhWnd;
00697 #endif
00698     DWORD    dwProvType;
00699     BYTE    *pbContextInfo;
00700     DWORD    cbContextInfo;
00701     LPSTR    pszProvName;
00702 } VTableProvStruc, *PVTableProvStruc;
00703 
00704 typedef struct _CERT_PRIVATE_KEY_INFO {
00705     DWORD                      Version;
00706     CRYPT_ALGORITHM_IDENTIFIER Algorithm;
00707     CRYPT_DER_BLOB             PrivateKey;
00708     PCRYPT_ATTRIBUTES          pAttributes;
00709 } CERT_PRIVATE_KEY_INFO, *PCERT_PRIVATE_KEY_INFO;
00710 
00711 typedef struct _CTL_USAGE {
00712     DWORD  cUsageIdentifier;
00713     LPSTR *rgpszUsageIdentifier;
00714 } CTL_USAGE, *PCTL_USAGE, CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
00715 
00716 typedef struct _CTL_ENTRY {
00717     CRYPT_DATA_BLOB  SubjectIdentifier;
00718     DWORD            cAttribute;
00719     PCRYPT_ATTRIBUTE rgAttribute;
00720 } CTL_ENTRY, *PCTL_ENTRY;
00721 
00722 typedef struct _CTL_INFO {
00723     DWORD                      dwVersion;
00724     CTL_USAGE                  SubjectUsage;
00725     CRYPT_DATA_BLOB            ListIdentifier;
00726     CRYPT_INTEGER_BLOB         SequenceNumber;
00727     FILETIME                   ThisUpdate;
00728     FILETIME                   NextUpdate;
00729     CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
00730     DWORD                      cCTLEntry;
00731     PCTL_ENTRY                 rgCTLEntry;
00732     DWORD                      cExtension;
00733     PCERT_EXTENSION            rgExtension;
00734 } CTL_INFO, *PCTL_INFO;
00735 
00736 typedef struct _CTL_CONTEXT {
00737     DWORD      dwMsgAndCertEncodingType;
00738     BYTE      *pbCtlEncoded;
00739     DWORD      cbCtlEncoded;
00740     PCTL_INFO  pCtlInfo;
00741     HCERTSTORE hCertStore;
00742     HCRYPTMSG  hCryptMsg;
00743     BYTE      *pbCtlContext;
00744     DWORD      cbCtlContext;
00745 } CTL_CONTEXT, *PCTL_CONTEXT;
00746 typedef const CTL_CONTEXT *PCCTL_CONTEXT;
00747 
00748 typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO {
00749     LPSTR            pszTimeStampAlgorithm;
00750     LPSTR            pszContentType;
00751     CRYPT_OBJID_BLOB Content;
00752     DWORD            cAttribute;
00753     PCRYPT_ATTRIBUTE rgAttribute;
00754 } CRYPT_TIME_STAMP_REQUEST_INFO, *PCRYPT_TIME_STAMP_REQUEST_INFO;
00755 
00756 typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR {
00757     LPWSTR pwszName;
00758     LPWSTR pwszValue;
00759 } CRYPT_ENROLLMENT_NAME_VALUE_PAIR, *PCRYPT_ENROLLMENT_NAME_VALUE_PAIR;
00760 
00761 typedef struct _CMSG_SIGNER_INFO {
00762     DWORD                      dwVersion;
00763     CERT_NAME_BLOB             Issuer;
00764     CRYPT_INTEGER_BLOB         SerialNumber;
00765     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
00766     CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
00767     CRYPT_DATA_BLOB            EncryptedHash;
00768     CRYPT_ATTRIBUTES           AuthAttrs;
00769     CRYPT_ATTRIBUTES           UnauthAttrs;
00770 } CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO;
00771 
00772 #define CMSG_VERIFY_SIGNER_PUBKEY 1
00773 #define CMSG_VERIFY_SIGNER_CERT   2
00774 #define CMSG_VERIFY_SIGNER_CHAIN  3
00775 #define CMSG_VERIFY_SIGNER_NULL   4
00776 
00777 typedef struct _CERT_REVOCATION_CRL_INFO {
00778     DWORD         cbSize;
00779     PCCRL_CONTEXT pBaseCrlContext;
00780     PCCRL_CONTEXT pDeltaCrlContext;
00781     PCRL_ENTRY    pCrlEntry;
00782     BOOL          fDeltaCrlEntry;
00783 } CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
00784 
00785 typedef struct _CERT_REVOCATION_INFO {
00786     DWORD                     cbSize;
00787     DWORD                     dwRevocationResult;
00788     LPCSTR                    pszRevocationOid;
00789     LPVOID                    pvOidSpecificInfo;
00790     BOOL                      fHasFreshnessTime;
00791     DWORD                     dwFreshnessTime;
00792     PCERT_REVOCATION_CRL_INFO pCrlInfo;
00793 } CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
00794 
00795 typedef struct _CERT_REVOCATION_PARA {
00796     DWORD                     cbSize;
00797     PCCERT_CONTEXT            pIssuerCert;
00798     DWORD                     cCertStore;
00799     HCERTSTORE               *rgCertStore;
00800     HCERTSTORE                hCrlStore;
00801     LPFILETIME                pftTimeToUse;
00802 #ifdef CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS
00803     DWORD                     dwUrlRetrievalTimeout;
00804     BOOL                      fCheckFreshnessTime;
00805     DWORD                     dwFreshnessTime;
00806     LPFILETIME                pftCurrentTime;
00807     PCERT_REVOCATION_CRL_INFO pCrlInfo;
00808 #endif
00809 } CERT_REVOCATION_PARA, *PCERT_REVOCATION_PARA;
00810 
00811 #define CERT_CONTEXT_REVOCATION_TYPE 1
00812 #define CERT_VERIFY_REV_CHAIN_FLAG                0x00000001
00813 #define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION   0x00000002
00814 #define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x00000004
00815 
00816 typedef struct _CTL_VERIFY_USAGE_PARA {
00817     DWORD           cbSize;
00818     CRYPT_DATA_BLOB ListIdentifier;
00819     DWORD           cCtlStore;
00820     HCERTSTORE     *rghCtlStore;
00821     DWORD           cSignerStore;
00822     HCERTSTORE     *rghSignerStore;
00823 } CTL_VERIFY_USAGE_PARA, *PCTL_VERIFY_USAGE_PARA;
00824 
00825 typedef struct _CTL_VERIFY_USAGE_STATUS {
00826     DWORD           cbSize;
00827     DWORD           dwError;
00828     DWORD           dwFlags;
00829     PCCTL_CONTEXT  *ppCtl;
00830     DWORD           dwCtlEntryIndex;
00831     PCCERT_CONTEXT *ppSigner;
00832     DWORD           dwSignerIndex;
00833 } CTL_VERIFY_USAGE_STATUS, *PCTL_VERIFY_USAGE_STATUS;
00834 
00835 #define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1
00836 #define CERT_VERIFY_TRUSTED_SIGNERS_FLAG    0x2
00837 #define CERT_VERIFY_NO_TIME_CHECK_FLAG      0x4
00838 #define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG   0x8
00839 #define CERT_VERIFY_UPDATED_CTL_FLAG        0x1
00840 
00841 typedef struct _CERT_CHAIN {
00842     DWORD               cCerts;
00843     PCERT_BLOB          certs;
00844     CRYPT_KEY_PROV_INFO keyLocatorInfo;
00845 } CERT_CHAIN, *PCERT_CHAIN;
00846 
00847 typedef struct _CERT_REVOCATION_STATUS {
00848     DWORD cbSize;
00849     DWORD dwIndex;
00850     DWORD dwError;
00851     DWORD dwReason;
00852     BOOL  fHasFreshnessTime;
00853     DWORD dwFreshnessTime;
00854 } CERT_REVOCATION_STATUS, *PCERT_REVOCATION_STATUS;
00855 
00856 typedef struct _CERT_TRUST_LIST_INFO {
00857     DWORD         cbSize;
00858     PCTL_ENTRY    pCtlEntry;
00859     PCCTL_CONTEXT pCtlContext;
00860 } CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
00861 
00862 #define CERT_TRUST_NO_ERROR                          0x00000000
00863 #define CERT_TRUST_IS_NOT_TIME_VALID                 0x00000001
00864 #define CERT_TRUST_IS_NOT_TIME_NESTED                0x00000002
00865 #define CERT_TRUST_IS_REVOKED                        0x00000004
00866 #define CERT_TRUST_IS_NOT_SIGNATURE_VALID            0x00000008
00867 #define CERT_TRUST_IS_NOT_VALID_FOR_USAGE            0x00000010
00868 #define CERT_TRUST_IS_UNTRUSTED_ROOT                 0x00000020
00869 #define CERT_TRUST_REVOCATION_STATUS_UNKNOWN         0x00000040
00870 #define CERT_TRUST_IS_CYCLIC                         0x00000080
00871 #define CERT_TRUST_INVALID_EXTENSION                 0x00000100
00872 #define CERT_TRUST_INVALID_POLICY_CONSTRAINTS        0x00000200
00873 #define CERT_TRUST_INVALID_BASIC_CONSTRAINTS         0x00000400
00874 #define CERT_TRUST_INVALID_NAME_CONSTRAINTS          0x00000800
00875 #define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x00001000
00876 #define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   0x00002000
00877 #define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x00004000
00878 #define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      0x00008000
00879 #define CERT_TRUST_IS_OFFLINE_REVOCATION             0x01000000
00880 #define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          0x02000000
00881 #define CERT_TRUST_IS_EXPLICIT_DISTRUST              0x04000000
00882 #define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    0x08000000
00883 
00884 #define CERT_TRUST_IS_PARTIAL_CHAIN                  0x00010000
00885 #define CERT_TRUST_CTL_IS_NOT_TIME_VALID             0x00020000
00886 #define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID        0x00040000
00887 #define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE        0x00080000
00888 
00889 #define CERT_TRUST_HAS_EXACT_MATCH_ISSUER            0x00000001
00890 #define CERT_TRUST_HAS_KEY_MATCH_ISSUER              0x00000002
00891 #define CERT_TRUST_HAS_NAME_MATCH_ISSUER             0x00000004
00892 #define CERT_TRUST_IS_SELF_SIGNED                    0x00000008
00893 
00894 #define CERT_TRUST_HAS_PREFERRED_ISSUER              0x00000100
00895 #define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY         0x00000200
00896 #define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS        0x00000400
00897 #define CERT_TRUST_IS_PEER_TRUSTED                   0x00000800
00898 #define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED         0x00001000
00899 
00900 #define CERT_TRUST_IS_COMPLEX_CHAIN                  0x00010000
00901 
00902 typedef struct _CERT_TRUST_STATUS {
00903     DWORD dwErrorStatus;
00904     DWORD dwInfoStatus;
00905 } CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
00906 
00907 typedef struct _CERT_CHAIN_ELEMENT {
00908     DWORD                 cbSize;
00909     PCCERT_CONTEXT        pCertContext;
00910     CERT_TRUST_STATUS     TrustStatus;
00911     PCERT_REVOCATION_INFO pRevocationInfo;
00912     PCERT_ENHKEY_USAGE    pIssuanceUsage;
00913     PCERT_ENHKEY_USAGE    pApplicationUsage;
00914     LPCWSTR               pwszExtendedErrorInfo;
00915 } CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
00916 
00917 typedef struct _CERT_SIMPLE_CHAIN {
00918     DWORD                 cbSize;
00919     CERT_TRUST_STATUS     TrustStatus;
00920     DWORD                 cElement;
00921     PCERT_CHAIN_ELEMENT  *rgpElement;
00922     PCERT_TRUST_LIST_INFO pTrustListInfo;
00923     BOOL                  fHasRevocationFreshnessTime;
00924     DWORD                 dwRevocationFreshnessTime;
00925 } CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
00926 
00927 typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
00928 typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;
00929 
00930 struct _CERT_CHAIN_CONTEXT {
00931     DWORD                 cbSize;
00932     CERT_TRUST_STATUS     TrustStatus;
00933     DWORD                 cChain;
00934     PCERT_SIMPLE_CHAIN   *rgpChain;
00935     DWORD                 cLowerQualityChainContext;
00936     PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext;
00937     BOOL                  fHasRevocationFreshnessTime;
00938     DWORD                 dwRevocationFreshnessTime;
00939 };
00940 
00941 typedef struct _CERT_CHAIN_POLICY_PARA {
00942     DWORD cbSize;
00943     DWORD dwFlags;
00944     void *pvExtraPolicyPara;
00945 } CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
00946 
00947 typedef struct _CERT_CHAIN_POLICY_STATUS {
00948     DWORD cbSize;
00949     DWORD dwError;
00950     LONG  lChainIndex;
00951     LONG  lElementIndex;
00952     void *pvExtraPolicyStatus;
00953 } CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;
00954 
00955 #define CERT_CHAIN_POLICY_BASE              ((LPCSTR)1)
00956 #define CERT_CHAIN_POLICY_AUTHENTICODE      ((LPCSTR)2)
00957 #define CERT_CHAIN_POLICY_AUTHENTICODE_TS   ((LPCSTR)3)
00958 #define CERT_CHAIN_POLICY_SSL               ((LPCSTR)4)
00959 #define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR)5)
00960 #define CERT_CHAIN_POLICY_NT_AUTH           ((LPCSTR)6)
00961 #define CERT_CHAIN_POLICY_MICROSOFT_ROOT    ((LPCSTR)7)
00962 
00963 #define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG            0x00000001
00964 #define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG        0x00000002
00965 #define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG           0x00000004
00966 #define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x00000008
00967 
00968 #define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS ( \
00969  CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG \
00970  CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG \
00971  CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG )
00972 
00973 #define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG                 0x00000010
00974 #define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG               0x00000020
00975 #define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG              0x00000040
00976 #define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG            0x00000080
00977 
00978 #define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG           0x00000100
00979 #define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG    0x00000200
00980 #define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG            0x00000400
00981 #define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG          0x00000800
00982 
00983 #define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS ( \
00984  CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG \
00985  CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG \
00986  CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG \
00987  CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG )
00988 
00989 #define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG                 0x00001000
00990 #define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x00002000
00991 #define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG                    0x00004000
00992 #define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG                    0x00008000
00993 #define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG   0x00010000
00994 
00995 typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
00996     DWORD             cbSize;
00997     DWORD             dwRegPolicySettings;
00998     PCMSG_SIGNER_INFO pSignerInfo;
00999 } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA,
01000  *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
01001 
01002 typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
01003     DWORD cbSize;
01004     BOOL  fCommercial;
01005 } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS,
01006  *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
01007 
01008 typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
01009     DWORD cbSize;
01010     DWORD dwRegPolicySettings;
01011     BOOL  fCommercial;
01012 } AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA,
01013  *PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;
01014 
01015 typedef struct _HTTPSPolicyCallbackData {
01016     union {
01017         DWORD cbStruct;
01018         DWORD cbSize;
01019     } DUMMYUNIONNAME;
01020     DWORD  dwAuthType;
01021     DWORD  fdwChecks;
01022     WCHAR *pwszServerName;
01023 } HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData,
01024  SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA;
01025 
01026 /* Values for HTTPSPolicyCallbackData's dwAuthType */
01027 #define AUTHTYPE_CLIENT 1
01028 #define AUTHTYPE_SERVER 2
01029 /* Values for HTTPSPolicyCallbackData's fdwChecks are defined in wininet.h */
01030 
01031 #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG         0x80000000
01032 #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000
01033 
01034 #define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000
01035 
01036 #define USAGE_MATCH_TYPE_AND 0x00000000
01037 #define USAGE_MATCH_TYPE_OR  0x00000001
01038 
01039 typedef struct _CERT_USAGE_MATCH {
01040     DWORD             dwType;
01041     CERT_ENHKEY_USAGE Usage;
01042 } CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
01043 
01044 typedef struct _CTL_USAGE_MATCH {
01045     DWORD     dwType;
01046     CTL_USAGE Usage;
01047 } CTL_USAGE_MATCH, *PCTL_USAGE_MATCH;
01048 
01049 #define CERT_CHAIN_REVOCATION_CHECK_END_CERT           0x10000000
01050 #define CERT_CHAIN_REVOCATION_CHECK_CHAIN              0x20000000
01051 #define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000
01052 #define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY         0x80000000
01053 
01054 #define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT     0x08000000
01055 
01056 #define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING     0x00000040
01057 #define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS       0x00000080
01058 #define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE       0x00000100
01059 #define CERT_CHAIN_TIMESTAMP_TIME                      0x00000200
01060 
01061 typedef struct _CERT_CHAIN_PARA {
01062     DWORD            cbSize;
01063     CERT_USAGE_MATCH RequestedUsage;
01064 #ifdef CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
01065     CERT_USAGE_MATCH RequestedIssuancePolicy;
01066     DWORD            dwUrlRetrievalTimeout;
01067     BOOL             fCheckRevocationFreshnessTime;
01068     DWORD            dwRevocationFreshnessTime;
01069     LPFILETIME       pftCacheResync;
01070 #endif
01071 } CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;
01072 
01073 typedef struct _CERT_SYSTEM_STORE_INFO {
01074     DWORD cbSize;
01075 } CERT_SYSTEM_STORE_INFO, *PCERT_SYSTEM_STORE_INFO;
01076 
01077 typedef struct _CERT_PHYSICAL_STORE_INFO {
01078     DWORD           cbSize;
01079     LPSTR           pszOpenStoreProvider;
01080     DWORD           dwOpenEncodingType;
01081     DWORD           dwOpenFlags;
01082     CRYPT_DATA_BLOB OpenParameters;
01083     DWORD           dwFlags;
01084     DWORD           dwPriority;
01085 } CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO;
01086 
01087 typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {
01088     union {
01089         HKEY  hKeyBase;
01090         VOID *pvBase;
01091     } DUMMYUNIONNAME;
01092     union {
01093         void   *pvSystemStore;
01094         LPCSTR  pszSystemStore;
01095         LPCWSTR pwszSystemStore;
01096     } DUMMYUNIONNAME2;
01097 } CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA;
01098 
01099 typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(
01100  LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg);
01101 
01102 typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore,
01103  DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved,
01104  void *pvArg);
01105 
01106 typedef BOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore,
01107  DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo,
01108  void *pvReserved, void *pvArg);
01109 
01110 /* Encode/decode object */
01111 typedef LPVOID (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize);
01112 typedef VOID   (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);
01113 
01114 typedef struct _CRYPT_ENCODE_PARA {
01115     DWORD           cbSize;
01116     PFN_CRYPT_ALLOC pfnAlloc;
01117     PFN_CRYPT_FREE  pfnFree;
01118 } CRYPT_ENCODE_PARA, *PCRYPT_ENCODE_PARA;
01119 
01120 typedef struct _CRYPT_DECODE_PARA {
01121     DWORD           cbSize;
01122     PFN_CRYPT_ALLOC pfnAlloc;
01123     PFN_CRYPT_FREE  pfnFree;
01124 } CRYPT_DECODE_PARA, *PCRYPT_DECODE_PARA;
01125 
01126 typedef struct _CERT_STORE_PROV_INFO {
01127     DWORD             cbSize;
01128     DWORD             cStoreProvFunc;
01129     void            **rgpvStoreProvFunc;
01130     HCERTSTOREPROV    hStoreProv;
01131     DWORD             dwStoreProvFlags;
01132     HCRYPTOIDFUNCADDR hStoreProvFuncAddr2;
01133 } CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO;
01134 
01135 typedef BOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(
01136  LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv,
01137  DWORD dwFlags, const void *pvPara, HCERTSTORE hCertStore,
01138  PCERT_STORE_PROV_INFO pStoreProvInfo);
01139 
01140 typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE)(HCERTSTOREPROV hStoreProv,
01141  DWORD dwFlags);
01142 
01143 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(HCERTSTOREPROV hStoreProv,
01144  PCCERT_CONTEXT pStoreCertContext, DWORD dwFlags,
01145  PCCERT_CONTEXT *ppProvCertContext);
01146 
01147 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(HCERTSTOREPROV hStoreProv,
01148  PCCERT_CONTEXT pCertContext, DWORD dwFlags);
01149 
01150 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)(
01151  HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags);
01152 
01153 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)(
01154  HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,
01155  DWORD dwFlags, const void *pvData);
01156 
01157 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(HCERTSTOREPROV hStoreProv,
01158  PCCRL_CONTEXT pStoreCrlContext, DWORD dwFlags,
01159  PCCRL_CONTEXT *ppProvCrlContext);
01160 
01161 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(HCERTSTOREPROV hStoreProv,
01162  PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
01163 
01164 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(HCERTSTOREPROV hStoreProv,
01165  PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
01166 
01167 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)(
01168  HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,
01169  DWORD dwFlags, const void *pvData);
01170 
01171 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(HCERTSTOREPROV hStoreProv,
01172  PCCTL_CONTEXT pStoreCtlContext, DWORD dwFlags,
01173  PCCTL_CONTEXT *ppProvCtlContext);
01174 
01175 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(HCERTSTOREPROV hStoreProv,
01176  PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
01177 
01178 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)(
01179  HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
01180 
01181 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)(
01182  HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,
01183  DWORD dwFlags, const void *pvData);
01184 
01185 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL)(HCERTSTOREPROV hStoreProv,
01186  DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
01187 
01188 typedef struct _CERT_STORE_PROV_FIND_INFO {
01189     DWORD       cbSize;
01190     DWORD       dwMsgAndCertEncodingType;
01191     DWORD       dwFindFlags;
01192     DWORD       dwFindType;
01193     const void *pvFindPara;
01194 } CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO;
01195 typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,
01196  *PCCERT_STORE_PROV_FIND_INFO;
01197 
01198 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv,
01199  PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCERT_CONTEXT pPrevCertContext,
01200  DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext);
01201 
01202 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(
01203  HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext,
01204  void *pvStoreProvFindInfo, DWORD dwFlags);
01205 
01206 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(
01207  HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,
01208  DWORD dwFlags, void *pvData, DWORD *pcbData);
01209 
01210 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(HCERTSTOREPROV hStoreProv,
01211  PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCRL_CONTEXT pPrevCrlContext,
01212  DWORD dwFlags, void **ppvStoreProvFindInfo, PCCRL_CONTEXT *ppProvCrlContext);
01213 
01214 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)(
01215  HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext,
01216  void *pvStoreProvFindInfo, DWORD dwFlags);
01217 
01218 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)(
01219  HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,
01220  DWORD dwFlags, void *pvData, DWORD *pcbData);
01221 
01222 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(HCERTSTOREPROV hStoreProv,
01223  PCCTL_CONTEXT pCtlContext, void *pvStoreProvFindInfo, DWORD dwFlags);
01224 
01225 typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(
01226  HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,
01227  DWORD dwFlags, void *pvData);
01228 
01229 typedef struct _CERT_CREATE_CONTEXT_PARA {
01230     DWORD          cbSize;
01231     PFN_CRYPT_FREE pfnFree;
01232     void          *pvFree;
01233 } CERT_CREATE_CONTEXT_PARA, *PCERT_CREATE_CONTEXT_PARA;
01234 
01235 typedef struct _CRYPT_OID_FUNC_ENTRY {
01236     LPCSTR pszOID;
01237     void  *pvFuncAddr;
01238 } CRYPT_OID_FUNC_ENTRY, *PCRYPT_OID_FUNC_ENTRY;
01239 
01240 typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType,
01241  LPCSTR pszFuncName, LPCSTR pszOID, DWORD cValue, const DWORD rgdwValueType[],
01242  LPCWSTR const rgpwszValueName[], const BYTE * const rgpbValueData[],
01243  const DWORD rgcbValueData[], void *pvArg);
01244 
01245 #define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff
01246 
01247 typedef struct _CRYPT_OID_INFO {
01248     DWORD   cbSize;
01249     LPCSTR  pszOID;
01250     LPCWSTR pwszName;
01251     DWORD   dwGroupId;
01252     union {
01253         DWORD  dwValue;
01254         ALG_ID Algid;
01255         DWORD  dwLength;
01256     } DUMMYUNIONNAME;
01257     CRYPT_DATA_BLOB ExtraInfo;
01258 } CRYPT_OID_INFO, *PCRYPT_OID_INFO;
01259 typedef const CRYPT_OID_INFO CCRYPT_OID_INFO, *PCCRYPT_OID_INFO;
01260 
01261 typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo,
01262  void *pvArg);
01263 
01264 typedef struct _CRYPT_SIGN_MESSAGE_PARA {
01265     DWORD                      cbSize;
01266     DWORD                      dwMsgEncodingType;
01267     PCCERT_CONTEXT             pSigningCert;
01268     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
01269     void *                     pvHashAuxInfo;
01270     DWORD                      cMsgCert;
01271     PCCERT_CONTEXT            *rgpMsgCert;
01272     DWORD                      cMsgCrl;
01273     PCCRL_CONTEXT             *rgpMsgCrl;
01274     DWORD                      cAuthAttr;
01275     PCRYPT_ATTRIBUTE           rgAuthAttr;
01276     DWORD                      cUnauthAttr;
01277     PCRYPT_ATTRIBUTE           rgUnauthAttr;
01278     DWORD                      dwFlags;
01279     DWORD                      dwInnerContentType;
01280 #ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS
01281     CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
01282     void *                     pvHashEncryptionAuxInfo;
01283 #endif
01284 } CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA;
01285 
01286 #define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG         0x00000001
01287 #define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x00000002
01288 #define CRYPT_MESSAGE_KEYID_SIGNER_FLAG             0x00000004
01289 #define CRYPT_MESSAGE_SILENT_KEYSET_FLAG            0x00000008
01290 
01291 typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(void *pvArg,
01292  DWORD dwCertEncodingType, PCERT_INFO pSignerId, HCERTSTORE hMsgCertStore);
01293 
01294 typedef struct _CRYPT_VERIFY_MESSAGE_PARA {
01295     DWORD                            cbSize;
01296     DWORD                            dwMsgAndCertEncodingType;
01297     HCRYPTPROV_LEGACY                hCryptProv;
01298     PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate;
01299     void *                           pvGetArg;
01300 } CRYPT_VERIFY_MESSAGE_PARA, *PCRYPT_VERIFY_MESSAGE_PARA;
01301 
01302 typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
01303     DWORD                      cbSize;
01304     DWORD                      dwMsgEncodingType;
01305     HCRYPTPROV_LEGACY          hCryptProv;
01306     CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
01307     void *                     pvEncryptionAuxInfo;
01308     DWORD                      dwFlags;
01309     DWORD                      dwInnerContentType;
01310 } CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA;
01311 
01312 #define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x00000004
01313 
01314 typedef struct _CRYPT_DECRYPT_MESSAGE_PARA {
01315     DWORD       cbSize;
01316     DWORD       dwMsgAndCertEncodingType;
01317     DWORD       cCertStore;
01318     HCERTSTORE *rghCertStore;
01319 #ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS
01320     DWORD       dwFlags;
01321 #endif
01322 } CRYPT_DECRYPT_MESSAGE_PARA, *PCRYPT_DECRYPT_MESSAGE_PARA;
01323 
01324 typedef struct _CRYPT_HASH_MESSAGE_PARA {
01325     DWORD                      cbSize;
01326     DWORD                      dwMsgEncodingType;
01327     HCRYPTPROV_LEGACY          hCryptProv;
01328     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
01329     void *                     pvHashAuxInfo;
01330 } CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA;
01331 
01332 typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {
01333     DWORD                      cbSize;
01334     DWORD                      dwMsgAndCertEncodingType;
01335     HCRYPTPROV                 hCryptProv;
01336     DWORD                      dwKeySpec;
01337     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
01338     void *                     pvHashAuxInfo;
01339 } CRYPT_KEY_SIGN_MESSAGE_PARA, *PCRYPT_KEY_SIGN_MESSAGE_PARA;
01340 
01341 typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {
01342     DWORD      cbSize;
01343     DWORD      dwMsgEncodingType;
01344     HCRYPTPROV_LEGACY hCryptProv;
01345 } CRYPT_KEY_VERIFY_MESSAGE_PARA, *PCRYPT_KEY_VERIFY_MESSAGE_PARA;
01346 
01347 typedef struct _CRYPT_URL_ARRAY {
01348     DWORD   cUrl;
01349     LPWSTR *rgwszUrl;
01350 } CRYPT_URL_ARRAY, *PCRYPT_URL_ARRAY;
01351 
01352 typedef struct _CRYPT_URL_INFO {
01353     DWORD  cbSize;
01354     DWORD  dwSyncDeltaTime;
01355     DWORD  cGroup;
01356     DWORD *rgcGroupEntry;
01357 } CRYPT_URL_INFO, *PCRYPT_URL_INFO;
01358 
01359 #define URL_OID_CERTIFICATE_ISSUER                  ((LPCSTR)1)
01360 #define URL_OID_CERTIFICATE_CRL_DIST_POINT          ((LPCSTR)2)
01361 #define URL_OID_CTL_ISSUER                          ((LPCSTR)3)
01362 #define URL_OID_CTL_NEXT_UPDATE                     ((LPCSTR)4)
01363 #define URL_OID_CRL_ISSUER                          ((LPCSTR)5)
01364 #define URL_OID_CERTIFICATE_FRESHEST_CRL            ((LPCSTR)6)
01365 #define URL_OID_CRL_FRESHEST_CRL                    ((LPCSTR)7)
01366 #define URL_OID_CROSS_CERT_DIST_POINT               ((LPCSTR)8)
01367 #define URL_OID_CERTIFICATE_OCSP                    ((LPCSTR)9)
01368 #define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT ((LPCSTR)10)
01369 #define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP ((LPCSTR)11)
01370 #define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS      ((LPCSTR)12)
01371 
01372 #define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
01373 
01374 typedef HANDLE HCRYPTASYNC, *PHCRYPTASYNC;
01375 
01376 typedef void (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid,
01377  LPVOID pvParam);
01378 
01379 #define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1)
01380 #define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL     ((LPCSTR)2)
01381 
01382 typedef void (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)(
01383  void *pvCompletion, DWORD dwCompletionCode, LPCSTR pszURL, LPSTR pszObjectOid,
01384  void *pvObject);
01385 
01386 typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION
01387 {
01388     PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;
01389     void                                     *pvCompletion;
01390 } CRYPT_ASYNC_RETRIEVAL_COMPLETION, *PCRYPT_ASYNC_RETRIEVAL_COMPLETION;
01391 
01392 typedef BOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)(
01393  HCRYPTASYNC hAsyncRetrieve);
01394 
01395 typedef struct _CRYPT_BLOB_ARRAY
01396 {
01397     DWORD            cBlob;
01398     PCRYPT_DATA_BLOB rgBlob;
01399 } CRYPT_BLOB_ARRAY, *PCRYPT_BLOB_ARRAY;
01400 
01401 typedef struct _CRYPT_CREDENTIALS {
01402     DWORD  cbSize;
01403     LPCSTR pszCredentialsOid;
01404     LPVOID pvCredentials;
01405 } CRYPT_CREDENTIALS, *PCRYPT_CREDENTIALS;
01406 
01407 #define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A ((LPCSTR)1)
01408 #define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W ((LPCSTR)2)
01409 #define CREDENTIAL_OID_PASSWORD_CREDENTIALS \
01410  WINELIB_NAME_AW(CREDENTIAL_OID_PASSWORD_CREDENTIALS_)
01411 
01412 typedef struct _CRYPT_PASSWORD_CREDENTIALSA {
01413     DWORD cbSize;
01414     LPSTR pszUsername;
01415     LPSTR pszPassword;
01416 } CRYPT_PASSWORD_CREDENTIALSA, *PCRYPT_PASSWORD_CREDENTIALSA;
01417 
01418 typedef struct _CRYPT_PASSWORD_CREDENTIALSW {
01419     DWORD  cbSize;
01420     LPWSTR pszUsername;
01421     LPWSTR pszPassword;
01422 } CRYPT_PASSWORD_CREDENTIALSW, *PCRYPT_PASSWORD_CREDENTIALSW;
01423 #define CRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(CRYPT_PASSWORD_CREDENTIALS)
01424 #define PCRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(PCRYPT_PASSWORD_CREDENTIALS)
01425 
01426 typedef struct _CRYPT_RETRIEVE_AUX_INFO {
01427     DWORD     cbSize;
01428     FILETIME *pLastSyncTime;
01429     DWORD     dwMaxUrlRetrievalByteCount;
01430 } CRYPT_RETRIEVE_AUX_INFO, *PCRYPT_RETRIEVE_AUX_INFO;
01431 
01432 typedef void (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid,
01433  PCRYPT_BLOB_ARRAY pObject, void *pvFreeContext);
01434 
01435 #define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC \
01436  "SchemeDllRetrieveEncodedObject"
01437 #define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC \
01438  "SchemeDllRetrieveEncodedObjectW"
01439 /* The signature of SchemeDllRetrieveEncodedObjectW is:
01440 BOOL WINAPI SchemeDllRetrieveEncodedObjectW(LPCWSTR pwszUrl,
01441  LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout,
01442  PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject,
01443  void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve,
01444  PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
01445  */
01446 
01447 #define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext"
01448 /* The signature of ContextDllCreateObjectContext is:
01449 BOOL WINAPI ContextDllCreateObjectContext(LPCSTR pszObjectOid,
01450  DWORD dwRetrievalFlags, PCRYPT_BLOB_ARRAY pObject, void **ppvContxt);
01451  */
01452 
01453 #define CONTEXT_OID_CERTIFICATE ((LPCSTR)1)
01454 #define CONTEXT_OID_CRL         ((LPCSTR)2)
01455 #define CONTEXT_OID_CTL         ((LPCSTR)3)
01456 #define CONTEXT_OID_PKCS7       ((LPCSTR)4)
01457 #define CONTEXT_OID_CAPI2_ANY   ((LPCSTR)5)
01458 
01459 #define CRYPT_RETRIEVE_MULTIPLE_OBJECTS      0x00000001
01460 #define CRYPT_CACHE_ONLY_RETRIEVAL           0x00000002
01461 #define CRYPT_WIRE_ONLY_RETRIEVAL            0x00000004
01462 #define CRYPT_DONT_CACHE_RESULT              0x00000008
01463 #define CRYPT_ASYNC_RETRIEVAL                0x00000010
01464 #define CRYPT_STICKY_CACHE_RETRIEVAL         0x00001000
01465 #define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x00002000
01466 #define CRYPT_OFFLINE_CHECK_RETRIEVAL        0x00004000
01467 #define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE    0x00008000
01468 #define CRYPT_LDAP_SIGN_RETRIEVAL            0x00010000
01469 #define CRYPT_NO_AUTH_RETRIEVAL              0x00020000
01470 #define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL  0x00040000
01471 #define CRYPT_AIA_RETRIEVAL                  0x00080000
01472 
01473 #define CRYPT_VERIFY_CONTEXT_SIGNATURE      0x00000020
01474 #define CRYPT_VERIFY_DATA_HASH              0x00000040
01475 #define CRYPT_KEEP_TIME_VALID               0x00000080
01476 #define CRYPT_DONT_VERIFY_SIGNATURE         0x00000100
01477 #define CRYPT_DONT_CHECK_TIME_VALIDITY      0x00000200
01478 #define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x00000400
01479 #define CRYPT_ACCUMULATIVE_TIMEOUT          0x00000800
01480 
01481 typedef BOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(DWORD dwFlags, void *pvArg);
01482 
01483 typedef struct _CERT_CRL_CONTEXT_PAIR
01484 {
01485     PCCERT_CONTEXT pCertContext;
01486     PCCRL_CONTEXT  pCrlContext;
01487 } CERT_CRL_CONTEXT_PAIR, *PCERT_CRL_CONTEXT_PAIR;
01488 typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
01489 
01490 #define TIME_VALID_OID_GET_OBJECT_FUNC   "TimeValidDllGetObject"
01491 
01492 #define TIME_VALID_OID_GET_CTL                    ((LPCSTR)1)
01493 #define TIME_VALID_OID_GET_CRL                    ((LPCSTR)2)
01494 #define TIME_VALID_OID_GET_CRL_FROM_CERT          ((LPCSTR)3)
01495 #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
01496 #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL  ((LPCSTR)5)
01497 
01498 #define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject"
01499 
01500 #define TIME_VALID_OID_FLUSH_CTL                    ((LPCSTR)1)
01501 #define TIME_VALID_OID_FLUSH_CRL                    ((LPCSTR)2)
01502 #define TIME_VALID_OID_FLUSH_CRL_FROM_CERT          ((LPCSTR)3)
01503 #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
01504 #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL  ((LPCSTR)5)
01505 
01506 /* OID group IDs */
01507 #define CRYPT_HASH_ALG_OID_GROUP_ID     1
01508 #define CRYPT_ENCRYPT_ALG_OID_GROUP_ID  2
01509 #define CRYPT_PUBKEY_ALG_OID_GROUP_ID   3
01510 #define CRYPT_SIGN_ALG_OID_GROUP_ID     4
01511 #define CRYPT_RDN_ATTR_OID_GROUP_ID     5
01512 #define CRYPT_EXT_OR_ATTR_OID_GROUP_ID  6
01513 #define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7
01514 #define CRYPT_POLICY_OID_GROUP_ID       8
01515 #define CRYPT_TEMPLATE_OID_GROUP_ID     9
01516 #define CRYPT_LAST_OID_GROUP_ID         9
01517 
01518 #define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID
01519 #define CRYPT_LAST_ALG_OID_GROUP_ID  CRYPT_SIGN_ALG_OID_GROUP_ID
01520 
01521 #define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG  0x1
01522 #define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2
01523 #define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG    0x4
01524 
01525 #define CRYPT_OID_INFO_OID_KEY   1
01526 #define CRYPT_OID_INFO_NAME_KEY  2
01527 #define CRYPT_OID_INFO_ALGID_KEY 3
01528 #define CRYPT_OID_INFO_SIGN_KEY  4
01529 
01530 /* Algorithm IDs */
01531 
01532 #define GET_ALG_CLASS(x)                (x & (7 << 13))
01533 #define GET_ALG_TYPE(x)                 (x & (15 << 9))
01534 #define GET_ALG_SID(x)                  (x & (511))
01535 
01536 /* Algorithm Classes */
01537 #define ALG_CLASS_ANY                   (0)
01538 #define ALG_CLASS_SIGNATURE             (1 << 13)
01539 #define ALG_CLASS_MSG_ENCRYPT           (2 << 13)
01540 #define ALG_CLASS_DATA_ENCRYPT          (3 << 13)
01541 #define ALG_CLASS_HASH                  (4 << 13)
01542 #define ALG_CLASS_KEY_EXCHANGE          (5 << 13)
01543 #define ALG_CLASS_ALL                   (7 << 13)
01544 /* Algorithm types */
01545 #define ALG_TYPE_ANY                    (0)
01546 #define ALG_TYPE_DSS                    (1 << 9)
01547 #define ALG_TYPE_RSA                    (2 << 9)
01548 #define ALG_TYPE_BLOCK                  (3 << 9)
01549 #define ALG_TYPE_STREAM                 (4 << 9)
01550 #define ALG_TYPE_DH                     (5 << 9)
01551 #define ALG_TYPE_SECURECHANNEL          (6 << 9)
01552 
01553 /* SIDs */
01554 #define ALG_SID_ANY                     (0)
01555 /* RSA SIDs */
01556 #define ALG_SID_RSA_ANY                 0
01557 #define ALG_SID_RSA_PKCS                1
01558 #define ALG_SID_RSA_MSATWORK            2
01559 #define ALG_SID_RSA_ENTRUST             3
01560 #define ALG_SID_RSA_PGP                 4
01561 /* DSS SIDs */
01562 #define ALG_SID_DSS_ANY                 0
01563 #define ALG_SID_DSS_PKCS                1
01564 #define ALG_SID_DSS_DMS                 2
01565 
01566 /* DES SIDs */
01567 #define ALG_SID_DES                     1
01568 #define ALG_SID_3DES                    3
01569 #define ALG_SID_DESX                    4
01570 #define ALG_SID_IDEA                    5
01571 #define ALG_SID_CAST                    6
01572 #define ALG_SID_SAFERSK64               7
01573 #define ALG_SID_SAFERSK128              8
01574 #define ALG_SID_3DES_112                9
01575 #define ALG_SID_CYLINK_MEK             12
01576 #define ALG_SID_RC5                    13
01577 #define ALG_SID_AES_128                14
01578 #define ALG_SID_AES_192                15
01579 #define ALG_SID_AES_256                16
01580 #define ALG_SID_AES                    17
01581 /* Diffie-Hellmans SIDs */
01582 #define ALG_SID_DH_SANDF                1
01583 #define ALG_SID_DH_EPHEM                2
01584 #define ALG_SID_AGREED_KEY_ANY          3
01585 #define ALG_SID_KEA                     4
01586 /* RC2 SIDs */
01587 #define ALG_SID_RC4                     1
01588 #define ALG_SID_RC2                     2
01589 #define ALG_SID_SEAL                    2
01590 /* Hash SIDs */
01591 #define ALG_SID_MD2                     1
01592 #define ALG_SID_MD4                     2
01593 #define ALG_SID_MD5                     3
01594 #define ALG_SID_SHA                     4
01595 #define ALG_SID_SHA1                    ALG_SID_SHA
01596 #define ALG_SID_MAC                     5
01597 #define ALG_SID_RIPEMD                  6
01598 #define ALG_SID_RIPEMD160               7
01599 #define ALG_SID_SSL3SHAMD5              8
01600 #define ALG_SID_HMAC                    9
01601 #define ALG_SID_TLS1PRF                10
01602 #define ALG_SID_HASH_REPLACE_OWF       11
01603 #define ALG_SID_SHA_256                12
01604 #define ALG_SID_SHA_384                13
01605 #define ALG_SID_SHA_512                14
01606 /* SCHANNEL SIDs */
01607 #define ALG_SID_SSL3_MASTER             1
01608 #define ALG_SID_SCHANNEL_MASTER_HASH    2
01609 #define ALG_SID_SCHANNEL_MAC_KEY        3
01610 #define ALG_SID_PCT1_MASTER             4
01611 #define ALG_SID_SSL2_MASTER             5
01612 #define ALG_SID_TLS1_MASTER             6
01613 #define ALG_SID_SCHANNEL_ENC_KEY        7
01614 #define ALG_SID_EXAMPLE                80
01615 
01616 /* Algorithm Definitions */
01617 #define CALG_MD2                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MD2)
01618 #define CALG_MD4                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MD4)
01619 #define CALG_MD5                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MD5)
01620 #define CALG_SHA                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA)
01621 #define CALG_SHA1 CALG_SHA
01622 #define CALG_MAC                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MAC)
01623 #define CALG_SSL3_SHAMD5          (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SSL3SHAMD5)
01624 #define CALG_HMAC                 (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_HMAC)
01625 #define CALG_TLS1PRF              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_TLS1PRF)
01626 #define CALG_HASH_REPLACE_OWF     (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_HASH_REPLACE_OWF)
01627 #define CALG_SHA_256              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA_256)
01628 #define CALG_SHA_384              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA_384)
01629 #define CALG_SHA_512              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA_512)
01630 #define CALG_RSA_SIGN             (ALG_CLASS_SIGNATURE    | ALG_TYPE_RSA           | ALG_SID_RSA_ANY)
01631 #define CALG_DSS_SIGN             (ALG_CLASS_SIGNATURE    | ALG_TYPE_DSS           | ALG_SID_DSS_ANY)
01632 #define CALG_NO_SIGN              (ALG_CLASS_SIGNATURE    | ALG_TYPE_ANY           | ALG_SID_ANY)
01633 #define CALG_DH_SF                (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_DH_SANDF)
01634 #define CALG_DH_EPHEM             (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_DH_EPHEM)
01635 #define CALG_RSA_KEYX             (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA           | ALG_SID_RSA_ANY)
01636 #define CALG_DES                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_DES)
01637 #define CALG_RC2                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_RC2)
01638 #define CALG_3DES                 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_3DES)
01639 #define CALG_3DES_112             (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_3DES_112)
01640 #define CALG_AES_128              (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES_128)
01641 #define CALG_AES_192              (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES_192)
01642 #define CALG_AES_256              (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES_256)
01643 #define CALG_AES                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES)
01644 #define CALG_RC4                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM        | ALG_SID_RC4)
01645 #define CALG_SEAL                 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM        | ALG_SID_SEAL)
01646 #define CALG_RC5                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM        | ALG_SID_RC5)
01647 #define CALG_SSL3_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER)
01648 #define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH)
01649 #define CALG_SCHANNEL_MAC_KEY     (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY)
01650 #define CALG_SCHANNEL_ENC_KEY     (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY)
01651 #define CALG_PCT1_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_PCT1_MASTER)
01652 #define CALG_SSL2_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL2_MASTER)
01653 #define CALG_TLS1_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_TLS1_MASTER)
01654 
01655 
01656 /* Protocol Flags */
01657 #define CRYPT_FLAG_PCT1    0x0001
01658 #define CRYPT_FLAG_SSL2    0x0002
01659 #define CRYPT_FLAG_SSL3    0x0004
01660 #define CRYPT_FLAG_TLS1    0x0008
01661 #define CRYPT_FLAG_IPSEC   0x0010
01662 #define CRYPT_FLAG_SIGNING 0x0020
01663 
01664 /* Provider names */
01665 #define MS_DEF_PROV_A                            "Microsoft Base Cryptographic Provider v1.0"
01666 #if defined(__GNUC__)
01667 # define MS_DEF_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01668     'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
01669     'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
01670 #elif defined(_MSC_VER)
01671 # define MS_DEF_PROV_W      L"Microsoft Base Cryptographic Provider v1.0"
01672 #else
01673 static const WCHAR MS_DEF_PROV_W[] =             { 'M','i','c','r','o','s','o','f','t',' ',
01674     'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
01675     'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
01676 #endif
01677 #define MS_DEF_PROV                              WINELIB_NAME_AW(MS_DEF_PROV_)
01678 
01679 #define MS_ENHANCED_PROV_A                       "Microsoft Enhanced Cryptographic Provider v1.0"
01680 #if defined(__GNUC__)
01681 # define MS_ENHANCED_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01682     'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
01683     'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
01684 #elif defined(_MSC_VER)
01685 # define MS_ENHANCED_PROV_W     L"Microsoft Enhanced Cryptographic Provider v1.0"
01686 #else
01687 static const WCHAR MS_ENHANCED_PROV_W[] =        { 'M','i','c','r','o','s','o','f','t',' ',
01688     'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
01689     'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
01690 #endif
01691 #define MS_ENHANCED_PROV                         WINELIB_NAME_AW(MS_ENHANCED_PROV_)
01692 
01693 #define MS_STRONG_PROV_A                         "Microsoft Strong Cryptographic Provider"
01694 #if defined(__GNUC__)
01695 # define MS_STRONG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01696     'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
01697     'P','r','o','v','i','d','e','r',0 }
01698 #elif defined(_MSC_VER)
01699 # define MS_STRONG_PROV_W     L"Microsoft Strong Cryptographic Provider"
01700 #else
01701 static const WCHAR MS_STRONG_PROV_W[] =          { 'M','i','c','r','o','s','o','f','t',' ',
01702     'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
01703     'P','r','o','v','i','d','e','r',0 };
01704 #endif
01705 #define MS_STRONG_PROV                           WINELIB_NAME_AW(MS_STRONG_PROV_)
01706 
01707 #define MS_DEF_RSA_SIG_PROV_A                    "Microsoft RSA Signature Cryptographic Provider"
01708 #if defined(__GNUC__)
01709 # define MS_DEF_RSA_SIG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01710     'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ', \
01711     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
01712 #elif defined(_MSC_VER)
01713 # define MS_DEF_RSA_SIG_PROV_W      L"Microsoft RSA Signature Cryptographic Provider"
01714 #else
01715 static const WCHAR MS_DEF_RSA_SIG_PROV_W[] =     { 'M','i','c','r','o','s','o','f','t',' ',
01716     'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ',
01717     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
01718 #endif
01719 #define MS_DEF_RSA_SIG_PROV                      WINELIB_NAME_AW(MS_DEF_RSA_SIG_PROV_)
01720 
01721 #define MS_DEF_RSA_SCHANNEL_PROV_A               "Microsoft RSA SChannel Cryptographic Provider"
01722 #if defined(__GNUC__)
01723 # define MS_DEF_RSA_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01724     'R','S','A',' ','S','C','h','a','n','n','e','l',' ', \
01725     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
01726 #elif defined(_MSC_VER)
01727 # define MS_DEF_RSA_SCHANNEL_PROV_W     L"Microsoft RSA SChannel Cryptographic Provider"
01728 #else
01729 static const WCHAR MS_DEF_RSA_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
01730     'R','S','A',' ','S','C','h','a','n','n','e','l',' ',
01731     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
01732 #endif
01733 #define MS_DEF_RSA_SCHANNEL_PROV                 WINELIB_NAME_AW(MS_DEF_RSA_SCHANNEL_PROV_)
01734 
01735 #define MS_DEF_DSS_PROV_A                        "Microsoft Base DSS Cryptographic Provider"
01736 #if defined(__GNUC__)
01737 # define MS_DEF_DSS_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01738     'B','a','s','e',' ','D','S','S',' ', \
01739     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
01740 #elif defined(_MSC_VER)
01741 # define MS_DEF_DSS_PROV_W     L"Microsoft Base DSS Cryptographic Provider"
01742 #else
01743 static const WCHAR MS_DEF_DSS_PROV_W[] =         { 'M','i','c','r','o','s','o','f','t',' ',
01744     'B','a','s','e',' ','D','S','S',' ',
01745     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
01746 #endif
01747 #define MS_DEF_DSS_PROV                          WINELIB_NAME_AW(MS_DEF_DSS_PROV_)
01748 
01749 #define MS_DEF_DSS_DH_PROV_A                     "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
01750 #if defined(__GNUC__)
01751 # define MS_DEF_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01752     'B','a','s','e',' ','D','S','S',' ','a','n','d',' ', \
01753     'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
01754     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
01755 #elif defined(_MSC_VER)
01756 # define MS_DEF_DSS_DH_PROV_W     L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
01757 #else
01758 static const WCHAR MS_DEF_DSS_DH_PROV_W[] =      { 'M','i','c','r','o','s','o','f','t',' ',
01759     'B','a','s','e',' ','D','S','S',' ','a','n','d',' ',
01760     'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
01761     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
01762 #endif
01763 #define MS_DEF_DSS_DH_PROV                       WINELIB_NAME_AW(MS_DEF_DSS_DH_PROV_)
01764 
01765 #define MS_ENH_DSS_DH_PROV_A                     "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
01766 #if defined(__GNUC__)
01767 # define MS_ENH_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01768     'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ', \
01769     'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
01770     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
01771 #elif defined(_MSC_VER)
01772 # define MS_ENH_DSS_DH_PROV_W     L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
01773 #else
01774 static const WCHAR MS_ENH_DSS_DH_PROV_W[] =      { 'M','i','c','r','o','s','o','f','t',' ',
01775     'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ',
01776     'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
01777     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
01778 #endif
01779 #define MS_ENH_DSS_DH_PROV                       WINELIB_NAME_AW(MS_ENH_DSS_DH_PROV_)
01780 
01781 #define MS_DEF_DH_SCHANNEL_PROV_A                "Microsoft DH SChannel Cryptographic Provider"
01782 #if defined(__GNUC__)
01783 # define MS_DEF_DH_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01784     'D','H',' ','S','C','h','a','n','n','e','l',' ', \
01785     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
01786 #elif defined(_MSC_VER)
01787 # define MS_DEF_DH_SCHANNEL_PROV_W     L"Microsoft DH SChannel Cryptographic Provider"
01788 #else
01789 static const WCHAR MS_DEF_DH_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
01790     'D','H',' ','S','C','h','a','n','n','e','l',' ',
01791     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
01792 #endif
01793 #define MS_DEF_DH_SCHANNEL_PROV                  WINELIB_NAME_AW(MS_DEF_DH_SCHANNEL_PROV_)
01794 
01795 #define MS_SCARD_PROV_A                          "Microsoft Base Smart Card Cryptographic Provider"
01796 #if defined(__GNUC__)
01797 # define MS_SCARD_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01798     'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ', \
01799     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
01800 #elif defined(_MSC_VER)
01801 # define MS_SCARD_PROV_W     L"Microsoft Base Smart Card Cryptographic Provider"
01802 #else
01803 static const WCHAR MS_SCARD_PROV_W[] =           { 'M','i','c','r','o','s','o','f','t',' ',
01804     'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ',
01805     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
01806 #endif
01807 #define MS_SCARD_PROV                            WINELIB_NAME_AW(MS_SCARD_PROV_)
01808 
01809 #define MS_ENH_RSA_AES_PROV_A                          "Microsoft Enhanced RSA and AES Cryptographic Provider"
01810 #if defined(__GNUC__)
01811 # define MS_ENH_RSA_AES_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
01812     'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\
01813     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
01814 #elif defined(_MSC_VER)
01815 # define MS_ENH_RSA_AES_PROV_W     L"Microsoft Enhanced RSA and AES Cryptographic Provider"
01816 #else
01817 static const WCHAR MS_ENH_RSA_AES_PROV_W[] =           { 'M','i','c','r','o','s','o','f','t',' ',
01818     'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',
01819     'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
01820 #endif
01821 #define MS_ENH_RSA_AES_PROV                            WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_)
01822 
01823 /* Key Specs*/
01824 #define AT_KEYEXCHANGE          1
01825 #define AT_SIGNATURE            2
01826 
01827 /* Provider Types */
01828 #define PROV_RSA_FULL             1
01829 #define PROV_RSA_SIG              2
01830 #define PROV_DSS                  3
01831 #define PROV_FORTEZZA             4
01832 #define PROV_MS_EXCHANGE          5
01833 #define PROV_SSL                  6
01834 #define PROV_RSA_SCHANNEL         12
01835 #define PROV_DSS_DH               13
01836 #define PROV_EC_ECDSA_SIG         14
01837 #define PROV_EC_ECNRA_SIG         15
01838 #define PROV_EC_ECDSA_FULL        16
01839 #define PROV_EC_ECNRA_FULL        17
01840 #define PROV_DH_SCHANNEL          18
01841 #define PROV_SPYRUS_LYNKS         20
01842 #define PROV_RNG                  21
01843 #define PROV_INTEL_SEC            22
01844 #define PROV_REPLACE_OWF          23
01845 #define PROV_RSA_AES              24
01846 
01847 /* FLAGS Section */
01848 
01849 #define CRYPT_FIRST             1
01850 #define CRYPT_NEXT              2
01851 
01852 #define CRYPT_IMPL_HARDWARE     1
01853 #define CRYPT_IMPL_SOFTWARE     2
01854 #define CRYPT_IMPL_MIXED        3
01855 #define CRYPT_IMPL_UNKNOWN      4
01856 
01857 /* CryptAcquireContext */
01858 #define CRYPT_VERIFYCONTEXT       0xF0000000
01859 #define CRYPT_NEWKEYSET           0x00000008
01860 #define CRYPT_DELETEKEYSET        0x00000010
01861 #define CRYPT_MACHINE_KEYSET      0x00000020
01862 #define CRYPT_SILENT              0x00000040
01863 
01864 /* Crypt{Get|Set}Provider */
01865 #define CRYPT_MACHINE_DEFAULT     0x00000001
01866 #define CRYPT_USER_DEFAULT        0x00000002
01867 #define CRYPT_DELETE_DEFAULT      0x00000004
01868 
01869 /* Crypt{Get/Set}ProvParam */
01870 #define PP_CLIENT_HWND          1
01871 #define PP_ENUMALGS             1
01872 #define PP_ENUMCONTAINERS       2
01873 #define PP_IMPTYPE              3
01874 #define PP_NAME                 4
01875 #define PP_VERSION              5
01876 #define PP_CONTAINER            6
01877 #define PP_CHANGE_PASSWORD      7
01878 #define PP_KEYSET_SEC_DESCR     8
01879 #define PP_KEY_TYPE_SUBTYPE     10
01880 #define PP_CONTEXT_INFO         11
01881 #define PP_KEYEXCHANGE_KEYSIZE  12
01882 #define PP_SIGNATURE_KEYSIZE    13
01883 #define PP_KEYEXCHANGE_ALG      14
01884 #define PP_SIGNATURE_ALG        15
01885 #define PP_PROVTYPE             16
01886 #define PP_KEYSTORAGE           17
01887 #define PP_SYM_KEYSIZE          19
01888 #define PP_SESSION_KEYSIZE      20
01889 #define PP_UI_PROMPT            21
01890 #define PP_ENUMALGS_EX          22
01891 #define PP_DELETEKEY            24
01892 #define PP_ENUMMANDROOTS        25
01893 #define PP_ENUMELECTROOTS       26
01894 #define PP_KEYSET_TYPE          27
01895 #define PP_ADMIN_PIN            31
01896 #define PP_KEYEXCHANGE_PIN      32
01897 #define PP_SIGNATURE_PIN        33
01898 #define PP_SIG_KEYSIZE_INC      34
01899 #define PP_KEYX_KEYSIZE_INC     35
01900 #define PP_UNIQUE_CONTAINER     36
01901 #define PP_SGC_INFO             37
01902 #define PP_USE_HARDWARE_RNG     38
01903 #define PP_KEYSPEC              39
01904 #define PP_ENUMEX_SIGNING_PROT  40
01905 #define PP_CRYPT_COUNT_KEY_USE  41
01906 #define PP_USER_CERTSTORE       42
01907 #define PP_SMARTCARD_READER     43
01908 #define PP_SMARTCARD_GUID       45
01909 #define PP_ROOT_CERTSTORE       46
01910 
01911 /* Values returned by CryptGetProvParam of PP_KEYSTORAGE */
01912 #define CRYPT_SEC_DESCR         0x00000001
01913 #define CRYPT_PSTORE            0x00000002
01914 #define CRYPT_UI_PROMPT         0x00000004
01915 
01916 /* Crypt{Get/Set}KeyParam */
01917 #define KP_IV                   1
01918 #define KP_SALT                 2
01919 #define KP_PADDING              3
01920 #define KP_MODE                 4
01921 #define KP_MODE_BITS            5
01922 #define KP_PERMISSIONS          6
01923 #define KP_ALGID                7
01924 #define KP_BLOCKLEN             8
01925 #define KP_KEYLEN               9
01926 #define KP_SALT_EX              10
01927 #define KP_P                    11
01928 #define KP_G                    12
01929 #define KP_Q                    13
01930 #define KP_X                    14
01931 #define KP_Y                    15
01932 #define KP_RA                   16
01933 #define KP_RB                   17
01934 #define KP_INFO                 18
01935 #define KP_EFFECTIVE_KEYLEN     19
01936 #define KP_SCHANNEL_ALG         20
01937 #define KP_CLIENT_RANDOM        21
01938 #define KP_SERVER_RANDOM        22
01939 #define KP_RP                   23
01940 #define KP_PRECOMP_MD5          24
01941 #define KP_PRECOMP_SHA          25
01942 #define KP_CERTIFICATE          26
01943 #define KP_CLEAR_KEY            27
01944 #define KP_PUB_EX_LEN           28
01945 #define KP_PUB_EX_VAL           29
01946 #define KP_KEYVAL               30
01947 #define KP_ADMIN_PIN            31
01948 #define KP_KEYEXCHANGE_PIN      32
01949 #define KP_SIGNATURE_PIN        33
01950 #define KP_PREHASH              34
01951 #define KP_ROUNDS               35
01952 #define KP_OAEP_PARAMS          36
01953 #define KP_CMS_KEY_INFO         37
01954 #define KP_CMS_DH_KEY_INFO      38
01955 #define KP_PUB_PARAMS           39
01956 #define KP_VERIFY_PARAMS        40
01957 #define KP_HIGHEST_VERSION      41
01958 #define KP_GET_USE_COUNT        42
01959 
01960 /* Values for KP_PADDING */
01961 #define PKCS5_PADDING  1
01962 #define RANDOM_PADDING 2
01963 #define ZERO_PADDING   3
01964 
01965 /* CryptSignHash/CryptVerifySignature */
01966 #define CRYPT_NOHASHOID         0x00000001
01967 #define CRYPT_TYPE2_FORMAT      0x00000002
01968 #define CRYPT_X931_FORMAT       0x00000004
01969 
01970 /* Crypt{Get,Set}HashParam */
01971 #define HP_ALGID                0x0001
01972 #define HP_HASHVAL              0x0002
01973 #define HP_HASHSIZE             0x0004
01974 #define HP_HMAC_INFO            0x0005
01975 #define HP_TLS1PRF_LABEL        0x0006
01976 #define HP_TLS1PRF_SEED         0x0007
01977 
01978 /* Crypt{Get,Set}KeyParam */
01979 #define CRYPT_MODE_CBC          1
01980 #define CRYPT_MODE_ECB          2
01981 #define CRYPT_MODE_OFB          3
01982 #define CRYPT_MODE_CFB          4
01983 
01984 #define CRYPT_ENCRYPT           0x0001 
01985 #define CRYPT_DECRYPT           0x0002
01986 #define CRYPT_EXPORT            0x0004
01987 #define CRYPT_READ              0x0008
01988 #define CRYPT_WRITE             0x0010
01989 #define CRYPT_MAC               0x0020
01990 #define CRYPT_EXPORT_KEY        0x0040
01991 #define CRYPT_IMPORT_KEY        0x0080
01992 #define CRYPT_ARCHIVE           0x0100
01993 
01994 /* Crypt*Key */
01995 #define CRYPT_EXPORTABLE        0x00000001
01996 #define CRYPT_USER_PROTECTED    0x00000002
01997 #define CRYPT_CREATE_SALT       0x00000004
01998 #define CRYPT_UPDATE_KEY        0x00000008
01999 #define CRYPT_NO_SALT           0x00000010
02000 #define CRYPT_PREGEN            0x00000040
02001 #define CRYPT_SERVER            0x00000400
02002 #define CRYPT_ARCHIVABLE        0x00004000
02003 
02004 /* CryptExportKey */
02005 #define CRYPT_SSL2_FALLBACK     0x00000002
02006 #define CRYPT_DESTROYKEY        0x00000004
02007 #define CRYPT_OAEP              0x00000040
02008 
02009 /* CryptHashSessionKey */
02010 #define CRYPT_LITTLE_ENDIAN     0x00000001
02011 
02012 /* Crypt{Protect,Unprotect}Data PROMPTSTRUCT flags */
02013 #define CRYPTPROTECT_PROMPT_ON_PROTECT    0x0001
02014 #define CRYPTPROTECT_PROMPT_ON_UNPROTECT  0x0002
02015 /* Crypt{Protect,Unprotect}Data flags */
02016 #define CRYPTPROTECT_UI_FORBIDDEN       0x0001
02017 #define CRYPTPROTECT_LOCAL_MACHINE      0x0004
02018 #define CRYPTPROTECT_AUDIT              0x0010
02019 #define CRYPTPROTECT_VERIFY_PROTECTION  0x0040
02020 
02021 /* Blob Types */
02022 #define SIMPLEBLOB              0x1
02023 #define PUBLICKEYBLOB           0x6
02024 #define PRIVATEKEYBLOB          0x7
02025 #define PLAINTEXTKEYBLOB        0x8
02026 #define OPAQUEKEYBLOB           0x9
02027 #define PUBLICKEYBLOBEX         0xA
02028 #define SYMMETRICWRAPKEYBLOB    0xB
02029 
02030 #define CUR_BLOB_VERSION        2
02031 
02032 /* cert store provider types */
02033 #define CERT_STORE_PROV_MSG                  ((LPCSTR)1)
02034 #define CERT_STORE_PROV_MEMORY               ((LPCSTR)2)
02035 #define CERT_STORE_PROV_FILE                 ((LPCSTR)3)
02036 #define CERT_STORE_PROV_REG                  ((LPCSTR)4)
02037 #define CERT_STORE_PROV_PKCS7                ((LPCSTR)5)
02038 #define CERT_STORE_PROV_SERIALIZED           ((LPCSTR)6)
02039 #define CERT_STORE_PROV_FILENAME_A           ((LPCSTR)7)
02040 #define CERT_STORE_PROV_FILENAME_W           ((LPCSTR)8)
02041 #define CERT_STORE_PROV_SYSTEM_A             ((LPCSTR)9)
02042 #define CERT_STORE_PROV_SYSTEM_W             ((LPCSTR)10)
02043 #define CERT_STORE_PROV_SYSTEM               CERT_STORE_PROV_SYSTEM_W
02044 #define CERT_STORE_PROV_COLLECTION           ((LPCSTR)11)
02045 #define CERT_STORE_PROV_SYSTEM_REGISTRY_A    ((LPCSTR)12)
02046 #define CERT_STORE_PROV_SYSTEM_REGISTRY_W    ((LPCSTR)13)
02047 #define CERT_STORE_PROV_SYSTEM_REGISTRY      CERT_STORE_PROV_SYSTEM_REGISTRY_W
02048 #define CERT_STORE_PROV_PHYSICAL_W           ((LPCSTR)14)
02049 #define CERT_STORE_PROV_PHYSICAL             CERT_STORE_PROV_PHYSICAL_W
02050 #define CERT_STORE_PROV_SMART_CARD_W         ((LPCSTR)15)
02051 #define CERT_STORE_PROV_SMART_CARD           CERT_STORE_PROV_SMART_CARD_W
02052 #define CERT_STORE_PROV_LDAP_W               ((LPCSTR)16)
02053 #define CERT_STORE_PROV_LDAP                 CERT_STORE_PROV_LDAP_W
02054 
02055 #define sz_CERT_STORE_PROV_MEMORY            "Memory"
02056 #define sz_CERT_STORE_PROV_FILENAME_W        "File"
02057 #define sz_CERT_STORE_PROV_FILENAME          sz_CERT_STORE_PROV_FILENAME_W
02058 #define sz_CERT_STORE_PROV_SYSTEM_W          "System"
02059 #define sz_CERT_STORE_PROV_SYSTEM            sz_CERT_STORE_PROV_SYSTEM_W
02060 #define sz_CERT_STORE_PROV_PKCS7             "PKCS7"
02061 #define sz_CERT_STORE_PROV_SERIALIZED        "Serialized"
02062 #define sz_CERT_STORE_PROV_COLLECTION        "Collection"
02063 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
02064 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY   sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
02065 #define sz_CERT_STORE_PROV_PHYSICAL_W        "Physical"
02066 #define sz_CERT_STORE_PROV_PHYSICAL          sz_CERT_STORE_PROV_PHYSICAL_W
02067 #define sz_CERT_STORE_PROV_SMART_CARD_W      "SmartCard"
02068 #define sz_CERT_STORE_PROV_SMART_CARD        sz_CERT_STORE_PROV_SMART_CARD_W
02069 #define sz_CERT_STORE_PROV_LDAP_W            "Ldap"
02070 #define sz_CERT_STORE_PROV_LDAP              sz_CERT_STORE_PROV_LDAP_W
02071 
02072 /* types for CertOpenStore dwEncodingType */
02073 #define CERT_ENCODING_TYPE_MASK 0x0000ffff
02074 #define CMSG_ENCODING_TYPE_MASK 0xffff0000
02075 #define GET_CERT_ENCODING_TYPE(x) ((x) & CERT_ENCODING_TYPE_MASK)
02076 #define GET_CMSG_ENCODING_TYPE(x) ((x) & CMSG_ENCODING_TYPE_MASK)
02077 
02078 #define CRYPT_ASN_ENCODING  0x00000001
02079 #define CRYPT_NDR_ENCODING  0x00000002
02080 #define X509_ASN_ENCODING   0x00000001
02081 #define X509_NDR_ENCODING   0x00000002
02082 #define PKCS_7_ASN_ENCODING 0x00010000
02083 #define PKCS_7_NDR_ENCODING 0x00020000
02084 
02085 /* system store locations */
02086 #define CERT_SYSTEM_STORE_LOCATION_MASK  0x00ff0000
02087 #define CERT_SYSTEM_STORE_LOCATION_SHIFT 16
02088 
02089 /* system store location ids */
02090 /* hkcu */
02091 #define CERT_SYSTEM_STORE_CURRENT_USER_ID               1
02092 /* hklm */
02093 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID              2
02094 /* hklm\Software\Microsoft\Cryptography\Services */
02095 #define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID            4
02096 #define CERT_SYSTEM_STORE_SERVICES_ID                   5
02097 /* HKEY_USERS */
02098 #define CERT_SYSTEM_STORE_USERS_ID                      6
02099 /* hkcu\Software\Policies\Microsoft\SystemCertificates */
02100 #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID  7
02101 /* hklm\Software\Policies\Microsoft\SystemCertificates */
02102 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8
02103 /* hklm\Software\Microsoft\EnterpriseCertificates */
02104 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID   9
02105 
02106 /* system store location values */
02107 #define CERT_SYSTEM_STORE_CURRENT_USER \
02108  (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
02109 #define CERT_SYSTEM_STORE_LOCAL_MACHINE \
02110  (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
02111 #define CERT_SYSTEM_STORE_CURRENT_SERVICE \
02112  (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
02113 #define CERT_SYSTEM_STORE_SERVICES \
02114  (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
02115 #define CERT_SYSTEM_STORE_USERS \
02116  (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
02117 #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY \
02118  (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
02119 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY \
02120  (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
02121 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE \
02122  (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
02123 
02124 #if defined(__GNUC__)
02125 #define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH (const WCHAR[])\
02126  {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t',\
02127   '\\','S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',\
02128   0 }
02129 #define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH (const WCHAR[])\
02130  {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\
02131   'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\
02132   't','i','f','i','c','a','t','e','s',0 }
02133 #elif defined(_MSC_VER)
02134 #define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH \
02135  L"Software\\Microsoft\\SystemCertificates"
02136 #define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH \
02137  L"Software\\Policies\\Microsoft\\SystemCertificates"
02138 #else
02139 static const WCHAR CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH[] = 
02140  {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
02141   'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',0 };
02142 static const WCHAR CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH[] = 
02143  {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
02144   'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
02145   't','i','f','i','c','a','t','e','s',0 };
02146 #endif
02147 
02148 #if defined(__GNUC__)
02149 #define CERT_EFSBLOB_REGPATH (const WCHAR[])\
02150 {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\
02151  'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\
02152  't','i','f','i','c','a','t','e','s','\\','E','F','S',0 }
02153 #define CERT_EFSBLOB_VALUE_NAME (const WCHAR[]) {'E','F','S','B','l','o','b',0 }
02154 #elif defined(_MSC_VER)
02155 #define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\EFS"
02156 #define CERT_EFSBLOB_VALUE_NAME L"EFSBlob"
02157 #else
02158 static const WCHAR CERT_EFSBLOB_REGPATH[] =
02159  {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
02160   'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
02161   't','i','f','i','c','a','t','e','s','\\','E','F','S',0 };
02162 static const CERT_EFSBLOB_VALUE_NAME[] = { 'E','F','S','B','l','o','b',0 };
02163 #endif
02164 
02165 #if defined(__GNUC__)
02166 #define CERT_PROT_ROOT_FLAGS_REGPATH (const WCHAR[])\
02167 {'\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o','t',\
02168  's',0 }
02169 #define CERT_PROT_ROOT_FLAGS_VALUE_NAME (const WCHAR[])\
02170 {'F','l','a','g','s',0 }
02171 #elif defined(_MSC_VER)
02172 #define CERT_PROT_ROOT_FLAGS_REGPATH L"\\Root\\ProtectedRoots"
02173 #define CERT_PROT_ROOT_FLAGS_VALUE_NAME L"Flags"
02174 #else
02175 static const WCHAR CERT_PROT_ROOT_FLAGS_REGPATH[] =
02176  { '\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o',
02177    't','s',0 };
02178 static const WCHAR CERT_PROT_ROOT_FLAGS_VALUE_NAME[] = {'F','l','a','g','s',0 };
02179 #endif
02180 
02181 #define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG                0x01
02182 #define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG                 0x02
02183 #define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG                    0x04
02184 #define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG                     0x08
02185 #define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG            0x10
02186 #define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20
02187 
02188 #if defined(__GNUC__)
02189 #define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH (const WCHAR[])\
02190 {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\
02191  'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\
02192  't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d',\
02193  'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 }
02194 #elif defined(_MSC_VER)
02195 #define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH \
02196  CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
02197 #else
02198 static const WCHAR CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH[] =
02199  {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
02200   'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
02201   't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d',
02202   'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 };
02203 #endif
02204 
02205 #if defined(__GNUC__)
02206 #define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH (const WCHAR[])\
02207 {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',\
02208  'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\',\
02209  'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\',\
02210  'S','a','f','e','r',0 }
02211 #define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME (const WCHAR[])\
02212 {'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 };
02213 #elif defined(_MSC_VER)
02214 #define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH \
02215  CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
02216 #define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L"AuthenticodeFlags"
02217 #else
02218 static const WCHAR CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH[] =
02219  {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
02220   'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\',
02221   'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\',
02222   'S','a','f','e','r',0 };
02223 static const WCHAR CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME[] =
02224  { 'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 };
02225 #endif
02226 
02227 #define CERT_TRUST_PUB_ALLOW_END_USER_TRUST         0x00000000
02228 #define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST    0x00000001
02229 #define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x00000002
02230 #define CERT_TRUST_PUB_ALLOW_TRUST_MASK             0x00000003
02231 #define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG     0x00000100
02232 #define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG     0x00000200
02233 
02234 /* flags for CertOpenStore dwFlags */
02235 #define CERT_STORE_NO_CRYPT_RELEASE_FLAG            0x00000001
02236 #define CERT_STORE_SET_LOCALIZED_NAME_FLAG          0x00000002
02237 #define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x00000004
02238 #define CERT_STORE_DELETE_FLAG                      0x00000010
02239 #define CERT_STORE_UNSAFE_PHYSICAL_FLAG             0x00000020
02240 #define CERT_STORE_SHARE_STORE_FLAG                 0x00000040
02241 #define CERT_STORE_SHARE_CONTEXT_FLAG               0x00000080
02242 #define CERT_STORE_MANIFOLD_FLAG                    0x00000100
02243 #define CERT_STORE_ENUM_ARCHIVED_FLAG               0x00000200
02244 #define CERT_STORE_UPDATE_KEYID_FLAG                0x00000400
02245 #define CERT_STORE_BACKUP_RESTORE_FLAG              0x00000800
02246 #define CERT_STORE_MAXIMUM_ALLOWED_FLAG             0x00001000
02247 #define CERT_STORE_CREATE_NEW_FLAG                  0x00002000
02248 #define CERT_STORE_OPEN_EXISTING_FLAG               0x00004000
02249 #define CERT_STORE_READONLY_FLAG                    0x00008000
02250 
02251 #define CERT_REGISTRY_STORE_REMOTE_FLAG      0x00010000
02252 #define CERT_REGISTRY_STORE_SERIALIZED_FLAG  0x00020000
02253 #define CERT_REGISTRY_STORE_ROAMING_FLAG     0x00040000
02254 #define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x00080000
02255 #define CERT_REGISTRY_STORE_LM_GPT_FLAG      0x01000000
02256 #define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG  0x80000000
02257 
02258 #define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x00010000
02259 
02260 /* CertCloseStore dwFlags */
02261 #define CERT_CLOSE_STORE_FORCE_FLAG 0x00000001
02262 #define CERT_CLOSE_STORE_CHECK_FLAG 0x00000002
02263 
02264 /* dwAddDisposition */
02265 #define CERT_STORE_ADD_NEW                                 1
02266 #define CERT_STORE_ADD_USE_EXISTING                        2
02267 #define CERT_STORE_ADD_REPLACE_EXISTING                    3
02268 #define CERT_STORE_ADD_ALWAYS                              4
02269 #define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5
02270 #define CERT_STORE_ADD_NEWER                               6
02271 #define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES            7
02272 
02273 /* Installable OID function defs */
02274 #define CRYPT_OID_OPEN_STORE_PROV_FUNC     "CertDllOpenStoreProv"
02275 #define CRYPT_OID_ENCODE_OBJECT_FUNC       "CryptDllEncodeObject"
02276 #define CRYPT_OID_DECODE_OBJECT_FUNC       "CryptDllDecodeObject"
02277 #define CRYPT_OID_ENCODE_OBJECT_EX_FUNC    "CryptDllEncodeObjectEx"
02278 #define CRYPT_OID_DECODE_OBJECT_EX_FUNC    "CryptDllDecodeObjectEx"
02279 #define CRYPT_OID_CREATE_COM_OBJECT_FUNC   "CryptDllCreateComObject"
02280 #define CRYPT_OID_VERIFY_REVOCATION_FUNC   "CertDllVerifyRevocation"
02281 #define CRYPT_OID_VERIFY_CTL_USAGE_FUNC    "CertDllVerifyCTLUsage"
02282 #define CRYPT_OID_FORMAT_OBJECT_FUNC       "CryptDllFormatObject"
02283 #define CRYPT_OID_FIND_OID_INFO_FUNC       "CryptDllFindOIDInfo"
02284 #define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC "CryptDllFindLocalizedName"
02285 #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC  "CryptDllExportPublicKeyInfoEx"
02286 #define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC  "CryptDllImportPublicKeyInfoEx"
02287 #define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx"
02288 #define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx"
02289 #define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC \
02290  "CertDllVerifyCertificateChainPolicy"
02291 #define URL_OID_GET_OBJECT_URL_FUNC    "UrlDllGetObjectUrl"
02292 #define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
02293 #define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey"
02294 #define CMSG_OID_EXPORT_KEY_TRANS_FUNC        "CryptMsgDllExportKeyTrans"
02295 #define CMSG_OID_IMPORT_KEY_TRANS_FUNC        "CryptMsgDllImportKeyTrans"
02296 
02297 #define CRYPT_OID_REGPATH "Software\\Microsoft\\Cryptography\\OID"
02298 #define CRYPT_OID_REG_ENCODING_TYPE_PREFIX "EncodingType "
02299 #if defined(__GNUC__)
02300 # define CRYPT_OID_REG_DLL_VALUE_NAME (const WCHAR []){ 'D','l','l',0 }
02301 # define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME \
02302  (const WCHAR []){ 'F','u','n','c','N','a','m','e',0 }
02303 # define CRYPT_OID_REG_FLAGS_VALUE_NAME \
02304  (const WCHAR []){ 'C','r','y','p','t','F','l','a','g','s',0 }
02305 #elif defined(_MSC_VER)
02306 # define CRYPT_OID_REG_DLL_VALUE_NAME       L"Dll"
02307 # define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME L"FuncName"
02308 # define CRYPT_OID_REG_FLAGS_VALUE_NAME     L"CryptFlags"
02309 #else
02310 static const WCHAR CRYPT_OID_REG_DLL_VALUE_NAME[] = { 'D','l','l',0 };
02311 static const WCHAR CRYPT_OID_REG_FUNC_NAME_VALUE_NAME[] =
02312  { 'F','u','n','c','N','a','m','e',0 };
02313 static const WCHAR CRYPT_OID_REG_FLAGS_VALUE_NAME[] =
02314  { 'C','r','y','p','t','F','l','a','g','s',0 };
02315 #endif
02316 #define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A "FuncName"
02317 #define CRYPT_DEFAULT_OID                    "DEFAULT"
02318 
02319 #define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1
02320 
02321 #define CRYPT_GET_INSTALLED_OID_FUNC_FLAG  0x1
02322 
02323 #define CRYPT_REGISTER_FIRST_INDEX 0
02324 #define CRYPT_REGISTER_LAST_INDEX  0xffffffff
02325 
02326 /* values for CERT_STORE_PROV_INFO's dwStoreProvFlags */
02327 #define CERT_STORE_PROV_EXTERNAL_FLAG        0x1
02328 #define CERT_STORE_PROV_DELETED_FLAG         0x2
02329 #define CERT_STORE_PROV_NO_PERSIST_FLAG      0x4
02330 #define CERT_STORE_PROV_SYSTEM_STORE_FLAG    0x8
02331 #define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10
02332 
02333 /* function indices */
02334 #define CERT_STORE_PROV_CLOSE_FUNC             0
02335 #define CERT_STORE_PROV_READ_CERT_FUNC         1
02336 #define CERT_STORE_PROV_WRITE_CERT_FUNC        2
02337 #define CERT_STORE_PROV_DELETE_CERT_FUNC       3
02338 #define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4
02339 #define CERT_STORE_PROV_READ_CRL_FUNC          5
02340 #define CERT_STORE_PROV_WRITE_CRL_FUNC         6
02341 #define CERT_STORE_PROV_DELETE_CRL_FUNC        7
02342 #define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC  8
02343 #define CERT_STORE_PROV_READ_CTL_FUNC          9
02344 #define CERT_STORE_PROV_WRITE_CTL_FUNC         10
02345 #define CERT_STORE_PROV_DELETE_CTL_FUNC        11
02346 #define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC  12
02347 #define CERT_STORE_PROV_CONTROL_FUNC           13
02348 #define CERT_STORE_PROV_FIND_CERT_FUNC         14
02349 #define CERT_STORE_PROV_FREE_FIND_CERT_FUNC    15
02350 #define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 16
02351 #define CERT_STORE_PROV_FIND_CRL_FUNC          17
02352 #define CERT_STORE_PROV_FREE_FIND_CRL_FUNC     18
02353 #define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC  19
02354 #define CERT_STORE_PROV_FIND_CTL_FUNC          20
02355 #define CERT_STORE_PROV_FREE_FIND_CTL_FUNC     21
02356 #define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC  22
02357 
02358 /* physical store dwFlags, also used by CertAddStoreToCollection as
02359  * dwUpdateFlags
02360  */
02361 #define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG                  0x1
02362 #define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG                0x2
02363 #define CERT_PHYSICAL_STORE_REMOVE_OPEN_DISABLE_FLAG         0x4
02364 #define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8
02365 
02366 /* dwFlag values for CertEnumPhysicalStore callback */
02367 #define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1
02368 
02369 /* predefined store names */
02370 #if defined(__GNUC__)
02371 # define CERT_PHYSICAL_STORE_DEFAULT_NAME (const WCHAR[])\
02372  {'.','D','e','f','a','u','l','t','0'}
02373 # define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME (const WCHAR[])\
02374  {'.','G','r','o','u','p','P','o','l','i','c','y',0}
02375 # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME (const WCHAR[])\
02376  {'.','L','o','c','a','l','M','a','c','h','i','n','e',0}
02377 # define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME (const WCHAR[])\
02378  {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0}
02379 # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME (const WCHAR[])\
02380  {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',\
02381  'P','o','l','i','c','y',0}
02382 # define CERT_PHYSICAL_STORE_ENTERPRISE_NAME (const WCHAR[])\
02383  {'.','E','n','t','e','r','p','r','i','s','e',0}
02384 # define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME (const WCHAR[])\
02385  {'.','A','u','t','h','R','o','o','t',0}
02386 #elif defined(_MSC_VER)
02387 # define CERT_PHYSICAL_STORE_DEFAULT_NAME \
02388  L".Default"
02389 # define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME \
02390  L".GroupPolicy"
02391 # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME \
02392  L".LocalMachine"
02393 # define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME \
02394  L".UserCertificate"
02395 # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME \
02396  L".LocalMachineGroupPolicy"
02397 # define CERT_PHYSICAL_STORE_ENTERPRISE_NAME \
02398  L".Enterprise"
02399 # define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME \
02400  L".AuthRoot"
02401 #else
02402 static const WCHAR CERT_PHYSICAL_STORE_DEFAULT_NAME[] = 
02403  {'.','D','e','f','a','u','l','t','0'};
02404 static const WCHAR CERT_PHYSICAL_STORE_GROUP_POLICY_NAME[] =
02405  {'.','G','r','o','u','p','P','o','l','i','c','y',0};
02406 static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME[] =
02407  {'.','L','o','c','a','l','M','a','c','h','i','n','e',0};
02408 static const WCHAR CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME[] =
02409  {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0};
02410 static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME[] =
02411  {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',
02412  'P','o','l','i','c','y',0};
02413 static const WCHAR CERT_PHYSICAL_STORE_ENTERPRISE_NAME[] =
02414  {'.','E','n','t','e','r','p','r','i','s','e',0};
02415 static const WCHAR CERT_PHYSICAL_STORE_AUTH_ROOT_NAME[] =
02416  {'.','A','u','t','h','R','o','o','t',0};
02417 #endif
02418 
02419 /* cert system store flags */
02420 #define CERT_SYSTEM_STORE_MASK 0xffff0000
02421 #define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000
02422 
02423 /* CertFindChainInStore dwFindType types */
02424 #define CERT_CHAIN_FIND_BY_ISSUER 1
02425 
02426 /* CertSaveStore dwSaveAs values */
02427 #define CERT_STORE_SAVE_AS_STORE 1
02428 #define CERT_STORE_SAVE_AS_PKCS7 2
02429 /* CertSaveStore dwSaveTo values */
02430 #define CERT_STORE_SAVE_TO_FILE       1
02431 #define CERT_STORE_SAVE_TO_MEMORY     2
02432 #define CERT_STORE_SAVE_TO_FILENAME_A 3
02433 #define CERT_STORE_SAVE_TO_FILENAME_W 4
02434 #define CERT_STORE_SAVE_TO_FILENAME   CERT_STORE_SAVE_TO_FILENAME_W
02435 
02436 /* CERT_INFO versions/flags */
02437 #define CERT_V1 0
02438 #define CERT_V2 1
02439 #define CERT_V3 2
02440 #define CERT_INFO_VERSION_FLAG                 1
02441 #define CERT_INFO_SERIAL_NUMBER_FLAG           2
02442 #define CERT_INFO_SIGNATURE_ALGORITHM_FLAG     3
02443 #define CERT_INFO_ISSUER_FLAG                  4
02444 #define CERT_INFO_NOT_BEFORE_FLAG              5
02445 #define CERT_INFO_NOT_AFTER_FLAG               6
02446 #define CERT_INFO_SUBJECT_FLAG                 7
02447 #define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 8
02448 #define CERT_INFO_ISSUER_UNIQUE_ID_FLAG        9
02449 #define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG       10
02450 #define CERT_INFO_EXTENSION_FLAG               11
02451 
02452 /* CERT_REQUEST_INFO versions */
02453 #define CERT_REQUEST_V1 0
02454 
02455 /* CERT_KEYGEN_REQUEST_INFO versions */
02456 #define CERT_KEYGEN_REQUEST_V1 0
02457 
02458 /* CRL versions */
02459 #define CRL_V1 0
02460 #define CRL_V2 1
02461 
02462 /* CTL versions */
02463 #define CTL_V1 0
02464 
02465 /* Certificate, CRL, CTL property IDs */
02466 #define CERT_KEY_PROV_HANDLE_PROP_ID               1
02467 #define CERT_KEY_PROV_INFO_PROP_ID                 2
02468 #define CERT_SHA1_HASH_PROP_ID                     3
02469 #define CERT_HASH_PROP_ID                          CERT_SHA1_HASH_PROP_ID
02470 #define CERT_MD5_HASH_PROP_ID                      4
02471 #define CERT_KEY_CONTEXT_PROP_ID                   5
02472 #define CERT_KEY_SPEC_PROP_ID                      6
02473 #define CERT_IE30_RESERVED_PROP_ID                 7
02474 #define CERT_PUBKEY_HASH_RESERVED_PROP_ID          8
02475 #define CERT_ENHKEY_USAGE_PROP_ID                  9
02476 #define CERT_CTL_USAGE_PROP_ID                     CERT_ENHKEY_USAGE_PROP_ID
02477 #define CERT_NEXT_UPDATE_LOCATION_PROP_ID          10
02478 #define CERT_FRIENDLY_NAME_PROP_ID                 11
02479 #define CERT_PVK_FILE_PROP_ID                      12
02480 #define CERT_DESCRIPTION_PROP_ID                   13
02481 #define CERT_ACCESS_STATE_PROP_ID                  14
02482 #define CERT_SIGNATURE_HASH_PROP_ID                15
02483 #define CERT_SMART_CARD_DATA_PROP_ID               16
02484 #define CERT_EFS_PROP_ID                           17
02485 #define CERT_FORTEZZA_DATA_PROP                    18
02486 #define CERT_ARCHIVED_PROP_ID                      19
02487 #define CERT_KEY_IDENTIFIER_PROP_ID                20
02488 #define CERT_AUTO_ENROLL_PROP_ID                   21
02489 #define CERT_PUBKEY_ALG_PARA_PROP_ID               22
02490 #define CERT_CROSS_CERT_DIST_POINTS_PROP_ID        23
02491 #define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID    24
02492 #define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID   25
02493 #define CERT_ENROLLMENT_PROP_ID                    26
02494 #define CERT_DATE_STAMP_PROP_ID                    27
02495 #define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28
02496 #define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID         29
02497 #define CERT_EXTENDED_ERROR_INFO_PROP_ID           30
02498 /* 31    -- unused?
02499    32    -- cert prop id
02500    33    -- CRL prop id
02501    34    -- CTL prop id
02502    35    -- KeyId prop id
02503    36-63 -- reserved
02504  */
02505 #define CERT_RENEWAL_PROP_ID                       64
02506 #define CERT_ARCHIVED_KEY_HASH_PROP_ID             65
02507 #define CERT_AUTO_ENROLL_RETRY_PROP_ID             66
02508 #define CERT_AIA_URL_RETRIEVED_PROP_ID             67
02509 #define CERT_AUTHORITY_INFO_ACCESS_PROP_ID         68
02510 #define CERT_BACKED_UP_PROP_ID                     69
02511 #define CERT_OCSP_RESPONSE_PROP_ID                 70
02512 #define CERT_REQUEST_ORIGINATOR_PROP_ID            71
02513 #define CERT_SOURCE_LOCATION_PROP_ID               72
02514 #define CERT_SOURCE_URL_PROP_ID                    73
02515 #define CERT_NEW_KEY_PROP_ID                       74
02516 #define CERT_OCSP_CACHE_PREFIX_PROP_ID             75
02517 #define CERT_SMART_CARD_ROOT_INFO_PROP_ID          76
02518 #define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID          77
02519 #define CERT_NCRYPT_KEY_HANDLE_PROP_ID             78
02520 #define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 79
02521 #define CERT_SUBJECT_INFO_ACCESS_PROP_ID           80
02522 #define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 81
02523 #define CERT_CA_DISABLE_CRL_PROP_ID                82
02524 #define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID    83
02525 #define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 84
02526 
02527 #define CERT_FIRST_RESERVED_PROP_ID                85
02528 #define CERT_LAST_RESERVED_PROP_ID                 0x00007fff
02529 #define CERT_FIRST_USER_PROP_ID                    0x00008000
02530 #define CERT_LAST_USER_PROP_ID                     0x0000ffff
02531 
02532 #define IS_CERT_HASH_PROP_ID(x) \
02533  ((x) == CERT_SHA1_HASH_PROP_ID || (x) == CERT_MD5_HASH_PROP_ID || \
02534   (x) == CERT_SIGNATURE_HASH_PROP_ID)
02535 
02536 #define IS_PUBKEY_HASH_PROP_ID(x) \
02537  ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \
02538   (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID)
02539 
02540 #define IS_CHAIN_HASH_PROP_ID(x) \
02541  ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \
02542   (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID || \
02543   (x) == CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID || \
02544   (x) == CERT_SUBJECT_NAME_MD5_HASH_PROP_ID)
02545 
02546 /* access state flags */
02547 #define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG   0x1
02548 #define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG    0x2
02549 #define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4
02550 
02551 /* CertSetCertificateContextProperty flags */
02552 #define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG      0x40000000
02553 #define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000
02554 
02555 /* CERT_RDN attribute dwValueType types */
02556 #define CERT_RDN_TYPE_MASK 0x000000ff
02557 #define CERT_RDN_ANY_TYPE         0
02558 #define CERT_RDN_ENCODED_BLOB     1
02559 #define CERT_RDN_OCTET_STRING     2
02560 #define CERT_RDN_NUMERIC_STRING   3
02561 #define CERT_RDN_PRINTABLE_STRING 4
02562 #define CERT_RDN_TELETEX_STRING   5
02563 #define CERT_RDN_T61_STRING       5
02564 #define CERT_RDN_VIDEOTEX_STRING  6
02565 #define CERT_RDN_IA5_STRING       7
02566 #define CERT_RDN_GRAPHIC_STRING   8
02567 #define CERT_RDN_VISIBLE_STRING   9
02568 #define CERT_RDN_ISO646_STRING    9
02569 #define CERT_RDN_GENERAL_STRING   10
02570 #define CERT_RDN_UNIVERSAL_STRING 11
02571 #define CERT_RDN_INT4_STRING      11
02572 #define CERT_RDN_BMP_STRING       12
02573 #define CERT_RDN_UNICODE_STRING   12
02574 #define CERT_RDN_UTF8_STRING      13
02575 
02576 /* CERT_RDN attribute dwValueType flags */
02577 #define CERT_RDN_FLAGS_MASK 0xff000000
02578 #define CERT_RDN_ENABLE_T61_UNICODE_FLAG  0x80000000
02579 #define CERT_RDN_DISABLE_CHECK_TYPE_FLAG  0x4000000
02580 #define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x2000000
02581 #define CERT_RDN_DISABLE_IE4_UTF8_FLAG    0x0100000
02582 
02583 #define IS_CERT_RDN_CHAR_STRING(x) \
02584  (((x) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING)
02585 
02586 /* CertIsRDNAttrsInCertificateName flags */
02587 #define CERT_UNICODE_IS_RDN_ATTRS_FLAG          0x1
02588 #define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2
02589 
02590 /* CRL reason codes */
02591 #define CRL_REASON_UNSPECIFIED            0
02592 #define CRL_REASON_KEY_COMPROMISE         1
02593 #define CRL_REASON_CA_COMPROMISE          2
02594 #define CRL_REASON_AFFILIATION_CHANGED    3
02595 #define CRL_REASON_SUPERSEDED             4
02596 #define CRL_REASON_CESSATION_OF_OPERATION 5
02597 #define CRL_REASON_CERTIFICATE_HOLD       6
02598 #define CRL_REASON_REMOVE_FROM_CRL        8
02599 
02600 /* CertControlStore control types */
02601 #define CERT_STORE_CTRL_RESYNC        1
02602 #define CERT_STORE_CTRL_NOTIFY_CHANGE 2
02603 #define CERT_STORE_CTRL_COMMIT        3
02604 #define CERT_STORE_CTRL_AUTO_RESYNC   4
02605 #define CERT_STORE_CTRL_CANCEL_NOTIFY 5
02606 
02607 #define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1
02608 #define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2
02609 
02610 /* cert store properties */
02611 #define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000
02612 
02613 /* CertCreateContext flags */
02614 #define CERT_CREATE_CONTEXT_NOCOPY_FLAG       0x1
02615 #define CERT_CREATE_CONTEXT_SORTED_FLAG       0x2
02616 #define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4
02617 #define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG     0x8
02618 
02619 #define CERT_COMPARE_MASK                   0xffff
02620 #define CERT_COMPARE_SHIFT                  16
02621 #define CERT_COMPARE_ANY                    0
02622 #define CERT_COMPARE_SHA1_HASH              1
02623 #define CERT_COMPARE_HASH                   CERT_COMPARE_SHA1_HASH
02624 #define CERT_COMPARE_NAME                   2
02625 #define CERT_COMPARE_ATTR                   3
02626 #define CERT_COMPARE_MD5_HASH               4
02627 #define CERT_COMPARE_PROPERTY               5
02628 #define CERT_COMPARE_PUBLIC_KEY             6
02629 #define CERT_COMPARE_NAME_STR_A             7
02630 #define CERT_COMPARE_NAME_STR_W             8
02631 #define CERT_COMPARE_KEY_SPEC               9
02632 #define CERT_COMPARE_ENHKEY_USAGE           10
02633 #define CERT_COMPARE_CTL_USAGE              CERT_COMPARE_ENHKEY_USAGE
02634 #define CERT_COMPARE_SUBJECT_CERT           11
02635 #define CERT_COMPARE_ISSUER_OF              12
02636 #define CERT_COMPARE_EXISTING               13
02637 #define CERT_COMPARE_SIGNATURE_HASH         14
02638 #define CERT_COMPARE_KEY_IDENTIFIER         15
02639 #define CERT_COMPARE_CERT_ID                16
02640 #define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17
02641 #define CERT_COMPARE_PUBKEY_MD5_HASH        18
02642 
02643 /* values of dwFindType for CertFind*InStore */
02644 #define CERT_FIND_ANY \
02645  (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
02646 #define CERT_FIND_SHA1_HASH \
02647  (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
02648 #define CERT_FIND_MD5_HASH \
02649  (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
02650 #define CERT_FIND_SIGNATURE_HASH \
02651  (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
02652 #define CERT_FIND_KEY_IDENTIFIER \
02653  (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
02654 #define CERT_FIND_HASH CERT_FIND_SHA1_HASH
02655 #define CERT_FIND_PROPERTY \
02656  (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
02657 #define CERT_FIND_PUBLIC_KEY \
02658  (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
02659 #define CERT_FIND_SUBJECT_NAME \
02660  (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
02661 #define CERT_FIND_SUBJECT_ATTR \
02662  (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
02663 #define CERT_FIND_ISSUER_NAME \
02664  (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
02665 #define CERT_FIND_ISSUER_ATTR \
02666  (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
02667 #define CERT_FIND_SUBJECT_STR_A \
02668  (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
02669 #define CERT_FIND_SUBJECT_STR_W \
02670  (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
02671 #define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
02672 #define CERT_FIND_ISSUER_STR_A \
02673  (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
02674 #define CERT_FIND_ISSUER_STR_W \
02675  (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
02676 #define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
02677 #define CERT_FIND_KEY_SPEC \
02678  (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
02679 #define CERT_FIND_ENHKEY_USAGE \
02680  (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
02681 #define CERT_FIND_CTL_USAGE CERT_FIND_ENHKEY_USAGE
02682 #define CERT_FIND_SUBJECT_CERT \
02683  (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
02684 #define CERT_FIND_ISSUER_OF \
02685  (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
02686 #define CERT_FIND_EXISTING \
02687  (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
02688 #define CERT_FIND_CERT_ID \
02689  (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
02690 #define CERT_FIND_CROSS_CERT_DIST_POINTS \
02691  (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
02692 #define CERT_FIND_PUBKEY_MD5_HASH \
02693  (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
02694 
02695 #define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  0x1
02696 #define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG     0x1
02697 #define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  0x2
02698 #define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG     0x2
02699 #define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4
02700 #define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG    0x4
02701 #define CERT_FIND_NO_ENHKEY_USAGE_FLAG        0x8
02702 #define CERT_FIND_NO_CTL_USAGE_FLAG           0x8
02703 #define CERT_FIND_OR_ENHKEY_USAGE_FLAG        0x10
02704 #define CERT_FIND_OR_CTL_USAGE_FLAG           0x10
02705 #define CERT_FIND_VALID_ENHKEY_USAGE_FLAG     0x20
02706 #define CERT_FIND_VALID_CTL_USAGE_FLAG        0x20
02707 
02708 #define CRL_FIND_ANY        0
02709 #define CRL_FIND_ISSUED_BY  1
02710 #define CRL_FIND_EXISTING   2
02711 #define CRL_FIND_ISSUED_FOR 3
02712 
02713 #define CRL_FIND_ISSUED_BY_AKI_FLAG       0x1
02714 #define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2
02715 #define CRL_FIND_ISSUED_BY_DELTA_FLAG     0x4
02716 #define CRL_FIND_ISSUED_BY_BASE_FLAG      0x8
02717 
02718 typedef struct _CRL_FIND_ISSUED_FOR_PARA
02719 {
02720     PCCERT_CONTEXT pSubjectCert;
02721     PCCERT_CONTEXT pIssuerCert;
02722 } CRL_FIND_ISSUED_FOR_PARA, *PCRL_FIND_ISSUED_FOR_PARA;
02723 
02724 #define CTL_FIND_ANY       0
02725 #define CTL_FIND_SHA1_HASH 1
02726 #define CTL_FIND_MD5_HASH  2
02727 #define CTL_FIND_USAGE     3
02728 #define CTL_FIND_SUBJECT   4
02729 #define CTL_FIND_EXISTING  5
02730 
02731 typedef struct _CTL_FIND_USAGE_PARA
02732 {
02733     DWORD           cbSize;
02734     CTL_USAGE       SubjectUsage;
02735     CRYPT_DATA_BLOB ListIdentifier;
02736     PCERT_INFO      pSigner;
02737 } CTL_FIND_USAGE_PARA, *PCTL_FIND_USAGE_PARA;
02738 
02739 #define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff
02740 #define CTL_FIND_NO_SIGNER_PTR     ((PCERT_INFO)-1)
02741 #define CTL_FIND_SAME_USAGE_FLAG   0x00000001
02742 
02743 typedef struct _CTL_FIND_SUBJECT_PARA
02744 {
02745     DWORD                cbSize;
02746     PCTL_FIND_USAGE_PARA pUsagePara;
02747     DWORD                dwSubjectType;
02748     void                *pvSubject;
02749 } CTL_FIND_SUBJECT_PARA, *PCTL_FIND_SUBJECT_PARA;
02750 
02751 /* PFN_CERT_STORE_PROV_WRITE_CERT dwFlags values */
02752 #define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1
02753 
02754 /* CertAddSerializedElementToStore context types */
02755 #define CERT_STORE_CERTIFICATE_CONTEXT 1
02756 #define CERT_STORE_CRL_CONTEXT         2
02757 #define CERT_STORE_CTL_CONTEXT         3
02758 #define CERT_STORE_ALL_CONTEXT_FLAG    ~0U
02759 #define CERT_STORE_CERTIFICATE_CONTEXT_FLAG \
02760                                     (1 << CERT_STORE_CERTIFICATE_CONTEXT)
02761 #define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT)
02762 #define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT)
02763 
02764 /* CryptBinaryToString/CryptStringToBinary flags */
02765 #define CRYPT_STRING_BASE64HEADER        0x00000000
02766 #define CRYPT_STRING_BASE64              0x00000001
02767 #define CRYPT_STRING_BINARY              0x00000002
02768 #define CRYPT_STRING_BASE64REQUESTHEADER 0x00000003
02769 #define CRYPT_STRING_HEX                 0x00000004
02770 #define CRYPT_STRING_HEXASCII            0x00000005
02771 #define CRYPT_STRING_BASE64_ANY          0x00000006
02772 #define CRYPT_STRING_ANY                 0x00000007
02773 #define CRYPT_STRING_HEX_ANY             0x00000008
02774 #define CRYPT_STRING_BASE64X509CRLHEADER 0x00000009
02775 #define CRYPT_STRING_HEXADDR             0x0000000a
02776 #define CRYPT_STRING_HEXASCIIADDR        0x0000000b
02777 #define CRYPT_STRING_NOCRLF              0x40000000
02778 #define CRYPT_STRING_NOCR                0x80000000
02779 
02780 /* OIDs */
02781 #define szOID_RSA                           "1.2.840.113549"
02782 #define szOID_PKCS                          "1.2.840.113549.1"
02783 #define szOID_RSA_HASH                      "1.2.840.113549.2"
02784 #define szOID_RSA_ENCRYPT                   "1.2.840.113549.3"
02785 #define szOID_PKCS_1                        "1.2.840.113549.1.1"
02786 #define szOID_PKCS_2                        "1.2.840.113549.1.2"
02787 #define szOID_PKCS_3                        "1.2.840.113549.1.3"
02788 #define szOID_PKCS_4                        "1.2.840.113549.1.4"
02789 #define szOID_PKCS_5                        "1.2.840.113549.1.5"
02790 #define szOID_PKCS_6                        "1.2.840.113549.1.6"
02791 #define szOID_PKCS_7                        "1.2.840.113549.1.7"
02792 #define szOID_PKCS_8                        "1.2.840.113549.1.8"
02793 #define szOID_PKCS_9                        "1.2.840.113549.1.9"
02794 #define szOID_PKCS_10                       "1.2.840.113549.1.10"
02795 #define szOID_PKCS_11                       "1.2.840.113549.1.12"
02796 #define szOID_RSA_RSA                       "1.2.840.113549.1.1.1"
02797 #define CERT_RSA_PUBLIC_KEY_OBJID           szOID_RSA_RSA
02798 #define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN    szOID_RSA_RSA
02799 #define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG    szOID_RSA_RSA
02800 #define szOID_RSA_MD2RSA                    "1.2.840.113549.1.1.2"
02801 #define szOID_RSA_MD4RSA                    "1.2.840.113549.1.1.3"
02802 #define szOID_RSA_MD5RSA                    "1.2.840.113549.1.1.4"
02803 #define szOID_RSA_SHA1RSA                   "1.2.840.113549.1.1.5"
02804 #define szOID_RSA_SET0AEP_RSA               "1.2.840.113549.1.1.6"
02805 #define szOID_RSA_SHA256RSA                 "1.2.840.113549.1.1.11"
02806 #define szOID_RSA_SHA384RSA                 "1.2.840.113549.1.1.12"
02807 #define szOID_RSA_SHA512RSA                 "1.2.840.113549.1.1.13"
02808 #define szOID_RSA_DH                        "1.2.840.113549.1.3.1"
02809 #define szOID_RSA_data                      "1.2.840.113549.1.7.1"
02810 #define szOID_RSA_signedData                "1.2.840.113549.1.7.2"
02811 #define szOID_RSA_envelopedData             "1.2.840.113549.1.7.3"
02812 #define szOID_RSA_signEnvData               "1.2.840.113549.1.7.4"
02813 #define szOID_RSA_digestedData              "1.2.840.113549.1.7.5"
02814 #define szOID_RSA_hashedData                "1.2.840.113549.1.7.5"
02815 #define szOID_RSA_encryptedData             "1.2.840.113549.1.7.6"
02816 #define szOID_RSA_emailAddr                 "1.2.840.113549.1.9.1"
02817 #define szOID_RSA_unstructName              "1.2.840.113549.1.9.2"
02818 #define szOID_RSA_contentType               "1.2.840.113549.1.9.3"
02819 #define szOID_RSA_messageDigest             "1.2.840.113549.1.9.4"
02820 #define szOID_RSA_signingTime               "1.2.840.113549.1.9.5"
02821 #define szOID_RSA_counterSign               "1.2.840.113549.1.9.6"
02822 #define szOID_RSA_challengePwd              "1.2.840.113549.1.9.7"
02823 #define szOID_RSA_unstructAddr              "1.2.840.113549.1.9.9"
02824 #define szOID_RSA_extCertAttrs              "1.2.840.113549.1.9.9"
02825 #define szOID_RSA_certExtensions            "1.2.840.113549.1.9.14"
02826 #define szOID_RSA_SMIMECapabilities         "1.2.840.113549.1.9.15"
02827 #define szOID_RSA_preferSignedData          "1.2.840.113549.1.9.15.1"
02828 #define szOID_RSA_SMIMEalg                  "1.2.840.113549.1.9.16.3"
02829 #define szOID_RSA_SMIMEalgESDH              "1.2.840.113549.1.9.16.3.5"
02830 #define szOID_RSA_SMIMEalgCMS3DESwrap       "1.2.840.113549.1.9.16.3.6"
02831 #define szOID_RSA_SMIMEalgCMSRC2wrap        "1.2.840.113549.1.9.16.3.7"
02832 #define szOID_RSA_MD2                       "1.2.840.113549.2.2"
02833 #define szOID_RSA_MD4                       "1.2.840.113549.2.4"
02834 #define szOID_RSA_MD5                       "1.2.840.113549.2.5"
02835 #define szOID_RSA_RC2CBC                    "1.2.840.113549.3.2"
02836 #define szOID_RSA_RC4                       "1.2.840.113549.3.4"
02837 #define szOID_RSA_DES_EDE3_CBC              "1.2.840.113549.3.7"
02838 #define szOID_RSA_RC5_CBCPad                "1.2.840.113549.3.9"
02839 #define szOID_ANSI_X942                     "1.2.840.10046"
02840 #define szOID_ANSI_X942_DH                  "1.2.840.10046.2.1"
02841 #define szOID_X957                          "1.2.840.10040"
02842 #define szOID_X957_DSA                      "1.2.840.10040.4.1"
02843 #define szOID_X957_SHA1DSA                  "1.2.840.10040.4.3"
02844 #define szOID_DS                            "2.5"
02845 #define szOID_DSALG                         "2.5.8"
02846 #define szOID_DSALG_CRPT                    "2.5.8.1"
02847 #define szOID_DSALG_HASH                    "2.5.8.2"
02848 #define szOID_DSALG_SIGN                    "2.5.8.3"
02849 #define szOID_DSALG_RSA                     "2.5.8.1.1"
02850 #define szOID_OIW                           "1.3.14"
02851 #define szOID_OIWSEC                        "1.3.14.3.2"
02852 #define szOID_OIWSEC_md4RSA                 "1.3.14.3.2.2"
02853 #define szOID_OIWSEC_md5RSA                 "1.3.14.3.2.3"
02854 #define szOID_OIWSEC_md4RSA2                "1.3.14.3.2.4"
02855 #define szOID_OIWSEC_desECB                 "1.3.14.3.2.6"
02856 #define szOID_OIWSEC_desCBC                 "1.3.14.3.2.7"
02857 #define szOID_OIWSEC_desOFB                 "1.3.14.3.2.8"
02858 #define szOID_OIWSEC_desCFB                 "1.3.14.3.2.9"
02859 #define szOID_OIWSEC_desMAC                 "1.3.14.3.2.10"
02860 #define szOID_OIWSEC_rsaSign                "1.3.14.3.2.11"
02861 #define szOID_OIWSEC_dsa                    "1.3.14.3.2.12"
02862 #define szOID_OIWSEC_shaDSA                 "1.3.14.3.2.13"
02863 #define szOID_OIWSEC_mdc2RSA                "1.3.14.3.2.14"
02864 #define szOID_OIWSEC_shaRSA                 "1.3.14.3.2.15"
02865 #define szOID_OIWSEC_dhCommMod              "1.3.14.3.2.16"
02866 #define szOID_OIWSEC_desEDE                 "1.3.14.3.2.17"
02867 #define szOID_OIWSEC_sha                    "1.3.14.3.2.18"
02868 #define szOID_OIWSEC_mdc2                   "1.3.14.3.2.19"
02869 #define szOID_OIWSEC_dsaComm                "1.3.14.3.2.20"
02870 #define szOID_OIWSEC_dsaCommSHA             "1.3.14.3.2.21"
02871 #define szOID_OIWSEC_rsaXchg                "1.3.14.3.2.22"
02872 #define szOID_OIWSEC_keyHashSeal            "1.3.14.3.2.23"
02873 #define szOID_OIWSEC_md2RSASign             "1.3.14.3.2.24"
02874 #define szOID_OIWSEC_md5RSASign             "1.3.14.3.2.25"
02875 #define szOID_OIWSEC_sha1                   "1.3.14.3.2.26"
02876 #define szOID_OIWSEC_dsaSHA1                "1.3.14.3.2.27"
02877 #define szOID_OIWSEC_dsaCommSHA1            "1.3.14.3.2.28"
02878 #define szOID_OIWSEC_sha1RSASign            "1.3.14.3.2.29"
02879 #define szOID_OIWDIR                        "1.3.14.7.2"
02880 #define szOID_OIWDIR_CRPT                   "1.3.14.7.2.1"
02881 #define szOID_OIWDIR_HASH                   "1.3.14.7.2.2"
02882 #define szOID_OIWDIR_SIGN                   "1.3.14.7.2.3"
02883 #define szOID_OIWDIR_md2                    "1.3.14.7.2.2.1"
02884 #define szOID_OIWDIR_md2RSA                 "1.3.14.7.2.3.1"
02885 #define szOID_INFOSEC                       "2.16.840.1.101.2.1"
02886 #define szOID_INFOSEC_sdnsSignature         "2.16.840.1.101.2.1.1.1"
02887 #define szOID_INFOSEC_mosaicSignature       "2.16.840.1.101.2.1.1.2"
02888 #define szOID_INFOSEC_sdnsConfidentiality   "2.16.840.1.101.2.1.1.3"
02889 #define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4"
02890 #define szOID_INFOSEC_sdnsIntegrity         "2.16.840.1.101.2.1.1.5"
02891 #define szOID_INFOSEC_mosaicIntegrity       "2.16.840.1.101.2.1.1.6"
02892 #define szOID_INFOSEC_sdnsTokenProtection   "2.16.840.1.101.2.1.1.7"
02893 #define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8"
02894 #define szOID_INFOSEC_sdnsKeyManagement     "2.16.840.1.101.2.1.1.9"
02895 #define szOID_INFOSEC_mosaicKeyManagement   "2.16.840.1.101.2.1.1.10"
02896 #define szOID_INFOSEC_sdnsKMandSig          "2.16.840.1.101.2.1.1.11"
02897 #define szOID_INFOSEC_mosaicKMandSig        "2.16.840.1.101.2.1.1.12"
02898 #define szOID_INFOSEC_SuiteASignature       "2.16.840.1.101.2.1.1.13"
02899 #define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14"
02900 #define szOID_INFOSEC_SuiteAIntegrity       "2.16.840.1.101.2.1.1.15"
02901 #define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16"
02902 #define szOID_INFOSEC_SuiteAKeyManagement   "2.16.840.1.101.2.1.1.17"
02903 #define szOID_INFOSEC_SuiteAKMandSig        "2.16.840.1.101.2.1.1.18"
02904 #define szOID_INFOSEC_mosaicUpdatedSig      "2.16.840.1.101.2.1.1.19"
02905 #define szOID_INFOSEC_mosaicKMandUpdSig     "2.16.840.1.101.2.1.1.20"
02906 #define szOID_INFOSEC_mosaicUpdateInteg     "2.16.840.1.101.2.1.1.21"
02907 #define szOID_COMMON_NAME                   "2.5.4.3"
02908 #define szOID_SUR_NAME                      "2.5.4.4"
02909 #define szOID_DEVICE_SERIAL_NUMBER          "2.5.4.5"
02910 #define szOID_COUNTRY_NAME                  "2.5.4.6"
02911 #define szOID_LOCALITY_NAME                 "2.5.4.7"
02912 #define szOID_STATE_OR_PROVINCE_NAME        "2.5.4.8"
02913 #define szOID_STREET_ADDRESS                "2.5.4.9"
02914 #define szOID_ORGANIZATION_NAME             "2.5.4.10"
02915 #define szOID_ORGANIZATIONAL_UNIT_NAME      "2.5.4.11"
02916 #define szOID_TITLE                         "2.5.4.12"
02917 #define szOID_DESCRIPTION                   "2.5.4.13"
02918 #define szOID_SEARCH_GUIDE                  "2.5.4.14"
02919 #define szOID_BUSINESS_CATEGORY             "2.5.4.15"
02920 #define szOID_POSTAL_ADDRESS                "2.5.4.16"
02921 #define szOID_POSTAL_CODE                   "2.5.4.17"
02922 #define szOID_POST_OFFICE_BOX               "2.5.4.18"
02923 #define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19"
02924 #define szOID_TELEPHONE_NUMBER              "2.5.4.20"
02925 #define szOID_TELEX_NUMBER                  "2.5.4.21"
02926 #define szOID_TELETEXT_TERMINAL_IDENTIFIER  "2.5.4.22"
02927 #define szOID_FACSIMILE_TELEPHONE_NUMBER    "2.5.4.23"
02928 #define szOID_X21_ADDRESS                   "2.5.4.24"
02929 #define szOID_INTERNATIONAL_ISDN_NUMBER     "2.5.4.25"
02930 #define szOID_REGISTERED_ADDRESS            "2.5.4.26"
02931 #define szOID_DESTINATION_INDICATOR         "2.5.4.27"
02932 #define szOID_PREFERRED_DELIVERY_METHOD     "2.5.4.28"
02933 #define szOID_PRESENTATION_ADDRESS          "2.5.4.29"
02934 #define szOID_SUPPORTED_APPLICATION_CONTEXT "2.5.4.30"
02935 #define szOID_MEMBER                        "2.5.4.31"
02936 #define szOID_OWNER                         "2.5.4.32"
02937 #define szOID_ROLE_OCCUPANT                 "2.5.4.33"
02938 #define szOID_SEE_ALSO                      "2.5.4.34"
02939 #define szOID_USER_PASSWORD                 "2.5.4.35"
02940 #define szOID_USER_CERTIFICATE              "2.5.4.36"
02941 #define szOID_CA_CERTIFICATE                "2.5.4.37"
02942 #define szOID_AUTHORITY_REVOCATION_LIST     "2.5.4.38"
02943 #define szOID_CERTIFICATE_REVOCATION_LIST   "2.5.4.39"
02944 #define szOID_CROSS_CERTIFICATE_PAIR        "2.5.4.40"
02945 #define szOID_GIVEN_NAME                    "2.5.4.42"
02946 #define szOID_INITIALS                      "2.5.4.43"
02947 #define szOID_DN_QUALIFIER                  "2.5.4.46"
02948 #define szOID_AUTHORITY_KEY_IDENTIFIER      "2.5.29.1"
02949 #define szOID_KEY_ATTRIBUTES                "2.5.29.2"
02950 #define szOID_CERT_POLICIES_95              "2.5.29.3"
02951 #define szOID_KEY_USAGE_RESTRICTION         "2.5.29.4"
02952 #define szOID_LEGACY_POLICY_MAPPINGS        "2.5.29.5"
02953 #define szOID_SUBJECT_ALT_NAME              "2.5.29.7"
02954 #define szOID_ISSUER_ALT_NAME               "2.5.29.8"
02955 #define szOID_SUBJECT_DIR_ATTRS             "2.5.29.9"
02956 #define szOID_BASIC_CONSTRAINTS             "2.5.29.10"
02957 #define szOID_SUBJECT_KEY_IDENTIFIER        "2.5.29.14"
02958 #define szOID_KEY_USAGE                     "2.5.29.15"
02959 #define szOID_PRIVATEKEY_USAGE_PERIOD       "2.5.29.16"
02960 #define szOID_SUBJECT_ALT_NAME2             "2.5.29.17"
02961 #define szOID_ISSUER_ALT_NAME2              "2.5.29.18"
02962 #define szOID_BASIC_CONSTRAINTS2            "2.5.29.19"
02963 #define szOID_CRL_NUMBER                    "2.5.29.20"
02964 #define szOID_CRL_REASON_CODE               "2.5.29.21"
02965 #define szOID_REASON_CODE_HOLD              "2.5.29.23"
02966 #define szOID_DELTA_CRL_INDICATOR           "2.5.29.27"
02967 #define szOID_ISSUING_DIST_POINT            "2.5.29.28"
02968 #define szOID_NAME_CONSTRAINTS              "2.5.29.30"
02969 #define szOID_CRL_DIST_POINTS               "2.5.29.31"
02970 #define szOID_CERT_POLICIES                 "2.5.29.32"
02971 #define szOID_ANY_CERT_POLICY               "2.5.29.32.0"
02972 #define szOID_POLICY_MAPPINGS               "2.5.29.33"
02973 #define szOID_AUTHORITY_KEY_IDENTIFIER2     "2.5.29.35"
02974 #define szOID_POLICY_CONSTRAINTS            "2.5.29.36"
02975 #define szOID_ENHANCED_KEY_USAGE            "2.5.29.37"
02976 #define szOID_FRESHEST_CRL                  "2.5.29.46"
02977 #define szOID_INHIBIT_ANY_POLICY            "2.5.29.54"
02978 #define szOID_DOMAIN_COMPONENT              "0.9.2342.19200300.100.1.25"
02979 #define szOID_PKCS_12_FRIENDLY_NAME_ATTR     "1.2.840.113549.1.9.20"
02980 #define szOID_PKCS_12_LOCAL_KEY_ID           "1.2.840.113549.1.9.21"
02981 #define szOID_CERT_EXTENSIONS                "1.3.6.1.4.1.311.2.1.14"
02982 #define szOID_NEXT_UPDATE_LOCATION           "1.3.6.1.4.1.311.10.2"
02983 #define szOID_KP_CTL_USAGE_SIGNING           "1.3.6.1.4.1.311.10.3.1"
02984 #define szOID_KP_TIME_STAMP_SIGNING          "1.3.6.1.4.1.311.10.3.2"
02985 #ifndef szOID_SERVER_GATED_CRYPTO
02986 #define szOID_SERVER_GATED_CRYPTO            "1.3.6.1.4.1.311.10.3.3"
02987 #endif
02988 #ifndef szOID_SGC_NETSCAPE
02989 #define szOID_SGC_NETSCAPE                   "2.16.840.1.113730.4.1"
02990 #endif
02991 #define szOID_KP_EFS                         "1.3.6.1.4.1.311.10.3.4"
02992 #define szOID_EFS_RECOVERY                   "1.3.6.1.4.1.311.10.3.4.1"
02993 #define szOID_WHQL_CRYPTO                    "1.3.6.1.4.1.311.10.3.5"
02994 #define szOID_NT5_CRYPTO                     "1.3.6.1.4.1.311.10.3.6"
02995 #define szOID_OEM_WHQL_CRYPTO                "1.3.6.1.4.1.311.10.3.7"
02996 #define szOID_EMBEDDED_NT_CRYPTO             "1.3.6.1.4.1.311.10.3.8"
02997 #define szOID_ROOT_LIST_SIGNER               "1.3.6.1.4.1.311.10.3.9"
02998 #define szOID_KP_QUALIFIED_SUBORDINATION     "1.3.6.1.4.1.311.10.3.10"
02999 #define szOID_KP_KEY_RECOVERY                "1.3.6.1.4.1.311.10.3.11"
03000 #define szOID_KP_DOCUMENT_SIGNING            "1.3.6.1.4.1.311.10.3.12"
03001 #define szOID_KP_LIFETIME_SIGNING            "1.3.6.1.4.1.311.10.3.13"
03002 #define szOID_KP_MOBILE_DEVICE_SOFTWARE      "1.3.6.1.4.1.311.10.3.14"
03003 #define szOID_YESNO_TRUST_ATTR               "1.3.6.1.4.1.311.10.4.1"
03004 #ifndef szOID_DRM
03005 #define szOID_DRM                            "1.3.6.1.4.1.311.10.5.1"
03006 #endif
03007 #ifndef szOID_DRM_INDIVIDUALIZATION
03008 #define szOID_DRM_INDIVIDUALIZATION          "1.3.6.1.4.1.311.10.5.2"
03009 #endif
03010 #ifndef szOID_LICENSES
03011 #define szOID_LICENSES                       "1.3.6.1.4.1.311.10.6.1"
03012 #endif
03013 #ifndef szOID_LICENSE_SERVER
03014 #define szOID_LICENSE_SERVER                 "1.3.6.1.4.1.311.10.6.2"
03015 #endif
03016 #define szOID_REMOVE_CERTIFICATE             "1.3.6.1.4.1.311.10.8.1"
03017 #define szOID_CROSS_CERT_DIST_POINTS         "1.3.6.1.4.1.311.10.9.1"
03018 #define szOID_CTL                            "1.3.6.1.4.1.311.10.1"
03019 #define szOID_SORTED_CTL                     "1.3.6.1.4.1.311.10.1.1"
03020 #define szOID_ANY_APPLICATION_POLICY         "1.3.6.1.4.1.311.10.12.1"
03021 #define szOID_RENEWAL_CERTIFICATE            "1.3.6.1.4.1.311.13.1"
03022 #define szOID_ENROLLMENT_NAME_VALUE_PAIR     "1.3.6.1.4.1.311.13.2.1"
03023 #define szOID_ENROLLMENT_CSP_PROVIDER        "1.3.6.1.4.1.311.13.2.2"
03024 #define szOID_OS_VERSION                     "1.3.6.1.4.1.311.13.2.3"
03025 #define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1"
03026 #define szOID_LOCAL_MACHINE_KEYSET           "1.3.6.1.4.1.311.17.2"
03027 #define szOID_AUTO_ENROLL_CTL_USAGE          "1.3.6.1.4.1.311.20.1"
03028 #define szOID_ENROLL_CERTTYPE_EXTENSION      "1.3.6.1.4.1.311.20.2"
03029 #define szOID_ENROLLMENT_AGENT               "1.3.6.1.4.1.311.20.2.1"
03030 #ifndef szOID_KP_SMARTCARD_LOGON
03031 #define szOID_KP_SMARTCARD_LOGON             "1.3.6.1.4.1.311.20.2.2"
03032 #endif
03033 #ifndef szOID_NT_PRINCIPAL_NAME
03034 #define szOID_NT_PRINCIPAL_NAME              "1.3.6.1.4.1.311.20.2.3"
03035 #endif
03036 #define szOID_CERT_MANIFOLD                  "1.3.6.1.4.1.311.20.3"
03037 #ifndef szOID_CERTSRV_CA_VERSION
03038 #define szOID_CERTSRV_CA_VERSION             "1.3.6.1.4.1.311.21.1"
03039 #endif
03040 #define szOID_CERTSRV_PREVIOUS_CERT_HASH     "1.3.6.1.4.1.311.21.2"
03041 #define szOID_CRL_VIRTUAL_BASE               "1.3.6.1.4.1.311.21.3"
03042 #define szOID_CRL_NEXT_PUBLISH               "1.3.6.1.4.1.311.21.4"
03043 #define szOID_KP_CA_EXCHANGE                 "1.3.6.1.4.1.311.21.5"
03044 #define szOID_KP_KEY_RECOVERY_AGENT          "1.3.6.1.4.1.311.21.6"
03045 #define szOID_CERTIFICATE_TEMPLATE           "1.3.6.1.4.1.311.21.7"
03046 #define szOID_ENTERPRISE_OID_ROOT            "1.3.6.1.4.1.311.21.8"
03047 #define szOID_RDN_DUMMY_SIGNER               "1.3.6.1.4.1.311.21.9"
03048 #define szOID_APPLICATION_CERT_POLICIES      "1.3.6.1.4.1.311.21.10"
03049 #define szOID_APPLICATION_POLICY_MAPPINGS    "1.3.6.1.4.1.311.21.11"
03050 #define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12"
03051 #define szOID_ARCHIVED_KEY_ATTR              "1.3.6.1.4.1.311.21.13"
03052 #define szOID_CRL_SELF_CDP                   "1.3.6.1.4.1.311.21.14"
03053 #define szOID_REQUIRE_CERT_CHAIN_POLICY      "1.3.6.1.4.1.311.21.15"
03054 #define szOID_ARCHIVED_KEY_CERT_HASH         "1.3.6.1.4.1.311.21.16"
03055 #define szOID_ISSUED_CERT_HASH               "1.3.6.1.4.1.311.21.17"
03056 #define szOID_DS_EMAIL_REPLICATION           "1.3.6.1.4.1.311.21.19"
03057 #define szOID_REQUEST_CLIENT_INFO            "1.3.6.1.4.1.311.21.20"
03058 #define szOID_ENCRYPTED_KEY_HASH             "1.3.6.1.4.1.311.21.21"
03059 #define szOID_CERTSRV_CROSSCA_VERSION        "1.3.6.1.4.1.311.21.22"
03060 #define szOID_KEYID_RDN                      "1.3.6.1.4.1.311.10.7.1"
03061 #define szOID_PKIX                           "1.3.6.1.5.5.7"
03062 #define szOID_PKIX_PE                        "1.3.6.1.5.5.7.1"
03063 #define szOID_AUTHORITY_INFO_ACCESS          "1.3.6.1.5.5.7.1.1"
03064 #define szOID_PKIX_POLICY_QUALIFIER_CPS      "1.3.6.1.5.5.7.2.1"
03065 #define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2"
03066 #define szOID_PKIX_KP                        "1.3.6.1.5.5.7.3"
03067 #define szOID_PKIX_KP_SERVER_AUTH            "1.3.6.1.5.5.7.3.1"
03068 #define szOID_PKIX_KP_CLIENT_AUTH            "1.3.6.1.5.5.7.3.2"
03069 #define szOID_PKIX_KP_CODE_SIGNING           "1.3.6.1.5.5.7.3.3"
03070 #define szOID_PKIX_KP_EMAIL_PROTECTION       "1.3.6.1.5.5.7.3.4"
03071 #define szOID_PKIX_KP_IPSEC_END_SYSTEM       "1.3.6.1.5.5.7.3.5"
03072 #define szOID_PKIX_KP_IPSEC_TUNNEL           "1.3.6.1.5.5.7.3.6"
03073 #define szOID_PKIX_KP_IPSEC_USER             "1.3.6.1.5.5.7.3.7"
03074 #define szOID_PKIX_KP_TIMESTAMP_SIGNING      "1.3.6.1.5.5.7.3.8"
03075 #define szOID_PKIX_NO_SIGNATURE              "1.3.6.1.5.5.7.6.2"
03076 #define szOID_CMC                            "1.3.6.1.5.5.7.7"
03077 #define szOID_CMC_STATUS_INFO                "1.3.6.1.5.5.7.7.1"
03078 #define szOID_CMC_IDENTIFICATION             "1.3.6.1.5.5.7.7.2"
03079 #define szOID_CMC_IDENTITY_PROOF             "1.3.6.1.5.5.7.7.3"
03080 #define szOID_CMC_DATA_RETURN                "1.3.6.1.5.5.7.7.4"
03081 #define szOID_CMC_TRANSACTION_ID             "1.3.6.1.5.5.7.7.5"
03082 #define szOID_CMC_SENDER_NONCE               "1.3.6.1.5.5.7.7.6"
03083 #define szOID_CMC_RECIPIENT_NONCE            "1.3.6.1.5.5.7.7.7"
03084 #define szOID_CMC_ADD_EXTENSIONS             "1.3.6.1.5.5.7.7.8"
03085 #define szOID_CMC_ENCRYPTED_POP              "1.3.6.1.5.5.7.7.9"
03086 #define szOID_CMC_DECRYPTED_POP              "1.3.6.1.5.5.7.7.10"
03087 #define szOID_CMC_LRA_POP_WITNESS            "1.3.6.1.5.5.7.7.11"
03088 #define szOID_CMC_GET_CERT                   "1.3.6.1.5.5.7.7.15"
03089 #define szOID_CMC_GET_CRL                    "1.3.6.1.5.5.7.7.16"
03090 #define szOID_CMC_REVOKE_REQUEST             "1.3.6.1.5.5.7.7.17"
03091 #define szOID_CMC_REG_INFO                   "1.3.6.1.5.5.7.7.18"
03092 #define szOID_CMC_RESPONSE_INFO              "1.3.6.1.5.5.7.7.19"
03093 #define szOID_CMC_QUERY_PENDING              "1.3.6.1.5.5.7.7.21"
03094 #define szOID_CMC_ID_POP_LINK_RANDOM         "1.3.6.1.5.5.7.7.22"
03095 #define szOID_CMC_ID_POP_LINK_WITNESS        "1.3.6.1.5.5.7.7.23"
03096 #define szOID_CT_PKI_DATA                    "1.3.6.1.5.5.7.12.2"
03097 #define szOID_CT_PKI_RESPONSE                "1.3.6.1.5.5.7.12.3"
03098 #define szOID_PKIX_ACC_DESCR                 "1.3.6.1.5.5.7.48"
03099 #define szOID_PKIX_OCSP                      "1.3.6.1.5.5.7.48.1"
03100 #define szOID_PKIX_CA_ISSUERS                "1.3.6.1.5.5.7.48.2"
03101 #define szOID_IPSEC_KP_IKE_INTERMEDIATE      "1.3.6.1.5.5.8.2.2"
03102 
03103 #ifndef szOID_SERIALIZED
03104 #define szOID_SERIALIZED                     "1.3.6.1.4.1.311.10.3.3.1"
03105 #endif
03106 
03107 #ifndef szOID_PRODUCT_UPDATE
03108 #define szOID_PRODUCT_UPDATE                 "1.3.6.1.4.1.311.31.1"
03109 #endif
03110 
03111 #define szOID_NETSCAPE                       "2.16.840.1.113730"
03112 #define szOID_NETSCAPE_CERT_EXTENSION        "2.16.840.1.113730.1"
03113 #define szOID_NETSCAPE_CERT_TYPE             "2.16.840.1.113730.1.1"
03114 #define szOID_NETSCAPE_BASE_URL              "2.16.840.1.113730.1.2"
03115 #define szOID_NETSCAPE_REVOCATION_URL        "2.16.840.1.113730.1.3"
03116 #define szOID_NETSCAPE_CA_REVOCATION_URL     "2.16.840.1.113730.1.4"
03117 #define szOID_NETSCAPE_CERT_RENEWAL_URL      "2.16.840.1.113730.1.7"
03118 #define szOID_NETSCAPE_CA_POLICY_URL         "2.16.840.1.113730.1.8"
03119 #define szOID_NETSCAPE_SSL_SERVER_NAME       "2.16.840.1.113730.1.12"
03120 #define szOID_NETSCAPE_COMMENT               "2.16.840.1.113730.1.13"
03121 #define szOID_NETSCAPE_DATA_TYPE             "2.16.840.1.113730.2"
03122 #define szOID_NETSCAPE_CERT_SEQUENCE         "2.16.840.1.113730.2.5"
03123 
03124 /* Bits for szOID_NETSCAPE_CERT_TYPE */
03125 #define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80
03126 #define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40
03127 #define NETSCAPE_SMIME_CERT_TYPE           0x20
03128 #define NETSCAPE_SIGN_CERT_TYPE            0x10
03129 #define NETSCAPE_SSL_CA_CERT_TYPE          0x04
03130 #define NETSCAPE_SMIME_CA_CERT_TYPE        0x02
03131 #define NETSCAPE_SIGN_CA_CERT_TYPE         0x01
03132 
03133 #define CRYPT_ENCODE_DECODE_NONE             0
03134 #define X509_CERT                            ((LPCSTR)1)
03135 #define X509_CERT_TO_BE_SIGNED               ((LPCSTR)2)
03136 #define X509_CERT_CRL_TO_BE_SIGNED           ((LPCSTR)3)
03137 #define X509_CERT_REQUEST_TO_BE_SIGNED       ((LPCSTR)4)
03138 #define X509_EXTENSIONS                      ((LPCSTR)5)
03139 #define X509_NAME_VALUE                      ((LPCSTR)6)
03140 #define X509_ANY_STRING                      X509_NAME_VALUE
03141 #define X509_NAME                            ((LPCSTR)7)
03142 #define X509_PUBLIC_KEY_INFO                 ((LPCSTR)8)
03143 #define X509_AUTHORITY_KEY_ID                ((LPCSTR)9)
03144 #define X509_KEY_ATTRIBUTES                  ((LPCSTR)10)
03145 #define X509_KEY_USAGE_RESTRICTION           ((LPCSTR)11)
03146 #define X509_ALTERNATE_NAME                  ((LPCSTR)12)
03147 #define X509_BASIC_CONSTRAINTS               ((LPCSTR)13)
03148 #define X509_KEY_USAGE                       ((LPCSTR)14)
03149 #define X509_BASIC_CONSTRAINTS2              ((LPCSTR)15)
03150 #define X509_CERT_POLICIES                   ((LPCSTR)16)
03151 #define PKCS_UTC_TIME                        ((LPCSTR)17)
03152 #define PKCS_TIME_REQUEST                    ((LPCSTR)18)
03153 #define RSA_CSP_PUBLICKEYBLOB                ((LPCSTR)19)
03154 #define X509_UNICODE_NAME                    ((LPCSTR)20)
03155 #define X509_KEYGEN_REQUEST_TO_BE_SIGNED     ((LPCSTR)21)
03156 #define PKCS_ATTRIBUTE                       ((LPCSTR)22)
03157 #define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY    ((LPCSTR)23)
03158 #define X509_UNICODE_NAME_VALUE              ((LPCSTR)24)
03159 #define X509_UNICODE_ANY_STRING              X509_UNICODE_NAME_VALUE
03160 #define X509_OCTET_STRING                    ((LPCSTR)25)
03161 #define X509_BITS                            ((LPCSTR)26)
03162 #define X509_INTEGER                         ((LPCSTR)27)
03163 #define X509_MULTI_BYTE_INTEGER              ((LPCSTR)28)
03164 #define X509_ENUMERATED                      ((LPCSTR)29)
03165 #define X509_CRL_REASON_CODE                 X509_ENUMERATED
03166 #define X509_CHOICE_OF_TIME                  ((LPCSTR)30)
03167 #define X509_AUTHORITY_KEY_ID2               ((LPCSTR)31)
03168 #define X509_AUTHORITY_INFO_ACCESS           ((LPCSTR)32)
03169 #define PKCS_CONTENT_INFO                    ((LPCSTR)33)
03170 #define X509_SEQUENCE_OF_ANY                 ((LPCSTR)34)
03171 #define X509_CRL_DIST_POINTS                 ((LPCSTR)35)
03172 #define X509_ENHANCED_KEY_USAGE              ((LPCSTR)36)
03173 #define PKCS_CTL                             ((LPCSTR)37)
03174 #define X509_MULTI_BYTE_UINT                 ((LPCSTR)38)
03175 #define X509_DSS_PUBLICKEY                   X509_MULTI_BYTE_UINT
03176 #define X509_DSS_PARAMETERS                  ((LPCSTR)39)
03177 #define X509_DSS_SIGNATURE                   ((LPCSTR)40)
03178 #define PKCS_RC2_CBC_PARAMETERS              ((LPCSTR)41)
03179 #define PKCS_SMIME_CAPABILITIES              ((LPCSTR)42)
03180 #define PKCS_RSA_PRIVATE_KEY                 ((LPCSTR)43)
03181 #define PKCS_PRIVATE_KEY_INFO                ((LPCSTR)44)
03182 #define PKCS_ENCRYPTED_PRIVATE_KEY_INFO      ((LPCSTR)45)
03183 #define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46)
03184 #define X509_DH_PUBLICKEY                    X509_MULTI_BYTE_UINT
03185 #define X509_DH_PARAMETERS                   ((LPCSTR)47)
03186 #define PKCS_ATTRIBUTES                      ((LPCSTR)48)
03187 #define PKCS_SORTED_CTL                      ((LPCSTR)49)
03188 #define X942_DH_PARAMETERS                   ((LPCSTR)50)
03189 #define X509_BITS_WITHOUT_TRAILING_ZEROES    ((LPCSTR)51)
03190 #define X942_OTHER_INFO                      ((LPCSTR)52)
03191 #define X509_CERT_PAIR                       ((LPCSTR)53)
03192 #define X509_ISSUING_DIST_POINT              ((LPCSTR)54)
03193 #define X509_NAME_CONSTRAINTS                ((LPCSTR)55)
03194 #define X509_POLICY_MAPPINGS                 ((LPCSTR)56)
03195 #define X509_POLICY_CONSTRAINTS              ((LPCSTR)57)
03196 #define X509_CROSS_CERT_DIST_POINTS          ((LPCSTR)58)
03197 #define CMC_DATA                             ((LPCSTR)59)
03198 #define CMC_RESPONSE                         ((LPCSTR)60)
03199 #define CMC_STATUS                           ((LPCSTR)61)
03200 #define CMC_ADD_EXTENSIONS                   ((LPCSTR)62)
03201 #define CMC_ADD_ATTRIBUTES                   ((LPCSTR)63)
03202 #define X509_CERTIFICATE_TEMPLATE            ((LPCSTR)64)
03203 #define PKCS7_SIGNER_INFO                    ((LPCSTR)500)
03204 #define CMS_SIGNER_INFO                      ((LPCSTR)501)
03205 
03206 /* encode/decode flags */
03207 #define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG           0x00008
03208 #define CRYPT_ENCODE_ALLOC_FLAG                                0x08000
03209 #define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000
03210 #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG \
03211  CERT_RDN_ENABLE_T61_UNICODE_FLAG
03212 #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG \
03213  CERT_RDN_ENABLE_UTF8_UNICODE_FLAG
03214 #define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG \
03215  CERT_RDN_DISABLE_CHECK_TYPE_FLAG
03216 
03217 #define CRYPT_DECODE_NOCOPY_FLAG                               0x00001
03218 #define CRYPT_DECODE_TO_BE_SIGNED_FLAG                         0x00002
03219 #define CRYPT_DECODE_SHARE_OID_STRING_FLAG                     0x00004
03220 #define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG           0x00008
03221 #define CRYPT_DECODE_ALLOC_FLAG                                0x08000
03222 #define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG \
03223  CERT_RDN_DISABLE_IE4_UTF8_FLAG
03224 
03225 #define CERT_STORE_SIGNATURE_FLAG     0x00000001
03226 #define CERT_STORE_TIME_VALIDITY_FLAG 0x00000002
03227 #define CERT_STORE_REVOCATION_FLAG    0x00000004
03228 #define CERT_STORE_NO_CRL_FLAG        0x00010000
03229 #define CERT_STORE_NO_ISSUER_FLAG     0x00020000
03230 
03231 #define CERT_STORE_BASE_CRL_FLAG  0x00000100
03232 #define CERT_STORE_DELTA_CRL_FLAG 0x00000200
03233 
03234 /* subject types for CryptVerifyCertificateSignatureEx */
03235 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1
03236 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2
03237 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL  3
03238 
03239 /* issuer types for CryptVerifyCertificateSignatureEx */
03240 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1
03241 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT   2
03242 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN  3
03243 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL   4
03244 
03245 #define CRYPT_GET_URL_FROM_PROPERTY         0x00000001
03246 #define CRYPT_GET_URL_FROM_EXTENSION        0x00000002
03247 #define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x00000004
03248 #define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE   0x00000008
03249 
03250 /* Certificate name string types and flags */
03251 #define CERT_SIMPLE_NAME_STR 1
03252 #define CERT_OID_NAME_STR    2
03253 #define CERT_X500_NAME_STR   3
03254 #define CERT_NAME_STR_SEMICOLON_FLAG           0x40000000
03255 #define CERT_NAME_STR_NO_PLUS_FLAG             0x20000000
03256 #define CERT_NAME_STR_NO_QUOTING_FLAG          0x10000000
03257 #define CERT_NAME_STR_CRLF_FLAG                0x08000000
03258 #define CERT_NAME_STR_COMMA_FLAG               0x04000000
03259 #define CERT_NAME_STR_REVERSE_FLAG             0x02000000
03260 #define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x00040000
03261 #define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG  0x00020000
03262 #define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG    0x00010000
03263 
03264 #define CERT_NAME_EMAIL_TYPE            1
03265 #define CERT_NAME_RDN_TYPE              2
03266 #define CERT_NAME_ATTR_TYPE             3
03267 #define CERT_NAME_SIMPLE_DISPLAY_TYPE   4
03268 #define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5
03269 #define CERT_NAME_DNS_TYPE              6
03270 #define CERT_NAME_URL_TYPE              7
03271 #define CERT_NAME_UPN_TYPE              8
03272 
03273 #define CERT_NAME_ISSUER_FLAG           0x00000001
03274 #define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x00010000
03275 
03276 /* CryptFormatObject flags */
03277 #define CRYPT_FORMAT_STR_MULTI_LINE 0x0001
03278 #define CRYPT_FORMAT_STR_NO_HEX     0x0010
03279 
03280 #define CRYPT_FORMAT_SIMPLE        0x0001
03281 #define CRYPT_FORMAT_X509          0x0002
03282 #define CRYPT_FORMAT_OID           0x0004
03283 #define CRYPT_FORMAT_RDN_SEMICOLON 0x0100
03284 #define CRYPT_FORMAT_RDN_CRLF      0x0200
03285 #define CRYPT_FORMAT_RDN_UNQUOTE   0x0400
03286 #define CRYPT_FORMAT_RDN_REVERSE   0x0800
03287 
03288 #define CRYPT_FORMAT_COMMA     0x1000
03289 #define CRYPT_FORMAT_SEMICOLON CRYPT_FORMAT_RDN_SEMICOLON
03290 #define CRYPT_FORMAT_CRLF      CRYPT_FORMAT_RDN_CRLF
03291 
03292 /* CryptQueryObject types and flags */
03293 #define CERT_QUERY_OBJECT_FILE 1
03294 #define CERT_QUERY_OBJECT_BLOB 2
03295 
03296 #define CERT_QUERY_CONTENT_CERT               1
03297 #define CERT_QUERY_CONTENT_CTL                2
03298 #define CERT_QUERY_CONTENT_CRL                3
03299 #define CERT_QUERY_CONTENT_SERIALIZED_STORE   4
03300 #define CERT_QUERY_CONTENT_SERIALIZED_CERT    5
03301 #define CERT_QUERY_CONTENT_SERIALIZED_CTL     6
03302 #define CERT_QUERY_CONTENT_SERIALIZED_CRL     7
03303 #define CERT_QUERY_CONTENT_PKCS7_SIGNED       8
03304 #define CERT_QUERY_CONTENT_PKCS7_UNSIGNED     9
03305 #define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 10
03306 #define CERT_QUERY_CONTENT_PKCS10             11
03307 #define CERT_QUERY_CONTENT_PFX                12
03308 #define CERT_QUERY_CONTENT_CERT_PAIR          13
03309 
03310 #define CERT_QUERY_CONTENT_FLAG_CERT      (1 << CERT_QUERY_CONTENT_CERT)
03311 #define CERT_QUERY_CONTENT_FLAG_CTL       (1 << CERT_QUERY_CONTENT_CTL)
03312 #define CERT_QUERY_CONTENT_FLAG_CRL       (1 << CERT_QUERY_CONTENT_CRL)
03313 #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE \
03314  (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
03315 #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT \
03316  (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
03317 #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL \
03318  (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
03319 #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL \
03320  (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
03321 #define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED \
03322  (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
03323 #define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED \
03324  (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
03325 #define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED \
03326  (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
03327 #define CERT_QUERY_CONTENT_FLAG_PKCS10    (1 << CERT_QUERY_CONTENT_PKCS10)
03328 #define CERT_QUERY_CONTENT_FLAG_PFX       (1 << CERT_QUERY_CONTENT_PFX)
03329 #define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR)
03330 
03331 #define CERT_QUERY_CONTENT_FLAG_ALL \
03332  CERT_QUERY_CONTENT_FLAG_CERT | \
03333  CERT_QUERY_CONTENT_FLAG_CTL | \
03334  CERT_QUERY_CONTENT_FLAG_CRL | \
03335  CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | \
03336  CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | \
03337  CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | \
03338  CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | \
03339  CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | \
03340  CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | \
03341  CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | \
03342  CERT_QUERY_CONTENT_FLAG_PKCS10 | \
03343  CERT_QUERY_CONTENT_FLAG_PFX | \
03344  CERT_QUERY_CONTENT_FLAG_CERT_PAIR
03345 
03346 #define CERT_QUERY_FORMAT_BINARY                1
03347 #define CERT_QUERY_FORMAT_BASE64_ENCODED        2
03348 #define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3
03349 
03350 #define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY)
03351 #define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED \
03352  (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
03353 #define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \
03354  (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
03355 
03356 #define CERT_QUERY_FORMAT_FLAG_ALL \
03357  CERT_QUERY_FORMAT_FLAG_BINARY | \
03358  CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | \
03359  CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \
03360 
03361 #define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x00000001
03362 #define CERT_SET_KEY_CONTEXT_PROP_ID     0x00000001
03363 
03364 #define CERT_CREATE_SELFSIGN_NO_SIGN     1
03365 #define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2
03366 
03367 /* flags for CryptAcquireCertificatePrivateKey */
03368 #define CRYPT_ACQUIRE_CACHE_FLAG         0x00000001
03369 #define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x00000002
03370 #define CRYPT_ACQUIRE_COMPARE_KEY_FLAG   0x00000004
03371 #define CRYPT_ACQUIRE_SILENT_FLAG        0x00000040
03372 
03373 /* flags for CryptFindCertificateKeyProvInfo */
03374 #define CRYPT_FIND_USER_KEYSET_FLAG    0x00000001
03375 #define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x00000002
03376 #define CRYPT_FIND_SILENT_KEYSET_FLAG  0x00000040
03377 
03378 /* Chain engines and chains */
03379 typedef HANDLE HCERTCHAINENGINE;
03380 #define HCCE_CURRENT_USER  ((HCERTCHAINENGINE)NULL)
03381 #define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)1)
03382 
03383 #define CERT_CHAIN_CACHE_END_CERT           0x00000001
03384 #define CERT_CHAIN_THREAD_STORE_SYNC        0x00000002
03385 #define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x00000004
03386 #define CERT_CHAIN_USE_LOCAL_MACHINE_STORE  0x00000008
03387 #define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x00000010
03388 #define CERT_CHAIN_ENABLE_SHARE_STORE       0x00000020
03389 
03390 typedef struct _CERT_CHAIN_ENGINE_CONFIG
03391 {
03392     DWORD       cbSize;
03393     HCERTSTORE  hRestrictedRoot;
03394     HCERTSTORE  hRestrictedTrust;
03395     HCERTSTORE  hRestrictedOther;
03396     DWORD       cAdditionalStore;
03397     HCERTSTORE *rghAdditionalStore;
03398     DWORD       dwFlags;
03399     DWORD       dwUrlRetrievalTimeout;
03400     DWORD       MaximumCachedCertificates;
03401     DWORD       CycleDetectionModulus;
03402     HCERTSTORE  hExclusiveRoot;
03403     HCERTSTORE  hExclusiveRootTrustedPeople;
03404 } CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;
03405 
03406 /* message-related definitions */
03407 
03408 typedef BOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg, BYTE *pbData,
03409  DWORD cbData, BOOL fFinal);
03410 
03411 #define CMSG_INDEFINITE_LENGTH 0xffffffff
03412 
03413 typedef struct _CMSG_STREAM_INFO
03414 {
03415     DWORD cbContent;
03416     PFN_CMSG_STREAM_OUTPUT pfnStreamOutput;
03417     void *pvArg;
03418 } CMSG_STREAM_INFO, *PCMSG_STREAM_INFO;
03419 
03420 typedef struct _CERT_ISSUER_SERIAL_NUMBER
03421 {
03422     CERT_NAME_BLOB     Issuer;
03423     CRYPT_INTEGER_BLOB SerialNumber;
03424 } CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER;
03425 
03426 typedef struct _CERT_ID
03427 {
03428     DWORD dwIdChoice;
03429     union {
03430         CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber;
03431         CRYPT_HASH_BLOB           KeyId;
03432         CRYPT_HASH_BLOB           HashId;
03433     } DUMMYUNIONNAME;
03434 } CERT_ID, *PCERT_ID;
03435 
03436 #define CERT_ID_ISSUER_SERIAL_NUMBER 1
03437 #define CERT_ID_KEY_IDENTIFIER       2
03438 #define CERT_ID_SHA1_HASH            3
03439 
03440 #ifndef USE_WC_PREFIX
03441 #undef CMSG_DATA /* may be defined by sys/socket.h */
03442 #define CMSG_DATA                 1
03443 #define CMSG_SIGNED               2
03444 #define CMSG_ENVELOPED            3
03445 #define CMSG_SIGNED_AND_ENVELOPED 4
03446 #define CMSG_HASHED               5
03447 #define CMSG_ENCRYPTED            6
03448 
03449 #define CMSG_ALL_FLAGS                 ~0U
03450 #define CMSG_DATA_FLAG                 (1 << CMSG_DATA)
03451 #define CMSG_SIGNED_FLAG               (1 << CMSG_SIGNED)
03452 #define CMSG_ENVELOPED_FLAG            (1 << CMSG_ENVELOPED)
03453 #define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED)
03454 #define CMSG_ENCRYPTED_FLAG            (1 << CMSG_ENCRYPTED)
03455 #else
03456 #define WC_CMSG_DATA                 1
03457 #define WC_CMSG_SIGNED               2
03458 #define WC_CMSG_ENVELOPED            3
03459 #define WC_CMSG_SIGNED_AND_ENVELOPED 4
03460 #define WC_CMSG_HASHED               5
03461 #define WC_CMSG_ENCRYPTED            6
03462 
03463 #define WC_CMSG_ALL_FLAGS                 ~0U
03464 #define WC_CMSG_DATA_FLAG                 (1 << WC_CMSG_DATA)
03465 #define WC_CMSG_SIGNED_FLAG               (1 << WC_CMSG_SIGNED)
03466 #define WC_CMSG_ENVELOPED_FLAG            (1 << WC_CMSG_ENVELOPED)
03467 #define WC_CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << WC_CMSG_SIGNED_AND_ENVELOPED)
03468 #define WC_CMSG_ENCRYPTED_FLAG            (1 << WC_CMSG_ENCRYPTED)
03469 #endif
03470 
03471 typedef struct _CMSG_SIGNER_ENCODE_INFO
03472 {
03473     DWORD                      cbSize;
03474     PCERT_INFO                 pCertInfo;
03475     HCRYPTPROV                 hCryptProv;
03476     DWORD                      dwKeySpec;
03477     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
03478     void                      *pvHashAuxInfo;
03479     DWORD                      cAuthAttr;
03480     PCRYPT_ATTRIBUTE           rgAuthAttr;
03481     DWORD                      cUnauthAttr;
03482     PCRYPT_ATTRIBUTE           rgUnauthAttr;
03483 #ifdef CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS
03484     CERT_ID                    SignerId;
03485     CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
03486     void                      *pvHashEncryptionAuxInfo;
03487 #endif
03488 } CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO;
03489 
03490 typedef struct _CMSG_SIGNED_ENCODE_INFO
03491 {
03492     DWORD                    cbSize;
03493     DWORD                    cSigners;
03494     PCMSG_SIGNER_ENCODE_INFO rgSigners;
03495     DWORD                    cCertEncoded;
03496     PCERT_BLOB               rgCertEncoded;
03497     DWORD                    cCrlEncoded;
03498     PCRL_BLOB                rgCrlEncoded;
03499 #ifdef CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS
03500     DWORD                    cAttrCertEncoded;
03501     PCERT_BLOB               rgAttrCertEncoded;
03502 #endif
03503 } CMSG_SIGNED_ENCODE_INFO, *PCMSG_SIGNED_ENCODE_INFO;
03504 
03505 typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO
03506 {
03507     DWORD                      cbSize;
03508     CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
03509     void                      *pvKeyEncryptionAuxInfo;
03510     HCRYPTPROV_LEGACY          hCryptProv;
03511     CRYPT_BIT_BLOB             RecipientPublicKey;
03512     CERT_ID                    RecipientId;
03513 } CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
03514 
03515 typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO
03516 {
03517     DWORD                       cbSize;
03518     CRYPT_BIT_BLOB              RecipientPublicKey;
03519     CERT_ID                     RecipientId;
03520     FILETIME                    Date;
03521     PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
03522 } CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,
03523  *PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
03524 
03525 typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO
03526 {
03527     DWORD                      cbSize;
03528     CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
03529     void                      *pvKeyEncryptionAuxInfo;
03530     CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm;
03531     void                      *pvKeyWrapAuxInfo;
03532     HCRYPTPROV_LEGACY          hCryptProv;
03533     DWORD                      dwKeySpec;
03534     DWORD                      dwKeyChoice;
03535     union {
03536         PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm;
03537         PCERT_ID                    pSenderId;
03538     } DUMMYUNIONNAME;
03539     CRYPT_DATA_BLOB            UserKeyingMaterial;
03540     DWORD                      cRecipientEncryptedKeys;
03541     PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys;
03542 } CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
03543 
03544 #define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 1
03545 #define CMSG_KEY_AGREE_STATIC_KEY_CHOICE    2
03546 
03547 typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO
03548 {
03549     DWORD                       cbSize;
03550     CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
03551     void                       *pvKeyEncryptionAuxInfo;
03552     HCRYPTPROV                  hCryptProv;
03553     DWORD                       dwKeyChoice;
03554     union {
03555         HCRYPTKEY hKeyEncryptionKey;
03556         void     *pvKeyEncryptionKey;
03557     } DUMMYUNIONNAME;
03558     CRYPT_DATA_BLOB             KeyId;
03559     FILETIME                    Date;
03560     PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
03561 } CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, *PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
03562 
03563 #define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1
03564 
03565 typedef struct _CMSG_RECIPIENT_ENCODE_INFO
03566 {
03567     DWORD dwRecipientChoice;
03568     union {
03569         PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans;
03570         PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree;
03571         PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList;
03572     } DUMMYUNIONNAME;
03573 } CMSG_RECIPIENT_ENCODE_INFO, *PCMSG_RECIPIENT_ENCODE_INFO;
03574 
03575 #define CMSG_KEY_TRANS_RECIPIENT 1
03576 #define CMSG_KEY_AGREE_RECIPIENT 2
03577 #define CMSG_MAIL_LIST_RECIPIENT 3
03578 
03579 typedef struct _CMSG_ENVELOPED_ENCODE_INFO
03580 {
03581     DWORD                       cbSize;
03582     HCRYPTPROV_LEGACY           hCryptProv;
03583     CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
03584     void                       *pvEncryptionAuxInfo;
03585     DWORD                       cRecipients;
03586     PCERT_INFO                 *rgpRecipientCert;
03587 #ifdef CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS
03588     PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
03589     DWORD                       cCertEncoded;
03590     PCERT_BLOB                  rgCertEncoded;
03591     DWORD                       cCrlEncoded;
03592     PCRL_BLOB                   rgCrlEncoded;
03593     DWORD                       cAttrCertEncoded;
03594     PCERT_BLOB                  rgAttrCertEncoded;
03595     DWORD                       cUnprotectedAttr;
03596     PCRYPT_ATTRIBUTE            rgUnprotectedAttr;
03597 #endif
03598 } CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO;
03599 
03600 typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO
03601 {
03602     DWORD                      cbSize;
03603     CMSG_SIGNED_ENCODE_INFO    SignedInfo;
03604     CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo;
03605 } CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO,
03606  *PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;
03607 
03608 typedef struct _CMSG_HASHED_ENCODE_INFO
03609 {
03610     DWORD                      cbSize;
03611     HCRYPTPROV_LEGACY          hCryptProv;
03612     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
03613     void                      *pvHashAuxInfo;
03614 } CMSG_HASHED_ENCODE_INFO, *PCMSG_HASHED_ENCODE_INFO;
03615 
03616 typedef struct _CMSG_ENCRYPTED_ENCODE_INFO
03617 {
03618     DWORD                      cbSize;
03619     CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
03620     void                      *pvEncryptionAuxInfo;
03621 } CMSG_ENCRYPTED_ENCODE_INFO, *PCMSG_ENCRYPTED_ENCODE_INFO;
03622 
03623 #define CMSG_BARE_CONTENT_FLAG             0x00000001
03624 #define CMSG_LENGTH_ONLY_FLAG              0x00000002
03625 #define CMSG_DETACHED_FLAG                 0x00000004
03626 #define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x00000008
03627 #define CMSG_CONTENTS_OCTETS_FLAG          0x00000010
03628 #define CMSG_MAX_LENGTH_FLAG               0x00000020
03629 #define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x00000040
03630 #define CMSG_CRYPT_RELEASE_CONTEXT_FLAG    0x00008000
03631 
03632 #define CMSG_CTRL_VERIFY_SIGNATURE       1
03633 #define CMSG_CTRL_DECRYPT                2
03634 #define CMSG_CTRL_VERIFY_HASH            5
03635 #define CMSG_CTRL_ADD_SIGNER             6
03636 #define CMSG_CTRL_DEL_SIGNER             7
03637 #define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8
03638 #define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9
03639 #define CMSG_CTRL_ADD_CERT               10
03640 #define CMSG_CTRL_DEL_CERT               11
03641 #define CMSG_CTRL_ADD_CRL                12
03642 #define CMSG_CTRL_DEL_CRL                13
03643 #define CMSG_CTRL_ADD_ATTR_CERT          14
03644 #define CMSG_CTRL_DEL_ATTR_CERT          15
03645 #define CMSG_CTRL_KEY_TRANS_DECRYPT      16
03646 #define CMSG_CTRL_KEY_AGREE_DECRYPT      17
03647 #define CMSG_CTRL_MAIL_LIST_DECRYPT      18
03648 #define CMSG_CTRL_VERIFY_SIGNATURE_EX    19
03649 #define CMSG_CTRL_ADD_CMS_SIGNER_INFO    20
03650 
03651 typedef struct _CMSG_CTRL_DECRYPT_PARA
03652 {
03653     DWORD      cbSize;
03654     HCRYPTPROV hCryptProv;
03655     DWORD      dwKeySpec;
03656     DWORD      dwRecipientIndex;
03657 } CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA;
03658 
03659 typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA
03660 {
03661     DWORD           cbSize;
03662     DWORD           dwSignerIndex;
03663     CRYPT_DATA_BLOB blob;
03664 } CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA,
03665  *PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;
03666 
03667 typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA
03668 {
03669     DWORD           cbSize;
03670     DWORD           dwSignerIndex;
03671     DWORD           dwUnauthAttrIndex;
03672 } CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA,
03673  *PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
03674 
03675 typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
03676     DWORD      cbSize;
03677     HCRYPTPROV hCryptProv;
03678     DWORD      dwSignerIndex;
03679     DWORD      dwSignerType;
03680     void      *pvSigner;
03681 } CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA, *PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;
03682 
03683 #define CMSG_VERIFY_SIGNER_PUBKEY 1
03684 #define CMSG_VERIFY_SIGNER_CERT   2
03685 #define CMSG_VERIFY_SIGNER_CHAIN  3
03686 #define CMSG_VERIFY_SIGNER_NULL   4
03687 
03688 #define CMSG_TYPE_PARAM                  1
03689 #define CMSG_CONTENT_PARAM               2
03690 #define CMSG_BARE_CONTENT_PARAM          3
03691 #define CMSG_INNER_CONTENT_TYPE_PARAM    4
03692 #define CMSG_SIGNER_COUNT_PARAM          5
03693 #define CMSG_SIGNER_INFO_PARAM           6
03694 #define CMSG_SIGNER_CERT_INFO_PARAM      7
03695 #define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8
03696 #define CMSG_SIGNER_AUTH_ATTR_PARAM      9
03697 #define CMSG_SIGNER_UNAUTH_ATTR_PARAM    10
03698 #define CMSG_CERT_COUNT_PARAM            11
03699 #define CMSG_CERT_PARAM                  12
03700 #define CMSG_CRL_COUNT_PARAM             13
03701 #define CMSG_CRL_PARAM                   14
03702 #define CMSG_ENVELOPE_ALGORITHM_PARAM    15
03703 #define CMSG_RECIPIENT_COUNT_PARAM       17
03704 #define CMSG_RECIPIENT_INDEX_PARAM       18
03705 #define CMSG_RECIPIENT_INFO_PARAM        19
03706 #define CMSG_HASH_ALGORITHM_PARAM        20
03707 #define CMSG_HASH_DATA_PARAM             21
03708 #define CMSG_COMPUTED_HASH_PARAM         22
03709 #define CMSG_ENCRYPT_PARAM               26
03710 #define CMSG_ENCRYPTED_DIGEST            27
03711 #define CMSG_ENCODED_SIGNER              28
03712 #define CMSG_ENCODED_MESSAGE             29
03713 #define CMSG_VERSION_PARAM               30
03714 #define CMSG_ATTR_CERT_COUNT_PARAM       31
03715 #define CMSG_ATTR_CERT_PARAM             32
03716 #define CMSG_CMS_RECIPIENT_COUNT_PARAM   33
03717 #define CMSG_CMS_RECIPIENT_INDEX_PARAM   34
03718 #define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 35
03719 #define CMSG_CMS_RECIPIENT_INFO_PARAM    36
03720 #define CMSG_UNPROTECTED_ATTR_PARAM      37
03721 #define CMSG_SIGNER_CERT_ID_PARAM        38
03722 #define CMSG_CMS_SIGNER_INFO_PARAM       39
03723 
03724 typedef struct _CMSG_CMS_SIGNER_INFO {
03725     DWORD                      dwVersion;
03726     CERT_ID                    SignerId;
03727     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
03728     CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
03729     CRYPT_DATA_BLOB            EncryptedHash;
03730     CRYPT_ATTRIBUTES           AuthAttrs;
03731     CRYPT_ATTRIBUTES           UnauthAttrs;
03732 } CMSG_CMS_SIGNER_INFO, *PCMSG_CMS_SIGNER_INFO;
03733 
03734 typedef CRYPT_ATTRIBUTES CMSG_ATTR, *PCMSG_ATTR;
03735 
03736 #define CMSG_SIGNED_DATA_V1               1
03737 #define CMSG_SIGNED_DATA_V3               3
03738 #define CMSG_SIGNED_DATA_PKCS_1_5_VERSION CMSG_SIGNED_DATA_V1
03739 #define CMSG_SIGNED_DATA_CMS_VERSION      CMSG_SIGNED_DATA_V3
03740 
03741 #define CMSG_SIGNER_INFO_V1               1
03742 #define CMSG_SIGNER_INFO_V3               3
03743 #define CMSG_SIGNER_INFO_PKCS_1_5_VERSION CMSG_SIGNER_INFO_V1
03744 #define CMSG_SIGNER_INFO_CMS_VERSION      CMSG_SIGNER_INFO_V3
03745 
03746 #define CMSG_HASHED_DATA_V0               0
03747 #define CMSG_HASHED_DATA_V2               2
03748 #define CMSG_HASHED_DATA_PKCS_1_5_VERSION CMSG_HASHED_DATA_V0
03749 #define CMSG_HASHED_DATA_CMS_VERSION      CMSG_HASHED_DATA_V2
03750 
03751 #define CMSG_ENVELOPED_DATA_V0               0
03752 #define CMSG_ENVELOPED_DATA_V2               2
03753 #define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION CMSG_ENVELOPED_DATA_V0
03754 #define CMSG_ENVELOPED_DATA_CMS_VERSION      CMSG_ENVELOPED_DATA_V2
03755 
03756 typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO {
03757     DWORD                      dwVersion;
03758     CERT_ID                    RecipientId;
03759     CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
03760     CRYPT_DATA_BLOB            EncryptedKey;
03761 } CMSG_KEY_TRANS_RECIPIENT_INFO, *PCMSG_KEY_TRANS_RECIPIENT_INFO;
03762 
03763 typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {
03764     CERT_ID                     RecipientId;
03765     CRYPT_DATA_BLOB             EncryptedKey;
03766     PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
03767 } CMSG_RECIPIENT_ENCRYPTED_KEY_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO;
03768 
03769 typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO {
03770     DWORD                               dwVersion;
03771     DWORD                               dwOriginatorChoice;
03772     union {
03773         CERT_ID              OriginatorCertId;
03774         CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo;
03775     } DUMMYUNIONNAME;
03776     CRYPT_ALGORITHM_IDENTIFIER          UserKeyingMaterial;
03777     DWORD                               cRecipientEncryptedKeys;
03778     PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO *rgpRecipientEncryptedKeys;
03779 } CMSG_KEY_AGREE_RECIPIENT_INFO, *PCMSG_KEY_AGREE_RECIPIENT_INFO;
03780 
03781 #define CMSG_KEY_AGREE_ORIGINATOR_CERT       1
03782 #define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 2
03783 
03784 typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO {
03785     DWORD                       dwVersion;
03786     CRYPT_DATA_BLOB             KeyId;
03787     CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
03788     CRYPT_DATA_BLOB             EncryptedKey;
03789     FILETIME                    Date;
03790     PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
03791 } CMSG_MAIL_LIST_RECIPIENT_INFO, *PCMSG_MAIL_LIST_RECIPIENT_INFO;
03792 
03793 typedef struct _CMSG_CMS_RECIPIENT_INFO {
03794     DWORD dwRecipientChoice;
03795     union {
03796         PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
03797         PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;
03798         PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList;
03799     } DUMMYUNIONNAME;
03800 } CMSG_CMS_RECIPIENT_INFO, *PCMSG_CMS_RECIPIENT_INFO;
03801 
03802 #define CMSG_ENVELOPED_RECIPIENT_V0     0
03803 #define CMSG_ENVELOPED_RECIPIENT_V2     2
03804 #define CMSG_ENVELOPED_RECIPIENT_V3     3
03805 #define CMSG_ENVELOPED_RECIPIENT_V4     4
03806 #define CMSG_KEY_TRANS_PKCS_1_5_VERSION CMSG_ENVELOPED_RECIPIENT_V0
03807 #define CMSG_KEY_TRANS_CMS_VERSION      CMSG_ENVELOPED_RECIPIENT_V2
03808 #define CMSG_KEY_AGREE_VERSION          CMSG_ENVELOPED_RECIPIENT_V3
03809 #define CMSG_MAIL_LIST_VERSION          CMSG_ENVELOPED_RECIPIENT_V4
03810 
03811 typedef void * (WINAPI *PFN_CMSG_ALLOC)(size_t cb);
03812 typedef void   (WINAPI *PFN_CMSG_FREE)(void *pv);
03813 
03814 typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
03815     DWORD                       cbSize;
03816     HCRYPTPROV                  hCryptProv;
03817     CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
03818     void                       *pvEncryptionAuxInfo;
03819     DWORD                       cRecipients;
03820     PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
03821     PFN_CMSG_ALLOC              pfnAlloc;
03822     PFN_CMSG_FREE               pfnFree;
03823     DWORD                       dwEncryptFlags;
03824     HCRYPTKEY                   hContentEncryptKey;
03825     DWORD                       dwFlags;
03826 } CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO;
03827 
03828 typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO {
03829     DWORD                       cbSize;
03830     DWORD                       dwRecipientIndex;
03831     CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
03832     CRYPT_DATA_BLOB             EncryptedKey;
03833     DWORD                       dwFlags;
03834 } CMSG_KEY_TRANS_ENCRYPT_INFO, *PCMSG_KEY_TRANS_ENCRYPT_INFO;
03835 
03836 typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
03837     DWORD                          cbSize;
03838     HCRYPTPROV                     hCryptProv;
03839     DWORD                          dwKeySpec;
03840     PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
03841     DWORD                          dwRecipientIndex;
03842 } CMSG_CTRL_KEY_TRANS_DECRYPT_PARA, *PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA;
03843 
03844 typedef BOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(
03845  PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags,
03846  void *pvReserved);
03847 
03848 typedef BOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)(
03849  PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
03850  PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo,
03851  PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo,
03852  DWORD dwFlags, void *pvReserved);
03853 
03854 typedef BOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)(
03855  PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,
03856  PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags,
03857  void *pvReserved, HCRYPTKEY *phContentEncryptKey);
03858 
03859 /* CryptMsgGetAndVerifySigner flags */
03860 #define CMSG_TRUSTED_SIGNER_FLAG   0x1
03861 #define CMSG_SIGNER_ONLY_FLAG      0x2
03862 #define CMSG_USE_SIGNER_INDEX_FLAG 0x4
03863 
03864 /* CryptMsgSignCTL flags */
03865 #define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x00008000
03866 
03867 /* CryptMsgEncodeAndSignCTL flags */
03868 #define CMSG_ENCODED_SORTED_CTL_FLAG               0x1
03869 #define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2
03870 
03871 /* PFXImportCertStore flags */
03872 #define CRYPT_USER_KEYSET           0x00001000
03873 #define PKCS12_IMPORT_RESERVED_MASK 0xffff0000
03874 /* PFXExportCertStore flags */
03875 #define REPORT_NO_PRIVATE_KEY                 0x00000001
03876 #define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x00000002
03877 #define EXPORT_PRIVATE_KEYS                   0x00000004
03878 #define PKCS12_EXPORT_RESERVED_MASK           0xffff0000
03879 
03880 /* function declarations */
03881 /* advapi32.dll */
03882 WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD);
03883 WINADVAPI BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *, LPCWSTR, LPCWSTR, DWORD, DWORD);
03884 #define               CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext)
03885 WINADVAPI BOOL WINAPI CryptGenRandom (HCRYPTPROV, DWORD, BYTE *);
03886 WINADVAPI BOOL WINAPI CryptContextAddRef (HCRYPTPROV, DWORD *, DWORD);
03887 WINADVAPI BOOL WINAPI CryptCreateHash (HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH *);
03888 WINADVAPI BOOL WINAPI CryptDecrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *);
03889 WINADVAPI BOOL WINAPI CryptDeriveKey (HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY *);
03890 WINADVAPI BOOL WINAPI CryptDestroyHash (HCRYPTHASH);
03891 WINADVAPI BOOL WINAPI CryptDestroyKey (HCRYPTKEY);
03892 WINADVAPI BOOL WINAPI CryptDuplicateKey (HCRYPTKEY, DWORD *, DWORD, HCRYPTKEY *);
03893 WINADVAPI BOOL WINAPI CryptDuplicateHash (HCRYPTHASH, DWORD *, DWORD, HCRYPTHASH *);
03894 WINADVAPI BOOL WINAPI CryptEncrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *, DWORD);
03895 WINADVAPI BOOL WINAPI CryptEnumProvidersA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);
03896 WINADVAPI BOOL WINAPI CryptEnumProvidersW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);
03897 #define               CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders)
03898 WINADVAPI BOOL WINAPI CryptEnumProviderTypesA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);
03899 WINADVAPI BOOL WINAPI CryptEnumProviderTypesW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);
03900 #define               CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes)
03901 WINADVAPI BOOL WINAPI CryptExportKey (HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, BYTE *, DWORD *);
03902 WINADVAPI BOOL WINAPI CryptGenKey (HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY *);
03903 WINADVAPI BOOL WINAPI CryptGetKeyParam (HCRYPTKEY, DWORD, BYTE *, DWORD *, DWORD);
03904 WINADVAPI BOOL WINAPI CryptGetHashParam (HCRYPTHASH, DWORD, BYTE *, DWORD *, DWORD);
03905 WINADVAPI BOOL WINAPI CryptGetProvParam (HCRYPTPROV, DWORD, BYTE *, DWORD *, DWORD);
03906 WINADVAPI BOOL WINAPI CryptGetDefaultProviderA (DWORD, DWORD *, DWORD, LPSTR, DWORD *);
03907 WINADVAPI BOOL WINAPI CryptGetDefaultProviderW (DWORD, DWORD *, DWORD, LPWSTR, DWORD *);
03908 #define               CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider)
03909 WINADVAPI BOOL WINAPI CryptGetUserKey (HCRYPTPROV, DWORD, HCRYPTKEY *);
03910 WINADVAPI BOOL WINAPI CryptHashData (HCRYPTHASH, CONST BYTE *, DWORD, DWORD);
03911 WINADVAPI BOOL WINAPI CryptHashSessionKey (HCRYPTHASH, HCRYPTKEY, DWORD);
03912 WINADVAPI BOOL WINAPI CryptImportKey (HCRYPTPROV, CONST BYTE *, DWORD, HCRYPTKEY, DWORD, HCRYPTKEY *);
03913 #if (NTDDI_VERSION >= NTDDI_WINXP)
03914 WINADVAPI BOOL WINAPI CryptReleaseContext (HCRYPTPROV, DWORD);
03915 #else
03916 WINADVAPI BOOL WINAPI CryptReleaseContext (HCRYPTPROV, ULONG_PTR);
03917 #endif
03918 WINADVAPI BOOL WINAPI CryptSetHashParam (HCRYPTHASH, DWORD, CONST BYTE *, DWORD);
03919 WINADVAPI BOOL WINAPI CryptSetKeyParam (HCRYPTKEY, DWORD, CONST BYTE *, DWORD);
03920 WINADVAPI BOOL WINAPI CryptSetProviderA (LPCSTR, DWORD);
03921 WINADVAPI BOOL WINAPI CryptSetProviderW (LPCWSTR, DWORD);
03922 #define               CryptSetProvider WINELIB_NAME_AW(CryptSetProvider)
03923 WINADVAPI BOOL WINAPI CryptSetProviderExA (LPCSTR, DWORD, DWORD *, DWORD);
03924 WINADVAPI BOOL WINAPI CryptSetProviderExW (LPCWSTR, DWORD, DWORD *, DWORD);
03925 #define               CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx)
03926 WINADVAPI BOOL WINAPI CryptSetProvParam (HCRYPTPROV, DWORD, CONST BYTE *, DWORD);
03927 WINADVAPI BOOL WINAPI CryptSignHashA (HCRYPTHASH, DWORD, LPCSTR, DWORD, BYTE *, DWORD *);
03928 WINADVAPI BOOL WINAPI CryptSignHashW (HCRYPTHASH, DWORD, LPCWSTR, DWORD, BYTE *, DWORD *);
03929 #define               CryptSignHash WINELIB_NAME_AW(CryptSignHash)
03930 WINADVAPI BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH, CONST BYTE *, DWORD, HCRYPTKEY, LPCSTR, DWORD);
03931 WINADVAPI BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH, CONST BYTE *, DWORD, HCRYPTKEY, LPCWSTR, DWORD);
03932 #define               CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature)
03933 
03934 /* crypt32.dll functions */
03935 LPVOID WINAPI CryptMemAlloc(ULONG cbSize) __WINE_ALLOC_SIZE(1);
03936 LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize) __WINE_ALLOC_SIZE(2);
03937 VOID   WINAPI CryptMemFree(LPVOID pv);
03938 
03939 BOOL WINAPI CryptBinaryToStringA(const BYTE *pbBinary,
03940  DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString);
03941 BOOL WINAPI CryptBinaryToStringW(const BYTE *pbBinary,
03942  DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString);
03943 #define CryptBinaryToString WINELIB_NAME_AW(CryptBinaryToString)
03944 
03945 BOOL WINAPI CryptStringToBinaryA(LPCSTR pszString,
03946  DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
03947  DWORD *pdwSkip, DWORD *pdwFlags);
03948 BOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString,
03949  DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
03950  DWORD *pdwSkip, DWORD *pdwFlags);
03951 #define CryptStringToBinary WINELIB_NAME_AW(CryptStringToBinary)
03952 
03953 BOOL WINAPI CryptCreateAsyncHandle(DWORD dwFlags, PHCRYPTASYNC phAsync);
03954 BOOL WINAPI CryptSetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,
03955  LPVOID pvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);
03956 BOOL WINAPI CryptGetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,
03957  LPVOID *ppvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree);
03958 BOOL WINAPI CryptCloseAsyncHandle(HCRYPTASYNC hAsync);
03959 
03960 BOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD,LPCSTR,DWORD,LPCWSTR);
03961 BOOL WINAPI CryptRegisterOIDFunction(DWORD,LPCSTR,LPCSTR,LPCWSTR,LPCSTR);
03962 BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
03963                                      LPCSTR pszOID, LPCWSTR szValueName, DWORD *pdwValueType,
03964                                      BYTE *pbValueData, DWORD *pcbValueData);
03965 BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
03966                                      LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType,
03967                                      const BYTE *pbValueData, DWORD cbValueData);
03968 BOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD,LPCSTR,LPCWSTR);
03969 BOOL WINAPI CryptUnregisterOIDFunction(DWORD,LPCSTR,LPCSTR);
03970 BOOL WINAPI CryptEnumOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName,
03971  LPCSTR pszOID, DWORD dwFlags, void *pvArg,
03972  PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);
03973 HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR,DWORD);
03974 BOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet,
03975  DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList);
03976 BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
03977  DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr,
03978  HCRYPTOIDFUNCADDR *phFuncAddr);
03979 BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
03980  DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr,
03981  HCRYPTOIDFUNCADDR *phFuncAddr);
03982 BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr,
03983  DWORD dwFlags);
03984 BOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule,
03985  DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry,
03986  const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags);
03987 BOOL WINAPI CryptInstallDefaultContext(HCRYPTPROV hCryptProv,
03988  DWORD dwDefaultType, const void *pvDefaultPara, DWORD dwFlags,
03989  void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext);
03990 BOOL WINAPI CryptUninstallDefaultContext(HCRYPTDEFAULTCONTEXT hDefaultContext,
03991  DWORD dwFlags, void *pvReserved);
03992 
03993 BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg,
03994  PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);
03995 PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,
03996  DWORD dwGroupId);
03997 BOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo, DWORD dwFlags);
03998 BOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO pInfo);
03999 
04000 LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName);
04001 
04002 LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId);
04003 DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId);
04004 
04005 /* cert store functions */
04006 HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType,
04007  HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara);
04008 
04009 HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv,
04010  LPCSTR szSubSystemProtocol);
04011 HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv,
04012  LPCWSTR szSubSystemProtocol);
04013 #define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore)
04014 
04015 PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore,
04016  PCCERT_CONTEXT pPrev);
04017 
04018 PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore,
04019  PCCRL_CONTEXT pPrev);
04020 
04021 PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore,
04022  PCCTL_CONTEXT pPrev);
04023 
04024 BOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags, void *pvArg,
04025  PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
04026 
04027 BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara,
04028  void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
04029 
04030 BOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
04031  void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
04032 
04033 BOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
04034  LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved);
04035 
04036 BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
04037              DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags);
04038 
04039 BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,
04040  HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority);
04041 
04042 void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore,
04043  HCERTSTORE hSiblingStore);
04044 
04045 BOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig,
04046  HCERTCHAINENGINE *phChainEngine);
04047 
04048 BOOL WINAPI CertResyncCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
04049 
04050 VOID WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
04051 
04052 BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,
04053  PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore,
04054  PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved,
04055  PCCERT_CHAIN_CONTEXT *ppChainContext);
04056 
04057 PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain(
04058  PCCERT_CHAIN_CONTEXT pChainContext);
04059 
04060 VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext);
04061 
04062 PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore,
04063  DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
04064  const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext);
04065 
04066 BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID,
04067  PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara,
04068  PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
04069 
04070 DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext,
04071  DWORD dwPropId);
04072 
04073 BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
04074  DWORD dwPropId, void *pvData, DWORD *pcbData);
04075 
04076 BOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
04077  DWORD dwPropId, DWORD dwFlags, const void *pvData);
04078 
04079 DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext,
04080  DWORD dwPropId);
04081 
04082 BOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCRLContext,
04083  DWORD dwPropId, void *pvData, DWORD *pcbData);
04084 
04085 BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext,
04086  DWORD dwPropId, DWORD dwFlags, const void *pvData);
04087 
04088 DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCTLContext,
04089  DWORD dwPropId);
04090 
04091 BOOL WINAPI CertEnumSubjectInSortedCTL(PCCTL_CONTEXT pCTLContext,
04092  void **ppvNextSubject, PCRYPT_DER_BLOB pSubjectIdentifier,
04093  PCRYPT_DER_BLOB pEncodedAttributes);
04094 
04095 BOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCTLContext,
04096  DWORD dwPropId, void *pvData, DWORD *pcbData);
04097 
04098 BOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCTLContext,
04099  DWORD dwPropId, DWORD dwFlags, const void *pvData);
04100 
04101 BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
04102  void *pvData, DWORD *pcbData);
04103 
04104 BOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
04105  DWORD dwFlags, const void *pvData);
04106 
04107 BOOL WINAPI CertControlStore(HCERTSTORE hCertStore, DWORD dwFlags,
04108  DWORD dwCtrlType, void const *pvCtrlPara);
04109 
04110 HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore);
04111 
04112 BOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags );
04113 
04114 BOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext );
04115 
04116 BOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext );
04117 
04118 BOOL WINAPI CertFreeCTLContext( PCCTL_CONTEXT pCtlContext );
04119 
04120 BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,
04121  PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,
04122  PCCERT_CONTEXT *ppStoreContext);
04123 
04124 BOOL WINAPI CertAddCRLContextToStore( HCERTSTORE hCertStore,
04125  PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
04126  PCCRL_CONTEXT *ppStoreContext );
04127 
04128 BOOL WINAPI CertAddCTLContextToStore( HCERTSTORE hCertStore,
04129  PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,
04130  PCCTL_CONTEXT *ppStoreContext );
04131 
04132 BOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore,
04133  PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,
04134  PCCERT_CONTEXT *ppStoreContext);
04135 
04136 BOOL WINAPI CertAddCRLLinkToStore(HCERTSTORE hCertStore,
04137  PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
04138  PCCRL_CONTEXT *ppStoreContext);
04139 
04140 BOOL WINAPI CertAddCTLLinkToStore(HCERTSTORE hCertStore,
04141  PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,
04142  PCCTL_CONTEXT *ppStoreContext);
04143 
04144 BOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore,
04145  DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded,
04146  DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext);
04147 
04148 BOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR pszCertStoreName,
04149  const BYTE *pbCertEncoded, DWORD cbCertEncoded);
04150 BOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR pszCertStoreName,
04151  const BYTE *pbCertEncoded, DWORD cbCertEncoded);
04152 #define CertAddEncodedCertificateToSystemStore \
04153  WINELIB_NAME_AW(CertAddEncodedCertificateToSystemStore)
04154 
04155 BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore,
04156  DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded,
04157  DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext);
04158 
04159 BOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore,
04160  DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded,
04161  DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext);
04162 
04163 BOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore,
04164  const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags,
04165  DWORD dwContextTypeFlags, DWORD *pdwContentType, const void **ppvContext);
04166 
04167 BOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType,
04168  PCERT_INFO pCertId1, PCERT_INFO pCertId2);
04169 BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType,
04170  PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2);
04171 BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1,
04172  PCRYPT_INTEGER_BLOB pInt2);
04173 BOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType,
04174  PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2);
04175 DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType,
04176  PCERT_PUBLIC_KEY_INFO pPublicKey);
04177 
04178 const void * WINAPI CertCreateContext(DWORD dwContextType, DWORD dwEncodingType,
04179  const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
04180  PCERT_CREATE_CONTEXT_PARA pCreatePara);
04181 
04182 PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,
04183  const BYTE *pbCertEncoded, DWORD cbCertEncoded);
04184 
04185 PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType,
04186   const BYTE* pbCrlEncoded, DWORD cbCrlEncoded);
04187 
04188 PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,
04189  const BYTE *pbCtlEncoded, DWORD cbCtlEncoded);
04190 
04191 PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv,
04192  PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags,
04193  PCRYPT_KEY_PROV_INFO pKeyProvInfo,
04194  PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime,
04195  PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions);
04196 
04197 BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext);
04198 
04199 BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext);
04200 
04201 BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext);
04202 
04203 PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(
04204  PCCERT_CONTEXT pCertContext);
04205 
04206 PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext);
04207 
04208 PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext);
04209 
04210 PCCERT_CONTEXT WINAPI CertFindCertificateInStore( HCERTSTORE hCertStore,
04211  DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
04212  const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext );
04213 
04214 PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore,
04215  DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
04216  const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext);
04217 
04218 PCCTL_CONTEXT WINAPI CertFindCTLInStore(HCERTSTORE hCertStore,
04219  DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
04220  const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext);
04221 
04222 PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore,
04223  PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext,
04224  DWORD *pdwFlags);
04225 
04226 PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore,
04227  DWORD dwCertEncodingType, PCERT_INFO pCertId);
04228 
04229 PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore,
04230  PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags);
04231 
04232 BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,
04233  DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
04234 
04235 BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,
04236  DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
04237 
04238 BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,
04239  DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
04240 
04241 BOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType,
04242  PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage);
04243 
04244 BOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, DWORD dwFlags,
04245  PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage);
04246 BOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext,
04247  PCERT_ENHKEY_USAGE pUsage);
04248 BOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,
04249  LPCSTR pszUsageIdentifier);
04250 BOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,
04251  LPCSTR pszUsageIdentifier);
04252 BOOL WINAPI CertGetValidUsages(DWORD cCerts, PCCERT_CONTEXT *rghCerts,
04253  int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs);
04254 
04255 BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,
04256  const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
04257 BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
04258  const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara,
04259  void *pvEncoded, DWORD *pcbEncoded);
04260 
04261 BOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,
04262  const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo,
04263  DWORD *pcbStructInfo);
04264 BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
04265  const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
04266  PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo);
04267 
04268 BOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType, DWORD dwFormatType,
04269  DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType,
04270  const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat);
04271 
04272 BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,
04273  DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,
04274  DWORD *pcbComputedHash);
04275 
04276 BOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,
04277  DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo,
04278  BYTE *pbComputedHash, DWORD *pcbComputedHash);
04279 
04280 BOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType,
04281  const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,
04282  DWORD *pcbComputedHash);
04283 
04284 BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void* pvObject,
04285  DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags,
04286  DWORD dwFlags, DWORD* pdwMsgAndCertEncodingType, DWORD* pdwContentType,
04287  DWORD* pdwFormatType, HCERTSTORE* phCertStore, HCRYPTMSG* phMsg,
04288  const void** ppvContext);
04289 
04290 BOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
04291  DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned,
04292  DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
04293  const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature);
04294 
04295 BOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv,
04296  DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType,
04297  const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
04298  const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
04299 
04300 BOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV_LEGACY hCryptProv,
04301  DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded,
04302  PCERT_PUBLIC_KEY_INFO pPublicKey);
04303 
04304 BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv,
04305  DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject,
04306  DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved);
04307 
04308 PCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId, DWORD cAttr,
04309  CRYPT_ATTRIBUTE rgAttr[]);
04310 PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions,
04311  CERT_EXTENSION rgExtensions[]);
04312 PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName);
04313 
04314 BOOL WINAPI CertFindSubjectInSortedCTL(PCRYPT_DATA_BLOB pSubjectIdentifier,
04315  PCCTL_CONTEXT pCtlContext, DWORD dwFlags, void *pvReserved,
04316  PCRYPT_DER_BLOB pEncodedAttributes);
04317 
04318 BOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType,
04319  DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN);
04320 
04321 BOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert,
04322  PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved);
04323 BOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert,
04324  PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved,
04325  PCRL_ENTRY *ppCrlEntry);
04326 BOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType,
04327  PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[]);
04328 
04329 BOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject,
04330  PCCERT_CONTEXT pIssuer, DWORD *pdwFlags);
04331 
04332 LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify,
04333  PCRL_INFO pCrlInfo);
04334 LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify,
04335  PCERT_INFO pCertInfo);
04336 BOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo,
04337  PCERT_INFO pIssuerInfo);
04338 
04339 BOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType, DWORD dwSubjectType,
04340  void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags,
04341  PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,
04342  PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);
04343 
04344 BOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType, DWORD dwRevType,
04345  DWORD cContext, PVOID rgpvContext[], DWORD dwFlags,
04346  PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus);
04347 
04348 BOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
04349  DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
04350 BOOL WINAPI CryptExportPublicKeyInfoEx(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
04351  DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags,
04352  void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
04353 BOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv,
04354  DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey);
04355 BOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv,
04356  DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg,
04357  DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey);
04358 
04359 BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert,
04360  DWORD dwFlags, void *pvReserved, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProv, DWORD *pdwKeySpec,
04361  BOOL *pfCallerFreeProv);
04362 
04363 BOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert,
04364  DWORD dwFlags, void *pvReserved);
04365 
04366 BOOL WINAPI CryptProtectData( DATA_BLOB* pDataIn, LPCWSTR szDataDescr,
04367  DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
04368  CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
04369 
04370 BOOL WINAPI CryptUnprotectData( DATA_BLOB* pDataIn, LPWSTR* ppszDataDescr,
04371  DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
04372  CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
04373 
04374 DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType,
04375  DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString);
04376 DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType,
04377  DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString);
04378 #define CertGetNameString WINELIB_NAME_AW(CertGetNameString)
04379 
04380 DWORD WINAPI CertRDNValueToStrA(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
04381  LPSTR psz, DWORD csz);
04382 DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
04383  LPWSTR psz, DWORD csz);
04384 #define CertRDNValueToStr WINELIB_NAME_AW(CertRDNValueToStr)
04385 
04386 DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
04387  DWORD dwStrType, LPSTR psz, DWORD csz);
04388 DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
04389  DWORD dwStrType, LPWSTR psz, DWORD csz);
04390 #define CertNameToStr WINELIB_NAME_AW(CertNameToStr)
04391 
04392 BOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500,
04393  DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,
04394  LPCSTR *ppszError);
04395 BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500,
04396  DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,
04397  LPCWSTR *ppszError);
04398 #define CertStrToName WINELIB_NAME_AW(CertStrToName)
04399 
04400 DWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType,
04401  DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo,
04402  LPSTR pszInnerContentObjID, DWORD cbData);
04403 
04404 BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg);
04405 
04406 BOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags,
04407  DWORD dwCtrlType, const void *pvCtrlPara);
04408 
04409 BOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg, DWORD dwIndex,
04410  DWORD dwCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners);
04411 
04412 BOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType, PBYTE pbSignerInfo,
04413  DWORD cbSignerInfo, DWORD cCountersigners,
04414  PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature,
04415  PDWORD pcbCountersignature);
04416 
04417 HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg);
04418 
04419 BOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType,
04420  PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,
04421  BYTE *pbEncoded, DWORD *pcbEncoded);
04422 
04423 BOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg, DWORD cSignerStore,
04424  HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner,
04425  DWORD *pdwSignerIndex);
04426 
04427 BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
04428  DWORD dwIndex, void *pvData, DWORD *pcbData);
04429 
04430 HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags,
04431  DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo,
04432  PCMSG_STREAM_INFO pStreamInfo);
04433 
04434 HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags,
04435  DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID,
04436  PCMSG_STREAM_INFO pStreamInfo);
04437 
04438 BOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType, BYTE *pbCtlContent,
04439  DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,
04440  BYTE *pbEncoded, DWORD *pcbEncoded);
04441 
04442 BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData,
04443  DWORD cbData, BOOL fFinal);
04444 
04445 BOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV_LEGACY hCryptProv,
04446  DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,
04447  PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,
04448  PCERT_INFO pciCountersigner);
04449 
04450 BOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV_LEGACY hCryptProv,
04451  DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,
04452  PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,
04453  DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvReserved);
04454 
04455 BOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,
04456  BOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[],
04457  DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
04458 BOOL WINAPI CryptSignMessageWithKey(PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara,
04459  const BYTE *pbToBeSigned, DWORD cbToBeSigned, BYTE *pbSignedBlob,
04460  DWORD *pcbSignedBlob);
04461 
04462 BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
04463  DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob,
04464  BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert);
04465 BOOL WINAPI CryptVerifyMessageSignatureWithKey(
04466  PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,
04467  PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, const BYTE *pbSignedBlob,
04468  DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded);
04469 
04470 BOOL WINAPI CryptVerifyDetachedMessageSignature(
04471  PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
04472  const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned,
04473  const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[],
04474  PCCERT_CONTEXT *ppSignerCert);
04475 LONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType,
04476  const BYTE *pbSignedBlob, DWORD cbSignedBlob);
04477 
04478 BOOL WINAPI CryptEncryptMessage(PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
04479  DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[],
04480  const BYTE *pbToBeEncrypted, DWORD cbToBeEncrypted, BYTE *pbEncryptedBlob,
04481  DWORD *pcbEncryptedBlob);
04482 BOOL WINAPI CryptDecryptMessage(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
04483  const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,
04484  DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert);
04485 
04486 BOOL WINAPI CryptSignAndEncryptMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,
04487  PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert,
04488  PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeSignedAndEncrypted,
04489  DWORD cbToBeSignedAndEncrypted, BYTE *pbSignedAndEncryptedBlob,
04490  DWORD *pcbSignedAndEncryptedBlob);
04491 BOOL WINAPI CryptDecryptAndVerifyMessageSignature(
04492  PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
04493  PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
04494  const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,
04495  DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
04496 
04497 HCERTSTORE WINAPI CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType,
04498  HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const BYTE *pbSignedBlob,
04499  DWORD cbSignedBlob);
04500 
04501 BOOL WINAPI CryptDecodeMessage(DWORD dwMsgTypeFlags,
04502  PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
04503  PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
04504  const BYTE *pbEncodedBlob, DWORD cbEncodedBlob, DWORD dwPrevInnerContentType,
04505  DWORD *pdwMsgType, DWORD *pdwInnerContentType, BYTE *pbDecoded,
04506  DWORD *pcbDecoded, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
04507 
04508 BOOL WINAPI CryptHashMessage(PCRYPT_HASH_MESSAGE_PARA pHashPara,
04509  BOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[],
04510  DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob,
04511  BYTE *pbComputedHash, DWORD *pcbComputedHash);
04512 BOOL WINAPI CryptVerifyMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,
04513  BYTE *pbHashedBlob, DWORD cbHashedBlob, BYTE *pbToBeHashed,
04514  DWORD *pcbToBeHashed, BYTE *pbComputedHash, DWORD *pcbComputedHash);
04515 BOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,
04516  BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed,
04517  const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash,
04518  DWORD *pcbComputedHash);
04519 
04520 /* PFX functions */
04521 HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
04522  DWORD dwFlags);
04523 BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX);
04524 BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
04525  DWORD dwFlags);
04526 BOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
04527  LPCWSTR szPassword, void *pvReserved, DWORD dwFlags);
04528 BOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
04529  LPCWSTR szPassword, DWORD dwFlags);
04530 BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
04531  DWORD dwFlags);
04532 
04533 /* cryptnet.dll functions */
04534 BOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval);
04535 
04536 BOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags,
04537  PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo,
04538  DWORD *pcbUrlInfo, LPVOID pvReserved);
04539 
04540 BOOL WINAPI CryptGetTimeValidObject(LPCSTR pszTimeValidOid, void *pvPara,
04541  PCCERT_CONTEXT pIssuer, LPFILETIME pftValidFor, DWORD dwFlags, DWORD dwTimeout,
04542  void **ppvObject, PCRYPT_CREDENTIALS pCredentials, void *pvReserved);
04543 
04544 BOOL WINAPI CryptFlushTimeValidObject(LPCSTR pszFlushTimeValidOid, void *pvPara,
04545  PCCERT_CONTEXT pIssuer, DWORD dwFlags, void *pvReserved);
04546 
04547 BOOL WINAPI CryptInstallCancelRetrieval(PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel,
04548  const void *pvArg, DWORD dwFlags, void *pvReserved);
04549 
04550 BOOL WINAPI CryptUninstallCancelRetrieval(DWORD dwFlags, void *pvReserved);
04551 
04552 BOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszURL, LPCSTR pszObjectOid,
04553  DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,
04554  HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,
04555  PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
04556 BOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszURL, LPCSTR pszObjectOid,
04557  DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,
04558  HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,
04559  PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
04560 #define CryptRetrieveObjectByUrl WINELIB_NAME_AW(CryptRetrieveObjectByUrl)
04561 
04562 /* Not found in crypt32.dll but in softpub.dll */
04563 HRESULT WINAPI FindCertsByIssuer(PCERT_CHAIN pCertChains, DWORD *pcbCertChains,
04564  DWORD *pcCertChains, BYTE* pbEncodedIssuerName, DWORD cbEncodedIssuerName,
04565  LPCWSTR pwszPurpose, DWORD dwKeySpec);
04566 
04567 #ifdef _MSC_VER
04568 #pragma warning(pop)
04569 #endif
04570 
04571 #ifdef __cplusplus
04572 }
04573 #endif
04574 
04575 #endif

Generated on Sat May 26 2012 04:31:26 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.