home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / wincrypt.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-12-15  |  21.0 KB  |  623 lines

  1. #ifndef _WINCRYPT_H
  2. #define _WINCRYPT_H
  3. #if __GNUC__ >=3
  4. #pragma GCC system_header
  5. #endif
  6.  
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #define MS_DEF_PROV_A    "Microsoft Base Cryptographic Provider v1.0"
  11. #define MS_DEF_PROV_W    L"Microsoft Base Cryptographic Provider v1.0"
  12. #define GET_ALG_CLASS(x) (x&57344)
  13. #define GET_ALG_TYPE(x) (x&7680)
  14. #define GET_ALG_SID(x) (x&511)
  15. #define ALG_CLASS_ANY 0
  16. #define ALG_CLASS_SIGNATURE  8192
  17. #define ALG_CLASS_MSG_ENCRYPT  16384
  18. #define ALG_CLASS_DATA_ENCRYPT  24576
  19. #define ALG_CLASS_HASH  32768
  20. #define ALG_CLASS_KEY_EXCHANGE  40960
  21. #define ALG_CLASS_ALL 57344 /* (7 << 13) */
  22. #define ALG_TYPE_ANY 0
  23. #define ALG_TYPE_DSS 512
  24. #define ALG_TYPE_RSA 1024
  25. #define ALG_TYPE_BLOCK 1536
  26. #define ALG_TYPE_STREAM  2048
  27. #define ALG_TYPE_DH 2560 /* (5 << 9) */
  28. #define ALG_TYPE_SECURECHANNEL 3072 /* (6 << 9) */
  29. #define ALG_SID_ANY 0
  30. #define ALG_SID_RSA_ANY 0
  31. #define ALG_SID_RSA_PKCS 1
  32. #define ALG_SID_RSA_MSATWORK 2
  33. #define ALG_SID_RSA_ENTRUST 3
  34. #define ALG_SID_RSA_PGP 4
  35. #define ALG_SID_DSS_ANY 0
  36. #define ALG_SID_DSS_PKCS 1
  37. #define ALG_SID_DSS_DMS 2
  38. #define ALG_SID_DES 1
  39. #define ALG_SID_3DES 3
  40. #define ALG_SID_DESX 4
  41. #define ALG_SID_IDEA 5
  42. #define ALG_SID_CAST 6
  43. #define ALG_SID_SAFERSK64 7
  44. #define ALG_SID_SAFERSK128 8
  45. #define ALG_SID_3DES_112 9
  46. #define ALG_SID_SKIPJACK 10
  47. #define ALG_SID_TEK 11
  48. #define ALG_SID_CYLINK_MEK 12
  49. #define ALG_SID_RC5 13
  50. #define ALG_SID_RC2 2
  51. #define ALG_SID_RC4 1
  52. #define ALG_SID_SEAL 2
  53. #define ALG_SID_MD2 1
  54. #define ALG_SID_MD4 2
  55. #define ALG_SID_MD5 3
  56. #define ALG_SID_SHA 4
  57. #define ALG_SID_MAC 5
  58. #define ALG_SID_RIPEMD 6
  59. #define ALG_SID_RIPEMD160 7
  60. #define ALG_SID_SSL3SHAMD5 8
  61. #define ALG_SID_HMAC 9
  62. #define ALG_SID_TLS1PRF 10
  63. #define ALG_SID_EXAMPLE 80
  64.  
  65. #define CALG_MD2 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD2)
  66. #define CALG_MD4 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD4)
  67. #define CALG_MD5 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD5)
  68. #define CALG_SHA (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_SHA)
  69. #define CALG_MAC (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MAC)
  70. #define CALG_3DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|3)
  71. #define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|12)
  72. #define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|10)
  73. #define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_STREAM|ALG_TYPE_DSS|4)
  74. #define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
  75. #define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_DSS|ALG_SID_DSS_ANY)
  76. #define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
  77. #define CALG_DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DES)
  78. #define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2)
  79. #define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4)
  80. #define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL)
  81. #define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_STREAM|ALG_TYPE_DSS|ALG_SID_DSS_DMS)
  82. #define CALG_DESX (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DESX)
  83. #define CALG_TLS1PRF (ALG_CLASS_DHASH|ALG_TYPE_ANY|ALG_SID_TLS1PRF)
  84.  
  85. #define CRYPT_VERIFYCONTEXT 0xF0000000
  86. #define CRYPT_NEWKEYSET 8
  87. #define CRYPT_DELETEKEYSET 16
  88. #define CRYPT_MACHINE_KEYSET 32
  89. #define CRYPT_SILENT 64
  90. #define CRYPT_EXPORTABLE 1
  91. #define CRYPT_USER_PROTECTED 2
  92. #define CRYPT_CREATE_SALT 4
  93. #define CRYPT_UPDATE_KEY 8
  94. #define SIMPLEBLOB 1
  95. #define PUBLICKEYBLOB 6
  96. #define PRIVATEKEYBLOB 7
  97. #define AT_KEYEXCHANGE 1
  98. #define AT_SIGNATURE 2
  99. #define CRYPT_USERDATA 1
  100. #define KP_IV 1
  101. #define KP_SALT 2
  102. #define KP_PADDING 3
  103. #define KP_MODE 4
  104. #define KP_MODE_BITS 5
  105. #define KP_PERMISSIONS 6
  106. #define KP_ALGID 7
  107. #define KP_BLOCKLEN 8
  108. #define PKCS5_PADDING 1
  109. #define CRYPT_MODE_CBC 1
  110. #define CRYPT_MODE_ECB 2
  111. #define CRYPT_MODE_OFB 3
  112. #define CRYPT_MODE_CFB 4
  113. #define CRYPT_MODE_CTS 5
  114. #define CRYPT_MODE_CBCI 6
  115. #define CRYPT_MODE_CFBP 7
  116. #define CRYPT_MODE_OFBP 8
  117. #define CRYPT_MODE_CBCOFM 9
  118. #define CRYPT_MODE_CBCOFMI 10
  119. #define CRYPT_ENCRYPT 1
  120. #define CRYPT_DECRYPT 2
  121. #define CRYPT_EXPORT 4
  122. #define CRYPT_READ 8
  123. #define CRYPT_WRITE 16
  124. #define CRYPT_MAC 32
  125. #define HP_ALGID 1
  126. #define HP_HASHVAL 2
  127. #define HP_HASHSIZE 4
  128. #define CRYPT_FAILED FALSE
  129. #define CRYPT_SUCCEED TRUE
  130. #define RCRYPT_SUCCEEDED(r) ((r)==CRYPT_SUCCEED)
  131. #define RCRYPT_FAILED(r) ((r)==CRYPT_FAILED)
  132. #define PP_ENUMALGS 1
  133. #define PP_ENUMCONTAINERS 2
  134. #define PP_IMPTYPE 3
  135. #define PP_NAME 4
  136. #define PP_VERSION 5
  137. #define PP_CONTAINER 6
  138. #define PP_ENUMMANDROOTS 25
  139. #define PP_ENUMELECTROOTS 26
  140. #define PP_KEYSET_TYPE 27
  141. #define PP_ADMIN_PIN 31
  142. #define PP_KEYEXCHANGE_PIN 32
  143. #define PP_SIGNATURE_PIN 33
  144. #define PP_SIG_KEYSIZE_INC 34
  145. #define PP_KEYX_KEYSIZE_INC 35
  146. #define PP_UNIQUE_CONTAINER 36
  147. #define PP_SGC_INFO 37
  148. #define PP_USE_HARDWARE_RNG 38
  149. #define PP_KEYSPEC 39
  150. #define PP_ENUMEX_SIGNING_PROT 40
  151. #define CRYPT_FIRST 1
  152. #define CRYPT_NEXT 2
  153. #define CRYPT_IMPL_HARDWARE 1
  154. #define CRYPT_IMPL_SOFTWARE 2
  155. #define CRYPT_IMPL_MIXED 3
  156. #define CRYPT_IMPL_UNKNOWN 4
  157. #define PROV_RSA_FULL 1
  158. #define PROV_RSA_SIG 2
  159. #define PROV_DSS 3
  160. #define PROV_FORTEZZA 4
  161. #define PROV_MS_MAIL 5
  162. #define PROV_SSL 6
  163. #define PROV_STT_MER 7
  164. #define PROV_STT_ACQ 8
  165. #define PROV_STT_BRND 9
  166. #define PROV_STT_ROOT 10
  167. #define PROV_STT_ISS 11
  168. #define PROV_RSA_SCHANNEL 12
  169. #define PROV_DSS_DH 13
  170. #define PROV_EC_ECDSA_SIG 14
  171. #define PROV_EC_ECNRA_SIG 15
  172. #define PROV_EC_ECDSA_FULL 16
  173. #define PROV_EC_ECNRA_FULL 17
  174. #define PROV_DH_SCHANNEL 18
  175. #define PROV_SPYRUS_LYNKS 20
  176. #define PROV_RNG 21
  177. #define PROV_INTEL_SEC 22
  178. #define MAXUIDLEN 64
  179. #define CUR_BLOB_VERSION 2
  180. #define X509_ASN_ENCODING 1
  181. #define PKCS_7_ASN_ENCODING  65536
  182. #define CERT_V1 0
  183. #define CERT_V2 1
  184. #define CERT_V3 2
  185. #define CERT_E_CHAINING (-2146762486)
  186. #define CERT_E_CN_NO_MATCH (-2146762481)
  187. #define CERT_E_EXPIRED (-2146762495)
  188. #define CERT_E_PURPOSE (-2146762490)
  189. #define CERT_E_REVOCATION_FAILURE (-2146762482)
  190. #define CERT_E_REVOKED (-2146762484)
  191. #define CERT_E_ROLE (-2146762493)
  192. #define CERT_E_UNTRUSTEDROOT (-2146762487)
  193. #define CERT_E_UNTRUSTEDTESTROOT (-2146762483)
  194. #define CERT_E_VALIDITYPERIODNESTING (-2146762494)
  195. #define CERT_E_WRONG_USAGE (-2146762480)
  196. #define CERT_E_PATHLENCONST (-2146762492)
  197. #define CERT_E_CRITICAL (-2146762491)
  198. #define CERT_E_ISSUERCHAINING (-2146762489)
  199. #define CERT_E_MALFORMED (-2146762488)
  200. #define CRYPT_E_REVOCATION_OFFLINE (-2146885613)
  201. #define CRYPT_E_REVOKED (-2146885616)
  202. #define TRUST_E_BASIC_CONSTRAINTS (-2146869223)
  203. #define TRUST_E_CERT_SIGNATURE (-2146869244)
  204. #define TRUST_E_FAIL (-2146762485)
  205. #define CERT_TRUST_NO_ERROR 0
  206. #define CERT_TRUST_IS_NOT_TIME_VALID 1
  207. #define CERT_TRUST_IS_NOT_TIME_NESTED 2
  208. #define CERT_TRUST_IS_REVOKED 4
  209. #define CERT_TRUST_IS_NOT_SIGNATURE_VALID 8
  210. #define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 16
  211. #define CERT_TRUST_IS_UNTRUSTED_ROOT 32
  212. #define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 64
  213. #define CERT_TRUST_IS_CYCLIC 128
  214. #define CERT_TRUST_IS_PARTIAL_CHAIN 65536
  215. #define CERT_TRUST_CTL_IS_NOT_TIME_VALID 131072
  216. #define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 262144
  217. #define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 524288
  218. #define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 1
  219. #define CERT_TRUST_HAS_KEY_MATCH_ISSUER 2
  220. #define CERT_TRUST_HAS_NAME_MATCH_ISSUER 4
  221. #define CERT_TRUST_IS_SELF_SIGNED 8
  222. #define CERT_TRUST_IS_COMPLEX_CHAIN 65536
  223. #define CERT_CHAIN_POLICY_BASE ((LPCSTR) 1)
  224. #define CERT_CHAIN_POLICY_AUTHENTICODE  ((LPCSTR) 2)
  225. #define CERT_CHAIN_POLICY_AUTHENTICODE_TS  ((LPCSTR) 3)
  226. #define CERT_CHAIN_POLICY_SSL  ((LPCSTR) 4)
  227. #define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR) 5)
  228. #define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR) 6)
  229. #define USAGE_MATCH_TYPE_AND 0
  230. #define USAGE_MATCH_TYPE_OR 1
  231. #define CERT_SIMPLE_NAME_STR 1
  232. #define CERT_OID_NAME_STR 2
  233. #define CERT_X500_NAME_STR 3
  234. #define CERT_NAME_STR_SEMICOLON_FLAG 1073741824
  235. #define CERT_NAME_STR_CRLF_FLAG 134217728
  236. #define CERT_NAME_STR_NO_PLUS_FLAG 536870912
  237. #define CERT_NAME_STR_NO_QUOTING_FLAG 268435456
  238. #define CERT_NAME_STR_REVERSE_FLAG 33554432
  239. #define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 131072
  240. #define CERT_FIND_ANY 0
  241. #define CERT_FIND_CERT_ID 1048576
  242. #define CERT_FIND_CTL_USAGE 655360
  243. #define CERT_FIND_ENHKEY_USAGE 655360
  244. #define CERT_FIND_EXISTING 851968
  245. #define CERT_FIND_HASH 65536
  246. #define CERT_FIND_ISSUER_ATTR 196612
  247. #define CERT_FIND_ISSUER_NAME 131076
  248. #define CERT_FIND_ISSUER_OF 786432
  249. #define CERT_FIND_KEY_IDENTIFIER 983040
  250. #define CERT_FIND_KEY_SPEC 589824
  251. #define CERT_FIND_MD5_HASH 262144
  252. #define CERT_FIND_PROPERTY 327680
  253. #define CERT_FIND_PUBLIC_KEY 393216
  254. #define CERT_FIND_SHA1_HASH 65536
  255. #define CERT_FIND_SIGNATURE_HASH 917504
  256. #define CERT_FIND_SUBJECT_ATTR 196615
  257. #define CERT_FIND_SUBJECT_CERT 720896
  258. #define CERT_FIND_SUBJECT_NAME 131079
  259. #define CERT_FIND_SUBJECT_STR_A 458759
  260. #define CERT_FIND_SUBJECT_STR_W 524295
  261. #define CERT_FIND_ISSUER_STR_A 458756
  262. #define CERT_FIND_ISSUER_STR_W 524292
  263. #define CERT_FIND_OR_ENHKEY_USAGE_FLAG 16
  264. #define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  1
  265. #define CERT_FIND_NO_ENHKEY_USAGE_FLAG  8
  266. #define CERT_FIND_VALID_ENHKEY_USAGE_FLAG  32
  267. #define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  2
  268. #define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG  2
  269. #define CERT_UNICODE_IS_RDN_ATTRS_FLAG 1
  270. #define CERT_CHAIN_FIND_BY_ISSUER 1
  271. #define CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG 1
  272. #define CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG 2
  273. #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG 32768
  274. #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG 4
  275. #define CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG 8
  276. #define CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG 16384
  277. #define CERT_STORE_PROV_SYSTEM 10
  278. #define CERT_SYSTEM_STORE_LOCAL_MACHINE 131072
  279. #define szOID_PKIX_KP_SERVER_AUTH "4235600"
  280. #define szOID_SERVER_GATED_CRYPTO "4235658"
  281. #define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
  282. #define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
  283.  
  284. #define CRYPT_NOHASHOID 0x00000001
  285. #define CRYPT_NO_SALT 0x10
  286. #define CRYPT_PREGEN 0x40
  287. #define CRYPT_RECIPIENT 0x10
  288. #define CRYPT_INITIATOR 0x40
  289. #define CRYPT_ONLINE 0x80
  290. #define CRYPT_SF 0x100
  291. #define CRYPT_CREATE_IV 0x200
  292. #define CRYPT_KEK 0x400
  293. #define CRYPT_DATA_KEY 0x800
  294. #define CRYPT_VOLATILE 0x1000
  295. #define CRYPT_SGCKEY 0x2000
  296.  
  297. typedef UINT ALG_ID;
  298. typedef struct _VTableProvStruc {FARPROC FuncVerifyImage;} VTableProvStruc,*PVTableProvStruc;
  299. typedef ULONG HCRYPTPROV;
  300. typedef ULONG HCRYPTKEY;
  301. typedef ULONG HCRYPTHASH;
  302. typedef PVOID HCERTSTORE;
  303. typedef PVOID HCRYPTMSG;
  304. typedef PVOID HCERTCHAINENGINE;
  305. typedef struct _CRYPTOAPI_BLOB {
  306.     DWORD cbData;
  307.     BYTE* pbData;
  308. } CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
  309.   CRYPT_UINT_BLOB,    *PCRYPT_UINT_BLOB,
  310.   CRYPT_OBJID_BLOB,   *PCRYPT_OBJID_BLOB,
  311.   CERT_NAME_BLOB,     *PCERT_NAME_BLOB,
  312.   CERT_RDN_VALUE_BLOB,*PCERT_RDN_VALUE_BLOB,
  313.   CERT_BLOB,          *PCERT_BLOB,
  314.   CRL_BLOB,           *PCRL_BLOB,
  315.   DATA_BLOB,          *PDATA_BLOB,
  316.   CRYPT_DATA_BLOB,    *PCRYPT_DATA_BLOB,
  317.   CRYPT_HASH_BLOB,    *PCRYPT_HASH_BLOB,
  318.   CRYPT_DIGEST_BLOB,  *PCRYPT_DIGEST_BLOB,
  319.   CRYPT_DER_BLOB,     *PCRYPT_DER_BLOB,
  320.   CRYPT_ATTR_BLOB,    *PCRYPT_ATTR_BLOB;
  321. /* not described in SDK; has the same layout as HTTPSPolicyCallbackData */
  322. typedef struct _SSL_EXTRA_CERT_CHAIN_POLICY_PARA {
  323.     DWORD cbStruct;
  324.     DWORD dwAuthType;
  325.     DWORD fdwChecks;
  326.     LPWSTR pwszServerName;
  327. } SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA,
  328.   HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData;
  329. /* #if (_WIN32_WINNT>=0x500) */
  330. typedef struct _CERT_CHAIN_POLICY_PARA {
  331.     DWORD cbSize;
  332.     DWORD dwFlags;
  333.     void* pvExtraPolicyPara;
  334. } CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
  335. typedef struct _CERT_CHAIN_POLICY_STATUS {
  336.     DWORD cbSize;
  337.     DWORD dwError;
  338.     LONG lChainIndex;
  339.     LONG lElementIndex;
  340.     void* pvExtraPolicyStatus;
  341. } CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;
  342. /* #endif */
  343. typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
  344.     LPSTR pszObjId;
  345.     CRYPT_OBJID_BLOB Parameters;
  346. } CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
  347. typedef struct _CRYPT_BIT_BLOB {
  348.     DWORD cbData;
  349.     BYTE* pbData;
  350.     DWORD cUnusedBits;
  351. } CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
  352. typedef struct _CERT_PUBLIC_KEY_INFO {
  353.     CRYPT_ALGORITHM_IDENTIFIER Algorithm;
  354.     CRYPT_BIT_BLOB PublicKey;
  355. } CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
  356. typedef struct _CERT_EXTENSION {
  357.     LPSTR pszObjId;
  358.     BOOL fCritical;
  359.     CRYPT_OBJID_BLOB Value;
  360. } CERT_EXTENSION, *PCERT_EXTENSION;
  361. typedef struct _CERT_INFO {
  362.     DWORD dwVersion;
  363.     CRYPT_INTEGER_BLOB SerialNumber;
  364.     CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
  365.     CERT_NAME_BLOB Issuer;
  366.     FILETIME NotBefore;
  367.     FILETIME NotAfter;
  368.     CERT_NAME_BLOB Subject;
  369.     CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
  370.     CRYPT_BIT_BLOB IssuerUniqueId;
  371.     CRYPT_BIT_BLOB SubjectUniqueId;
  372.     DWORD cExtension;
  373.     PCERT_EXTENSION rgExtension;
  374. } CERT_INFO, *PCERT_INFO;
  375. typedef struct _CERT_CONTEXT {
  376.     DWORD dwCertEncodingType;
  377.     BYTE* pbCertEncoded;
  378.     DWORD cbCertEncoded;
  379.     PCERT_INFO pCertInfo;
  380.     HCERTSTORE hCertStore;
  381. } CERT_CONTEXT, *PCERT_CONTEXT;
  382. typedef const CERT_CONTEXT *PCCERT_CONTEXT;
  383. typedef struct _CTL_USAGE {
  384.     DWORD cUsageIdentifier;
  385.     LPSTR *rgpszUsageIdentifier;
  386. } CTL_USAGE, *PCTRL_USAGE,
  387.   CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
  388. typedef struct _CERT_USAGE_MATCH {
  389.     DWORD dwType;
  390.     CERT_ENHKEY_USAGE Usage;
  391. } CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
  392. /* #if (_WIN32_WINNT>=0x500) */
  393. typedef struct _CERT_CHAIN_PARA {
  394.     DWORD cbSize;
  395.     CERT_USAGE_MATCH RequestedUsage;
  396. #if CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
  397.     CERT_USAGE_MATCH RequestedIssuancePolicy;
  398.     DWORD dwUrlRetrievalTimeout;
  399.     BOOL fCheckRevocationFreshnessTime;
  400.     DWORD dwRevocationFreshnessTime;
  401. #endif
  402. } CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;
  403. typedef BOOL (WINAPI *PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK)(PCCERT_CONTEXT,void*);
  404. typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
  405.     DWORD cbSize;
  406.     LPCSTR pszUsageIdentifier;
  407.     DWORD dwKeySpec;
  408.     DWORD dwAcquirePrivateKeyFlags;
  409.     DWORD cIssuer;
  410.     CERT_NAME_BLOB* rgIssuer;
  411.     PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFIndCallback;
  412.     void* pvFindArg;
  413.     DWORD* pdwIssuerChainIndex;
  414.     DWORD* pdwIssuerElementIndex;
  415. } CERT_CHAIN_FIND_BY_ISSUER_PARA, *PCERT_CHAIN_FIND_BY_ISSUER_PARA;
  416. /* #endif */
  417. typedef struct _CERT_TRUST_STATUS {
  418.     DWORD dwErrorStatus;
  419.     DWORD dwInfoStatus;
  420. } CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
  421. typedef struct _CRL_ENTRY {
  422.     CRYPT_INTEGER_BLOB SerialNumber;
  423.     FILETIME RevocationDate;
  424.     DWORD cExtension;
  425.     PCERT_EXTENSION rgExtension;
  426. } CRL_ENTRY, *PCRL_ENTRY;
  427. typedef struct _CRL_INFO {
  428.     DWORD dwVersion;
  429.     CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
  430.     CERT_NAME_BLOB Issuer;
  431.     FILETIME ThisUpdate;
  432.     FILETIME NextUpdate;
  433.     DWORD cCRLEntry;
  434.     PCRL_ENTRY rgCRLEntry;
  435.     DWORD cExtension;
  436.     PCERT_EXTENSION rgExtension;
  437. } CRL_INFO, *PCRL_INFO;
  438. typedef struct _CRL_CONTEXT {
  439.     DWORD dwCertEncodingType;
  440.     BYTE* pbCrlEncoded;
  441.     DWORD cbCrlEncoded;
  442.     PCRL_INFO pCrlInfo;
  443.     HCERTSTORE hCertStore;
  444. } CRL_CONTEXT, *PCRL_CONTEXT;
  445. typedef const CRL_CONTEXT *PCCRL_CONTEXT;
  446. typedef struct _CERT_REVOCATION_CRL_INFO {
  447.     DWORD cbSize;
  448.     PCCRL_CONTEXT pBaseCRLContext;
  449.     PCCRL_CONTEXT pDeltaCRLContext;
  450.     PCRL_ENTRY pCrlEntry;
  451.     BOOL fDeltaCrlEntry;
  452. } CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
  453. typedef struct _CERT_REVOCATION_INFO {
  454.     DWORD cbSize;
  455.     DWORD dwRevocationResult;
  456.     LPCSTR pszRevocationOid;
  457.     LPVOID pvOidSpecificInfo;
  458.     BOOL fHasFreshnessTime;
  459.     DWORD dwFreshnessTime;
  460.     PCERT_REVOCATION_CRL_INFO pCrlInfo;
  461. } CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
  462. /* #if (_WIN32_WINNT>=0x500) */
  463. typedef struct _CERT_CHAIN_ELEMENT {
  464.     DWORD cbSize;
  465.     PCCERT_CONTEXT pCertContext;
  466.     CERT_TRUST_STATUS TrustStatus;
  467.     PCERT_REVOCATION_INFO pRevocationInfo;
  468.     PCERT_ENHKEY_USAGE pIssuanceUsage;
  469.     PCERT_ENHKEY_USAGE pApplicationUsage;
  470. } CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
  471. /* #endif */
  472. typedef struct _CRYPT_ATTRIBUTE {
  473.     LPSTR pszObjId;
  474.     DWORD cValue;
  475.     PCRYPT_ATTR_BLOB rgValue;
  476. } CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
  477. typedef struct _CTL_ENTRY {
  478.     CRYPT_DATA_BLOB SubjectIdentifier;
  479.     DWORD cAttribute;
  480.     PCRYPT_ATTRIBUTE rgAttribute;
  481. } CTL_ENTRY, *PCTL_ENTRY;
  482. typedef struct _CTL_INFO {
  483.     DWORD dwVersion;
  484.     CTL_USAGE SubjectUsage;
  485.     CRYPT_DATA_BLOB ListIdentifier;
  486.     CRYPT_INTEGER_BLOB SequenceNumber;
  487.     FILETIME ThisUpdate;
  488.     FILETIME NextUpdate;
  489.     CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
  490.     DWORD cCTLEntry;
  491.     PCTL_ENTRY rgCTLEntry;
  492.     DWORD cExtension;
  493.     PCERT_EXTENSION rgExtension;
  494. } CTL_INFO, *PCTL_INFO;
  495. typedef struct _CTL_CONTEXT {
  496.     DWORD dwMsgAndCertEncodingType;
  497.     BYTE* pbCtlEncoded;
  498.     DWORD cbCtlEncoded;
  499.     PCTL_INFO pCtlInfo;
  500.     HCERTSTORE hCertStore;
  501.     HCRYPTMSG hCryptMsg;
  502.     BYTE* pbCtlContent;
  503.     DWORD cbCtlContent;
  504. } CTL_CONTEXT, *PCTL_CONTEXT;
  505. typedef const CTL_CONTEXT *PCCTL_CONTEXT;
  506. typedef struct _CERT_TRUST_LIST_INFO {
  507.     DWORD cbSize;
  508.     PCTL_ENTRY pCtlEntry;
  509.     PCCTL_CONTEXT pCtlContext;
  510. } CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
  511. typedef struct _CERT_SIMPLE_CHAIN {
  512.     DWORD cbSize;
  513.     CERT_TRUST_STATUS TrustStatus;
  514.     DWORD cElement;
  515.     PCERT_CHAIN_ELEMENT* rgpElement;
  516.     PCERT_TRUST_LIST_INFO pTrustListInfo;
  517.     BOOL fHasRevocationFreshnessTime;
  518.     DWORD dwRevocationFreshnessTime;
  519. } CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
  520. /* #if (_WIN32_WINNT>=0x500) */
  521. typedef const struct _CERT_CHAIN_CONTEXT* PCCERT_CHAIN_CONTEXT;
  522. typedef struct _CERT_CHAIN_CONTEXT {
  523.     DWORD cbSize;
  524.     CERT_TRUST_STATUS TrustStatus;
  525.     DWORD cChain;
  526.     PCERT_SIMPLE_CHAIN* rgpChain;
  527.     DWORD cLowerQualityChainContext;
  528.     PCCERT_CHAIN_CONTEXT* rgpLowerQualityChainContext;
  529.     BOOL fHasRevocationFreshnessTime;
  530.     DWORD dwRevocationFreshnessTime;
  531. } CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
  532. /* #endif */
  533. typedef struct _PROV_ENUMALGS {
  534.     ALG_ID aiAlgid;
  535.     DWORD dwBitLen;
  536.     DWORD dwNameLen;
  537.     CHAR szName[20];
  538. } PROV_ENUMALGS;
  539. typedef struct _PUBLICKEYSTRUC {
  540.     BYTE bType;
  541.     BYTE bVersion;
  542.     WORD reserved;
  543.     ALG_ID aiKeyAlg;
  544. } PUBLICKEYSTRUC;
  545. typedef struct _RSAPUBKEY {
  546.     DWORD magic;
  547.     DWORD bitlen;
  548.     DWORD pubexp;
  549. } RSAPUBKEY;
  550.  
  551. BOOL WINAPI CertCloseStore(HCERTSTORE,DWORD);
  552. BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE,PCCERT_CONTEXT,LPFILETIME,HCERTSTORE,PCERT_CHAIN_PARA,DWORD,LPVOID,PCCERT_CHAIN_CONTEXT*);
  553. BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR,PCCERT_CHAIN_CONTEXT,PCERT_CHAIN_POLICY_PARA,PCERT_CHAIN_POLICY_STATUS);
  554. void WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT);
  555. DWORD WINAPI CertNameToStrA(DWORD,PCERT_NAME_BLOB,DWORD,LPSTR,DWORD);
  556. DWORD WINAPI CertNameToStrW(DWORD,PCERT_NAME_BLOB,DWORD,LPWSTR,DWORD);
  557. HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV,LPCSTR);
  558. HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV,LPCWSTR);
  559. HCERTSTORE WINAPI CertOpenStore(LPCSTR,DWORD,HCRYPTPROV,DWORD,const void*);
  560. PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CONTEXT);
  561. BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT);
  562. PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE,PCCERT_CONTEXT,PCCERT_CONTEXT,DWORD*);
  563. PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CHAIN_CONTEXT);
  564. BOOL WINAPI CryptAcquireContextA(HCRYPTPROV*,LPCSTR,LPCSTR,DWORD,DWORD);
  565. BOOL WINAPI CryptAcquireContextW(HCRYPTPROV*,LPCWSTR,LPCWSTR,DWORD,DWORD);
  566. BOOL WINAPI CryptReleaseContext(HCRYPTPROV,DWORD);
  567. BOOL WINAPI CryptGenKey(HCRYPTPROV,ALG_ID,DWORD,HCRYPTKEY*);
  568. BOOL WINAPI CryptDeriveKey(HCRYPTPROV,ALG_ID,HCRYPTHASH,DWORD,HCRYPTKEY*);
  569. BOOL WINAPI CryptDestroyKey(HCRYPTKEY);
  570. #if (WINVER >= 0x0500)
  571. BOOL WINAPI CryptDuplicateHash(HCRYPTHASH,DWORD*,DWORD,HCRYPTHASH*);
  572. BOOL WINAPI CryptDuplicateKey(HCRYPTKEY,DWORD*,DWORD,HCRYPTKEY*);
  573. #endif
  574. BOOL WINAPI CryptSetKeyParam(HCRYPTKEY,DWORD,PBYTE,DWORD);
  575. BOOL WINAPI CryptGetKeyParam(HCRYPTKEY,DWORD,PBYTE,PDWORD,DWORD);
  576. BOOL WINAPI CryptSetHashParam(HCRYPTHASH,DWORD,PBYTE,DWORD);
  577. BOOL WINAPI CryptGetHashParam(HCRYPTHASH,DWORD,PBYTE,PDWORD,DWORD);
  578. BOOL WINAPI CryptSetProvParam(HCRYPTPROV,DWORD,PBYTE,DWORD);
  579. BOOL WINAPI CryptGetProvParam(HCRYPTPROV,DWORD,PBYTE,PDWORD,DWORD);
  580. BOOL WINAPI CryptGenRandom(HCRYPTPROV,DWORD,PBYTE);
  581. BOOL WINAPI CryptGetUserKey(HCRYPTPROV,DWORD,HCRYPTKEY*);
  582. BOOL WINAPI CryptExportKey(HCRYPTKEY,HCRYPTKEY,DWORD,DWORD,PBYTE,PDWORD);
  583. BOOL WINAPI CryptImportKey(HCRYPTPROV,PBYTE,DWORD,HCRYPTKEY,DWORD,HCRYPTKEY*);
  584. BOOL WINAPI CryptEncrypt(HCRYPTKEY,HCRYPTHASH,BOOL,DWORD,PBYTE,PDWORD,DWORD);
  585. BOOL WINAPI CryptDecrypt(HCRYPTKEY,HCRYPTHASH,BOOL,DWORD,PBYTE,PDWORD);
  586. BOOL WINAPI CryptCreateHash(HCRYPTPROV,ALG_ID,HCRYPTKEY,DWORD,HCRYPTHASH*);
  587. BOOL WINAPI CryptHashData(HCRYPTHASH,PBYTE,DWORD,DWORD);
  588. BOOL WINAPI CryptHashSessionKey(HCRYPTHASH,HCRYPTKEY,DWORD);
  589. BOOL WINAPI CryptGetHashValue(HCRYPTHASH,DWORD,PBYTE,PDWORD);
  590. BOOL WINAPI CryptDestroyHash(HCRYPTHASH);
  591. BOOL WINAPI CryptSignHashA(HCRYPTHASH,DWORD,LPCSTR,DWORD,PBYTE,PDWORD);
  592. BOOL WINAPI CryptSignHashW(HCRYPTHASH,DWORD,LPCWSTR,DWORD,PBYTE,PDWORD);
  593. BOOL WINAPI CryptVerifySignatureA(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCSTR,DWORD);
  594. BOOL WINAPI CryptVerifySignatureW(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCWSTR,DWORD);
  595. BOOL WINAPI CryptSetProviderA(LPCSTR,DWORD);
  596. BOOL WINAPI CryptSetProviderW(LPCWSTR,DWORD);
  597.  
  598. #ifdef UNICODE
  599. #define CertNameToStr CertNameToStrW
  600. #define CryptAcquireContext CryptAcquireContextW
  601. #define CryptSignHash CryptSignHashW
  602. #define CryptVerifySignature CryptVerifySignatureW
  603. #define CryptSetProvider CryptSetProviderW
  604. #define CertOpenSystemStore CertOpenSystemStoreW
  605. #define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
  606. #define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
  607. #define MS_DEF_PROV MS_DEF_PROV_W
  608. #else
  609. #define CertNameToStr CertNameToStrA
  610. #define CryptAcquireContext CryptAcquireContextA
  611. #define CryptSignHash CryptSignHashA
  612. #define CryptVerifySignature CryptVerifySignatureA
  613. #define CryptSetProvider CryptSetProviderA
  614. #define CertOpenSystemStore CertOpenSystemStoreA
  615. #define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_A
  616. #define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_A
  617. #define MS_DEF_PROV MS_DEF_PROV_A
  618. #endif
  619. #ifdef __cplusplus
  620. }
  621. #endif
  622. #endif /* _WINCRYPT_H */
  623.