OSDN Git Service

Redo the filters based on assumptions discussed in mingw-dvlpr list.
[mingw/mingw-org-wsl.git] / include / wincrypt.h
1 /**
2  * @file wincrypt.h
3  * @copy 2012 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _WINCRYPT_H
25 #define _WINCRYPT_H
26 #pragma GCC system_header
27 #include <_mingw.h>
28
29 #ifndef WINADVAPI
30 #define WINADVAPI
31 #endif
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 #define MS_DEF_PROV_A   "Microsoft Base Cryptographic Provider v1.0"
38 #define MS_DEF_PROV_W   L"Microsoft Base Cryptographic Provider v1.0"
39 #define MS_ENHANCED_PROV_A      "Microsoft Enhanced Cryptographic Provider v1.0"
40 #define MS_ENHANCED_PROV_W      L"Microsoft Enhanced Cryptographic Provider v1.0"
41 #define MS_STRONG_PROV_A        "Microsoft Strong Cryptographic Provider"
42 #define MS_STRONG_PROV_W        L"Microsoft Strong Cryptographic Provider"
43 #define MS_DEF_RSA_SIG_PROV_A   "Microsoft RSA Signature Cryptographic Provider"
44 #define MS_DEF_RSA_SIG_PROV_W   L"Microsoft RSA Signature Cryptographic Provider"
45 #define MS_DEF_RSA_SCHANNEL_PROV_A      "Microsoft RSA SChannel Cryptographic Provider"
46 #define MS_DEF_RSA_SCHANNEL_PROV_W      L"Microsoft RSA SChannel Cryptographic Provider"
47 #define MS_DEF_DSS_PROV_A       "Microsoft Base DSS Cryptographic Provider"
48 #define MS_DEF_DSS_PROV_W       L"Microsoft Base DSS Cryptographic Provider"
49 #define MS_DEF_DSS_DH_PROV_A    "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
50 #define MS_DEF_DSS_DH_PROV_W    L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
51 #define MS_ENH_DSS_DH_PROV_A    "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
52 #define MS_ENH_DSS_DH_PROV_W    L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
53 #define MS_DEF_DH_SCHANNEL_PROV_A       "Microsoft DH SChannel Cryptographic Provider"
54 #define MS_DEF_DH_SCHANNEL_PROV_W       L"Microsoft DH SChannel Cryptographic Provider"
55 #define MS_SCARD_PROV_A "Microsoft Base Smart Card Crypto Provider"
56 #define MS_SCARD_PROV_W L"Microsoft Base Smart Card Crypto Provider"
57
58 #define GET_ALG_CLASS(x) (x&57344)
59 #define GET_ALG_TYPE(x) (x&7680)
60 #define GET_ALG_SID(x) (x&511)
61 #define ALG_CLASS_ANY 0
62 #define ALG_CLASS_SIGNATURE  8192
63 #define ALG_CLASS_MSG_ENCRYPT  16384
64 #define ALG_CLASS_DATA_ENCRYPT  24576
65 #define ALG_CLASS_HASH  32768
66 #define ALG_CLASS_KEY_EXCHANGE  40960
67 #define ALG_CLASS_ALL 57344 /* (7 << 13) */
68 #define ALG_TYPE_ANY 0
69 #define ALG_TYPE_DSS 512
70 #define ALG_TYPE_RSA 1024
71 #define ALG_TYPE_BLOCK 1536
72 #define ALG_TYPE_STREAM  2048
73 #define ALG_TYPE_DH 2560 /* (5 << 9) */
74 #define ALG_TYPE_SECURECHANNEL 3072 /* (6 << 9) */
75 #define ALG_SID_ANY 0
76 #define ALG_SID_RSA_ANY 0
77 #define ALG_SID_RSA_PKCS 1
78 #define ALG_SID_RSA_MSATWORK 2
79 #define ALG_SID_RSA_ENTRUST 3
80 #define ALG_SID_RSA_PGP 4
81 #define ALG_SID_DSS_ANY 0
82 #define ALG_SID_DSS_PKCS 1
83 #define ALG_SID_DSS_DMS 2
84 #define ALG_SID_DES 1
85 #define ALG_SID_3DES 3
86 #define ALG_SID_DESX 4
87 #define ALG_SID_IDEA 5
88 #define ALG_SID_CAST 6
89 #define ALG_SID_SAFERSK64 7
90 #define ALG_SID_SAFERSK128 8
91 #define ALG_SID_3DES_112 9
92 #define ALG_SID_SKIPJACK 10
93 #define ALG_SID_TEK 11
94 #define ALG_SID_CYLINK_MEK 12
95 #define ALG_SID_RC5 13
96 #define ALG_SID_RC2 2
97 #define ALG_SID_RC4 1
98 #define ALG_SID_SEAL 2
99 #define ALG_SID_MD2 1
100 #define ALG_SID_MD4 2
101 #define ALG_SID_MD5 3
102 #define ALG_SID_SHA 4
103 #define ALG_SID_MAC 5
104 #define ALG_SID_RIPEMD 6
105 #define ALG_SID_RIPEMD160 7
106 #define ALG_SID_SSL3SHAMD5 8
107 #define ALG_SID_HMAC 9
108 #define ALG_SID_TLS1PRF 10
109 #define ALG_SID_AES_128 14
110 #define ALG_SID_AES_192 15
111 #define ALG_SID_AES_256 16
112 #define ALG_SID_AES 17
113 #define ALG_SID_EXAMPLE 80
114
115 #define CALG_MD2 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD2)
116 #define CALG_MD4 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD4)
117 #define CALG_MD5 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD5)
118 #define CALG_SHA (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_SHA)
119 #define CALG_SHA1 CALG_SHA
120 #define CALG_MAC (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MAC)
121 #define CALG_3DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|3)
122 #define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|12)
123 #define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|10)
124 #define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_STREAM|ALG_TYPE_DSS|4)
125 #define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
126 #define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_DSS|ALG_SID_DSS_ANY)
127 #define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
128 #define CALG_DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DES)
129 #define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2)
130 #define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4)
131 #define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL)
132 #define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_STREAM|ALG_TYPE_DSS|ALG_SID_DSS_DMS)
133 #define CALG_DESX (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DESX)
134 #define CALG_TLS1PRF (ALG_CLASS_DHASH|ALG_TYPE_ANY|ALG_SID_TLS1PRF)
135 #define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_128)
136 #define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_192)
137 #define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_256)
138 #define CALG_AES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES)
139
140 #define CRYPT_VERIFYCONTEXT 0xF0000000
141 #define CRYPT_NEWKEYSET 8
142 #define CRYPT_DELETEKEYSET 16
143 #define CRYPT_MACHINE_KEYSET 32
144 #define CRYPT_SILENT 64
145 #define CRYPT_EXPORTABLE 1
146 #define CRYPT_USER_PROTECTED 2
147 #define CRYPT_CREATE_SALT 4
148 #define CRYPT_UPDATE_KEY 8
149 #define SIMPLEBLOB 1
150 #define PUBLICKEYBLOB 6
151 #define PRIVATEKEYBLOB 7
152 #define PLAINTEXTKEYBLOB 8
153 #define OPAQUEKEYBLOB 9
154 #define PUBLICKEYBLOBEX 10
155 #define SYMMETRICWRAPKEYBLOB 11
156 #define AT_KEYEXCHANGE 1
157 #define AT_SIGNATURE 2
158 #define CRYPT_USERDATA 1
159 #define PKCS5_PADDING 1
160 #define CRYPT_MODE_CBC 1
161 #define CRYPT_MODE_ECB 2
162 #define CRYPT_MODE_OFB 3
163 #define CRYPT_MODE_CFB 4
164 #define CRYPT_MODE_CTS 5
165 #define CRYPT_MODE_CBCI 6
166 #define CRYPT_MODE_CFBP 7
167 #define CRYPT_MODE_OFBP 8
168 #define CRYPT_MODE_CBCOFM 9
169 #define CRYPT_MODE_CBCOFMI 10
170 #define CRYPT_ENCRYPT 1
171 #define CRYPT_DECRYPT 2
172 #define CRYPT_EXPORT 4
173 #define CRYPT_READ 8
174 #define CRYPT_WRITE 16
175 #define CRYPT_MAC 32
176 #define HP_ALGID 1
177 #define HP_HASHVAL 2
178 #define HP_HASHSIZE 4
179 #define HP_HMAC_INFO 5
180 #define CRYPT_FAILED FALSE
181 #define CRYPT_SUCCEED TRUE
182 #define RCRYPT_SUCCEEDED(r) ((r)==CRYPT_SUCCEED)
183 #define RCRYPT_FAILED(r) ((r)==CRYPT_FAILED)
184 #define PP_ENUMALGS 1
185 #define PP_ENUMCONTAINERS 2
186 #define PP_IMPTYPE 3
187 #define PP_NAME 4
188 #define PP_VERSION 5
189 #define PP_CONTAINER 6
190 #define PP_CHANGE_PASSWORD      7
191 #define PP_KEYSET_SEC_DESCR     8
192 #define PP_CERTCHAIN    9
193 #define PP_KEY_TYPE_SUBTYPE     10
194 #define PP_PROVTYPE     16
195 #define PP_KEYSTORAGE   17
196 #define PP_APPLI_CERT   18
197 #define PP_SYM_KEYSIZE  19
198 #define PP_SESSION_KEYSIZE      20
199 #define PP_UI_PROMPT    21
200 #define PP_ENUMALGS_EX  22
201 #define PP_ENUMMANDROOTS 25
202 #define PP_ENUMELECTROOTS 26
203 #define PP_KEYSET_TYPE 27
204 #define PP_ADMIN_PIN 31
205 #define PP_KEYEXCHANGE_PIN 32
206 #define PP_SIGNATURE_PIN 33
207 #define PP_SIG_KEYSIZE_INC 34
208 #define PP_KEYX_KEYSIZE_INC 35
209 #define PP_UNIQUE_CONTAINER 36
210 #define PP_SGC_INFO 37
211 #define PP_USE_HARDWARE_RNG 38
212 #define PP_KEYSPEC 39
213 #define PP_ENUMEX_SIGNING_PROT 40
214 #define CRYPT_FIRST 1
215 #define CRYPT_NEXT 2
216 #define CRYPT_IMPL_HARDWARE 1
217 #define CRYPT_IMPL_SOFTWARE 2
218 #define CRYPT_IMPL_MIXED 3
219 #define CRYPT_IMPL_UNKNOWN 4
220 #define PROV_RSA_FULL 1
221 #define PROV_RSA_SIG 2
222 #define PROV_DSS 3
223 #define PROV_FORTEZZA 4
224 #define PROV_MS_EXCHANGE 5
225 #define PROV_MS_MAIL 5
226 #define PROV_SSL 6
227 #define PROV_STT_MER 7
228 #define PROV_STT_ACQ 8
229 #define PROV_STT_BRND 9
230 #define PROV_STT_ROOT 10
231 #define PROV_STT_ISS 11
232 #define PROV_RSA_SCHANNEL 12
233 #define PROV_DSS_DH 13
234 #define PROV_EC_ECDSA_SIG 14
235 #define PROV_EC_ECNRA_SIG 15
236 #define PROV_EC_ECDSA_FULL 16
237 #define PROV_EC_ECNRA_FULL 17
238 #define PROV_DH_SCHANNEL 18
239 #define PROV_SPYRUS_LYNKS 20
240 #define PROV_RNG 21
241 #define PROV_INTEL_SEC 22
242 #define PROV_RSA_AES 24
243 #define MAXUIDLEN 64
244 #define CUR_BLOB_VERSION 2
245 #define X509_ASN_ENCODING 1
246 #define PKCS_7_ASN_ENCODING  65536
247 #define CERT_V1 0
248 #define CERT_V2 1
249 #define CERT_V3 2
250 #define CERT_E_CHAINING (-2146762486)
251 #define CERT_E_CN_NO_MATCH (-2146762481)
252 #define CERT_E_EXPIRED (-2146762495)
253 #define CERT_E_PURPOSE (-2146762490)
254 #define CERT_E_REVOCATION_FAILURE (-2146762482)
255 #define CERT_E_REVOKED (-2146762484)
256 #define CERT_E_ROLE (-2146762493)
257 #define CERT_E_UNTRUSTEDROOT (-2146762487)
258 #define CERT_E_UNTRUSTEDTESTROOT (-2146762483)
259 #define CERT_E_VALIDITYPERIODNESTING (-2146762494)
260 #define CERT_E_WRONG_USAGE (-2146762480)
261 #define CERT_E_PATHLENCONST (-2146762492)
262 #define CERT_E_CRITICAL (-2146762491)
263 #define CERT_E_ISSUERCHAINING (-2146762489)
264 #define CERT_E_MALFORMED (-2146762488)
265 #define CRYPT_E_REVOCATION_OFFLINE (-2146885613)
266 #define CRYPT_E_REVOKED (-2146885616)
267 #define TRUST_E_BASIC_CONSTRAINTS (-2146869223)
268 #define TRUST_E_CERT_SIGNATURE (-2146869244)
269 #define TRUST_E_FAIL (-2146762485)
270 #define CERT_TRUST_NO_ERROR 0
271 #define CERT_TRUST_IS_NOT_TIME_VALID 1
272 #define CERT_TRUST_IS_NOT_TIME_NESTED 2
273 #define CERT_TRUST_IS_REVOKED 4
274 #define CERT_TRUST_IS_NOT_SIGNATURE_VALID 8
275 #define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 16
276 #define CERT_TRUST_IS_UNTRUSTED_ROOT 32
277 #define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 64
278 #define CERT_TRUST_IS_CYCLIC 128
279 #define CERT_TRUST_IS_PARTIAL_CHAIN 65536
280 #define CERT_TRUST_CTL_IS_NOT_TIME_VALID 131072
281 #define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 262144
282 #define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 524288
283 #define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 1
284 #define CERT_TRUST_HAS_KEY_MATCH_ISSUER 2
285 #define CERT_TRUST_HAS_NAME_MATCH_ISSUER 4
286 #define CERT_TRUST_IS_SELF_SIGNED 8
287 #define CERT_TRUST_IS_COMPLEX_CHAIN 65536
288 #define CERT_CHAIN_POLICY_BASE ((LPCSTR) 1)
289 #define CERT_CHAIN_POLICY_AUTHENTICODE  ((LPCSTR) 2)
290 #define CERT_CHAIN_POLICY_AUTHENTICODE_TS  ((LPCSTR) 3)
291 #define CERT_CHAIN_POLICY_SSL  ((LPCSTR) 4)
292 #define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR) 5)
293 #define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR) 6)
294 #define USAGE_MATCH_TYPE_AND 0
295 #define USAGE_MATCH_TYPE_OR 1
296 #define CERT_SIMPLE_NAME_STR 1
297 #define CERT_OID_NAME_STR 2
298 #define CERT_X500_NAME_STR 3
299 #define CERT_NAME_STR_COMMA_FLAG 0x04000000
300 #define CERT_NAME_STR_SEMICOLON_FLAG 1073741824
301 #define CERT_NAME_STR_CRLF_FLAG 134217728
302 #define CERT_NAME_STR_NO_PLUS_FLAG 536870912
303 #define CERT_NAME_STR_NO_QUOTING_FLAG 268435456
304 #define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x00010000
305 #define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x00040000
306 #define CERT_NAME_STR_REVERSE_FLAG 33554432
307 #define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 131072
308 #define CERT_FIND_ANY 0
309 #define CERT_FIND_CERT_ID 1048576
310 #define CERT_FIND_CTL_USAGE 655360
311 #define CERT_FIND_ENHKEY_USAGE 655360
312 #define CERT_FIND_EXISTING 851968
313 #define CERT_FIND_HASH 65536
314 #define CERT_FIND_ISSUER_ATTR 196612
315 #define CERT_FIND_ISSUER_NAME 131076
316 #define CERT_FIND_ISSUER_OF 786432
317 #define CERT_FIND_KEY_IDENTIFIER 983040
318 #define CERT_FIND_KEY_SPEC 589824
319 #define CERT_FIND_MD5_HASH 262144
320 #define CERT_FIND_PROPERTY 327680
321 #define CERT_FIND_PUBLIC_KEY 393216
322 #define CERT_FIND_SHA1_HASH 65536
323 #define CERT_FIND_SIGNATURE_HASH 917504
324 #define CERT_FIND_SUBJECT_ATTR 196615
325 #define CERT_FIND_SUBJECT_CERT 720896
326 #define CERT_FIND_SUBJECT_NAME 131079
327 #define CERT_FIND_SUBJECT_STR_A 458759
328 #define CERT_FIND_SUBJECT_STR_W 524295
329 #define CERT_FIND_ISSUER_STR_A 458756
330 #define CERT_FIND_ISSUER_STR_W 524292
331 #define CERT_FIND_OR_ENHKEY_USAGE_FLAG 16
332 #define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  1
333 #define CERT_FIND_NO_ENHKEY_USAGE_FLAG  8
334 #define CERT_FIND_VALID_ENHKEY_USAGE_FLAG  32
335 #define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  2
336 #define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG  2
337 #define CERT_UNICODE_IS_RDN_ATTRS_FLAG 1
338 #define CERT_CHAIN_FIND_BY_ISSUER 1
339 #define CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG 1
340 #define CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG 2
341 #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG 32768
342 #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG 4
343 #define CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG 8
344 #define CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG 16384
345 #define CERT_STORE_PROV_SYSTEM 10
346 #define CERT_SYSTEM_STORE_LOCAL_MACHINE 131072
347 #define szOID_PKIX_KP_SERVER_AUTH "4235600"
348 #define szOID_SERVER_GATED_CRYPTO "4235658"
349 #define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
350 #define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
351 #define CRYPT_NOHASHOID 0x00000001
352 #define CRYPT_NO_SALT 0x10
353 #define CRYPT_PREGEN 0x40
354 #define CRYPT_RECIPIENT 0x10
355 #define CRYPT_INITIATOR 0x40
356 #define CRYPT_ONLINE 0x80
357 #define CRYPT_SF 0x100
358 #define CRYPT_CREATE_IV 0x200
359 #define CRYPT_KEK 0x400
360 #define CRYPT_DATA_KEY 0x800
361 #define CRYPT_VOLATILE 0x1000
362 #define CRYPT_SGCKEY 0x2000
363 #define KP_IV               0x00000001
364 #define KP_SALT             0x00000002
365 #define KP_PADDING          0x00000003
366 #define KP_MODE             0x00000004
367 #define KP_MODE_BITS        0x00000005
368 #define KP_PERMISSIONS      0x00000006
369 #define KP_ALGID            0x00000007
370 #define KP_BLOCKLEN         0x00000008
371 #define KP_KEYLEN           0x00000009
372 #define KP_SALT_EX          0x0000000a
373 #define KP_P                0x0000000b
374 #define KP_G                0x0000000c
375 #define KP_Q                0x0000000d
376 #define KP_X                0x0000000e
377 #define KP_Y                0x0000000f
378 #define KP_RA               0x00000010
379 #define KP_RB               0x00000011
380 #define KP_INFO             0x00000012
381 #define KP_EFFECTIVE_KEYLEN 0x00000013
382 #define KP_SCHANNEL_ALG     0x00000014
383 #define KP_PUB_PARAMS       0x00000027
384 #define CRYPT_FLAG_PCT1    0x0001
385 #define CRYPT_FLAG_SSL2    0x0002
386 #define CRYPT_FLAG_SSL3    0x0004
387 #define CRYPT_FLAG_TLS1    0x0008
388 #define CRYPT_FLAG_IPSEC   0x0010
389 #define CRYPT_FLAG_SIGNING 0x0020
390 #define SCHANNEL_MAC_KEY    0x00000000
391 #define SCHANNEL_ENC_KEY    0x00000001
392 #define INTERNATIONAL_USAGE 0x00000001
393
394 #define X509_ALGORITHM_IDENTIFIER (LPCSTR) 74
395 #define X509_ALTERNATE_NAME (LPCSTR) 12
396 /* need X509_ANY_STRING */
397 #define PKCS_ATTRIBUTE (LPCSTR) 22
398 #define X509_AUTHORITY_INFO_ACCESS (LPCSTR) 32
399 #define X509_AUTHORITY_KEY_ID (LPCSTR) 9
400 #define X509_AUTHORITY_KEY_ID2 (LPCSTR) 31
401 #define szOID_BASIC_CONSTRAINTS "2.5.29.10"
402 #define X509_BASIC_CONSTRAINTS2 (LPCSTR) 15
403 #define X509_BIOMETRIC_EXT (LPCSTR) 71
404 #define X509_BITS (LPCSTR) 26
405 #define X509_CERT (LPCSTR) 1
406 #define X509_CERT_CRL_TO_BE_SIGNED (LPCSTR) 3
407 #define X509_CERT_POLICIES (LPCSTR) 16
408 #define X509_CERT_REQUEST_TO_BE_SIGNED (LPCSTR) 4
409 #define X509_CERT_TO_BE_SIGNED (LPCSTR) 2
410 #define X509_CHOICE_OF_TIME (LPCSTR) 30
411 #define PKCS_CONTENT_INFO (LPCSTR) 33
412 #define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY (LPCSTR) 23
413 #define X509_CRL_DIST_POINTS (LPCSTR) 35
414 /* need X509_CRL_REASON_CODE */
415 #define RSA_CSP_PUBLICKEYBLOB (LPCSTR) 19
416 #define PKCS_CTL (LPCSTR) 37
417 #define X509_DSS_PARAMETERS (LPCSTR) 39
418 /* need X509_DSS_PUBLICKEY */
419 #define X509_DSS_SIGNATURE (LPCSTR) 40
420 #define X509_ECC_SIGNATURE (LPCSTR) 47
421 #define X509_ENHANCED_KEY_USAGE (LPCSTR) 36
422 #define X509_ENUMERATED (LPCSTR) 29
423 #define X509_EXTENSIONS (LPCSTR) 5
424 #define X509_INTEGER (LPCSTR) 27
425 #define X509_ISSUING_DIST_POINT (LPCSTR) 54
426 #define X509_KEY_ATTRIBUTES (LPCSTR) 10
427 #define X509_KEY_USAGE (LPCSTR) 14
428 #define X509_KEY_USAGE_RESTRICTION (LPCSTR) 11
429 #define X509_KEYGEN_REQUEST_TO_BE_SIGNED (LPCSTR) 21
430 #define X509_LOGOTYPE_EXT (LPCSTR) 70
431 #define X509_MULTI_BYTE_INTEGER (LPCSTR) 28
432 #define X509_MULTI_BYTE_UINT (LPCSTR) 38
433 #define X509_NAME (LPCSTR) 7
434 #define X509_NAME_VALUE (LPCSTR) 6
435 #define X509_OBJECT_IDENTIFIER (LPCSTR) 73
436 #define X509_OCTET_STRING (LPCSTR) 25
437 #define X509_PUBLIC_KEY_INFO (LPCSTR) 8
438 #define PKCS_RC2_CBC_PARAMETERS (LPCSTR) 41
439 #define CNG_RSA_PUBLIC_KEY_BLOB (LPCSTR) 72
440 #define PKCS_RSA_SSA_PSS_PARAMETERS (LPCSTR) 75
441 #define PKCS_RSAES_OAEP_PARAMETERS (LPCSTR) 76
442 #define ECC_CMS_SHARED_INFO (LPCSTR) 77
443 #define X509_SEQUENCE_OF_ANY (LPCSTR) 34
444 #define PKCS7_SIGNER_INFO (LPCSTR) 500
445 #define CMS_SIGNER_INFO (LPCSTR) 501
446 #define PKCS_SMIME_CAPABILITIES (LPCSTR) 42
447 #define PKCS_TIME_REQUEST (LPCSTR) 18
448 /* need X509_UNICODE_ANY_STRING */
449 #define X509_UNICODE_NAME (LPCSTR) 20
450 #define X509_UNICODE_NAME_VALUE (LPCSTR) 24
451 #define PKCS_UTC_TIME (LPCSTR) 17
452 #define OCSP_SIGNED_REQUEST (LPCSTR) 65
453 #define OCSP_REQUEST (LPCSTR) 66
454 #define OCSP_RESPONSE (LPCSTR) 67
455 #define OCSP_BASIC_SIGNED_RESPONSE (LPCSTR) 68
456 #define OCSP_BASIC_RESPONSE (LPCSTR) 69
457 enum { CRL_REASON_UNSPECIFIED=0,
458         CRL_REASON_KEY_COMPROMISE=1,
459         CRL_REASON_CA_COMPROMISE=2,
460         CRL_REASON_AFFILIATION_CHANGED=3,
461         CRL_REASON_SUPERSEDED=4,
462         CRL_REASON_CESSATION_OF_OPERATION=5,
463         CRL_REASON_CERTIFICATE_HOLD=6,
464         CRL_REASON_REMOVE_FROM_CRL=7
465         };
466 /* need CRYPT_DECODE_NOCOPY_FLAG */
467 #define CRYPT_ENCODE_ALLOC_FLAG 0x8000
468 #define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG 0x40000000
469 #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG 0x80000000
470 #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG 0x20000000
471 #define CRYPT_UNICODE_NAME_ENCODE_FORCE_UTF8_UNICODE_FLAG 0x10000000
472
473
474 #define szOID_RSA       "1.2.840.113549"
475 #define szOID_PKCS      "1.2.840.113549.1"
476 #define szOID_RSA_HASH  "1.2.840.113549.2"
477 #define szOID_RSA_ENCRYPT       "1.2.840.113549.3"
478 #define szOID_PKCS_1    "1.2.840.113549.1.1"
479 #define szOID_PKCS_2    "1.2.840.113549.1.2"
480 #define szOID_PKCS_3    "1.2.840.113549.1.3"
481 #define szOID_PKCS_4    "1.2.840.113549.1.4"
482 #define szOID_PKCS_5    "1.2.840.113549.1.5"
483 #define szOID_PKCS_6    "1.2.840.113549.1.6"
484 #define szOID_PKCS_7    "1.2.840.113549.1.7"
485 #define szOID_PKCS_8    "1.2.840.113549.1.8"
486 #define szOID_PKCS_9    "1.2.840.113549.1.9"
487 #define szOID_PKCS_10   "1.2.840.113549.1.10"
488 #define szOID_PKCS_12   "1.2.840.113549.1.12"
489 #define szOID_RSA_MD2   "1.2.840.113549.1.1.2"
490 #define szOID_RSA_MD4   "1.2.840.113549.1.1.3"
491 #define szOID_RSA_MD5   "1.2.840.113549.2.5"
492 #define szOID_RSA_RSA   "1.2.840.113549.1.1.1"
493 #define szOID_RSA_MD2RSA        "1.2.840.113549.1.1.2"
494 #define szOID_RSA_MD4RSA        "1.2.840.113549.1.1.3"
495 #define szOID_RSA_MD5RSA        "1.2.840.113549.1.1.4"
496 #define szOID_RSA_SHA1RSA       "1.2.840.113549.1.1.5"
497 #define szOID_RSA_SETOAEP_RSA   "1.2.840.113549.1.1.5"
498 #define szOID_RSA_DH    "1.2.840.113549.1.3.1"
499 #define szOID_RSA_data  "1.2.840.113549.1.7.1"
500 #define szOID_RSA_signedData    "1.2.840.113549.1.7.2"
501 #define szOID_RSA_envelopedData         "1.2.840.113549.1.7.3"
502 #define szOID_RSA_signEnvData   "1.2.840.113549.1.7.4"
503 #define szOID_RSA_digestedData  "1.2.840.113549.1.7.5"
504 #define szOID_RSA_hashedData    "1.2.840.113549.1.7.5"
505 #define szOID_RSA_encryptedData         "1.2.840.113549.1.7.6"
506 #define szOID_RSA_emailAddr     "1.2.840.113549.1.9.1"
507 #define szOID_RSA_unstructName  "1.2.840.113549.1.9.2"
508 #define szOID_RSA_contentType   "1.2.840.113549.1.9.3"
509 #define szOID_RSA_messageDigest         "1.2.840.113549.1.9.4"
510 #define szOID_RSA_signingTime   "1.2.840.113549.1.9.5"
511 #define szOID_RSA_counterSign   "1.2.840.113549.1.9.6"
512 #define szOID_RSA_challengePwd  "1.2.840.113549.1.9.7"
513 #define szOID_RSA_unstructAddr  "1.2.840.113549.1.9.8"
514 #define szOID_RSA_extCertAttrs  "1.2.840.113549.1.9.9"
515 #define szOID_RSA_SMIMECapabilities     "1.2.840.113549.1.9.15"
516 #define szOID_RSA_preferSignedData      "1.2.840.113549.1.9.15.1"
517 #define szOID_RSA_RC2CBC        "1.2.840.113549.3.2"
518 #define szOID_RSA_RC4   "1.2.840.113549.3.4"
519 #define szOID_RSA_DES_EDE3_CBC  "1.2.840.113549.3.7"
520 #define szOID_RSA_RC5_CBCPad    "1.2.840.113549.3.9"
521 #define szOID_ANSI_x942         "1.2.840.10046"
522 #define szOID_ANSI_x942_DH      "1.2.840.10046.2.1"
523 #define szOID_X957      "1.2.840.10040"
524 #define szOID_X957_DSA  "1.2.840.10040.4.1"
525 #define szOID_DATA STRUCTURE    "1.2.840.10040.4.3"
526 #define szOID_DS        "2.5"
527 #define szOID_DSALG     "2.5.8"
528 #define szOID_DSALG_CRPT        "2.5.8.1"
529 #define szOID_DSALG_HASH        "2.5.8.2"
530 #define szOID_DSALG_SIGN        "2.5.8.3"
531 #define szOID_DSALG_RSA         "2.5.8.1.1"
532 #define szOID_OIW       "1.3.14"
533 #define szOID_OIWSEC    "1.3.14.3.2"
534 #define szOID_OIWSEC_md4RSA     "1.3.14.3.2.2"
535 #define szOID_OIWSEC_md5RSA     "1.3.14.3.2.3"
536 #define szOID_OIWSEC_md4RSA2    "1.3.14.3.2.4"
537 #define szOID_OIWSEC_desECB     "1.3.14.3.2.6"
538 #define szOID_OIWSEC_desCBC     "1.3.14.3.2.7"
539 #define szOID_OIWSEC_desOFB     "1.3.14.3.2.8"
540 #define szOID_OIWSEC_desCFB     "1.3.14.3.2.9"
541 #define szOID_OIWSEC_desMAC     "1.3.14.3.2.10"
542 #define szOID_OIWSEC_rsaSign    "1.3.14.3.2.11"
543 #define szOID_OIWSEC_dsa        "1.3.14.3.2.12"
544 #define szOID_OIWSEC_shaDSA     "1.3.14.3.2.13"
545 #define szOID_OIWSEC_mdc2RSA    "1.3.14.3.2.14"
546 #define szOID_OIWSEC_shaRSA     "1.3.14.3.2.15"
547 #define szOID_OIWSEC_dhCommMod  "1.3.14.3.2.16"
548 #define szOID_OIWSEC_desEDE     "1.3.14.3.2.17"
549 #define szOID_OIWSEC_sha        "1.3.14.3.2.18"
550 #define szOID_OIWSEC_mdc2       "1.3.14.3.2.19"
551 #define szOID_OIWSEC_dsaComm    "1.3.14.3.2.20"
552 #define szOID_OIWSEC_dsaCommSHA         "1.3.14.3.2.21"
553 #define szOID_OIWSEC_rsaXchg    "1.3.14.3.2.22"
554 #define szOID_OIWSEC_keyHashSeal        "1.3.14.3.2.23"
555 #define szOID_OIWSEC_md2RSASign         "1.3.14.3.2.24"
556 #define szOID_OIWSEC_md5RSASign         "1.3.14.3.2.25"
557 #define szOID_OIWSEC_sha1       "1.3.14.3.2.26"
558 #define szOID_OIWSEC_dsaSHA1    "1.3.14.3.2.27"
559 #define szOID_OIWSEC_dsaCommSHA1        "1.3.14.3.2.28"
560 #define szOID_OIWSEC_sha1RSASign        "1.3.14.3.2.29"
561 #define szOID_OIWDIR    "1.3.14.7.2"
562 #define szOID_OIWDIR_CRPT       "1.3.14.7.2.1"
563 #define szOID_OIWDIR_HASH       "1.3.14.7.2.2"
564 #define szOID_OIWDIR_SIGN       "1.3.14.7.2.3"
565 #define szOID_OIWDIR_md2        "1.3.14.7.2.2.1"
566 #define szOID_OIWDIR_md2RSA     "1.3.14.7.2.3.1"
567 #define szOID_INFOSEC   "2.16.840.1.101.2.1"
568 #define szOID_INFOSEC_sdnsSignature     "2.16.840.1.101.2.1.1.1"
569 #define szOID_INFOSEC_mosaicSignature   "2.16.840.1.101.2.1.1.2"
570 #define szOID_INFOSEC_sdnsConfidentiality       "2.16.840.1.101.2.1.1.3"
571 #define szOID_INFOSEC_mosaicConfidentiality     "2.16.840.1.101.2.1.1.4"
572 #define szOID_INFOSEC_sdnsIntegrity     "2.16.840.1.101.2.1.1.5"
573 #define szOID_INFOSEC_mosaicIntegrity   "2.16.840.1.101.2.1.1.6"
574 #define szOID_INFOSEC_sdnsTokenProtection       "2.16.840.1.101.2.1.1.7"
575 #define szOID_INFOSEC_mosaicTokenProtection     "2.16.840.1.101.2.1.1.8"
576 #define szOID_INFOSEC_sdnsKeyManagement         "2.16.840.1.101.2.1.1.9"
577 #define szOID_INFOSEC_mosaicKeyManagement       "2.16.840.1.101.2.1.1.10"
578 #define szOID_INFOSEC_sdnsKMandSig      "2.16.840.1.101.2.1.1.11"
579 #define szOID_INFOSEC_mosaicKMandSig    "2.16.840.1.101.2.1.1.12"
580 #define szOID_INFOSEC_SuiteASignature   "2.16.840.1.101.2.1.1.13"
581 #define szOID_INFOSEC_SuiteAConfidentiality     "2.16.840.1.101.2.1.1.14"
582 #define szOID_INFOSEC_SuiteAIntegrity   "2.16.840.1.101.2.1.1.15"
583 #define szOID_INFOSEC_SuiteATokenProtection     "2.16.840.1.101.2.1.1.16"
584 #define szOID_INFOSEC_SuiteAKeyManagement       "2.16.840.1.101.2.1.1.17"
585 #define szOID_INFOSEC_SuiteAKMandSig    "2.16.840.1.101.2.1.1.18"
586 #define szOID_INFOSEC_mosaicUpdatedSig  "2.16.840.1.101.2.1.1.19"
587 #define szOID_INFOSEC_mosaicKMandUpdSig         "2.16.840.1.101.2.1.1.20"
588 #define szOID_INFOSEC_mosaicUpdatedInteg        "2.16.840.1.101.2.1.1.21"
589 #define szOID_PKIX_NO_SIGNATURE         "1.3.6.1.5.5.7.6.2"
590
591 #define szOID_COMMON_NAME "2.5.4.3"
592 #define szOID_COUNTRY_NAME "2.5.4.6"
593 #define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5"
594 #define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25"
595 #define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
596 #define szOID_GIVEN_NAME "2.5.4.42"
597 #define szOID_INITIALS "2.5.4.43"
598 #define szOID_LOCALITY_NAME "2.5.4.7"
599 #define szOID_ORGANIZATION_NAME "2.5.4.10"
600 #define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11"
601 #define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8"
602 #define szOID_STREET_ADDRESS "2.5.4.9"
603 #define szOID_SUR_NAME "2.5.4.4"
604 #define szOID_TITLE "2.5.4.12"
605 #define szOID_RSA_unstructAddr "1.2.840.113549.1.9.8"
606 #define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
607 #define szOID_BASIC_CONSTRAINTS2        "2.5.29.19"
608 #define szOID_APPLICATION_CERT_POLICIES "1.3.6.1.4.1.311.21.10"
609 #define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12"
610 #define szOID_APPLICATION_POLICY_MAPPINGS "1.3.6.1.4.1.311.21.11"
611 #define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1"
612 #define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1"
613 #define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35"
614 #define X509_BASIC_CONSTRAINTS (LPCSTR) 13
615 #define szOID_BIOMETRIC_EXT "1.3.6.1.5.5.7.1.2"
616 #define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14"
617 #define szOID_CERT_POLICIES "2.5.29.32"
618
619 #define szOID_CRL_DIST_POINTS 2.5.29.31
620 #define szOID_CRL_REASON_CODE "2.5.29.21"
621 #define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3"
622 #define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1"
623 #define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3"
624 #define szOID_ENHANCED_KEY_USAGE "2.5.29.37"
625 #define szOID_ISSUER_ALT_NAME "2.5.29.8"
626 #define szOID_ISSUER_ALT_NAME2 "2.5.29.18"
627 #define szOID_KEY_ATTRIBUTES "2.5.29.2"
628 #define szOID_KEY_USAGE "2.5.29.4"
629 #define szOID_KEY_USAGE_RESTRICTION "2.5.29.4"
630 #define szOID_LOGOTYPE_EXT "1.3.6.1.5.5.7.1.12"
631 /* need szOID_NEXT_UPDATE_LOCATION */
632 #define szOID_POLICY_CONSTRAINTS "2.5.29.36"
633 #define szOID_POLICY_MAPPINGS "2.5.29.33"
634 #define szOID_RSA_SSA_PSS "1.2.840.113549.1.1.10"
635 #define szOID_RSAES_OAEP "1.2.840.113549.1.1.7"
636 #define szOID_SUBJECT_ALT_NAME "2.5.29.7"
637 #define szOID_SUBJECT_ALT_NAME2 "2.5.29.17"
638 #define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14"
639
640 typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
641   BOOL fCA;
642   BOOL fPathLenConstraint;
643   DWORD dwPathLenConstraint;
644 } CERT_BASIC_CONSTRAINTS2_INFO,
645  *PCERT_BASIC_CONSTRAINTS2_INFO;
646
647 typedef VOID (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);
648 typedef LPVOID (WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize);
649 typedef struct _CRYPT_ENCODE_PARA {
650   DWORD cbSize;
651   PFN_CRYPT_ALLOC pfnAlloc;
652   PFN_CRYPT_FREE pfnFree;
653 } CRYPT_ENCODE_PARA,
654  *PCRYPT_ENCODE_PARA;
655
656 /* Definition missing. */
657 typedef struct _CRYPT_DECODE_PARA *PCRYPT_DECODE_PARA;
658
659 typedef UINT ALG_ID;
660 typedef struct _VTableProvStruc {FARPROC FuncVerifyImage;} VTableProvStruc,*PVTableProvStruc;
661 typedef ULONG HCRYPTPROV;
662 typedef ULONG HCRYPTKEY;
663 typedef ULONG HCRYPTHASH;
664 typedef PVOID HCERTSTORE;
665 typedef PVOID HCRYPTMSG;
666 typedef PVOID HCERTCHAINENGINE;
667 typedef struct _CRYPTOAPI_BLOB {
668         DWORD cbData;
669         BYTE* pbData;
670 } CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
671   CRYPT_UINT_BLOB,    *PCRYPT_UINT_BLOB,
672   CRYPT_OBJID_BLOB,   *PCRYPT_OBJID_BLOB,
673   CERT_NAME_BLOB,     *PCERT_NAME_BLOB,
674   CERT_RDN_VALUE_BLOB,*PCERT_RDN_VALUE_BLOB,
675   CERT_BLOB,          *PCERT_BLOB,
676   CRL_BLOB,           *PCRL_BLOB,
677   DATA_BLOB,          *PDATA_BLOB,
678   CRYPT_DATA_BLOB,    *PCRYPT_DATA_BLOB,
679   CRYPT_HASH_BLOB,    *PCRYPT_HASH_BLOB,
680   CRYPT_DIGEST_BLOB,  *PCRYPT_DIGEST_BLOB,
681   CRYPT_DER_BLOB,     *PCRYPT_DER_BLOB,
682   CRYPT_ATTR_BLOB,    *PCRYPT_ATTR_BLOB;
683 typedef struct _CERT_OTHER_NAME {
684         LPSTR pszObjId;
685         CRYPT_OBJID_BLOB Value;
686 } CERT_OTHER_NAME, *PCERT_OTHER_NAME;
687 /* not described in SDK; has the same layout as HTTPSPolicyCallbackData */
688 typedef struct _SSL_EXTRA_CERT_CHAIN_POLICY_PARA {
689         DWORD cbStruct;
690         DWORD dwAuthType;
691         DWORD fdwChecks;
692         LPWSTR pwszServerName;
693 } SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA,
694   HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData;
695 /* #if (_WIN32_WINNT>=0x500) */
696 typedef struct _CERT_CHAIN_POLICY_PARA {
697         DWORD cbSize;
698         DWORD dwFlags;
699         void* pvExtraPolicyPara;
700 } CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
701 typedef struct _CERT_CHAIN_POLICY_STATUS {
702         DWORD cbSize;
703         DWORD dwError;
704         LONG lChainIndex;
705         LONG lElementIndex;
706         void* pvExtraPolicyStatus;
707 } CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;
708 /* #endif */
709 typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
710         LPSTR pszObjId;
711         CRYPT_OBJID_BLOB Parameters;
712 } CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
713 typedef struct _CRYPT_BIT_BLOB {
714         DWORD cbData;
715         BYTE* pbData;
716         DWORD cUnusedBits;
717 } CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
718 typedef struct _CERT_PUBLIC_KEY_INFO {
719         CRYPT_ALGORITHM_IDENTIFIER Algorithm;
720         CRYPT_BIT_BLOB PublicKey;
721 } CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
722 typedef struct _CERT_EXTENSION {
723         LPSTR pszObjId;
724         BOOL fCritical;
725         CRYPT_OBJID_BLOB Value;
726 } CERT_EXTENSION, *PCERT_EXTENSION;
727 typedef struct _CERT_INFO {
728         DWORD dwVersion;
729         CRYPT_INTEGER_BLOB SerialNumber;
730         CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
731         CERT_NAME_BLOB Issuer;
732         FILETIME NotBefore;
733         FILETIME NotAfter;
734         CERT_NAME_BLOB Subject;
735         CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
736         CRYPT_BIT_BLOB IssuerUniqueId;
737         CRYPT_BIT_BLOB SubjectUniqueId;
738         DWORD cExtension;
739         PCERT_EXTENSION rgExtension;
740 } CERT_INFO, *PCERT_INFO;
741 typedef struct _CERT_CONTEXT {
742         DWORD dwCertEncodingType;
743         BYTE* pbCertEncoded;
744         DWORD cbCertEncoded;
745         PCERT_INFO pCertInfo;
746         HCERTSTORE hCertStore;
747 } CERT_CONTEXT, *PCERT_CONTEXT;
748 typedef const CERT_CONTEXT *PCCERT_CONTEXT;
749 typedef struct _CTL_USAGE {
750         DWORD cUsageIdentifier;
751         LPSTR *rgpszUsageIdentifier;
752 } CTL_USAGE, *PCTRL_USAGE,
753   CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
754 typedef struct _CERT_USAGE_MATCH {
755         DWORD dwType;
756         CERT_ENHKEY_USAGE Usage;
757 } CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
758 /* #if (_WIN32_WINNT>=0x500) */
759 typedef struct _CERT_CHAIN_PARA {
760         DWORD cbSize;
761         CERT_USAGE_MATCH RequestedUsage;
762 #if CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
763         CERT_USAGE_MATCH RequestedIssuancePolicy;
764         DWORD dwUrlRetrievalTimeout;
765         BOOL fCheckRevocationFreshnessTime;
766         DWORD dwRevocationFreshnessTime;
767 #endif
768 } CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;
769 typedef BOOL (WINAPI *PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK)(PCCERT_CONTEXT,void*);
770 typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
771         DWORD cbSize;
772         LPCSTR pszUsageIdentifier;
773         DWORD dwKeySpec;
774         DWORD dwAcquirePrivateKeyFlags;
775         DWORD cIssuer;
776         CERT_NAME_BLOB* rgIssuer;
777         PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFIndCallback;
778         void* pvFindArg;
779         DWORD* pdwIssuerChainIndex;
780         DWORD* pdwIssuerElementIndex;
781 } CERT_CHAIN_FIND_BY_ISSUER_PARA, *PCERT_CHAIN_FIND_BY_ISSUER_PARA;
782 /* #endif */
783 typedef struct _CERT_TRUST_STATUS {
784         DWORD dwErrorStatus;
785         DWORD dwInfoStatus;
786 } CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
787 typedef struct _CRL_ENTRY {
788         CRYPT_INTEGER_BLOB SerialNumber;
789         FILETIME RevocationDate;
790         DWORD cExtension;
791         PCERT_EXTENSION rgExtension;
792 } CRL_ENTRY, *PCRL_ENTRY;
793 typedef struct _CRL_INFO {
794         DWORD dwVersion;
795         CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
796         CERT_NAME_BLOB Issuer;
797         FILETIME ThisUpdate;
798         FILETIME NextUpdate;
799         DWORD cCRLEntry;
800         PCRL_ENTRY rgCRLEntry;
801         DWORD cExtension;
802         PCERT_EXTENSION rgExtension;
803 } CRL_INFO, *PCRL_INFO;
804 typedef struct _CRL_CONTEXT {
805         DWORD dwCertEncodingType;
806         BYTE* pbCrlEncoded;
807         DWORD cbCrlEncoded;
808         PCRL_INFO pCrlInfo;
809         HCERTSTORE hCertStore;
810 } CRL_CONTEXT, *PCRL_CONTEXT;
811 typedef const CRL_CONTEXT *PCCRL_CONTEXT;
812 typedef struct _CERT_REVOCATION_CRL_INFO {
813         DWORD cbSize;
814         PCCRL_CONTEXT pBaseCRLContext;
815         PCCRL_CONTEXT pDeltaCRLContext;
816         PCRL_ENTRY pCrlEntry;
817         BOOL fDeltaCrlEntry;
818 } CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
819 typedef struct _CERT_REVOCATION_INFO {
820         DWORD cbSize;
821         DWORD dwRevocationResult;
822         LPCSTR pszRevocationOid;
823         LPVOID pvOidSpecificInfo;
824         BOOL fHasFreshnessTime;
825         DWORD dwFreshnessTime;
826         PCERT_REVOCATION_CRL_INFO pCrlInfo;
827 } CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
828 /* #if (_WIN32_WINNT>=0x500) */
829 typedef struct _CERT_CHAIN_ELEMENT {
830         DWORD cbSize;
831         PCCERT_CONTEXT pCertContext;
832         CERT_TRUST_STATUS TrustStatus;
833         PCERT_REVOCATION_INFO pRevocationInfo;
834         PCERT_ENHKEY_USAGE pIssuanceUsage;
835         PCERT_ENHKEY_USAGE pApplicationUsage;
836 } CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
837 /* #endif */
838 typedef struct _CRYPT_ATTRIBUTE {
839         LPSTR pszObjId;
840         DWORD cValue;
841         PCRYPT_ATTR_BLOB rgValue;
842 } CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
843 typedef struct _CTL_ENTRY {
844         CRYPT_DATA_BLOB SubjectIdentifier;
845         DWORD cAttribute;
846         PCRYPT_ATTRIBUTE rgAttribute;
847 } CTL_ENTRY, *PCTL_ENTRY;
848 typedef struct _CTL_INFO {
849         DWORD dwVersion;
850         CTL_USAGE SubjectUsage;
851         CRYPT_DATA_BLOB ListIdentifier;
852         CRYPT_INTEGER_BLOB SequenceNumber;
853         FILETIME ThisUpdate;
854         FILETIME NextUpdate;
855         CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
856         DWORD cCTLEntry;
857         PCTL_ENTRY rgCTLEntry;
858         DWORD cExtension;
859         PCERT_EXTENSION rgExtension;
860 } CTL_INFO, *PCTL_INFO;
861 typedef struct _CTL_CONTEXT {
862         DWORD dwMsgAndCertEncodingType;
863         BYTE* pbCtlEncoded;
864         DWORD cbCtlEncoded;
865         PCTL_INFO pCtlInfo;
866         HCERTSTORE hCertStore;
867         HCRYPTMSG hCryptMsg;
868         BYTE* pbCtlContent;
869         DWORD cbCtlContent;
870 } CTL_CONTEXT, *PCTL_CONTEXT;
871 typedef const CTL_CONTEXT *PCCTL_CONTEXT;
872 typedef struct _CERT_TRUST_LIST_INFO {
873         DWORD cbSize;
874         PCTL_ENTRY pCtlEntry;
875         PCCTL_CONTEXT pCtlContext;
876 } CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
877 typedef struct _CERT_SIMPLE_CHAIN {
878         DWORD cbSize;
879         CERT_TRUST_STATUS TrustStatus;
880         DWORD cElement;
881         PCERT_CHAIN_ELEMENT* rgpElement;
882         PCERT_TRUST_LIST_INFO pTrustListInfo;
883         BOOL fHasRevocationFreshnessTime;
884         DWORD dwRevocationFreshnessTime;
885 } CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
886 /* #if (_WIN32_WINNT>=0x500) */
887 typedef const struct _CERT_CHAIN_CONTEXT* PCCERT_CHAIN_CONTEXT;
888 typedef struct _CERT_CHAIN_CONTEXT {
889         DWORD cbSize;
890         CERT_TRUST_STATUS TrustStatus;
891         DWORD cChain;
892         PCERT_SIMPLE_CHAIN* rgpChain;
893         DWORD cLowerQualityChainContext;
894         PCCERT_CHAIN_CONTEXT* rgpLowerQualityChainContext;
895         BOOL fHasRevocationFreshnessTime;
896         DWORD dwRevocationFreshnessTime;
897 } CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
898 /* #endif */
899 typedef struct _PROV_ENUMALGS {
900         ALG_ID aiAlgid;
901         DWORD dwBitLen;
902         DWORD dwNameLen;
903         CHAR szName[20];
904 } PROV_ENUMALGS;
905 typedef struct _PUBLICKEYSTRUC {
906         BYTE bType;
907         BYTE bVersion;
908         WORD reserved;
909         ALG_ID aiKeyAlg;
910 } BLOBHEADER, PUBLICKEYSTRUC;
911 typedef struct _RSAPUBKEY {
912         DWORD magic;
913         DWORD bitlen;
914         DWORD pubexp;
915 } RSAPUBKEY;
916 typedef struct _HMAC_Info
917 {
918         ALG_ID HashAlgid;
919         BYTE* pbInnerString;
920         DWORD cbInnerString;
921         BYTE* pbOuterString;
922         DWORD cbOuterString;
923 } HMAC_INFO, *PHMAC_INFO;
924
925 //http://msdn.microsoft.com/en-us/library/aa922935.aspx
926 //Some Crypto Key Provider Information structures.
927 typedef struct _CRYPT_KEY_PROV_PARAM {
928     DWORD           dwParam;
929     BYTE            *pbData;
930     DWORD           cbData;
931     DWORD           dwFlags;
932 } CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;
933
934 //http://msdn.microsoft.com/en-us/library/aa381420(VS.85).aspx
935 typedef struct _CRYPT_KEY_PROV_INFO {
936     LPWSTR                  pwszContainerName;
937     LPWSTR                  pwszProvName;
938     DWORD                   dwProvType;
939     DWORD                   dwFlags;
940     DWORD                   cProvParam;
941     PCRYPT_KEY_PROV_PARAM   rgProvParam;
942     DWORD                   dwKeySpec;
943 } CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
944
945 #define CERT_SET_KEY_PROV_HANDLE_PROP_ID    0x00000001
946 #define CERT_SET_KEY_CONTEXT_PROP_ID        0x00000001
947
948 #define CRYPT_KEYID_DELETE_FLAG         0x00000010
949 #define CRYPT_KEYID_SET_NEW_FLAG        0x00002000
950
951 //certificate crl ctl IDs
952 #define CERT_KEY_PROV_HANDLE_PROP_ID        1
953 #define CERT_KEY_PROV_INFO_PROP_ID          2
954 #define CERT_SHA1_HASH_PROP_ID              3
955 #define CERT_MD5_HASH_PROP_ID               4
956 #define CERT_HASH_PROP_ID                   CERT_SHA1_HASH_PROP_ID
957 #define CERT_KEY_CONTEXT_PROP_ID            5
958 #define CERT_KEY_SPEC_PROP_ID               6
959 #define CERT_IE30_RESERVED_PROP_ID          7
960 #define CERT_PUBKEY_HASH_RESERVED_PROP_ID   8
961 #define CERT_ENHKEY_USAGE_PROP_ID           9
962 #define CERT_CTL_USAGE_PROP_ID              CERT_ENHKEY_USAGE_PROP_ID
963 #define CERT_NEXT_UPDATE_LOCATION_PROP_ID   10
964 #define CERT_FRIENDLY_NAME_PROP_ID          11
965 #define CERT_PVK_FILE_PROP_ID               12
966 #define CERT_DESCRIPTION_PROP_ID            13
967 #define CERT_ACCESS_STATE_PROP_ID           14
968 #define CERT_SIGNATURE_HASH_PROP_ID         15
969 #define CERT_SMART_CARD_DATA_PROP_ID        16
970 #define CERT_EFS_PROP_ID                    17
971 #define CERT_FORTEZZA_DATA_PROP_ID          18
972 #define CERT_ARCHIVED_PROP_ID               19
973 #define CERT_KEY_IDENTIFIER_PROP_ID         20
974 #define CERT_AUTO_ENROLL_PROP_ID            21
975 #define CERT_PUBKEY_ALG_PARA_PROP_ID        22
976 #define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 23
977 #define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID     24
978 #define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID    25
979 #define CERT_ENROLLMENT_PROP_ID             26
980 #define CERT_DATE_STAMP_PROP_ID             27
981 #define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID  28
982 #define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID  29
983 #define CERT_EXTENDED_ERROR_INFO_PROP_ID    30
984
985 //Certificate name type
986 #define CERT_NAME_EMAIL_TYPE            1
987 #define CERT_NAME_RDN_TYPE              2
988 #define CERT_NAME_ATTR_TYPE             3
989 #define CERT_NAME_SIMPLE_DISPLAY_TYPE   4
990 #define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5
991 #define CERT_NAME_DNS_TYPE              6
992 #define CERT_NAME_URL_TYPE              7
993 #define CERT_NAME_UPN_TYPE              8
994
995 //certificate/CRL, encoded, context or element disposition values.
996 #define CERT_STORE_ADD_NEW                                  1
997 #define CERT_STORE_ADD_USE_EXISTING                         2
998 #define CERT_STORE_ADD_REPLACE_EXISTING                     3
999 #define CERT_STORE_ADD_ALWAYS                               4
1000 #define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES  5
1001 #define CERT_STORE_ADD_NEWER                                6
1002 #define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES             7
1003
1004 #define CRYPT_ACQUIRE_CACHE_FLAG                0x00000001
1005 #define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG        0x00000002
1006 #define CRYPT_ACQUIRE_COMPARE_KEY_FLAG          0x00000004
1007 #define CRYPT_ACQUIRE_SILENT_FLAG               0x00000040
1008
1009 // dwFlags definitions for CryptAcquireContext
1010 #define CRYPT_VERIFYCONTEXT     0xF0000000
1011
1012 // dwFlag definitions for CryptGenKey
1013 #define CRYPT_ARCHIVABLE        0x00004000
1014
1015 #define RSA1024BIT_KEY          0x04000000
1016
1017 // dwFlags definitions for CryptDeriveKey
1018 #define CRYPT_SERVER            0x00000400
1019
1020 #define KEY_LENGTH_MASK         0xFFFF0000
1021
1022 // dwFlag definitions for CryptExportKey
1023 #define CRYPT_Y_ONLY            0x00000001
1024 #define CRYPT_SSL2_FALLBACK     0x00000002
1025 #define CRYPT_DESTROYKEY        0x00000004
1026 #define CRYPT_OAEP              0x00000040  // used with RSA encryptions/decryptions
1027                                             // CryptExportKey, CryptImportKey,
1028                                             // CryptEncrypt and CryptDecrypt
1029
1030 #define CRYPT_BLOB_VER3         0x00000080  // export version 3 of a blob type
1031 #define CRYPT_IPSEC_HMAC_KEY    0x00000100  // CryptImportKey only
1032
1033 // dwFlags definitions for CryptDecrypt
1034 //  See also CRYPT_OAEP, above.
1035 //  Note, the following flag is not supported for CryptEncrypt
1036 #define CRYPT_DECRYPT_RSA_NO_PADDING_CHECK      0x00000020
1037
1038 // dwFlags definitions for CryptCreateHash
1039 #define CRYPT_SECRETDIGEST      0x00000001
1040
1041 // dwFlags definitions for CryptHashData
1042 #define CRYPT_OWF_REPL_LM_HASH  0x00000001  // this is only for the OWF replacement CSP
1043
1044 // dwFlags definitions for CryptHashSessionKey
1045 #define CRYPT_LITTLE_ENDIAN     0x00000001
1046
1047 // dwFlags definitions for CryptSignHash and CryptVerifySignature
1048 #define CRYPT_NOHASHOID         0x00000001
1049 #define CRYPT_TYPE2_FORMAT      0x00000002
1050 #define CRYPT_X931_FORMAT       0x00000004
1051
1052 // dwFlag definitions for CryptSetProviderEx and CryptGetDefaultProvider
1053 #define CRYPT_MACHINE_DEFAULT   0x00000001
1054 #define CRYPT_USER_DEFAULT      0x00000002
1055 #define CRYPT_DELETE_DEFAULT    0x00000004
1056
1057 //algorithm
1058 #define CALG_SSL3_SHAMD5        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)
1059
1060 //End of crypto key provider information structures
1061
1062 BOOL WINAPI CertCloseStore(HCERTSTORE,DWORD);
1063 BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE,PCCERT_CONTEXT,LPFILETIME,HCERTSTORE,PCERT_CHAIN_PARA,DWORD,LPVOID,PCCERT_CHAIN_CONTEXT*);
1064 BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR,PCCERT_CHAIN_CONTEXT,PCERT_CHAIN_POLICY_PARA,PCERT_CHAIN_POLICY_STATUS);
1065 void WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT);
1066 DWORD WINAPI CertNameToStrA(DWORD,PCERT_NAME_BLOB,DWORD,LPSTR,DWORD);
1067 DWORD WINAPI CertNameToStrW(DWORD,PCERT_NAME_BLOB,DWORD,LPWSTR,DWORD);
1068 HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV,LPCSTR);
1069 HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV,LPCWSTR);
1070 HCERTSTORE WINAPI CertOpenStore(LPCSTR,DWORD,HCRYPTPROV,DWORD,const void*);
1071 PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CONTEXT);
1072 BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT);
1073 PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE,PCCERT_CONTEXT,PCCERT_CONTEXT,DWORD*);
1074 PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CHAIN_CONTEXT);
1075
1076 HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE);
1077 PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE,PCCERT_CONTEXT);
1078 PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT);
1079 DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT,DWORD,DWORD,void*,LPSTR,DWORD);
1080 DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT,DWORD,DWORD,void*,LPWSTR,DWORD);
1081 BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB*);
1082 PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR,DWORD,CERT_EXTENSION*);
1083 BOOL WINAPI CryptDecodeObject(DWORD,LPCSTR,const BYTE*,DWORD,DWORD,void*,DWORD*);
1084 BOOL WINAPI CryptDecodeObjectEx(DWORD,LPCSTR,const BYTE*,DWORD,DWORD,PCRYPT_DECODE_PARA,void*,DWORD*);
1085 BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType,LPCSTR,const void*,BYTE*,DWORD*);
1086 BOOL WINAPI CryptEncodeObjectEx(DWORD,LPCSTR,const void*,DWORD,PCRYPT_ENCODE_PARA,void*,DWORD*);
1087 BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE,PCCERT_CONTEXT,DWORD,PCCERT_CONTEXT*);
1088 BOOL WINAPI CertCompareCertificate(DWORD,PCERT_INFO,PCERT_INFO);
1089 BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB*,LPCWSTR,DWORD);
1090 HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB*,LPCWSTR,DWORD);
1091 BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT);
1092
1093 WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV*,LPCSTR,LPCSTR,DWORD,DWORD);
1094 WINADVAPI BOOL WINAPI CryptAcquireContextW(HCRYPTPROV*,LPCWSTR,LPCWSTR,DWORD,DWORD);
1095 WINADVAPI  BOOL WINAPI CryptContextAddRef(HCRYPTPROV,DWORD*,DWORD);
1096 WINADVAPI BOOL WINAPI CryptReleaseContext(HCRYPTPROV,DWORD);
1097 WINADVAPI BOOL WINAPI CryptGenKey(HCRYPTPROV,ALG_ID,DWORD,HCRYPTKEY*);
1098 WINADVAPI BOOL WINAPI CryptDeriveKey(HCRYPTPROV,ALG_ID,HCRYPTHASH,DWORD,HCRYPTKEY*);
1099 WINADVAPI BOOL WINAPI CryptDestroyKey(HCRYPTKEY);
1100
1101 WINADVAPI BOOL WINAPI CryptSetKeyParam(HCRYPTKEY,DWORD,PBYTE,DWORD);
1102 WINADVAPI BOOL WINAPI CryptGetKeyParam(HCRYPTKEY,DWORD,PBYTE,PDWORD,DWORD);
1103 WINADVAPI BOOL WINAPI CryptSetHashParam(HCRYPTHASH,DWORD,PBYTE,DWORD);
1104 WINADVAPI BOOL WINAPI CryptGetHashParam(HCRYPTHASH,DWORD,PBYTE,PDWORD,DWORD);
1105 WINADVAPI BOOL WINAPI CryptSetProvParam(HCRYPTPROV,DWORD,PBYTE,DWORD);
1106 WINADVAPI BOOL WINAPI CryptGetProvParam(HCRYPTPROV,DWORD,PBYTE,PDWORD,DWORD);
1107 WINADVAPI BOOL WINAPI CryptGenRandom(HCRYPTPROV,DWORD,PBYTE);
1108 WINADVAPI BOOL WINAPI CryptGetUserKey(HCRYPTPROV,DWORD,HCRYPTKEY*);
1109 WINADVAPI BOOL WINAPI CryptExportKey(HCRYPTKEY,HCRYPTKEY,DWORD,DWORD,PBYTE,PDWORD);
1110 WINADVAPI BOOL WINAPI CryptImportKey(HCRYPTPROV,PBYTE,DWORD,HCRYPTKEY,DWORD,HCRYPTKEY*);
1111 WINADVAPI BOOL WINAPI CryptEncrypt(HCRYPTKEY,HCRYPTHASH,BOOL,DWORD,PBYTE,PDWORD,DWORD);
1112 WINADVAPI BOOL WINAPI CryptDecrypt(HCRYPTKEY,HCRYPTHASH,BOOL,DWORD,PBYTE,PDWORD);
1113 WINADVAPI BOOL WINAPI CryptCreateHash(HCRYPTPROV,ALG_ID,HCRYPTKEY,DWORD,HCRYPTHASH*);
1114 WINADVAPI BOOL WINAPI CryptHashData(HCRYPTHASH,PBYTE,DWORD,DWORD);
1115 WINADVAPI BOOL WINAPI CryptHashSessionKey(HCRYPTHASH,HCRYPTKEY,DWORD);
1116 WINADVAPI BOOL WINAPI CryptGetHashValue(HCRYPTHASH,DWORD,PBYTE,PDWORD);
1117 WINADVAPI BOOL WINAPI CryptDestroyHash(HCRYPTHASH);
1118 WINADVAPI BOOL WINAPI CryptSignHashA(HCRYPTHASH,DWORD,LPCSTR,DWORD,PBYTE,PDWORD);
1119 WINADVAPI BOOL WINAPI CryptSignHashW(HCRYPTHASH,DWORD,LPCWSTR,DWORD,PBYTE,PDWORD);
1120 WINADVAPI BOOL WINAPI CryptVerifySignatureA(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCSTR,DWORD);
1121 WINADVAPI BOOL WINAPI CryptVerifySignatureW(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCWSTR,DWORD);
1122 WINADVAPI BOOL WINAPI CryptSetProviderA(LPCSTR,DWORD);
1123 WINADVAPI BOOL WINAPI CryptSetProviderW(LPCWSTR,DWORD);
1124 WINADVAPI BOOL WINAPI CryptEnumProvidersA(DWORD,DWORD*,DWORD,DWORD*,LPTSTR,DWORD*);
1125 WINADVAPI BOOL WINAPI CryptEnumProvidersW(DWORD,DWORD*,DWORD,DWORD*,LPTSTR,DWORD*);
1126
1127 #define CertGetNameString __AW(CertGetNameString)
1128
1129 #define CertNameToStr __AW(CertNameToStr)
1130 #define CryptAcquireContext __AW(CryptAcquireContext)
1131 #define CryptSignHash __AW(CryptSignHash)
1132 #define CryptVerifySignature __AW(CryptVerifySignature)
1133 #define CryptSetProvider __AW(CryptSetProvider)
1134 #define CryptEnumProviders __AW(CryptEnumProviders)
1135 #define CertOpenSystemStore __AW(CertOpenSystemStore)
1136 #define CERT_FIND_SUBJECT_STR __AW(CERT_FIND_SUBJECT_STR_)
1137 #define CERT_FIND_ISSUER_STR __AW(CERT_FIND_ISSUER_STR_)
1138 #define MS_DEF_PROV __AW(MS_DEF_PROV_)
1139 #define MS_ENHANCED_PROV __AW(MS_ENHANCED_PROV_)
1140 #define MS_STRONG_PROV __AW(MS_STRONG_PROV_)
1141 #define MS_DEF_RSA_SIG_PROV __AW(MS_DEF_RSA_SIG_PROV_)
1142 #define MS_DEF_RSA_SCHANNEL_PROV __AW(MS_DEF_RSA_SCHANNEL_PROV_)
1143 #define MS_DEF_DSS_PROV __AW(MS_DEF_DSS_PROV_)
1144 #define MS_DEF_DSS_DH_PROV __AW(MS_DEF_DSS_DH_PROV_)
1145 #define MS_ENH_DSS_DH_PROV __AW(MS_ENH_DSS_DH_PROV_)
1146 #define MS_DEF_DH_SCHANNEL_PROV __AW(MS_DEF_DH_SCHANNEL_PROV_)
1147 #define MS_SCARD_PROV __AW(MS_SCARD_PROV_)
1148
1149 /* from http://msdn2.microsoft.com/en-us/library/Aa380263.aspx: */
1150 typedef struct _CRYPTPROTECT_PROMPTSTRUCT {
1151    DWORD cbSize;
1152    DWORD dwPromptFlags;
1153    HWND hwndApp;
1154    LPCWSTR szPrompt;
1155 } CRYPTPROTECT_PROMPTSTRUCT,
1156 *PCRYPTPROTECT_PROMPTSTRUCT;
1157
1158
1159 /* from http://msdn2.microsoft.com/en-us/library/aa380261.aspx */
1160 BOOL WINAPI CryptProtectData (DATA_BLOB*, LPCWSTR, DATA_BLOB*, PVOID, CRYPTPROTECT_PROMPTSTRUCT*, DWORD, DATA_BLOB*);
1161
1162 /* http://msdn2.microsoft.com/en-us/library/aa380882.aspx */
1163 BOOL WINAPI CryptUnprotectData (DATA_BLOB*, LPWSTR*, DATA_BLOB*, PVOID, CRYPTPROTECT_PROMPTSTRUCT*, DWORD, DATA_BLOB*);
1164
1165 /* from http://msdn2.microsoft.com/en-us/library/aa302402.aspx: */
1166 #define CRYPTPROTECT_UI_FORBIDDEN 0x1
1167 #define CRYPTPROTECT_LOCAL_MACHINE 0x4
1168
1169 //For Mozilla trunk
1170 typedef BOOL (WINAPI *PFN_CRYPT_ENUM_KEYID_PROP)(const CRYPT_HASH_BLOB *, DWORD, void *, void *, DWORD,DWORD,void **,DWORD);
1171
1172 BOOL WINAPI CertGetCertificateContextProperty (PCCERT_CONTEXT, DWORD, void *, DWORD *);
1173 BOOL WINAPI CryptEnumKeyIdentifierProperties (const CRYPT_HASH_BLOB *, DWORD, DWORD, LPCWSTR, void *, void *, PFN_CRYPT_ENUM_KEYID_PROP);
1174 BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT, DWORD, void *, HCRYPTPROV *, DWORD *, BOOL *);
1175 PCCERT_CONTEXT WINAPI CertCreateCertificateContext (DWORD, const BYTE *, DWORD);
1176 BOOL WINAPI CryptGetKeyIdentifierProperty( const CRYPT_HASH_BLOB *, DWORD, DWORD, LPCWSTR, void *, void *, DWORD *);
1177 BOOL WINAPI CertSetCertificateContextProperty( PCCERT_CONTEXT, DWORD, DWORD, void *);
1178 BOOL WINAPI CertCompareCertificateName( DWORD, PCERT_NAME_BLOB, PCERT_NAME_BLOB);
1179 BOOL WINAPI CryptSetKeyIdentifierProperty (const CRYPT_HASH_BLOB *, DWORD, DWORD, LPCWSTR, void *, void *);
1180 DWORD WINAPI CertOIDToAlgId( LPCSTR );
1181 BOOL WINAPI CryptGetDefaultProviderA(DWORD,DWORD,DWORD,LPSTR,DWORD);
1182 BOOL WINAPI CryptGetDefaultProviderW(DWORD,DWORD,DWORD,LPSTR,DWORD);
1183
1184 #define CryptGetDefaultProvider  __AW(CryptGetDefaultProvider)
1185
1186 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN98) /* Windows 98 */
1187 typedef struct _CERT_ALT_NAME_ENTRY {
1188   DWORD dwAltNameChoice;
1189   union {
1190     PCERT_OTHER_NAME pOtherName;
1191     LPWSTR pwszRfc822Name;
1192     LPWSTR pwszDNSName;
1193     CRYPT_DATA_BLOB x400Address;
1194     CERT_NAME_BLOB DirectoryName;
1195     LPWSTR pEdiPartyName;
1196     LPWSTR pwszURL;
1197     CRYPT_DATA_BLOB IPAddress;
1198     LPSTR pszRegisteredID;
1199   };
1200 } CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY;
1201 typedef struct _CERT_ALT_NAME_INFO {
1202   DWORD cAltEntry;
1203   PCERT_ALT_NAME_ENTRY rgAltEntry;
1204 } CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO;
1205 typedef struct _CERT_NAME_VALUE {
1206   DWORD dwValueType;
1207   CERT_RDN_VALUE_BLOB Value;
1208 } CERT_NAME_VALUE,
1209  *PCERT_NAME_VALUE;
1210 typedef struct _CERT_POLICY_QUALIFIER_INFO {
1211   LPSTR pszPolicyQualifierId;
1212   CRYPT_OBJID_BLOB Qualifier;
1213 } CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO;
1214 typedef struct _CERT_POLICY_CONSTRAINTS_INFO {
1215   BOOL fRequireExplicitPolicy;
1216   DWORD dwRequireExplicitPolicySkipCerts;
1217   BOOL fInhibitPolicyMapping;
1218   DWORD dwInhibitPolicyMappingSkipCerts;
1219 } CERT_POLICY_CONSTRAINTS_INFO, *PCERT_POLICY_CONSTRAINTS_INFO;
1220 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN98) */
1221
1222 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
1223 WINADVAPI BOOL WINAPI CryptDuplicateHash(HCRYPTHASH,DWORD*,DWORD,HCRYPTHASH*);
1224 WINADVAPI BOOL WINAPI CryptDuplicateKey(HCRYPTKEY,DWORD*,DWORD,HCRYPTKEY*);
1225 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN2K) */
1226
1227 #if (_WIN32_WINNT == _WIN32_WINNT_WINXP)
1228 #define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
1229 #define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
1230 #endif /* (_WIN32_WINNT == _WIN32_WINNT_WINXP) */
1231
1232 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
1233 #define CMC_ADD_ATTRIBUTES (LPCSTR) 63
1234 #define CMC_ADD_EXTENSIONS (LPCSTR) 62
1235 #define X509_CERT_PAIR (LPCSTR) 53
1236 #define X509_CERTIFICATE_TEMPLATE (LPCSTR) 64
1237 #define X509_CROSS_CERT_DIST_POINTS (LPCSTR) 58
1238 #define CMC_DATA (LPCSTR) 59
1239 #define X509_NAME_CONSTRAINTS (LPCSTR) 55
1240 #define X509_POLICY_CONSTRAINTS (LPCSTR) 57
1241 #define X509_POLICY_MAPPINGS (LPCSTR) 56
1242 #define CMC_RESPONSE (LPCSTR) 60
1243 #define CMC_STATUS (LPCSTR) 61
1244 #define szOID_CERTIFICATE_TEMPLATE "1.3.6.1.4.1.311.21.7"
1245 #define szOID_CRL_NUMBER "2.5.29.20"
1246 #define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1"
1247 #define szOID_DELTA_CRL_INDICATOR "2.5.29.27"
1248 #define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1"
1249 #define szOID_FRESHEST_CRL "2.5.29.46"
1250 #define szOID_ISSUING_DIST_POINT "2.5.29.28"
1251 #define szOID_NAME_CONSTRAINTS "2.5.29.30"
1252 typedef struct _CMC_ADD_ATTRIBUTES_INFO {
1253   DWORD dwCmcDataReference;
1254   DWORD cCertReference;
1255   DWORD* rgdwCertReference;
1256   DWORD cAttribute;
1257   PCRYPT_ATTRIBUTE rgAttribute;
1258 } CMC_ADD_ATTRIBUTES_INFO,
1259  *PCMC_ADD_ATTRIBUTES_INFO;
1260 typedef struct _CMC_ADD_EXTENSIONS_INFO {
1261   DWORD dwCmcDataReference;
1262   DWORD cCertReference;
1263   DWORD* rgdwCertReference;
1264   DWORD cExtension;
1265   PCERT_EXTENSION rgExtension;
1266 } CMC_ADD_EXTENSIONS_INFO,
1267  *PCMC_ADD_EXTENSIONS_INFO;
1268 typedef struct _CERT_POLICY_MAPPING {
1269   LPSTR pszIssuerDomainPolicy;
1270   LPSTR pszSubjectDomainPolicy;
1271 } CERT_POLICY_MAPPING,
1272  *PCERT_POLICY_MAPPING;
1273 typedef struct _CERT_POLICY_MAPPINGS_INFO {
1274   DWORD cPolicyMapping;
1275   PCERT_POLICY_MAPPING rgPolicyMapping;
1276 } CERT_POLICY_MAPPINGS_INFO,
1277  *PCERT_POLICY_MAPPINGS_INFO;
1278 #define MS_ENH_RSA_AES_PROV __AW(MS_ENH_RSA_AES_PROV_)
1279 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINXP) */
1280
1281 #if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
1282 #define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
1283 #define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider"
1284 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_VISTA) */
1285
1286 #ifdef __cplusplus
1287 }
1288 #endif
1289
1290 #endif /* _WINCRYPT_H */