comparison fuhtark_test/include/winapi/wincrypt.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
comparison
equal deleted inserted replaced
1499:1f58458b7ef7 1500:91c8c3b7cbf0
1 /**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the w64 mingw-runtime package.
4 * No warranty is given; refer to the file DISCLAIMER within this package.
5 */
6 #ifndef __WINCRYPT_H__
7 #define __WINCRYPT_H__
8
9 #include <guiddef.h>
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 #ifndef _HRESULT_DEFINED
16 #define _HRESULT_DEFINED
17 typedef LONG HRESULT;
18 #endif
19
20 #ifndef DECLSPEC_IMPORT
21 #define DECLSPEC_IMPORT __declspec(dllimport)
22 #endif
23
24 #ifndef WINIMPM
25 #define WINIMPM DECLSPEC_IMPORT
26 #endif
27
28 #ifndef WINADVAPI
29 #define WINADVAPI WINIMPM
30 #endif
31
32
33 #ifndef WINAPI
34 #define WINAPI __stdcall
35 #endif
36
37 #ifndef CALLBACK
38 #define CALLBACK __stdcall
39 #endif
40
41 #ifndef CONST
42 #define CONST const
43 #endif
44
45 #ifndef _NO_W32_PSEUDO_MODIFIERS
46 #ifndef IN
47 #define IN
48 #endif
49 #ifndef OUT
50 #define OUT
51 #endif
52 #ifndef OPTIONAL
53 #define OPTIONAL
54 #endif
55 #endif
56
57 #define WINCRYPT32API WINIMPM
58 #define WINCRYPT32STRINGAPI WINIMPM
59
60 #define GET_ALG_CLASS(x) (x & (7 << 13))
61 #define GET_ALG_TYPE(x) (x & (15 << 9))
62 #define GET_ALG_SID(x) (x & (511))
63
64 #define ALG_CLASS_ANY (0)
65 #define ALG_CLASS_SIGNATURE (1 << 13)
66 #define ALG_CLASS_MSG_ENCRYPT (2 << 13)
67 #define ALG_CLASS_DATA_ENCRYPT (3 << 13)
68 #define ALG_CLASS_HASH (4 << 13)
69 #define ALG_CLASS_KEY_EXCHANGE (5 << 13)
70 #define ALG_CLASS_ALL (7 << 13)
71
72 #define ALG_TYPE_ANY (0)
73 #define ALG_TYPE_DSS (1 << 9)
74 #define ALG_TYPE_RSA (2 << 9)
75 #define ALG_TYPE_BLOCK (3 << 9)
76 #define ALG_TYPE_STREAM (4 << 9)
77 #define ALG_TYPE_DH (5 << 9)
78 #define ALG_TYPE_SECURECHANNEL (6 << 9)
79
80 #define ALG_SID_ANY (0)
81
82 #define ALG_SID_RSA_ANY 0
83 #define ALG_SID_RSA_PKCS 1
84 #define ALG_SID_RSA_MSATWORK 2
85 #define ALG_SID_RSA_ENTRUST 3
86 #define ALG_SID_RSA_PGP 4
87
88 #define ALG_SID_DSS_ANY 0
89 #define ALG_SID_DSS_PKCS 1
90 #define ALG_SID_DSS_DMS 2
91
92 #define ALG_SID_DES 1
93 #define ALG_SID_3DES 3
94 #define ALG_SID_DESX 4
95 #define ALG_SID_IDEA 5
96 #define ALG_SID_CAST 6
97 #define ALG_SID_SAFERSK64 7
98 #define ALG_SID_SAFERSK128 8
99 #define ALG_SID_3DES_112 9
100 #define ALG_SID_CYLINK_MEK 12
101 #define ALG_SID_RC5 13
102 #define ALG_SID_AES_128 14
103 #define ALG_SID_AES_192 15
104 #define ALG_SID_AES_256 16
105 #define ALG_SID_AES 17
106
107 #define ALG_SID_SKIPJACK 10
108 #define ALG_SID_TEK 11
109
110 #define CRYPT_MODE_CBCI 6
111 #define CRYPT_MODE_CFBP 7
112 #define CRYPT_MODE_OFBP 8
113 #define CRYPT_MODE_CBCOFM 9
114 #define CRYPT_MODE_CBCOFMI 10
115
116 #define ALG_SID_RC2 2
117
118 #define ALG_SID_RC4 1
119 #define ALG_SID_SEAL 2
120
121 #define ALG_SID_DH_SANDF 1
122 #define ALG_SID_DH_EPHEM 2
123 #define ALG_SID_AGREED_KEY_ANY 3
124 #define ALG_SID_KEA 4
125
126 #define ALG_SID_MD2 1
127 #define ALG_SID_MD4 2
128 #define ALG_SID_MD5 3
129 #define ALG_SID_SHA 4
130 #define ALG_SID_SHA1 4
131 #define ALG_SID_MAC 5
132 #define ALG_SID_RIPEMD 6
133 #define ALG_SID_RIPEMD160 7
134 #define ALG_SID_SSL3SHAMD5 8
135 #define ALG_SID_HMAC 9
136 #define ALG_SID_TLS1PRF 10
137 #define ALG_SID_HASH_REPLACE_OWF 11
138 #define ALG_SID_SHA_256 12
139 #define ALG_SID_SHA_384 13
140 #define ALG_SID_SHA_512 14
141
142 #define ALG_SID_SSL3_MASTER 1
143 #define ALG_SID_SCHANNEL_MASTER_HASH 2
144 #define ALG_SID_SCHANNEL_MAC_KEY 3
145 #define ALG_SID_PCT1_MASTER 4
146 #define ALG_SID_SSL2_MASTER 5
147 #define ALG_SID_TLS1_MASTER 6
148 #define ALG_SID_SCHANNEL_ENC_KEY 7
149
150 #define ALG_SID_EXAMPLE 80
151
152 #ifndef ALGIDDEF
153 #define ALGIDDEF
154 typedef unsigned int ALG_ID;
155 #endif
156
157 #define CALG_MD2 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2)
158 #define CALG_MD4 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4)
159 #define CALG_MD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5)
160 #define CALG_SHA (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA)
161 #define CALG_SHA1 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA1)
162 #define CALG_MAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC)
163 #define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
164 #define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY)
165 #define CALG_NO_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY)
166 #define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
167 #define CALG_DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DES)
168 #define CALG_3DES_112 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_3DES_112)
169 #define CALG_3DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_3DES)
170 #define CALG_DESX (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DESX)
171 #define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2)
172 #define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4)
173 #define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL)
174 #define CALG_DH_SF (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_DH_SANDF)
175 #define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_DH_EPHEM)
176 #define CALG_AGREEDKEY_ANY (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_AGREED_KEY_ANY)
177 #define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_KEA)
178 #define CALG_HUGHES_MD5 (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_ANY|ALG_SID_MD5)
179 #define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_SKIPJACK)
180 #define CALG_TEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_TEK)
181 #define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_CYLINK_MEK)
182 #define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)
183 #define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SSL3_MASTER)
184 #define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_MASTER_HASH)
185 #define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_MAC_KEY)
186 #define CALG_SCHANNEL_ENC_KEY (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_ENC_KEY)
187 #define CALG_PCT1_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_PCT1_MASTER)
188 #define CALG_SSL2_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SSL2_MASTER)
189 #define CALG_TLS1_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_TLS1_MASTER)
190 #define CALG_RC5 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC5)
191 #define CALG_HMAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC)
192 #define CALG_TLS1PRF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF)
193 #define CALG_HASH_REPLACE_OWF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF)
194 #define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_128)
195 #define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_192)
196 #define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_256)
197 #define CALG_AES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES)
198 #define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
199 #define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
200 #define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
201
202 typedef ULONG_PTR HCRYPTPROV;
203 typedef ULONG_PTR HCRYPTKEY;
204 typedef ULONG_PTR HCRYPTHASH;
205
206 #define CRYPT_VERIFYCONTEXT 0xF0000000
207 #define CRYPT_NEWKEYSET 0x8
208 #define CRYPT_DELETEKEYSET 0x10
209 #define CRYPT_MACHINE_KEYSET 0x20
210 #define CRYPT_SILENT 0x40
211
212 #define CRYPT_EXPORTABLE 0x1
213 #define CRYPT_USER_PROTECTED 0x2
214 #define CRYPT_CREATE_SALT 0x4
215 #define CRYPT_UPDATE_KEY 0x8
216 #define CRYPT_NO_SALT 0x10
217 #define CRYPT_PREGEN 0x40
218 #define CRYPT_RECIPIENT 0x10
219 #define CRYPT_INITIATOR 0x40
220 #define CRYPT_ONLINE 0x80
221 #define CRYPT_SF 0x100
222 #define CRYPT_CREATE_IV 0x200
223 #define CRYPT_KEK 0x400
224 #define CRYPT_DATA_KEY 0x800
225 #define CRYPT_VOLATILE 0x1000
226 #define CRYPT_SGCKEY 0x2000
227 #define CRYPT_ARCHIVABLE 0x4000
228
229 #define RSA1024BIT_KEY 0x4000000
230
231 #define CRYPT_SERVER 0x400
232
233 #define KEY_LENGTH_MASK 0xFFFF0000
234
235 #define CRYPT_Y_ONLY 0x1
236 #define CRYPT_SSL2_FALLBACK 0x2
237 #define CRYPT_DESTROYKEY 0x4
238 #define CRYPT_OAEP 0x40
239
240 #define CRYPT_BLOB_VER3 0x80
241 #define CRYPT_IPSEC_HMAC_KEY 0x100
242
243 #define CRYPT_DECRYPT_RSA_NO_PADDING_CHECK 0x20
244
245 #define CRYPT_SECRETDIGEST 0x1
246
247 #define CRYPT_OWF_REPL_LM_HASH 0x1
248
249 #define CRYPT_LITTLE_ENDIAN 0x1
250
251 #define CRYPT_NOHASHOID 0x1
252 #define CRYPT_TYPE2_FORMAT 0x2
253 #define CRYPT_X931_FORMAT 0x4
254
255 #define CRYPT_MACHINE_DEFAULT 0x1
256 #define CRYPT_USER_DEFAULT 0x2
257 #define CRYPT_DELETE_DEFAULT 0x4
258
259 #define SIMPLEBLOB 0x1
260 #define PUBLICKEYBLOB 0x6
261 #define PRIVATEKEYBLOB 0x7
262 #define PLAINTEXTKEYBLOB 0x8
263 #define OPAQUEKEYBLOB 0x9
264 #define PUBLICKEYBLOBEX 0xa
265 #define SYMMETRICWRAPKEYBLOB 0xb
266 #define KEYSTATEBLOB 0xc
267
268 #define AT_KEYEXCHANGE 1
269 #define AT_SIGNATURE 2
270
271 #define CRYPT_USERDATA 1
272
273 #define KP_IV 1
274 #define KP_SALT 2
275 #define KP_PADDING 3
276 #define KP_MODE 4
277 #define KP_MODE_BITS 5
278 #define KP_PERMISSIONS 6
279 #define KP_ALGID 7
280 #define KP_BLOCKLEN 8
281 #define KP_KEYLEN 9
282 #define KP_SALT_EX 10
283 #define KP_P 11
284 #define KP_G 12
285 #define KP_Q 13
286 #define KP_X 14
287 #define KP_Y 15
288 #define KP_RA 16
289 #define KP_RB 17
290 #define KP_INFO 18
291 #define KP_EFFECTIVE_KEYLEN 19
292 #define KP_SCHANNEL_ALG 20
293 #define KP_CLIENT_RANDOM 21
294 #define KP_SERVER_RANDOM 22
295 #define KP_RP 23
296 #define KP_PRECOMP_MD5 24
297 #define KP_PRECOMP_SHA 25
298 #define KP_CERTIFICATE 26
299 #define KP_CLEAR_KEY 27
300 #define KP_PUB_EX_LEN 28
301 #define KP_PUB_EX_VAL 29
302 #define KP_KEYVAL 30
303 #define KP_ADMIN_PIN 31
304 #define KP_KEYEXCHANGE_PIN 32
305 #define KP_SIGNATURE_PIN 33
306 #define KP_PREHASH 34
307 #define KP_ROUNDS 35
308 #define KP_OAEP_PARAMS 36
309 #define KP_CMS_KEY_INFO 37
310 #define KP_CMS_DH_KEY_INFO 38
311 #define KP_PUB_PARAMS 39
312 #define KP_VERIFY_PARAMS 40
313 #define KP_HIGHEST_VERSION 41
314 #define KP_GET_USE_COUNT 42
315
316 #define PKCS5_PADDING 1
317 #define RANDOM_PADDING 2
318 #define ZERO_PADDING 3
319
320 #define CRYPT_MODE_CBC 1
321 #define CRYPT_MODE_ECB 2
322 #define CRYPT_MODE_OFB 3
323 #define CRYPT_MODE_CFB 4
324 #define CRYPT_MODE_CTS 5
325
326 #define CRYPT_ENCRYPT 0x1
327 #define CRYPT_DECRYPT 0x2
328 #define CRYPT_EXPORT 0x4
329 #define CRYPT_READ 0x8
330 #define CRYPT_WRITE 0x10
331 #define CRYPT_MAC 0x20
332 #define CRYPT_EXPORT_KEY 0x40
333 #define CRYPT_IMPORT_KEY 0x80
334 #define CRYPT_ARCHIVE 0x100
335
336 #define HP_ALGID 0x1
337 #define HP_HASHVAL 0x2
338 #define HP_HASHSIZE 0x4
339 #define HP_HMAC_INFO 0x5
340 #define HP_TLS1PRF_LABEL 0x6
341 #define HP_TLS1PRF_SEED 0x7
342
343 #define CRYPT_FAILED FALSE
344 #define CRYPT_SUCCEED TRUE
345
346 #define RCRYPT_SUCCEEDED(RT) ((RT) == CRYPT_SUCCEED)
347 #define RCRYPT_FAILED(RT) ((RT) == CRYPT_FAILED)
348
349 #define PP_ENUMALGS 1
350 #define PP_ENUMCONTAINERS 2
351 #define PP_IMPTYPE 3
352 #define PP_NAME 4
353 #define PP_VERSION 5
354 #define PP_CONTAINER 6
355 #define PP_CHANGE_PASSWORD 7
356 #define PP_KEYSET_SEC_DESCR 8
357 #define PP_CERTCHAIN 9
358 #define PP_KEY_TYPE_SUBTYPE 10
359 #define PP_PROVTYPE 16
360 #define PP_KEYSTORAGE 17
361 #define PP_APPLI_CERT 18
362 #define PP_SYM_KEYSIZE 19
363 #define PP_SESSION_KEYSIZE 20
364 #define PP_UI_PROMPT 21
365 #define PP_ENUMALGS_EX 22
366 #define PP_ENUMMANDROOTS 25
367 #define PP_ENUMELECTROOTS 26
368 #define PP_KEYSET_TYPE 27
369 #define PP_ADMIN_PIN 31
370 #define PP_KEYEXCHANGE_PIN 32
371 #define PP_SIGNATURE_PIN 33
372 #define PP_SIG_KEYSIZE_INC 34
373 #define PP_KEYX_KEYSIZE_INC 35
374 #define PP_UNIQUE_CONTAINER 36
375 #define PP_SGC_INFO 37
376 #define PP_USE_HARDWARE_RNG 38
377 #define PP_KEYSPEC 39
378 #define PP_ENUMEX_SIGNING_PROT 40
379 #define PP_CRYPT_COUNT_KEY_USE 41
380
381 #define CRYPT_FIRST 1
382 #define CRYPT_NEXT 2
383 #define CRYPT_SGC_ENUM 4
384
385 #define CRYPT_IMPL_HARDWARE 1
386 #define CRYPT_IMPL_SOFTWARE 2
387 #define CRYPT_IMPL_MIXED 3
388 #define CRYPT_IMPL_UNKNOWN 4
389 #define CRYPT_IMPL_REMOVABLE 8
390
391 #define CRYPT_SEC_DESCR 0x1
392 #define CRYPT_PSTORE 0x2
393 #define CRYPT_UI_PROMPT 0x4
394
395 #define CRYPT_FLAG_PCT1 0x1
396 #define CRYPT_FLAG_SSL2 0x2
397 #define CRYPT_FLAG_SSL3 0x4
398 #define CRYPT_FLAG_TLS1 0x8
399 #define CRYPT_FLAG_IPSEC 0x10
400 #define CRYPT_FLAG_SIGNING 0x20
401
402 #define CRYPT_SGC 0x1
403 #define CRYPT_FASTSGC 0x2
404
405 #define PP_CLIENT_HWND 1
406 #define PP_CONTEXT_INFO 11
407 #define PP_KEYEXCHANGE_KEYSIZE 12
408 #define PP_SIGNATURE_KEYSIZE 13
409 #define PP_KEYEXCHANGE_ALG 14
410 #define PP_SIGNATURE_ALG 15
411 #define PP_DELETEKEY 24
412
413 #define PROV_RSA_FULL 1
414 #define PROV_RSA_SIG 2
415 #define PROV_DSS 3
416 #define PROV_FORTEZZA 4
417 #define PROV_MS_EXCHANGE 5
418 #define PROV_SSL 6
419 #define PROV_RSA_SCHANNEL 12
420 #define PROV_DSS_DH 13
421 #define PROV_EC_ECDSA_SIG 14
422 #define PROV_EC_ECNRA_SIG 15
423 #define PROV_EC_ECDSA_FULL 16
424 #define PROV_EC_ECNRA_FULL 17
425 #define PROV_DH_SCHANNEL 18
426 #define PROV_SPYRUS_LYNKS 20
427 #define PROV_RNG 21
428 #define PROV_INTEL_SEC 22
429 #define PROV_REPLACE_OWF 23
430 #define PROV_RSA_AES 24
431
432 #ifdef UNICODE
433 #define MS_DEF_PROV MS_DEF_PROV_W
434 #define MS_ENHANCED_PROV MS_ENHANCED_PROV_W
435 #define MS_STRONG_PROV MS_STRONG_PROV_W
436 #define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_W
437 #define MS_DEF_RSA_SCHANNEL_PROV MS_DEF_RSA_SCHANNEL_PROV_W
438 #define MS_DEF_DSS_PROV MS_DEF_DSS_PROV_W
439 #define MS_DEF_DSS_DH_PROV MS_DEF_DSS_DH_PROV_W
440 #define MS_ENH_DSS_DH_PROV MS_ENH_DSS_DH_PROV_W
441 #define MS_DEF_DH_SCHANNEL_PROV MS_DEF_DH_SCHANNEL_PROV_W
442 #else
443 #define MS_DEF_PROV MS_DEF_PROV_A
444 #define MS_ENHANCED_PROV MS_ENHANCED_PROV_A
445 #define MS_STRONG_PROV MS_STRONG_PROV_A
446 #define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_A
447 #define MS_DEF_RSA_SCHANNEL_PROV MS_DEF_RSA_SCHANNEL_PROV_A
448 #define MS_DEF_DSS_PROV MS_DEF_DSS_PROV_A
449 #define MS_DEF_DSS_DH_PROV MS_DEF_DSS_DH_PROV_A
450 #define MS_ENH_DSS_DH_PROV MS_ENH_DSS_DH_PROV_A
451 #define MS_DEF_DH_SCHANNEL_PROV MS_DEF_DH_SCHANNEL_PROV_A
452 #endif
453
454 #define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0"
455 #define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0"
456 #define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0"
457 #define MS_ENHANCED_PROV_W L"Microsoft Enhanced Cryptographic Provider v1.0"
458 #define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider"
459 #define MS_STRONG_PROV_W L"Microsoft Strong Cryptographic Provider"
460 #define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider"
461 #define MS_DEF_RSA_SIG_PROV_W L"Microsoft RSA Signature Cryptographic Provider"
462 #define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider"
463 #define MS_DEF_RSA_SCHANNEL_PROV_W L"Microsoft RSA SChannel Cryptographic Provider"
464 #define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider"
465 #define MS_DEF_DSS_PROV_W L"Microsoft Base DSS Cryptographic Provider"
466 #define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
467 #define MS_DEF_DSS_DH_PROV_W L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
468 #define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
469 #define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
470 #define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider"
471 #define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider"
472
473 #ifdef UNICODE
474 #define MS_SCARD_PROV MS_SCARD_PROV_W
475 #define MS_ENH_RSA_AES_PROV MS_ENH_RSA_AES_PROV_W
476 #else
477 #define MS_SCARD_PROV MS_SCARD_PROV_A
478 #define MS_ENH_RSA_AES_PROV MS_ENH_RSA_AES_PROV_A
479 #endif
480
481 #define MS_SCARD_PROV_A "Microsoft Base Smart Card Crypto Provider"
482 #define MS_SCARD_PROV_W L"Microsoft Base Smart Card Crypto Provider"
483
484 #define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
485 #define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider"
486
487 #define MAXUIDLEN 64
488
489 #define EXPO_OFFLOAD_REG_VALUE "ExpoOffload"
490 #define EXPO_OFFLOAD_FUNC_NAME "OffloadModExpo"
491
492 #define szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS "Software\\Policies\\Microsoft\\Cryptography"
493
494 #define szFORCE_KEY_PROTECTION "ForceKeyProtection"
495
496 #define dwFORCE_KEY_PROTECTION_DISABLED 0x0
497 #define dwFORCE_KEY_PROTECTION_USER_SELECT 0x1
498 #define dwFORCE_KEY_PROTECTION_HIGH 0x2
499
500 #define szKEY_CACHE_ENABLED "CachePrivateKeys"
501 #define szKEY_CACHE_SECONDS "PrivateKeyLifetimeSeconds"
502
503 #define szPRIV_KEY_CACHE_MAX_ITEMS "PrivKeyCacheMaxItems"
504 #define cPRIV_KEY_CACHE_MAX_ITEMS_DEFAULT 20
505
506 #define szPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS "PrivKeyCachePurgeIntervalSeconds"
507 #define cPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS_DEFAULT 86400
508
509 #define CUR_BLOB_VERSION 2
510
511 typedef struct _CMS_KEY_INFO {
512 DWORD dwVersion;
513 ALG_ID Algid;
514 BYTE *pbOID;
515 DWORD cbOID;
516 } CMS_KEY_INFO,*PCMS_KEY_INFO;
517
518 typedef struct _HMAC_Info {
519 ALG_ID HashAlgid;
520 BYTE *pbInnerString;
521 DWORD cbInnerString;
522 BYTE *pbOuterString;
523 DWORD cbOuterString;
524 } HMAC_INFO,*PHMAC_INFO;
525
526 typedef struct _SCHANNEL_ALG {
527 DWORD dwUse;
528 ALG_ID Algid;
529 DWORD cBits;
530 DWORD dwFlags;
531 DWORD dwReserved;
532 } SCHANNEL_ALG,*PSCHANNEL_ALG;
533
534 #define SCHANNEL_MAC_KEY 0x0
535 #define SCHANNEL_ENC_KEY 0x1
536
537 #define INTERNATIONAL_USAGE 0x1
538
539 typedef struct _PROV_ENUMALGS {
540 ALG_ID aiAlgid;
541 DWORD dwBitLen;
542 DWORD dwNameLen;
543 CHAR szName[20];
544 } PROV_ENUMALGS;
545
546 typedef struct _PROV_ENUMALGS_EX {
547 ALG_ID aiAlgid;
548 DWORD dwDefaultLen;
549 DWORD dwMinLen;
550 DWORD dwMaxLen;
551 DWORD dwProtocols;
552 DWORD dwNameLen;
553 CHAR szName[20];
554 DWORD dwLongNameLen;
555 CHAR szLongName[40];
556 } PROV_ENUMALGS_EX;
557
558 typedef struct _PUBLICKEYSTRUC {
559 BYTE bType;
560 BYTE bVersion;
561 WORD reserved;
562 ALG_ID aiKeyAlg;
563 } BLOBHEADER,PUBLICKEYSTRUC;
564
565 typedef struct _RSAPUBKEY {
566 DWORD magic;
567 DWORD bitlen;
568 DWORD pubexp;
569
570 } RSAPUBKEY;
571
572 typedef struct _PUBKEY {
573 DWORD magic;
574 DWORD bitlen;
575 } DHPUBKEY,DSSPUBKEY,KEAPUBKEY,TEKPUBKEY;
576
577 typedef struct _DSSSEED {
578 DWORD counter;
579 BYTE seed[20];
580 } DSSSEED;
581
582 typedef struct _PUBKEYVER3 {
583 DWORD magic;
584 DWORD bitlenP;
585 DWORD bitlenQ;
586 DWORD bitlenJ;
587 DSSSEED DSSSeed;
588 } DHPUBKEY_VER3,DSSPUBKEY_VER3;
589
590 typedef struct _PRIVKEYVER3 {
591 DWORD magic;
592 DWORD bitlenP;
593 DWORD bitlenQ;
594 DWORD bitlenJ;
595 DWORD bitlenX;
596 DSSSEED DSSSeed;
597 } DHPRIVKEY_VER3,DSSPRIVKEY_VER3;
598
599 typedef struct _KEY_TYPE_SUBTYPE {
600 DWORD dwKeySpec;
601 GUID Type;
602 GUID Subtype;
603 } KEY_TYPE_SUBTYPE,*PKEY_TYPE_SUBTYPE;
604
605 typedef struct _CERT_FORTEZZA_DATA_PROP {
606 unsigned char SerialNumber[8];
607 int CertIndex;
608 unsigned char CertLabel[36];
609 } CERT_FORTEZZA_DATA_PROP;
610
611 typedef struct _CRYPT_RC4_KEY_STATE {
612 unsigned char Key[16];
613 unsigned char SBox[256];
614 unsigned char i;
615 unsigned char j;
616 } CRYPT_RC4_KEY_STATE,*PCRYPT_RC4_KEY_STATE;
617
618 typedef struct _CRYPT_DES_KEY_STATE {
619 unsigned char Key[8];
620 unsigned char IV[8];
621 unsigned char Feedback[8];
622 } CRYPT_DES_KEY_STATE,*PCRYPT_DES_KEY_STATE;
623
624 typedef struct _CRYPT_3DES_KEY_STATE {
625 unsigned char Key[24];
626 unsigned char IV[8];
627 unsigned char Feedback[8];
628 } CRYPT_3DES_KEY_STATE,*PCRYPT_3DES_KEY_STATE;
629
630 typedef struct _CRYPTOAPI_BLOB {
631 DWORD cbData;
632 BYTE *pbData;
633 } CRYPT_INTEGER_BLOB,*PCRYPT_INTEGER_BLOB,CRYPT_UINT_BLOB,*PCRYPT_UINT_BLOB,CRYPT_OBJID_BLOB,*PCRYPT_OBJID_BLOB,CERT_NAME_BLOB,*PCERT_NAME_BLOB,CERT_RDN_VALUE_BLOB,*PCERT_RDN_VALUE_BLOB,CERT_BLOB,*PCERT_BLOB,CRL_BLOB,*PCRL_BLOB,DATA_BLOB,*PDATA_BLOB,CRYPT_DATA_BLOB,*PCRYPT_DATA_BLOB,CRYPT_HASH_BLOB,*PCRYPT_HASH_BLOB,CRYPT_DIGEST_BLOB,*PCRYPT_DIGEST_BLOB,CRYPT_DER_BLOB,*PCRYPT_DER_BLOB,CRYPT_ATTR_BLOB,*PCRYPT_ATTR_BLOB;
634
635 typedef struct _CMS_DH_KEY_INFO {
636 DWORD dwVersion;
637 ALG_ID Algid;
638 LPSTR pszContentEncObjId;
639 CRYPT_DATA_BLOB PubInfo;
640 void *pReserved;
641 } CMS_DH_KEY_INFO,*PCMS_DH_KEY_INFO;
642
643 #ifdef UNICODE
644 #define CryptAcquireContext CryptAcquireContextW
645 #define CryptSignHash CryptSignHashW
646 #define CryptVerifySignature CryptVerifySignatureW
647 #else
648 #define CryptAcquireContext CryptAcquireContextA
649 #define CryptSignHash CryptSignHashA
650 #define CryptVerifySignature CryptVerifySignatureA
651 #endif
652
653 WINIMPM WINBOOL WINAPI CryptAcquireContextA(HCRYPTPROV *phProv,LPCSTR szContainer,LPCSTR szProvider,DWORD dwProvType,DWORD dwFlags);
654 WINIMPM WINBOOL WINAPI CryptAcquireContextW(HCRYPTPROV *phProv,LPCWSTR szContainer,LPCWSTR szProvider,DWORD dwProvType,DWORD dwFlags);
655 WINIMPM WINBOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv,DWORD dwFlags);
656 WINIMPM WINBOOL WINAPI CryptGenKey(HCRYPTPROV hProv,ALG_ID Algid,DWORD dwFlags,HCRYPTKEY *phKey);
657 WINIMPM WINBOOL WINAPI CryptDeriveKey(HCRYPTPROV hProv,ALG_ID Algid,HCRYPTHASH hBaseData,DWORD dwFlags,HCRYPTKEY *phKey);
658 WINIMPM WINBOOL WINAPI CryptDestroyKey(HCRYPTKEY hKey);
659 WINIMPM WINBOOL WINAPI CryptSetKeyParam(HCRYPTKEY hKey,DWORD dwParam,CONST BYTE *pbData,DWORD dwFlags);
660 WINIMPM WINBOOL WINAPI CryptGetKeyParam(HCRYPTKEY hKey,DWORD dwParam,BYTE *pbData,DWORD *pdwDataLen,DWORD dwFlags);
661 WINIMPM WINBOOL WINAPI CryptSetHashParam(HCRYPTHASH hHash,DWORD dwParam,CONST BYTE *pbData,DWORD dwFlags);
662 WINIMPM WINBOOL WINAPI CryptGetHashParam(HCRYPTHASH hHash,DWORD dwParam,BYTE *pbData,DWORD *pdwDataLen,DWORD dwFlags);
663 WINIMPM WINBOOL WINAPI CryptSetProvParam(HCRYPTPROV hProv,DWORD dwParam,CONST BYTE *pbData,DWORD dwFlags);
664 WINIMPM WINBOOL WINAPI CryptGetProvParam(HCRYPTPROV hProv,DWORD dwParam,BYTE *pbData,DWORD *pdwDataLen,DWORD dwFlags);
665 WINIMPM WINBOOL WINAPI CryptGenRandom(HCRYPTPROV hProv,DWORD dwLen,BYTE *pbBuffer);
666 WINIMPM WINBOOL WINAPI CryptGetUserKey(HCRYPTPROV hProv,DWORD dwKeySpec,HCRYPTKEY *phUserKey);
667 WINIMPM WINBOOL WINAPI CryptExportKey(HCRYPTKEY hKey,HCRYPTKEY hExpKey,DWORD dwBlobType,DWORD dwFlags,BYTE *pbData,DWORD *pdwDataLen);
668 WINIMPM WINBOOL WINAPI CryptImportKey(HCRYPTPROV hProv,CONST BYTE *pbData,DWORD dwDataLen,HCRYPTKEY hPubKey,DWORD dwFlags,HCRYPTKEY *phKey);
669 WINIMPM WINBOOL WINAPI CryptEncrypt(HCRYPTKEY hKey,HCRYPTHASH hHash,WINBOOL Final,DWORD dwFlags,BYTE *pbData,DWORD *pdwDataLen,DWORD dwBufLen);
670 WINIMPM WINBOOL WINAPI CryptDecrypt(HCRYPTKEY hKey,HCRYPTHASH hHash,WINBOOL Final,DWORD dwFlags,BYTE *pbData,DWORD *pdwDataLen);
671 WINIMPM WINBOOL WINAPI CryptCreateHash(HCRYPTPROV hProv,ALG_ID Algid,HCRYPTKEY hKey,DWORD dwFlags,HCRYPTHASH *phHash);
672 WINIMPM WINBOOL WINAPI CryptHashData(HCRYPTHASH hHash,CONST BYTE *pbData,DWORD dwDataLen,DWORD dwFlags);
673 WINIMPM WINBOOL WINAPI CryptHashSessionKey(HCRYPTHASH hHash,HCRYPTKEY hKey,DWORD dwFlags);
674 WINIMPM WINBOOL WINAPI CryptDestroyHash(HCRYPTHASH hHash);
675 WINIMPM WINBOOL WINAPI CryptSignHashA(HCRYPTHASH hHash,DWORD dwKeySpec,LPCSTR szDescription,DWORD dwFlags,BYTE *pbSignature,DWORD *pdwSigLen);
676 WINIMPM WINBOOL WINAPI CryptSignHashW(HCRYPTHASH hHash,DWORD dwKeySpec,LPCWSTR szDescription,DWORD dwFlags,BYTE *pbSignature,DWORD *pdwSigLen);
677 WINIMPM WINBOOL WINAPI CryptVerifySignatureA(HCRYPTHASH hHash,CONST BYTE *pbSignature,DWORD dwSigLen,HCRYPTKEY hPubKey,LPCSTR szDescription,DWORD dwFlags);
678 WINIMPM WINBOOL WINAPI CryptVerifySignatureW(HCRYPTHASH hHash,CONST BYTE *pbSignature,DWORD dwSigLen,HCRYPTKEY hPubKey,LPCWSTR szDescription,DWORD dwFlags);
679 WINIMPM WINBOOL WINAPI CryptSetProviderA(LPCSTR pszProvName,DWORD dwProvType);
680 WINIMPM WINBOOL WINAPI CryptSetProviderW(LPCWSTR pszProvName,DWORD dwProvType);
681 #ifdef UNICODE
682 #define CryptSetProvider CryptSetProviderW
683 #define CryptSetProviderEx CryptSetProviderExW
684 #define CryptGetDefaultProvider CryptGetDefaultProviderW
685 #define CryptEnumProviderTypes CryptEnumProviderTypesW
686 #define CryptEnumProviders CryptEnumProvidersW
687 #else
688 #define CryptSetProvider CryptSetProviderA
689 #define CryptSetProviderEx CryptSetProviderExA
690 #define CryptGetDefaultProvider CryptGetDefaultProviderA
691 #define CryptEnumProviderTypes CryptEnumProviderTypesA
692 #define CryptEnumProviders CryptEnumProvidersA
693 #endif
694
695 WINIMPM WINBOOL WINAPI CryptSetProviderExA(LPCSTR pszProvName,DWORD dwProvType,DWORD *pdwReserved,DWORD dwFlags);
696 WINIMPM WINBOOL WINAPI CryptSetProviderExW(LPCWSTR pszProvName,DWORD dwProvType,DWORD *pdwReserved,DWORD dwFlags);
697 WINIMPM WINBOOL WINAPI CryptGetDefaultProviderA(DWORD dwProvType,DWORD *pdwReserved,DWORD dwFlags,LPSTR pszProvName,DWORD *pcbProvName);
698 WINIMPM WINBOOL WINAPI CryptGetDefaultProviderW(DWORD dwProvType,DWORD *pdwReserved,DWORD dwFlags,LPWSTR pszProvName,DWORD *pcbProvName);
699 WINIMPM WINBOOL WINAPI CryptEnumProviderTypesA(DWORD dwIndex,DWORD *pdwReserved,DWORD dwFlags,DWORD *pdwProvType,LPSTR szTypeName,DWORD *pcbTypeName);
700 WINIMPM WINBOOL WINAPI CryptEnumProviderTypesW(DWORD dwIndex,DWORD *pdwReserved,DWORD dwFlags,DWORD *pdwProvType,LPWSTR szTypeName,DWORD *pcbTypeName);
701 WINIMPM WINBOOL WINAPI CryptEnumProvidersA(DWORD dwIndex,DWORD *pdwReserved,DWORD dwFlags,DWORD *pdwProvType,LPSTR szProvName,DWORD *pcbProvName);
702 WINIMPM WINBOOL WINAPI CryptEnumProvidersW(DWORD dwIndex,DWORD *pdwReserved,DWORD dwFlags,DWORD *pdwProvType,LPWSTR szProvName,DWORD *pcbProvName);
703 WINIMPM WINBOOL WINAPI CryptContextAddRef(HCRYPTPROV hProv,DWORD *pdwReserved,DWORD dwFlags);
704 WINIMPM WINBOOL WINAPI CryptDuplicateKey(HCRYPTKEY hKey,DWORD *pdwReserved,DWORD dwFlags,HCRYPTKEY *phKey);
705 WINIMPM WINBOOL WINAPI CryptDuplicateHash(HCRYPTHASH hHash,DWORD *pdwReserved,DWORD dwFlags,HCRYPTHASH *phHash);
706 WINBOOL __cdecl GetEncSChannel(BYTE **pData,DWORD *dwDecSize);
707
708 typedef struct _CRYPT_BIT_BLOB {
709 DWORD cbData;
710 BYTE *pbData;
711 DWORD cUnusedBits;
712 } CRYPT_BIT_BLOB,*PCRYPT_BIT_BLOB;
713
714 typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
715 LPSTR pszObjId;
716 CRYPT_OBJID_BLOB Parameters;
717 } CRYPT_ALGORITHM_IDENTIFIER,*PCRYPT_ALGORITHM_IDENTIFIER;
718
719 #define szOID_RSA "1.2.840.113549"
720 #define szOID_PKCS "1.2.840.113549.1"
721 #define szOID_RSA_HASH "1.2.840.113549.2"
722 #define szOID_RSA_ENCRYPT "1.2.840.113549.3"
723 #define szOID_PKCS_1 "1.2.840.113549.1.1"
724 #define szOID_PKCS_2 "1.2.840.113549.1.2"
725 #define szOID_PKCS_3 "1.2.840.113549.1.3"
726 #define szOID_PKCS_4 "1.2.840.113549.1.4"
727 #define szOID_PKCS_5 "1.2.840.113549.1.5"
728 #define szOID_PKCS_6 "1.2.840.113549.1.6"
729 #define szOID_PKCS_7 "1.2.840.113549.1.7"
730 #define szOID_PKCS_8 "1.2.840.113549.1.8"
731 #define szOID_PKCS_9 "1.2.840.113549.1.9"
732 #define szOID_PKCS_10 "1.2.840.113549.1.10"
733 #define szOID_PKCS_12 "1.2.840.113549.1.12"
734 #define szOID_RSA_RSA "1.2.840.113549.1.1.1"
735 #define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2"
736 #define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3"
737 #define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4"
738 #define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5"
739 #define szOID_RSA_SETOAEP_RSA "1.2.840.113549.1.1.6"
740 #define szOID_RSA_DH "1.2.840.113549.1.3.1"
741 #define szOID_RSA_data "1.2.840.113549.1.7.1"
742 #define szOID_RSA_signedData "1.2.840.113549.1.7.2"
743 #define szOID_RSA_envelopedData "1.2.840.113549.1.7.3"
744 #define szOID_RSA_signEnvData "1.2.840.113549.1.7.4"
745 #define szOID_RSA_digestedData "1.2.840.113549.1.7.5"
746 #define szOID_RSA_hashedData "1.2.840.113549.1.7.5"
747 #define szOID_RSA_encryptedData "1.2.840.113549.1.7.6"
748 #define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
749 #define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
750 #define szOID_RSA_contentType "1.2.840.113549.1.9.3"
751 #define szOID_RSA_messageDigest "1.2.840.113549.1.9.4"
752 #define szOID_RSA_signingTime "1.2.840.113549.1.9.5"
753 #define szOID_RSA_counterSign "1.2.840.113549.1.9.6"
754 #define szOID_RSA_challengePwd "1.2.840.113549.1.9.7"
755 #define szOID_RSA_unstructAddr "1.2.840.113549.1.9.8"
756 #define szOID_RSA_extCertAttrs "1.2.840.113549.1.9.9"
757 #define szOID_RSA_certExtensions "1.2.840.113549.1.9.14"
758 #define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15"
759 #define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1"
760 #define szOID_RSA_SMIMEalg "1.2.840.113549.1.9.16.3"
761 #define szOID_RSA_SMIMEalgESDH "1.2.840.113549.1.9.16.3.5"
762 #define szOID_RSA_SMIMEalgCMS3DESwrap "1.2.840.113549.1.9.16.3.6"
763 #define szOID_RSA_SMIMEalgCMSRC2wrap "1.2.840.113549.1.9.16.3.7"
764 #define szOID_RSA_MD2 "1.2.840.113549.2.2"
765 #define szOID_RSA_MD4 "1.2.840.113549.2.4"
766 #define szOID_RSA_MD5 "1.2.840.113549.2.5"
767
768 #define szOID_RSA_RC2CBC "1.2.840.113549.3.2"
769 #define szOID_RSA_RC4 "1.2.840.113549.3.4"
770 #define szOID_RSA_DES_EDE3_CBC "1.2.840.113549.3.7"
771 #define szOID_RSA_RC5_CBCPad "1.2.840.113549.3.9"
772
773 #define szOID_ANSI_X942 "1.2.840.10046"
774 #define szOID_ANSI_X942_DH "1.2.840.10046.2.1"
775
776 #define szOID_X957 "1.2.840.10040"
777 #define szOID_X957_DSA "1.2.840.10040.4.1"
778 #define szOID_X957_SHA1DSA "1.2.840.10040.4.3"
779
780 #define szOID_DS "2.5"
781 #define szOID_DSALG "2.5.8"
782 #define szOID_DSALG_CRPT "2.5.8.1"
783 #define szOID_DSALG_HASH "2.5.8.2"
784 #define szOID_DSALG_SIGN "2.5.8.3"
785 #define szOID_DSALG_RSA "2.5.8.1.1"
786
787 #define szOID_OIW "1.3.14"
788
789 #define szOID_OIWSEC "1.3.14.3.2"
790 #define szOID_OIWSEC_md4RSA "1.3.14.3.2.2"
791 #define szOID_OIWSEC_md5RSA "1.3.14.3.2.3"
792 #define szOID_OIWSEC_md4RSA2 "1.3.14.3.2.4"
793 #define szOID_OIWSEC_desECB "1.3.14.3.2.6"
794 #define szOID_OIWSEC_desCBC "1.3.14.3.2.7"
795 #define szOID_OIWSEC_desOFB "1.3.14.3.2.8"
796 #define szOID_OIWSEC_desCFB "1.3.14.3.2.9"
797 #define szOID_OIWSEC_desMAC "1.3.14.3.2.10"
798 #define szOID_OIWSEC_rsaSign "1.3.14.3.2.11"
799 #define szOID_OIWSEC_dsa "1.3.14.3.2.12"
800 #define szOID_OIWSEC_shaDSA "1.3.14.3.2.13"
801 #define szOID_OIWSEC_mdc2RSA "1.3.14.3.2.14"
802 #define szOID_OIWSEC_shaRSA "1.3.14.3.2.15"
803 #define szOID_OIWSEC_dhCommMod "1.3.14.3.2.16"
804 #define szOID_OIWSEC_desEDE "1.3.14.3.2.17"
805 #define szOID_OIWSEC_sha "1.3.14.3.2.18"
806 #define szOID_OIWSEC_mdc2 "1.3.14.3.2.19"
807 #define szOID_OIWSEC_dsaComm "1.3.14.3.2.20"
808 #define szOID_OIWSEC_dsaCommSHA "1.3.14.3.2.21"
809 #define szOID_OIWSEC_rsaXchg "1.3.14.3.2.22"
810 #define szOID_OIWSEC_keyHashSeal "1.3.14.3.2.23"
811 #define szOID_OIWSEC_md2RSASign "1.3.14.3.2.24"
812 #define szOID_OIWSEC_md5RSASign "1.3.14.3.2.25"
813 #define szOID_OIWSEC_sha1 "1.3.14.3.2.26"
814 #define szOID_OIWSEC_dsaSHA1 "1.3.14.3.2.27"
815 #define szOID_OIWSEC_dsaCommSHA1 "1.3.14.3.2.28"
816 #define szOID_OIWSEC_sha1RSASign "1.3.14.3.2.29"
817
818 #define szOID_OIWDIR "1.3.14.7.2"
819 #define szOID_OIWDIR_CRPT "1.3.14.7.2.1"
820 #define szOID_OIWDIR_HASH "1.3.14.7.2.2"
821 #define szOID_OIWDIR_SIGN "1.3.14.7.2.3"
822 #define szOID_OIWDIR_md2 "1.3.14.7.2.2.1"
823 #define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1"
824
825 #define szOID_INFOSEC "2.16.840.1.101.2.1"
826 #define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1"
827 #define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2"
828 #define szOID_INFOSEC_sdnsConfidentiality "2.16.840.1.101.2.1.1.3"
829 #define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4"
830 #define szOID_INFOSEC_sdnsIntegrity "2.16.840.1.101.2.1.1.5"
831 #define szOID_INFOSEC_mosaicIntegrity "2.16.840.1.101.2.1.1.6"
832 #define szOID_INFOSEC_sdnsTokenProtection "2.16.840.1.101.2.1.1.7"
833 #define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8"
834 #define szOID_INFOSEC_sdnsKeyManagement "2.16.840.1.101.2.1.1.9"
835 #define szOID_INFOSEC_mosaicKeyManagement "2.16.840.1.101.2.1.1.10"
836 #define szOID_INFOSEC_sdnsKMandSig "2.16.840.1.101.2.1.1.11"
837 #define szOID_INFOSEC_mosaicKMandSig "2.16.840.1.101.2.1.1.12"
838 #define szOID_INFOSEC_SuiteASignature "2.16.840.1.101.2.1.1.13"
839 #define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14"
840 #define szOID_INFOSEC_SuiteAIntegrity "2.16.840.1.101.2.1.1.15"
841 #define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16"
842 #define szOID_INFOSEC_SuiteAKeyManagement "2.16.840.1.101.2.1.1.17"
843 #define szOID_INFOSEC_SuiteAKMandSig "2.16.840.1.101.2.1.1.18"
844 #define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19"
845 #define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20"
846 #define szOID_INFOSEC_mosaicUpdatedInteg "2.16.840.1.101.2.1.1.21"
847
848 typedef struct _CRYPT_OBJID_TABLE {
849 DWORD dwAlgId;
850 LPCSTR pszObjId;
851 } CRYPT_OBJID_TABLE,*PCRYPT_OBJID_TABLE;
852
853 typedef struct _CRYPT_HASH_INFO {
854 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
855 CRYPT_HASH_BLOB Hash;
856 } CRYPT_HASH_INFO,*PCRYPT_HASH_INFO;
857
858 typedef struct _CERT_EXTENSION {
859 LPSTR pszObjId;
860 WINBOOL fCritical;
861 CRYPT_OBJID_BLOB Value;
862 } CERT_EXTENSION,*PCERT_EXTENSION;
863
864 typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
865 LPSTR pszObjId;
866 CRYPT_OBJID_BLOB Value;
867 } CRYPT_ATTRIBUTE_TYPE_VALUE,*PCRYPT_ATTRIBUTE_TYPE_VALUE;
868
869 typedef struct _CRYPT_ATTRIBUTE {
870 LPSTR pszObjId;
871 DWORD cValue;
872 PCRYPT_ATTR_BLOB rgValue;
873 } CRYPT_ATTRIBUTE,*PCRYPT_ATTRIBUTE;
874
875 typedef struct _CRYPT_ATTRIBUTES {
876 DWORD cAttr;
877 PCRYPT_ATTRIBUTE rgAttr;
878 } CRYPT_ATTRIBUTES,*PCRYPT_ATTRIBUTES;
879
880 typedef struct _CERT_RDN_ATTR {
881 LPSTR pszObjId;
882 DWORD dwValueType;
883 CERT_RDN_VALUE_BLOB Value;
884 } CERT_RDN_ATTR,*PCERT_RDN_ATTR;
885
886 #define szOID_COMMON_NAME "2.5.4.3"
887 #define szOID_SUR_NAME "2.5.4.4"
888 #define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5"
889 #define szOID_COUNTRY_NAME "2.5.4.6"
890 #define szOID_LOCALITY_NAME "2.5.4.7"
891 #define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8"
892 #define szOID_STREET_ADDRESS "2.5.4.9"
893 #define szOID_ORGANIZATION_NAME "2.5.4.10"
894 #define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11"
895 #define szOID_TITLE "2.5.4.12"
896 #define szOID_DESCRIPTION "2.5.4.13"
897 #define szOID_SEARCH_GUIDE "2.5.4.14"
898 #define szOID_BUSINESS_CATEGORY "2.5.4.15"
899 #define szOID_POSTAL_ADDRESS "2.5.4.16"
900 #define szOID_POSTAL_CODE "2.5.4.17"
901 #define szOID_POST_OFFICE_BOX "2.5.4.18"
902 #define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19"
903 #define szOID_TELEPHONE_NUMBER "2.5.4.20"
904 #define szOID_TELEX_NUMBER "2.5.4.21"
905 #define szOID_TELETEXT_TERMINAL_IDENTIFIER "2.5.4.22"
906 #define szOID_FACSIMILE_TELEPHONE_NUMBER "2.5.4.23"
907 #define szOID_X21_ADDRESS "2.5.4.24"
908 #define szOID_INTERNATIONAL_ISDN_NUMBER "2.5.4.25"
909 #define szOID_REGISTERED_ADDRESS "2.5.4.26"
910 #define szOID_DESTINATION_INDICATOR "2.5.4.27"
911 #define szOID_PREFERRED_DELIVERY_METHOD "2.5.4.28"
912 #define szOID_PRESENTATION_ADDRESS "2.5.4.29"
913 #define szOID_SUPPORTED_APPLICATION_CONTEXT "2.5.4.30"
914 #define szOID_MEMBER "2.5.4.31"
915 #define szOID_OWNER "2.5.4.32"
916 #define szOID_ROLE_OCCUPANT "2.5.4.33"
917 #define szOID_SEE_ALSO "2.5.4.34"
918 #define szOID_USER_PASSWORD "2.5.4.35"
919 #define szOID_USER_CERTIFICATE "2.5.4.36"
920 #define szOID_CA_CERTIFICATE "2.5.4.37"
921 #define szOID_AUTHORITY_REVOCATION_LIST "2.5.4.38"
922 #define szOID_CERTIFICATE_REVOCATION_LIST "2.5.4.39"
923 #define szOID_CROSS_CERTIFICATE_PAIR "2.5.4.40"
924 #define szOID_GIVEN_NAME "2.5.4.42"
925 #define szOID_INITIALS "2.5.4.43"
926 #define szOID_DN_QUALIFIER "2.5.4.46"
927 #define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25"
928 #define szOID_PKCS_12_FRIENDLY_NAME_ATTR "1.2.840.113549.1.9.20"
929 #define szOID_PKCS_12_LOCAL_KEY_ID "1.2.840.113549.1.9.21"
930 #define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1"
931 #define szOID_LOCAL_MACHINE_KEYSET "1.3.6.1.4.1.311.17.2"
932 #define szOID_KEYID_RDN "1.3.6.1.4.1.311.10.7.1"
933
934 #define CERT_RDN_ANY_TYPE 0
935 #define CERT_RDN_ENCODED_BLOB 1
936 #define CERT_RDN_OCTET_STRING 2
937 #define CERT_RDN_NUMERIC_STRING 3
938 #define CERT_RDN_PRINTABLE_STRING 4
939 #define CERT_RDN_TELETEX_STRING 5
940 #define CERT_RDN_T61_STRING 5
941 #define CERT_RDN_VIDEOTEX_STRING 6
942 #define CERT_RDN_IA5_STRING 7
943 #define CERT_RDN_GRAPHIC_STRING 8
944 #define CERT_RDN_VISIBLE_STRING 9
945 #define CERT_RDN_ISO646_STRING 9
946 #define CERT_RDN_GENERAL_STRING 10
947 #define CERT_RDN_UNIVERSAL_STRING 11
948 #define CERT_RDN_INT4_STRING 11
949 #define CERT_RDN_BMP_STRING 12
950 #define CERT_RDN_UNICODE_STRING 12
951 #define CERT_RDN_UTF8_STRING 13
952 #define CERT_RDN_TYPE_MASK 0xff
953 #define CERT_RDN_FLAGS_MASK 0xff000000
954 #define CERT_RDN_ENABLE_T61_UNICODE_FLAG 0x80000000
955 #define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x20000000
956 #define CERT_RDN_FORCE_UTF8_UNICODE_FLAG 0x10000000
957 #define CERT_RDN_DISABLE_CHECK_TYPE_FLAG 0x40000000
958 #define CERT_RDN_DISABLE_IE4_UTF8_FLAG 0x1000000
959
960 #define IS_CERT_RDN_CHAR_STRING(X) (((X) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING)
961
962 typedef struct _CERT_RDN {
963 DWORD cRDNAttr;
964 PCERT_RDN_ATTR rgRDNAttr;
965 } CERT_RDN,*PCERT_RDN;
966
967 typedef struct _CERT_NAME_INFO {
968 DWORD cRDN;
969 PCERT_RDN rgRDN;
970 } CERT_NAME_INFO,*PCERT_NAME_INFO;
971
972 typedef struct _CERT_NAME_VALUE {
973 DWORD dwValueType;
974 CERT_RDN_VALUE_BLOB Value;
975 } CERT_NAME_VALUE,*PCERT_NAME_VALUE;
976
977 typedef struct _CERT_PUBLIC_KEY_INFO {
978 CRYPT_ALGORITHM_IDENTIFIER Algorithm;
979 CRYPT_BIT_BLOB PublicKey;
980 } CERT_PUBLIC_KEY_INFO,*PCERT_PUBLIC_KEY_INFO;
981
982 #define CERT_RSA_PUBLIC_KEY_OBJID szOID_RSA_RSA
983 #define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN szOID_RSA_RSA
984 #define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG szOID_RSA_RSA
985
986 typedef struct _CRYPT_PRIVATE_KEY_INFO{
987 DWORD Version;
988 CRYPT_ALGORITHM_IDENTIFIER Algorithm;
989 CRYPT_DER_BLOB PrivateKey;
990 PCRYPT_ATTRIBUTES pAttributes;
991 } CRYPT_PRIVATE_KEY_INFO,*PCRYPT_PRIVATE_KEY_INFO;
992
993 typedef struct _CRYPT_ENCRYPTED_PRIVATE_KEY_INFO {
994 CRYPT_ALGORITHM_IDENTIFIER EncryptionAlgorithm;
995 CRYPT_DATA_BLOB EncryptedPrivateKey;
996 } CRYPT_ENCRYPTED_PRIVATE_KEY_INFO,*PCRYPT_ENCRYPTED_PRIVATE_KEY_INFO;
997
998 typedef WINBOOL (CALLBACK *PCRYPT_DECRYPT_PRIVATE_KEY_FUNC)(CRYPT_ALGORITHM_IDENTIFIER Algorithm,CRYPT_DATA_BLOB EncryptedPrivateKey,BYTE *pbClearTextKey,DWORD *pcbClearTextKey,LPVOID pVoidDecryptFunc);
999 typedef WINBOOL (CALLBACK *PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC)(CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm,CRYPT_DATA_BLOB *pClearTextPrivateKey,BYTE *pbEncryptedKey,DWORD *pcbEncryptedKey,LPVOID pVoidEncryptFunc);
1000 typedef WINBOOL (CALLBACK *PCRYPT_RESOLVE_HCRYPTPROV_FUNC)(CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo,HCRYPTPROV *phCryptProv,LPVOID pVoidResolveFunc);
1001
1002 typedef struct _CRYPT_PKCS8_IMPORT_PARAMS {
1003 CRYPT_DIGEST_BLOB PrivateKey;
1004 PCRYPT_RESOLVE_HCRYPTPROV_FUNC pResolvehCryptProvFunc;
1005 LPVOID pVoidResolveFunc;
1006 PCRYPT_DECRYPT_PRIVATE_KEY_FUNC pDecryptPrivateKeyFunc;
1007 LPVOID pVoidDecryptFunc;
1008 } CRYPT_PKCS8_IMPORT_PARAMS,*PCRYPT_PKCS8_IMPORT_PARAMS,CRYPT_PRIVATE_KEY_BLOB_AND_PARAMS,*PCRYPT_PRIVATE_KEY_BLOB_AND_PARAMS;
1009
1010 typedef struct _CRYPT_PKCS8_EXPORT_PARAMS {
1011 HCRYPTPROV hCryptProv;
1012 DWORD dwKeySpec;
1013 LPSTR pszPrivateKeyObjId;
1014 PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC pEncryptPrivateKeyFunc;
1015 LPVOID pVoidEncryptFunc;
1016 } CRYPT_PKCS8_EXPORT_PARAMS,*PCRYPT_PKCS8_EXPORT_PARAMS;
1017
1018 typedef struct _CERT_INFO {
1019 DWORD dwVersion;
1020 CRYPT_INTEGER_BLOB SerialNumber;
1021 CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
1022 CERT_NAME_BLOB Issuer;
1023 FILETIME NotBefore;
1024 FILETIME NotAfter;
1025 CERT_NAME_BLOB Subject;
1026 CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
1027 CRYPT_BIT_BLOB IssuerUniqueId;
1028 CRYPT_BIT_BLOB SubjectUniqueId;
1029 DWORD cExtension;
1030 PCERT_EXTENSION rgExtension;
1031 } CERT_INFO,*PCERT_INFO;
1032
1033 #define CERT_V1 0
1034 #define CERT_V2 1
1035 #define CERT_V3 2
1036
1037 #define CERT_INFO_VERSION_FLAG 1
1038 #define CERT_INFO_SERIAL_NUMBER_FLAG 2
1039 #define CERT_INFO_SIGNATURE_ALGORITHM_FLAG 3
1040 #define CERT_INFO_ISSUER_FLAG 4
1041 #define CERT_INFO_NOT_BEFORE_FLAG 5
1042 #define CERT_INFO_NOT_AFTER_FLAG 6
1043 #define CERT_INFO_SUBJECT_FLAG 7
1044 #define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 8
1045 #define CERT_INFO_ISSUER_UNIQUE_ID_FLAG 9
1046 #define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG 10
1047 #define CERT_INFO_EXTENSION_FLAG 11
1048
1049 typedef struct _CRL_ENTRY {
1050 CRYPT_INTEGER_BLOB SerialNumber;
1051 FILETIME RevocationDate;
1052 DWORD cExtension;
1053 PCERT_EXTENSION rgExtension;
1054 } CRL_ENTRY,*PCRL_ENTRY;
1055
1056 typedef struct _CRL_INFO {
1057 DWORD dwVersion;
1058 CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
1059 CERT_NAME_BLOB Issuer;
1060 FILETIME ThisUpdate;
1061 FILETIME NextUpdate;
1062 DWORD cCRLEntry;
1063 PCRL_ENTRY rgCRLEntry;
1064 DWORD cExtension;
1065 PCERT_EXTENSION rgExtension;
1066 } CRL_INFO,*PCRL_INFO;
1067
1068 #define CRL_V1 0
1069 #define CRL_V2 1
1070
1071 typedef struct _CERT_REQUEST_INFO {
1072 DWORD dwVersion;
1073 CERT_NAME_BLOB Subject;
1074 CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
1075 DWORD cAttribute;
1076 PCRYPT_ATTRIBUTE rgAttribute;
1077 } CERT_REQUEST_INFO,*PCERT_REQUEST_INFO;
1078
1079 #define CERT_REQUEST_V1 0
1080
1081 typedef struct _CERT_KEYGEN_REQUEST_INFO {
1082 DWORD dwVersion;
1083 CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
1084 LPWSTR pwszChallengeString;
1085 } CERT_KEYGEN_REQUEST_INFO,*PCERT_KEYGEN_REQUEST_INFO;
1086
1087 #define CERT_KEYGEN_REQUEST_V1 0
1088
1089 typedef struct _CERT_SIGNED_CONTENT_INFO {
1090 CRYPT_DER_BLOB ToBeSigned;
1091 CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
1092 CRYPT_BIT_BLOB Signature;
1093 } CERT_SIGNED_CONTENT_INFO,*PCERT_SIGNED_CONTENT_INFO;
1094
1095 typedef struct _CTL_USAGE {
1096 DWORD cUsageIdentifier;
1097 LPSTR *rgpszUsageIdentifier;
1098 } CTL_USAGE,*PCTL_USAGE,CERT_ENHKEY_USAGE,*PCERT_ENHKEY_USAGE;
1099
1100 typedef struct _CTL_ENTRY {
1101 CRYPT_DATA_BLOB SubjectIdentifier;
1102 DWORD cAttribute;
1103 PCRYPT_ATTRIBUTE rgAttribute;
1104 } CTL_ENTRY,*PCTL_ENTRY;
1105
1106 typedef struct _CTL_INFO {
1107 DWORD dwVersion;
1108 CTL_USAGE SubjectUsage;
1109 CRYPT_DATA_BLOB ListIdentifier;
1110 CRYPT_INTEGER_BLOB SequenceNumber;
1111 FILETIME ThisUpdate;
1112 FILETIME NextUpdate;
1113 CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
1114 DWORD cCTLEntry;
1115 PCTL_ENTRY rgCTLEntry;
1116 DWORD cExtension;
1117 PCERT_EXTENSION rgExtension;
1118 } CTL_INFO,*PCTL_INFO;
1119
1120 #define CTL_V1 0
1121
1122 typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO {
1123 LPSTR pszTimeStampAlgorithm;
1124 LPSTR pszContentType;
1125 CRYPT_OBJID_BLOB Content;
1126 DWORD cAttribute;
1127 PCRYPT_ATTRIBUTE rgAttribute;
1128 } CRYPT_TIME_STAMP_REQUEST_INFO,*PCRYPT_TIME_STAMP_REQUEST_INFO;
1129
1130 typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR {
1131 LPWSTR pwszName;
1132 LPWSTR pwszValue;
1133 } CRYPT_ENROLLMENT_NAME_VALUE_PAIR,*PCRYPT_ENROLLMENT_NAME_VALUE_PAIR;
1134
1135 typedef struct _CRYPT_CSP_PROVIDER {
1136 DWORD dwKeySpec;
1137 LPWSTR pwszProviderName;
1138 CRYPT_BIT_BLOB Signature;
1139 } CRYPT_CSP_PROVIDER,*PCRYPT_CSP_PROVIDER;
1140
1141 #define CERT_ENCODING_TYPE_MASK 0xffff
1142 #define CMSG_ENCODING_TYPE_MASK 0xffff0000
1143 #define GET_CERT_ENCODING_TYPE(T) ((T) & CERT_ENCODING_TYPE_MASK)
1144 #define GET_CMSG_ENCODING_TYPE(T) ((T) & CMSG_ENCODING_TYPE_MASK)
1145
1146 #define CRYPT_ASN_ENCODING 0x1
1147 #define CRYPT_NDR_ENCODING 0x2
1148 #define X509_ASN_ENCODING 0x1
1149 #define X509_NDR_ENCODING 0x2
1150 #define PKCS_7_ASN_ENCODING 0x10000
1151 #define PKCS_7_NDR_ENCODING 0x20000
1152
1153 WINIMPM WINBOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType,DWORD dwFormatType,DWORD dwFormatStrType,void *pFormatStruct,LPCSTR lpszStructType,const BYTE *pbEncoded,DWORD cbEncoded,void *pbFormat,DWORD *pcbFormat);
1154
1155 #define CRYPT_FORMAT_STR_MULTI_LINE 0x1
1156 #define CRYPT_FORMAT_STR_NO_HEX 0x10
1157 #define CRYPT_FORMAT_SIMPLE 0x1
1158 #define CRYPT_FORMAT_X509 0x2
1159 #define CRYPT_FORMAT_OID 0x4
1160 #define CRYPT_FORMAT_RDN_SEMICOLON 0x100
1161 #define CRYPT_FORMAT_RDN_CRLF 0x200
1162 #define CRYPT_FORMAT_RDN_UNQUOTE 0x400
1163 #define CRYPT_FORMAT_RDN_REVERSE 0x800
1164 #define CRYPT_FORMAT_COMMA 0x1000
1165 #define CRYPT_FORMAT_SEMICOLON CRYPT_FORMAT_RDN_SEMICOLON
1166 #define CRYPT_FORMAT_CRLF CRYPT_FORMAT_RDN_CRLF
1167
1168 typedef LPVOID (WINAPI *PFN_CRYPT_ALLOC)(size_t cbSize);
1169 typedef VOID (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);
1170
1171 typedef struct _CRYPT_ENCODE_PARA {
1172 DWORD cbSize;
1173 PFN_CRYPT_ALLOC pfnAlloc;
1174 PFN_CRYPT_FREE pfnFree;
1175 } CRYPT_ENCODE_PARA,*PCRYPT_ENCODE_PARA;
1176
1177 WINIMPM WINBOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType,LPCSTR lpszStructType,const void *pvStructInfo,DWORD dwFlags,PCRYPT_ENCODE_PARA pEncodePara,void *pvEncoded,DWORD *pcbEncoded);
1178 WINIMPM WINBOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType,LPCSTR lpszStructType,const void *pvStructInfo,BYTE *pbEncoded,DWORD *pcbEncoded);
1179
1180 #define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x8
1181 #define CRYPT_ENCODE_ALLOC_FLAG 0x8000
1182 #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG CERT_RDN_ENABLE_T61_UNICODE_FLAG
1183 #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG CERT_RDN_ENABLE_UTF8_UNICODE_FLAG
1184 #define CRYPT_UNICODE_NAME_ENCODE_FORCE_UTF8_UNICODE_FLAG CERT_RDN_FORCE_UTF8_UNICODE_FLAG
1185 #define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG CERT_RDN_DISABLE_CHECK_TYPE_FLAG
1186 #define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000
1187
1188 typedef struct _CRYPT_DECODE_PARA {
1189 DWORD cbSize;
1190 PFN_CRYPT_ALLOC pfnAlloc;
1191 PFN_CRYPT_FREE pfnFree;
1192 } CRYPT_DECODE_PARA,*PCRYPT_DECODE_PARA;
1193
1194 WINIMPM WINBOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType,LPCSTR lpszStructType,const BYTE *pbEncoded,DWORD cbEncoded,DWORD dwFlags,PCRYPT_DECODE_PARA pDecodePara,void *pvStructInfo,DWORD *pcbStructInfo);
1195 WINIMPM WINBOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType,LPCSTR lpszStructType,const BYTE *pbEncoded,DWORD cbEncoded,DWORD dwFlags,void *pvStructInfo,DWORD *pcbStructInfo);
1196
1197 #define CRYPT_DECODE_NOCOPY_FLAG 0x1
1198 #define CRYPT_DECODE_TO_BE_SIGNED_FLAG 0x2
1199 #define CRYPT_DECODE_SHARE_OID_STRING_FLAG 0x4
1200 #define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x8
1201 #define CRYPT_DECODE_ALLOC_FLAG 0x8000
1202 #define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG CERT_RDN_DISABLE_IE4_UTF8_FLAG
1203 #define CRYPT_ENCODE_DECODE_NONE 0
1204 #define X509_CERT ((LPCSTR) 1)
1205 #define X509_CERT_TO_BE_SIGNED ((LPCSTR) 2)
1206 #define X509_CERT_CRL_TO_BE_SIGNED ((LPCSTR) 3)
1207 #define X509_CERT_REQUEST_TO_BE_SIGNED ((LPCSTR) 4)
1208 #define X509_EXTENSIONS ((LPCSTR) 5)
1209 #define X509_NAME_VALUE ((LPCSTR) 6)
1210 #define X509_NAME ((LPCSTR) 7)
1211 #define X509_PUBLIC_KEY_INFO ((LPCSTR) 8)
1212 #define X509_AUTHORITY_KEY_ID ((LPCSTR) 9)
1213 #define X509_KEY_ATTRIBUTES ((LPCSTR) 10)
1214 #define X509_KEY_USAGE_RESTRICTION ((LPCSTR) 11)
1215 #define X509_ALTERNATE_NAME ((LPCSTR) 12)
1216 #define X509_BASIC_CONSTRAINTS ((LPCSTR) 13)
1217 #define X509_KEY_USAGE ((LPCSTR) 14)
1218 #define X509_BASIC_CONSTRAINTS2 ((LPCSTR) 15)
1219 #define X509_CERT_POLICIES ((LPCSTR) 16)
1220 #define PKCS_UTC_TIME ((LPCSTR) 17)
1221 #define PKCS_TIME_REQUEST ((LPCSTR) 18)
1222 #define RSA_CSP_PUBLICKEYBLOB ((LPCSTR) 19)
1223 #define X509_UNICODE_NAME ((LPCSTR) 20)
1224 #define X509_KEYGEN_REQUEST_TO_BE_SIGNED ((LPCSTR) 21)
1225 #define PKCS_ATTRIBUTE ((LPCSTR) 22)
1226 #define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY ((LPCSTR) 23)
1227 #define X509_UNICODE_NAME_VALUE ((LPCSTR) 24)
1228 #define X509_ANY_STRING X509_NAME_VALUE
1229 #define X509_UNICODE_ANY_STRING X509_UNICODE_NAME_VALUE
1230 #define X509_OCTET_STRING ((LPCSTR) 25)
1231 #define X509_BITS ((LPCSTR) 26)
1232 #define X509_INTEGER ((LPCSTR) 27)
1233 #define X509_MULTI_BYTE_INTEGER ((LPCSTR) 28)
1234 #define X509_ENUMERATED ((LPCSTR) 29)
1235 #define X509_CHOICE_OF_TIME ((LPCSTR) 30)
1236 #define X509_AUTHORITY_KEY_ID2 ((LPCSTR) 31)
1237 #define X509_AUTHORITY_INFO_ACCESS ((LPCSTR) 32)
1238 #define X509_CRL_REASON_CODE X509_ENUMERATED
1239 #define PKCS_CONTENT_INFO ((LPCSTR) 33)
1240 #define X509_SEQUENCE_OF_ANY ((LPCSTR) 34)
1241 #define X509_CRL_DIST_POINTS ((LPCSTR) 35)
1242 #define X509_ENHANCED_KEY_USAGE ((LPCSTR) 36)
1243 #define PKCS_CTL ((LPCSTR) 37)
1244 #define X509_MULTI_BYTE_UINT ((LPCSTR) 38)
1245 #define X509_DSS_PUBLICKEY X509_MULTI_BYTE_UINT
1246 #define X509_DSS_PARAMETERS ((LPCSTR) 39)
1247 #define X509_DSS_SIGNATURE ((LPCSTR) 40)
1248 #define PKCS_RC2_CBC_PARAMETERS ((LPCSTR) 41)
1249 #define PKCS_SMIME_CAPABILITIES ((LPCSTR) 42)
1250 #define PKCS_RSA_PRIVATE_KEY ((LPCSTR) 43)
1251 #define PKCS_PRIVATE_KEY_INFO ((LPCSTR) 44)
1252 #define PKCS_ENCRYPTED_PRIVATE_KEY_INFO ((LPCSTR) 45)
1253 #define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR) 46)
1254 #define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT
1255 #define X509_DH_PARAMETERS ((LPCSTR) 47)
1256 #define PKCS_ATTRIBUTES ((LPCSTR) 48)
1257 #define PKCS_SORTED_CTL ((LPCSTR) 49)
1258 #define X942_DH_PARAMETERS ((LPCSTR) 50)
1259 #define X509_BITS_WITHOUT_TRAILING_ZEROES ((LPCSTR) 51)
1260 #define X942_OTHER_INFO ((LPCSTR) 52)
1261 #define X509_CERT_PAIR ((LPCSTR) 53)
1262 #define X509_ISSUING_DIST_POINT ((LPCSTR) 54)
1263 #define X509_NAME_CONSTRAINTS ((LPCSTR) 55)
1264 #define X509_POLICY_MAPPINGS ((LPCSTR) 56)
1265 #define X509_POLICY_CONSTRAINTS ((LPCSTR) 57)
1266 #define X509_CROSS_CERT_DIST_POINTS ((LPCSTR) 58)
1267 #define CMC_DATA ((LPCSTR) 59)
1268 #define CMC_RESPONSE ((LPCSTR) 60)
1269 #define CMC_STATUS ((LPCSTR) 61)
1270 #define CMC_ADD_EXTENSIONS ((LPCSTR) 62)
1271 #define CMC_ADD_ATTRIBUTES ((LPCSTR) 63)
1272 #define X509_CERTIFICATE_TEMPLATE ((LPCSTR) 64)
1273 #define PKCS7_SIGNER_INFO ((LPCSTR) 500)
1274 #define CMS_SIGNER_INFO ((LPCSTR) 501)
1275 #define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1"
1276 #define szOID_KEY_ATTRIBUTES "2.5.29.2"
1277 #define szOID_CERT_POLICIES_95 "2.5.29.3"
1278 #define szOID_KEY_USAGE_RESTRICTION "2.5.29.4"
1279 #define szOID_SUBJECT_ALT_NAME "2.5.29.7"
1280 #define szOID_ISSUER_ALT_NAME "2.5.29.8"
1281 #define szOID_BASIC_CONSTRAINTS "2.5.29.10"
1282 #define szOID_KEY_USAGE "2.5.29.15"
1283 #define szOID_PRIVATEKEY_USAGE_PERIOD "2.5.29.16"
1284 #define szOID_BASIC_CONSTRAINTS2 "2.5.29.19"
1285 #define szOID_CERT_POLICIES "2.5.29.32"
1286 #define szOID_ANY_CERT_POLICY "2.5.29.32.0"
1287 #define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35"
1288 #define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14"
1289 #define szOID_SUBJECT_ALT_NAME2 "2.5.29.17"
1290 #define szOID_ISSUER_ALT_NAME2 "2.5.29.18"
1291 #define szOID_CRL_REASON_CODE "2.5.29.21"
1292 #define szOID_REASON_CODE_HOLD "2.5.29.23"
1293 #define szOID_CRL_DIST_POINTS "2.5.29.31"
1294 #define szOID_ENHANCED_KEY_USAGE "2.5.29.37"
1295 #define szOID_CRL_NUMBER "2.5.29.20"
1296 #define szOID_DELTA_CRL_INDICATOR "2.5.29.27"
1297 #define szOID_ISSUING_DIST_POINT "2.5.29.28"
1298 #define szOID_FRESHEST_CRL "2.5.29.46"
1299 #define szOID_NAME_CONSTRAINTS "2.5.29.30"
1300 #define szOID_POLICY_MAPPINGS "2.5.29.33"
1301 #define szOID_LEGACY_POLICY_MAPPINGS "2.5.29.5"
1302 #define szOID_POLICY_CONSTRAINTS "2.5.29.36"
1303 #define szOID_RENEWAL_CERTIFICATE "1.3.6.1.4.1.311.13.1"
1304 #define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1"
1305 #define szOID_ENROLLMENT_CSP_PROVIDER "1.3.6.1.4.1.311.13.2.2"
1306 #define szOID_OS_VERSION "1.3.6.1.4.1.311.13.2.3"
1307 #define szOID_ENROLLMENT_AGENT "1.3.6.1.4.1.311.20.2.1"
1308 #define szOID_PKIX "1.3.6.1.5.5.7"
1309 #define szOID_PKIX_PE "1.3.6.1.5.5.7.1"
1310 #define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1"
1311 #define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14"
1312 #define szOID_NEXT_UPDATE_LOCATION "1.3.6.1.4.1.311.10.2"
1313 #define szOID_REMOVE_CERTIFICATE "1.3.6.1.4.1.311.10.8.1"
1314 #define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1"
1315 #define szOID_CTL "1.3.6.1.4.1.311.10.1"
1316 #define szOID_SORTED_CTL "1.3.6.1.4.1.311.10.1.1"
1317
1318 #ifndef szOID_SERIALIZED
1319 #define szOID_SERIALIZED "1.3.6.1.4.1.311.10.3.3.1"
1320 #endif
1321
1322 #ifndef szOID_NT_PRINCIPAL_NAME
1323 #define szOID_NT_PRINCIPAL_NAME "1.3.6.1.4.1.311.20.2.3"
1324 #endif
1325
1326 #ifndef szOID_PRODUCT_UPDATE
1327 #define szOID_PRODUCT_UPDATE "1.3.6.1.4.1.311.31.1"
1328 #endif
1329
1330 #define szOID_ANY_APPLICATION_POLICY "1.3.6.1.4.1.311.10.12.1"
1331
1332 #define szOID_AUTO_ENROLL_CTL_USAGE "1.3.6.1.4.1.311.20.1"
1333
1334 #define szOID_ENROLL_CERTTYPE_EXTENSION "1.3.6.1.4.1.311.20.2"
1335
1336 #define szOID_CERT_MANIFOLD "1.3.6.1.4.1.311.20.3"
1337
1338 #ifndef szOID_CERTSRV_CA_VERSION
1339 #define szOID_CERTSRV_CA_VERSION "1.3.6.1.4.1.311.21.1"
1340 #endif
1341
1342 #define szOID_CERTSRV_PREVIOUS_CERT_HASH "1.3.6.1.4.1.311.21.2"
1343 #define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3"
1344 #define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4"
1345 #define szOID_KP_CA_EXCHANGE "1.3.6.1.4.1.311.21.5"
1346 #define szOID_KP_KEY_RECOVERY_AGENT "1.3.6.1.4.1.311.21.6"
1347 #define szOID_CERTIFICATE_TEMPLATE "1.3.6.1.4.1.311.21.7"
1348 #define szOID_ENTERPRISE_OID_ROOT "1.3.6.1.4.1.311.21.8"
1349 #define szOID_RDN_DUMMY_SIGNER "1.3.6.1.4.1.311.21.9"
1350 #define szOID_APPLICATION_CERT_POLICIES "1.3.6.1.4.1.311.21.10"
1351 #define szOID_APPLICATION_POLICY_MAPPINGS "1.3.6.1.4.1.311.21.11"
1352 #define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12"
1353 #define szOID_ARCHIVED_KEY_ATTR "1.3.6.1.4.1.311.21.13"
1354 #define szOID_CRL_SELF_CDP "1.3.6.1.4.1.311.21.14"
1355 #define szOID_REQUIRE_CERT_CHAIN_POLICY "1.3.6.1.4.1.311.21.15"
1356 #define szOID_ARCHIVED_KEY_CERT_HASH "1.3.6.1.4.1.311.21.16"
1357 #define szOID_ISSUED_CERT_HASH "1.3.6.1.4.1.311.21.17"
1358 #define szOID_DS_EMAIL_REPLICATION "1.3.6.1.4.1.311.21.19"
1359 #define szOID_REQUEST_CLIENT_INFO "1.3.6.1.4.1.311.21.20"
1360 #define szOID_ENCRYPTED_KEY_HASH "1.3.6.1.4.1.311.21.21"
1361 #define szOID_CERTSRV_CROSSCA_VERSION "1.3.6.1.4.1.311.21.22"
1362 #define szOID_NTDS_REPLICATION "1.3.6.1.4.1.311.25.1"
1363 #define szOID_SUBJECT_DIR_ATTRS "2.5.29.9"
1364 #define szOID_PKIX_KP "1.3.6.1.5.5.7.3"
1365 #define szOID_PKIX_KP_SERVER_AUTH "1.3.6.1.5.5.7.3.1"
1366 #define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
1367 #define szOID_PKIX_KP_CODE_SIGNING "1.3.6.1.5.5.7.3.3"
1368 #define szOID_PKIX_KP_EMAIL_PROTECTION "1.3.6.1.5.5.7.3.4"
1369 #define szOID_PKIX_KP_IPSEC_END_SYSTEM "1.3.6.1.5.5.7.3.5"
1370 #define szOID_PKIX_KP_IPSEC_TUNNEL "1.3.6.1.5.5.7.3.6"
1371 #define szOID_PKIX_KP_IPSEC_USER "1.3.6.1.5.5.7.3.7"
1372 #define szOID_PKIX_KP_TIMESTAMP_SIGNING "1.3.6.1.5.5.7.3.8"
1373 #define szOID_IPSEC_KP_IKE_INTERMEDIATE "1.3.6.1.5.5.8.2.2"
1374 #define szOID_KP_CTL_USAGE_SIGNING "1.3.6.1.4.1.311.10.3.1"
1375 #define szOID_KP_TIME_STAMP_SIGNING "1.3.6.1.4.1.311.10.3.2"
1376
1377 #ifndef szOID_SERVER_GATED_CRYPTO
1378 #define szOID_SERVER_GATED_CRYPTO "1.3.6.1.4.1.311.10.3.3"
1379 #endif
1380
1381 #ifndef szOID_SGC_NETSCAPE
1382 #define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
1383 #endif
1384 #define szOID_KP_EFS "1.3.6.1.4.1.311.10.3.4"
1385 #define szOID_EFS_RECOVERY "1.3.6.1.4.1.311.10.3.4.1"
1386 #define szOID_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.5"
1387 #define szOID_NT5_CRYPTO "1.3.6.1.4.1.311.10.3.6"
1388 #define szOID_OEM_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.7"
1389 #define szOID_EMBEDDED_NT_CRYPTO "1.3.6.1.4.1.311.10.3.8"
1390 #define szOID_ROOT_LIST_SIGNER "1.3.6.1.4.1.311.10.3.9"
1391 #define szOID_KP_QUALIFIED_SUBORDINATION "1.3.6.1.4.1.311.10.3.10"
1392 #define szOID_KP_KEY_RECOVERY "1.3.6.1.4.1.311.10.3.11"
1393 #define szOID_KP_DOCUMENT_SIGNING "1.3.6.1.4.1.311.10.3.12"
1394 #define szOID_KP_LIFETIME_SIGNING "1.3.6.1.4.1.311.10.3.13"
1395 #define szOID_KP_MOBILE_DEVICE_SOFTWARE "1.3.6.1.4.1.311.10.3.14"
1396
1397 #ifndef szOID_DRM
1398 #define szOID_DRM "1.3.6.1.4.1.311.10.5.1"
1399 #endif
1400
1401 #ifndef szOID_DRM_INDIVIDUALIZATION
1402 #define szOID_DRM_INDIVIDUALIZATION "1.3.6.1.4.1.311.10.5.2"
1403 #endif
1404
1405 #ifndef szOID_LICENSES
1406 #define szOID_LICENSES "1.3.6.1.4.1.311.10.6.1"
1407 #endif
1408
1409 #ifndef szOID_LICENSE_SERVER
1410 #define szOID_LICENSE_SERVER "1.3.6.1.4.1.311.10.6.2"
1411 #endif
1412
1413 #ifndef szOID_KP_SMARTCARD_LOGON
1414 #define szOID_KP_SMARTCARD_LOGON "1.3.6.1.4.1.311.20.2.2"
1415 #endif
1416
1417 #define szOID_YESNO_TRUST_ATTR "1.3.6.1.4.1.311.10.4.1"
1418
1419 #define szOID_PKIX_POLICY_QUALIFIER_CPS "1.3.6.1.5.5.7.2.1"
1420 #define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2"
1421
1422 #define szOID_CERT_POLICIES_95_QUALIFIER1 "2.16.840.1.113733.1.7.1.1"
1423
1424 typedef struct _CERT_EXTENSIONS {
1425 DWORD cExtension;
1426 PCERT_EXTENSION rgExtension;
1427 } CERT_EXTENSIONS,*PCERT_EXTENSIONS;
1428
1429 #define CERT_UNICODE_RDN_ERR_INDEX_MASK 0x3FF
1430 #define CERT_UNICODE_RDN_ERR_INDEX_SHIFT 22
1431 #define CERT_UNICODE_ATTR_ERR_INDEX_MASK 0x3f
1432 #define CERT_UNICODE_ATTR_ERR_INDEX_SHIFT 16
1433 #define CERT_UNICODE_VALUE_ERR_INDEX_MASK 0xffff
1434 #define CERT_UNICODE_VALUE_ERR_INDEX_SHIFT 0
1435
1436 #define GET_CERT_UNICODE_RDN_ERR_INDEX(X) (((X) >> CERT_UNICODE_RDN_ERR_INDEX_SHIFT) & CERT_UNICODE_RDN_ERR_INDEX_MASK)
1437 #define GET_CERT_UNICODE_ATTR_ERR_INDEX(X) (((X) >> CERT_UNICODE_ATTR_ERR_INDEX_SHIFT) & CERT_UNICODE_ATTR_ERR_INDEX_MASK)
1438 #define GET_CERT_UNICODE_VALUE_ERR_INDEX(X) ((X) & CERT_UNICODE_VALUE_ERR_INDEX_MASK)
1439
1440 typedef struct _CERT_AUTHORITY_KEY_ID_INFO {
1441 CRYPT_DATA_BLOB KeyId;
1442 CERT_NAME_BLOB CertIssuer;
1443 CRYPT_INTEGER_BLOB CertSerialNumber;
1444 } CERT_AUTHORITY_KEY_ID_INFO,*PCERT_AUTHORITY_KEY_ID_INFO;
1445
1446 typedef struct _CERT_PRIVATE_KEY_VALIDITY {
1447 FILETIME NotBefore;
1448 FILETIME NotAfter;
1449 } CERT_PRIVATE_KEY_VALIDITY,*PCERT_PRIVATE_KEY_VALIDITY;
1450
1451 typedef struct _CERT_KEY_ATTRIBUTES_INFO {
1452 CRYPT_DATA_BLOB KeyId;
1453 CRYPT_BIT_BLOB IntendedKeyUsage;
1454 PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod;
1455 } CERT_KEY_ATTRIBUTES_INFO,*PCERT_KEY_ATTRIBUTES_INFO;
1456
1457 #define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80
1458 #define CERT_NON_REPUDIATION_KEY_USAGE 0x40
1459 #define CERT_KEY_ENCIPHERMENT_KEY_USAGE 0x20
1460 #define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10
1461 #define CERT_KEY_AGREEMENT_KEY_USAGE 0x8
1462 #define CERT_KEY_CERT_SIGN_KEY_USAGE 0x4
1463 #define CERT_OFFLINE_CRL_SIGN_KEY_USAGE 0x2
1464 #define CERT_CRL_SIGN_KEY_USAGE 0x2
1465 #define CERT_ENCIPHER_ONLY_KEY_USAGE 0x1
1466
1467 #define CERT_DECIPHER_ONLY_KEY_USAGE 0x80
1468
1469 typedef struct _CERT_POLICY_ID {
1470 DWORD cCertPolicyElementId;
1471 LPSTR *rgpszCertPolicyElementId;
1472 } CERT_POLICY_ID,*PCERT_POLICY_ID;
1473
1474 typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO {
1475 DWORD cCertPolicyId;
1476 PCERT_POLICY_ID rgCertPolicyId;
1477 CRYPT_BIT_BLOB RestrictedKeyUsage;
1478 } CERT_KEY_USAGE_RESTRICTION_INFO,*PCERT_KEY_USAGE_RESTRICTION_INFO;
1479
1480 typedef struct _CERT_OTHER_NAME {
1481 LPSTR pszObjId;
1482 CRYPT_OBJID_BLOB Value;
1483 } CERT_OTHER_NAME,*PCERT_OTHER_NAME;
1484
1485 typedef struct _CERT_ALT_NAME_ENTRY {
1486 DWORD dwAltNameChoice;
1487 __MINGW_EXTENSION union {
1488 PCERT_OTHER_NAME pOtherName;
1489 LPWSTR pwszRfc822Name;
1490 LPWSTR pwszDNSName;
1491 CERT_NAME_BLOB DirectoryName;
1492 LPWSTR pwszURL;
1493 CRYPT_DATA_BLOB IPAddress;
1494 LPSTR pszRegisteredID;
1495 };
1496 } CERT_ALT_NAME_ENTRY,*PCERT_ALT_NAME_ENTRY;
1497
1498 #define CERT_ALT_NAME_OTHER_NAME 1
1499 #define CERT_ALT_NAME_RFC822_NAME 2
1500 #define CERT_ALT_NAME_DNS_NAME 3
1501 #define CERT_ALT_NAME_X400_ADDRESS 4
1502 #define CERT_ALT_NAME_DIRECTORY_NAME 5
1503 #define CERT_ALT_NAME_EDI_PARTY_NAME 6
1504 #define CERT_ALT_NAME_URL 7
1505 #define CERT_ALT_NAME_IP_ADDRESS 8
1506 #define CERT_ALT_NAME_REGISTERED_ID 9
1507
1508 typedef struct _CERT_ALT_NAME_INFO {
1509 DWORD cAltEntry;
1510 PCERT_ALT_NAME_ENTRY rgAltEntry;
1511 } CERT_ALT_NAME_INFO,*PCERT_ALT_NAME_INFO;
1512
1513 #define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xFF
1514 #define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16
1515 #define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0xffff
1516 #define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0
1517
1518 #define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(X) (((X) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
1519 #define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(X) ((X) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
1520
1521 typedef struct _CERT_BASIC_CONSTRAINTS_INFO {
1522 CRYPT_BIT_BLOB SubjectType;
1523 WINBOOL fPathLenConstraint;
1524 DWORD dwPathLenConstraint;
1525 DWORD cSubtreesConstraint;
1526 CERT_NAME_BLOB *rgSubtreesConstraint;
1527 } CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO;
1528
1529 #define CERT_CA_SUBJECT_FLAG 0x80
1530 #define CERT_END_ENTITY_SUBJECT_FLAG 0x40
1531
1532 typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
1533 WINBOOL fCA;
1534 WINBOOL fPathLenConstraint;
1535 DWORD dwPathLenConstraint;
1536 } CERT_BASIC_CONSTRAINTS2_INFO,*PCERT_BASIC_CONSTRAINTS2_INFO;
1537
1538 typedef struct _CERT_POLICY_QUALIFIER_INFO {
1539 LPSTR pszPolicyQualifierId;
1540 CRYPT_OBJID_BLOB Qualifier;
1541 } CERT_POLICY_QUALIFIER_INFO,*PCERT_POLICY_QUALIFIER_INFO;
1542
1543 typedef struct _CERT_POLICY_INFO {
1544 LPSTR pszPolicyIdentifier;
1545 DWORD cPolicyQualifier;
1546 CERT_POLICY_QUALIFIER_INFO *rgPolicyQualifier;
1547 } CERT_POLICY_INFO,*PCERT_POLICY_INFO;
1548
1549 typedef struct _CERT_POLICIES_INFO {
1550 DWORD cPolicyInfo;
1551 CERT_POLICY_INFO *rgPolicyInfo;
1552 } CERT_POLICIES_INFO,*PCERT_POLICIES_INFO;
1553
1554 typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
1555 LPSTR pszOrganization;
1556 DWORD cNoticeNumbers;
1557 int *rgNoticeNumbers;
1558 } CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,*PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
1559
1560 typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE {
1561 CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *pNoticeReference;
1562 LPWSTR pszDisplayText;
1563 } CERT_POLICY_QUALIFIER_USER_NOTICE,*PCERT_POLICY_QUALIFIER_USER_NOTICE;
1564
1565 typedef struct _CPS_URLS {
1566 LPWSTR pszURL;
1567 CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm;
1568 CRYPT_DATA_BLOB *pDigest;
1569 } CPS_URLS,*PCPS_URLS;
1570
1571 typedef struct _CERT_POLICY95_QUALIFIER1 {
1572 LPWSTR pszPracticesReference;
1573 LPSTR pszNoticeIdentifier;
1574 LPSTR pszNSINoticeIdentifier;
1575 DWORD cCPSURLs;
1576 CPS_URLS *rgCPSURLs;
1577 } CERT_POLICY95_QUALIFIER1,*PCERT_POLICY95_QUALIFIER1;
1578
1579 typedef struct _CERT_POLICY_MAPPING {
1580 LPSTR pszIssuerDomainPolicy;
1581 LPSTR pszSubjectDomainPolicy;
1582 } CERT_POLICY_MAPPING,*PCERT_POLICY_MAPPING;
1583
1584 typedef struct _CERT_POLICY_MAPPINGS_INFO {
1585 DWORD cPolicyMapping;
1586 PCERT_POLICY_MAPPING rgPolicyMapping;
1587 } CERT_POLICY_MAPPINGS_INFO,*PCERT_POLICY_MAPPINGS_INFO;
1588
1589 typedef struct _CERT_POLICY_CONSTRAINTS_INFO {
1590 WINBOOL fRequireExplicitPolicy;
1591 DWORD dwRequireExplicitPolicySkipCerts;
1592
1593 WINBOOL fInhibitPolicyMapping;
1594 DWORD dwInhibitPolicyMappingSkipCerts;
1595 } CERT_POLICY_CONSTRAINTS_INFO,*PCERT_POLICY_CONSTRAINTS_INFO;
1596
1597 typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {
1598 LPSTR pszObjId;
1599 DWORD cValue;
1600 PCRYPT_DER_BLOB rgValue;
1601 } CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY,*PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;
1602
1603 typedef struct _CRYPT_CONTENT_INFO {
1604 LPSTR pszObjId;
1605 CRYPT_DER_BLOB Content;
1606 } CRYPT_CONTENT_INFO,*PCRYPT_CONTENT_INFO;
1607
1608 typedef struct _CRYPT_SEQUENCE_OF_ANY {
1609 DWORD cValue;
1610 PCRYPT_DER_BLOB rgValue;
1611 } CRYPT_SEQUENCE_OF_ANY,*PCRYPT_SEQUENCE_OF_ANY;
1612
1613 typedef struct _CERT_AUTHORITY_KEY_ID2_INFO {
1614 CRYPT_DATA_BLOB KeyId;
1615 CERT_ALT_NAME_INFO AuthorityCertIssuer;
1616
1617 CRYPT_INTEGER_BLOB AuthorityCertSerialNumber;
1618 } CERT_AUTHORITY_KEY_ID2_INFO,*PCERT_AUTHORITY_KEY_ID2_INFO;
1619
1620 typedef struct _CERT_ACCESS_DESCRIPTION {
1621 LPSTR pszAccessMethod;
1622 CERT_ALT_NAME_ENTRY AccessLocation;
1623 } CERT_ACCESS_DESCRIPTION,*PCERT_ACCESS_DESCRIPTION;
1624
1625 typedef struct _CERT_AUTHORITY_INFO_ACCESS {
1626 DWORD cAccDescr;
1627 PCERT_ACCESS_DESCRIPTION rgAccDescr;
1628 } CERT_AUTHORITY_INFO_ACCESS,*PCERT_AUTHORITY_INFO_ACCESS;
1629
1630 #define szOID_PKIX_ACC_DESCR "1.3.6.1.5.5.7.48"
1631 #define szOID_PKIX_OCSP "1.3.6.1.5.5.7.48.1"
1632 #define szOID_PKIX_CA_ISSUERS "1.3.6.1.5.5.7.48.2"
1633
1634 #define CRL_REASON_UNSPECIFIED 0
1635 #define CRL_REASON_KEY_COMPROMISE 1
1636 #define CRL_REASON_CA_COMPROMISE 2
1637 #define CRL_REASON_AFFILIATION_CHANGED 3
1638 #define CRL_REASON_SUPERSEDED 4
1639 #define CRL_REASON_CESSATION_OF_OPERATION 5
1640 #define CRL_REASON_CERTIFICATE_HOLD 6
1641 #define CRL_REASON_REMOVE_FROM_CRL 8
1642
1643 typedef struct _CRL_DIST_POINT_NAME {
1644 DWORD dwDistPointNameChoice;
1645 __MINGW_EXTENSION union {
1646 CERT_ALT_NAME_INFO FullName;
1647 };
1648 } CRL_DIST_POINT_NAME,*PCRL_DIST_POINT_NAME;
1649
1650 #define CRL_DIST_POINT_NO_NAME 0
1651 #define CRL_DIST_POINT_FULL_NAME 1
1652 #define CRL_DIST_POINT_ISSUER_RDN_NAME 2
1653
1654 typedef struct _CRL_DIST_POINT {
1655 CRL_DIST_POINT_NAME DistPointName;
1656 CRYPT_BIT_BLOB ReasonFlags;
1657 CERT_ALT_NAME_INFO CRLIssuer;
1658 } CRL_DIST_POINT,*PCRL_DIST_POINT;
1659
1660 #define CRL_REASON_UNUSED_FLAG 0x80
1661 #define CRL_REASON_KEY_COMPROMISE_FLAG 0x40
1662 #define CRL_REASON_CA_COMPROMISE_FLAG 0x20
1663 #define CRL_REASON_AFFILIATION_CHANGED_FLAG 0x10
1664 #define CRL_REASON_SUPERSEDED_FLAG 0x8
1665 #define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x4
1666 #define CRL_REASON_CERTIFICATE_HOLD_FLAG 0x2
1667
1668 typedef struct _CRL_DIST_POINTS_INFO {
1669 DWORD cDistPoint;
1670 PCRL_DIST_POINT rgDistPoint;
1671 } CRL_DIST_POINTS_INFO,*PCRL_DIST_POINTS_INFO;
1672
1673 #define CRL_DIST_POINT_ERR_INDEX_MASK 0x7F
1674 #define CRL_DIST_POINT_ERR_INDEX_SHIFT 24
1675 #define GET_CRL_DIST_POINT_ERR_INDEX(X) ((X >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK)
1676
1677 #define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT 0x80000000L
1678 #define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(X) (0!=(X & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT))
1679
1680 typedef struct _CROSS_CERT_DIST_POINTS_INFO {
1681 DWORD dwSyncDeltaTime;
1682 DWORD cDistPoint;
1683 PCERT_ALT_NAME_INFO rgDistPoint;
1684 } CROSS_CERT_DIST_POINTS_INFO,*PCROSS_CERT_DIST_POINTS_INFO;
1685
1686 #define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK 0xFF
1687 #define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24
1688 #define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(X) ((X >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)
1689
1690 typedef struct _CERT_PAIR {
1691 CERT_BLOB Forward;
1692 CERT_BLOB Reverse;
1693 } CERT_PAIR,*PCERT_PAIR;
1694
1695 typedef struct _CRL_ISSUING_DIST_POINT {
1696 CRL_DIST_POINT_NAME DistPointName;
1697 WINBOOL fOnlyContainsUserCerts;
1698 WINBOOL fOnlyContainsCACerts;
1699 CRYPT_BIT_BLOB OnlySomeReasonFlags;
1700 WINBOOL fIndirectCRL;
1701 } CRL_ISSUING_DIST_POINT,*PCRL_ISSUING_DIST_POINT;
1702
1703 typedef struct _CERT_GENERAL_SUBTREE {
1704 CERT_ALT_NAME_ENTRY Base;
1705 DWORD dwMinimum;
1706 WINBOOL fMaximum;
1707 DWORD dwMaximum;
1708 } CERT_GENERAL_SUBTREE,*PCERT_GENERAL_SUBTREE;
1709
1710 typedef struct _CERT_NAME_CONSTRAINTS_INFO {
1711 DWORD cPermittedSubtree;
1712 PCERT_GENERAL_SUBTREE rgPermittedSubtree;
1713 DWORD cExcludedSubtree;
1714 PCERT_GENERAL_SUBTREE rgExcludedSubtree;
1715 } CERT_NAME_CONSTRAINTS_INFO,*PCERT_NAME_CONSTRAINTS_INFO;
1716
1717 #define CERT_EXCLUDED_SUBTREE_BIT 0x80000000L
1718 #define IS_CERT_EXCLUDED_SUBTREE(X) (0!=(X & CERT_EXCLUDED_SUBTREE_BIT))
1719
1720 #define SORTED_CTL_EXT_FLAGS_OFFSET (0*4)
1721 #define SORTED_CTL_EXT_COUNT_OFFSET (1*4)
1722 #define SORTED_CTL_EXT_MAX_COLLISION_OFFSET (2*4)
1723 #define SORTED_CTL_EXT_HASH_BUCKET_OFFSET (3*4)
1724
1725 #define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG 0x1
1726
1727 typedef struct _CERT_DSS_PARAMETERS {
1728 CRYPT_UINT_BLOB p;
1729 CRYPT_UINT_BLOB q;
1730 CRYPT_UINT_BLOB g;
1731 } CERT_DSS_PARAMETERS,*PCERT_DSS_PARAMETERS;
1732
1733 #define CERT_DSS_R_LEN 20
1734 #define CERT_DSS_S_LEN 20
1735 #define CERT_DSS_SIGNATURE_LEN (CERT_DSS_R_LEN + CERT_DSS_S_LEN)
1736
1737 #define CERT_MAX_ASN_ENCODED_DSS_SIGNATURE_LEN (2 + 2*(2 + 20 +1))
1738
1739 typedef struct _CERT_DH_PARAMETERS {
1740 CRYPT_UINT_BLOB p;
1741 CRYPT_UINT_BLOB g;
1742 } CERT_DH_PARAMETERS,*PCERT_DH_PARAMETERS;
1743
1744 typedef struct _CERT_X942_DH_VALIDATION_PARAMS {
1745 CRYPT_BIT_BLOB seed;
1746 DWORD pgenCounter;
1747 } CERT_X942_DH_VALIDATION_PARAMS,*PCERT_X942_DH_VALIDATION_PARAMS;
1748
1749 typedef struct _CERT_X942_DH_PARAMETERS {
1750 CRYPT_UINT_BLOB p;
1751 CRYPT_UINT_BLOB g;
1752 CRYPT_UINT_BLOB q;
1753 CRYPT_UINT_BLOB j;
1754 PCERT_X942_DH_VALIDATION_PARAMS pValidationParams;
1755 } CERT_X942_DH_PARAMETERS,*PCERT_X942_DH_PARAMETERS;
1756
1757 #define CRYPT_X942_COUNTER_BYTE_LENGTH 4
1758 #define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH 4
1759 #define CRYPT_X942_PUB_INFO_BYTE_LENGTH (512/8)
1760 typedef struct _CRYPT_X942_OTHER_INFO {
1761 LPSTR pszContentEncryptionObjId;
1762 BYTE rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH];
1763 BYTE rgbKeyLength[CRYPT_X942_KEY_LENGTH_BYTE_LENGTH];
1764 CRYPT_DATA_BLOB PubInfo;
1765 } CRYPT_X942_OTHER_INFO,*PCRYPT_X942_OTHER_INFO;
1766
1767 typedef struct _CRYPT_RC2_CBC_PARAMETERS {
1768 DWORD dwVersion;
1769 WINBOOL fIV;
1770 BYTE rgbIV[8];
1771 } CRYPT_RC2_CBC_PARAMETERS,*PCRYPT_RC2_CBC_PARAMETERS;
1772
1773 #define CRYPT_RC2_40BIT_VERSION 160
1774 #define CRYPT_RC2_56BIT_VERSION 52
1775 #define CRYPT_RC2_64BIT_VERSION 120
1776 #define CRYPT_RC2_128BIT_VERSION 58
1777
1778 typedef struct _CRYPT_SMIME_CAPABILITY {
1779 LPSTR pszObjId;
1780 CRYPT_OBJID_BLOB Parameters;
1781 } CRYPT_SMIME_CAPABILITY,*PCRYPT_SMIME_CAPABILITY;
1782
1783 typedef struct _CRYPT_SMIME_CAPABILITIES {
1784 DWORD cCapability;
1785 PCRYPT_SMIME_CAPABILITY rgCapability;
1786 } CRYPT_SMIME_CAPABILITIES,*PCRYPT_SMIME_CAPABILITIES;
1787
1788 #define szOID_VERISIGN_PRIVATE_6_9 "2.16.840.1.113733.1.6.9"
1789 #define szOID_VERISIGN_ONSITE_JURISDICTION_HASH "2.16.840.1.113733.1.6.11"
1790 #define szOID_VERISIGN_BITSTRING_6_13 "2.16.840.1.113733.1.6.13"
1791 #define szOID_VERISIGN_ISS_STRONG_CRYPTO "2.16.840.1.113733.1.8.1"
1792 #define szOID_NETSCAPE "2.16.840.1.113730"
1793 #define szOID_NETSCAPE_CERT_EXTENSION "2.16.840.1.113730.1"
1794 #define szOID_NETSCAPE_CERT_TYPE "2.16.840.1.113730.1.1"
1795 #define szOID_NETSCAPE_BASE_URL "2.16.840.1.113730.1.2"
1796 #define szOID_NETSCAPE_REVOCATION_URL "2.16.840.1.113730.1.3"
1797 #define szOID_NETSCAPE_CA_REVOCATION_URL "2.16.840.1.113730.1.4"
1798 #define szOID_NETSCAPE_CERT_RENEWAL_URL "2.16.840.1.113730.1.7"
1799 #define szOID_NETSCAPE_CA_POLICY_URL "2.16.840.1.113730.1.8"
1800 #define szOID_NETSCAPE_SSL_SERVER_NAME "2.16.840.1.113730.1.12"
1801 #define szOID_NETSCAPE_COMMENT "2.16.840.1.113730.1.13"
1802 #define szOID_NETSCAPE_DATA_TYPE "2.16.840.1.113730.2"
1803 #define szOID_NETSCAPE_CERT_SEQUENCE "2.16.840.1.113730.2.5"
1804
1805 #define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80
1806 #define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40
1807 #define NETSCAPE_SMIME_CERT_TYPE 0x20
1808 #define NETSCAPE_SIGN_CERT_TYPE 0x10
1809 #define NETSCAPE_SSL_CA_CERT_TYPE 0x4
1810 #define NETSCAPE_SMIME_CA_CERT_TYPE 0x2
1811 #define NETSCAPE_SIGN_CA_CERT_TYPE 0x1
1812
1813 #define szOID_CT_PKI_DATA "1.3.6.1.5.5.7.12.2"
1814 #define szOID_CT_PKI_RESPONSE "1.3.6.1.5.5.7.12.3"
1815 #define szOID_PKIX_NO_SIGNATURE "1.3.6.1.5.5.7.6.2"
1816 #define szOID_CMC "1.3.6.1.5.5.7.7"
1817 #define szOID_CMC_STATUS_INFO "1.3.6.1.5.5.7.7.1"
1818 #define szOID_CMC_IDENTIFICATION "1.3.6.1.5.5.7.7.2"
1819 #define szOID_CMC_IDENTITY_PROOF "1.3.6.1.5.5.7.7.3"
1820 #define szOID_CMC_DATA_RETURN "1.3.6.1.5.5.7.7.4"
1821 #define szOID_CMC_TRANSACTION_ID "1.3.6.1.5.5.7.7.5"
1822 #define szOID_CMC_SENDER_NONCE "1.3.6.1.5.5.7.7.6"
1823 #define szOID_CMC_RECIPIENT_NONCE "1.3.6.1.5.5.7.7.7"
1824 #define szOID_CMC_ADD_EXTENSIONS "1.3.6.1.5.5.7.7.8"
1825 #define szOID_CMC_ENCRYPTED_POP "1.3.6.1.5.5.7.7.9"
1826 #define szOID_CMC_DECRYPTED_POP "1.3.6.1.5.5.7.7.10"
1827 #define szOID_CMC_LRA_POP_WITNESS "1.3.6.1.5.5.7.7.11"
1828 #define szOID_CMC_GET_CERT "1.3.6.1.5.5.7.7.15"
1829 #define szOID_CMC_GET_CRL "1.3.6.1.5.5.7.7.16"
1830 #define szOID_CMC_REVOKE_REQUEST "1.3.6.1.5.5.7.7.17"
1831 #define szOID_CMC_REG_INFO "1.3.6.1.5.5.7.7.18"
1832 #define szOID_CMC_RESPONSE_INFO "1.3.6.1.5.5.7.7.19"
1833 #define szOID_CMC_QUERY_PENDING "1.3.6.1.5.5.7.7.21"
1834 #define szOID_CMC_ID_POP_LINK_RANDOM "1.3.6.1.5.5.7.7.22"
1835 #define szOID_CMC_ID_POP_LINK_WITNESS "1.3.6.1.5.5.7.7.23"
1836 #define szOID_CMC_ID_CONFIRM_CERT_ACCEPTANCE "1.3.6.1.5.5.7.7.24"
1837
1838 #define szOID_CMC_ADD_ATTRIBUTES "1.3.6.1.4.1.311.10.10.1"
1839
1840 typedef struct _CMC_TAGGED_ATTRIBUTE {
1841 DWORD dwBodyPartID;
1842 CRYPT_ATTRIBUTE Attribute;
1843 } CMC_TAGGED_ATTRIBUTE,*PCMC_TAGGED_ATTRIBUTE;
1844
1845 typedef struct _CMC_TAGGED_CERT_REQUEST {
1846 DWORD dwBodyPartID;
1847 CRYPT_DER_BLOB SignedCertRequest;
1848 } CMC_TAGGED_CERT_REQUEST,*PCMC_TAGGED_CERT_REQUEST;
1849
1850 typedef struct _CMC_TAGGED_REQUEST {
1851 DWORD dwTaggedRequestChoice;
1852 __MINGW_EXTENSION union {
1853 PCMC_TAGGED_CERT_REQUEST pTaggedCertRequest;
1854 };
1855 } CMC_TAGGED_REQUEST,*PCMC_TAGGED_REQUEST;
1856
1857 #define CMC_TAGGED_CERT_REQUEST_CHOICE 1
1858
1859 typedef struct _CMC_TAGGED_CONTENT_INFO {
1860 DWORD dwBodyPartID;
1861 CRYPT_DER_BLOB EncodedContentInfo;
1862 } CMC_TAGGED_CONTENT_INFO,*PCMC_TAGGED_CONTENT_INFO;
1863
1864 typedef struct _CMC_TAGGED_OTHER_MSG {
1865 DWORD dwBodyPartID;
1866 LPSTR pszObjId;
1867 CRYPT_OBJID_BLOB Value;
1868 } CMC_TAGGED_OTHER_MSG,*PCMC_TAGGED_OTHER_MSG;
1869
1870 typedef struct _CMC_DATA_INFO {
1871 DWORD cTaggedAttribute;
1872 PCMC_TAGGED_ATTRIBUTE rgTaggedAttribute;
1873 DWORD cTaggedRequest;
1874 PCMC_TAGGED_REQUEST rgTaggedRequest;
1875 DWORD cTaggedContentInfo;
1876 PCMC_TAGGED_CONTENT_INFO rgTaggedContentInfo;
1877 DWORD cTaggedOtherMsg;
1878 PCMC_TAGGED_OTHER_MSG rgTaggedOtherMsg;
1879 } CMC_DATA_INFO,*PCMC_DATA_INFO;
1880
1881 typedef struct _CMC_RESPONSE_INFO {
1882 DWORD cTaggedAttribute;
1883 PCMC_TAGGED_ATTRIBUTE rgTaggedAttribute;
1884 DWORD cTaggedContentInfo;
1885 PCMC_TAGGED_CONTENT_INFO rgTaggedContentInfo;
1886 DWORD cTaggedOtherMsg;
1887 PCMC_TAGGED_OTHER_MSG rgTaggedOtherMsg;
1888 } CMC_RESPONSE_INFO,*PCMC_RESPONSE_INFO;
1889
1890 typedef struct _CMC_PEND_INFO {
1891 CRYPT_DATA_BLOB PendToken;
1892 FILETIME PendTime;
1893 } CMC_PEND_INFO,*PCMC_PEND_INFO;
1894
1895 typedef struct _CMC_STATUS_INFO {
1896 DWORD dwStatus;
1897 DWORD cBodyList;
1898 DWORD *rgdwBodyList;
1899 LPWSTR pwszStatusString;
1900 DWORD dwOtherInfoChoice;
1901 __MINGW_EXTENSION union {
1902 DWORD dwFailInfo;
1903 PCMC_PEND_INFO pPendInfo;
1904 };
1905 } CMC_STATUS_INFO,*PCMC_STATUS_INFO;
1906
1907 #define CMC_OTHER_INFO_NO_CHOICE 0
1908 #define CMC_OTHER_INFO_FAIL_CHOICE 1
1909 #define CMC_OTHER_INFO_PEND_CHOICE 2
1910
1911 #define CMC_STATUS_SUCCESS 0
1912 #define CMC_STATUS_FAILED 2
1913 #define CMC_STATUS_PENDING 3
1914 #define CMC_STATUS_NO_SUPPORT 4
1915 #define CMC_STATUS_CONFIRM_REQUIRED 5
1916 #define CMC_FAIL_BAD_ALG 0
1917 #define CMC_FAIL_BAD_MESSAGE_CHECK 1
1918 #define CMC_FAIL_BAD_REQUEST 2
1919 #define CMC_FAIL_BAD_TIME 3
1920 #define CMC_FAIL_BAD_CERT_ID 4
1921 #define CMC_FAIL_UNSUPORTED_EXT 5
1922 #define CMC_FAIL_MUST_ARCHIVE_KEYS 6
1923 #define CMC_FAIL_BAD_IDENTITY 7
1924 #define CMC_FAIL_POP_REQUIRED 8
1925 #define CMC_FAIL_POP_FAILED 9
1926 #define CMC_FAIL_NO_KEY_REUSE 10
1927 #define CMC_FAIL_INTERNAL_CA_ERROR 11
1928 #define CMC_FAIL_TRY_LATER 12
1929
1930 typedef struct _CMC_ADD_EXTENSIONS_INFO {
1931 DWORD dwCmcDataReference;
1932 DWORD cCertReference;
1933 DWORD *rgdwCertReference;
1934 DWORD cExtension;
1935 PCERT_EXTENSION rgExtension;
1936 } CMC_ADD_EXTENSIONS_INFO,*PCMC_ADD_EXTENSIONS_INFO;
1937
1938 typedef struct _CMC_ADD_ATTRIBUTES_INFO {
1939 DWORD dwCmcDataReference;
1940 DWORD cCertReference;
1941 DWORD *rgdwCertReference;
1942 DWORD cAttribute;
1943 PCRYPT_ATTRIBUTE rgAttribute;
1944 } CMC_ADD_ATTRIBUTES_INFO,*PCMC_ADD_ATTRIBUTES_INFO;
1945
1946 typedef struct _CERT_TEMPLATE_EXT {
1947 LPSTR pszObjId;
1948 DWORD dwMajorVersion;
1949 WINBOOL fMinorVersion;
1950 DWORD dwMinorVersion;
1951 } CERT_TEMPLATE_EXT,*PCERT_TEMPLATE_EXT;
1952
1953 typedef void *HCRYPTOIDFUNCSET;
1954 typedef void *HCRYPTOIDFUNCADDR;
1955
1956 #define CRYPT_OID_ENCODE_OBJECT_FUNC "CryptDllEncodeObject"
1957 #define CRYPT_OID_DECODE_OBJECT_FUNC "CryptDllDecodeObject"
1958 #define CRYPT_OID_ENCODE_OBJECT_EX_FUNC "CryptDllEncodeObjectEx"
1959 #define CRYPT_OID_DECODE_OBJECT_EX_FUNC "CryptDllDecodeObjectEx"
1960 #define CRYPT_OID_CREATE_COM_OBJECT_FUNC "CryptDllCreateCOMObject"
1961 #define CRYPT_OID_VERIFY_REVOCATION_FUNC "CertDllVerifyRevocation"
1962 #define CRYPT_OID_VERIFY_CTL_USAGE_FUNC "CertDllVerifyCTLUsage"
1963 #define CRYPT_OID_FORMAT_OBJECT_FUNC "CryptDllFormatObject"
1964 #define CRYPT_OID_FIND_OID_INFO_FUNC "CryptDllFindOIDInfo"
1965 #define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC "CryptDllFindLocalizedName"
1966
1967 #define CRYPT_OID_REGPATH "Software\\Microsoft\\Cryptography\\OID"
1968 #define CRYPT_OID_REG_ENCODING_TYPE_PREFIX "EncodingType "
1969 #define CRYPT_OID_REG_DLL_VALUE_NAME L"Dll"
1970 #define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME L"FuncName"
1971 #define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A "FuncName"
1972
1973 #define CRYPT_OID_REG_FLAGS_VALUE_NAME L"CryptFlags"
1974
1975 #define CRYPT_DEFAULT_OID "DEFAULT"
1976
1977 typedef struct _CRYPT_OID_FUNC_ENTRY {
1978 LPCSTR pszOID;
1979 void *pvFuncAddr;
1980 } CRYPT_OID_FUNC_ENTRY,*PCRYPT_OID_FUNC_ENTRY;
1981
1982 #define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1
1983
1984 WINIMPM WINBOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule,DWORD dwEncodingType,LPCSTR pszFuncName,DWORD cFuncEntry,const CRYPT_OID_FUNC_ENTRY rgFuncEntry[],DWORD dwFlags);
1985 WINIMPM HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName,DWORD dwFlags);
1986 WINIMPM WINBOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,DWORD dwEncodingType,LPCSTR pszOID,DWORD dwFlags,void **ppvFuncAddr,HCRYPTOIDFUNCADDR *phFuncAddr);
1987
1988 #define CRYPT_GET_INSTALLED_OID_FUNC_FLAG 0x1
1989
1990 WINIMPM WINBOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet,DWORD dwEncodingType,LPWSTR pwszDllList,DWORD *pcchDllList);
1991 WINIMPM WINBOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,DWORD dwEncodingType,LPCWSTR pwszDll,DWORD dwFlags,void **ppvFuncAddr,HCRYPTOIDFUNCADDR *phFuncAddr);
1992 WINIMPM WINBOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr,DWORD dwFlags);
1993 WINIMPM WINBOOL WINAPI CryptRegisterOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,LPCWSTR pwszDll,LPCSTR pszOverrideFuncName);
1994 WINIMPM WINBOOL WINAPI CryptUnregisterOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID);
1995 WINIMPM WINBOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,DWORD dwIndex,LPCWSTR pwszDll);
1996
1997 #define CRYPT_REGISTER_FIRST_INDEX 0
1998 #define CRYPT_REGISTER_LAST_INDEX 0xFFFFFFFF
1999
2000 WINIMPM WINBOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,LPCWSTR pwszDll);
2001 WINIMPM WINBOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,LPCWSTR pwszValueName,DWORD dwValueType,const BYTE *pbValueData,DWORD cbValueData);
2002 WINIMPM WINBOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,LPCWSTR pwszValueName,DWORD *pdwValueType,BYTE *pbValueData,DWORD *pcbValueData);
2003
2004 typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,DWORD cValue,const DWORD rgdwValueType[],LPCWSTR const rgpwszValueName[],const BYTE *const rgpbValueData[],const DWORD rgcbValueData[],void *pvArg);
2005
2006 WINIMPM WINBOOL WINAPI CryptEnumOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,DWORD dwFlags,void *pvArg,PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);
2007
2008 #define CRYPT_MATCH_ANY_ENCODING_TYPE 0xFFFFFFFF
2009
2010 typedef struct _CRYPT_OID_INFO {
2011 DWORD cbSize;
2012 LPCSTR pszOID;
2013 LPCWSTR pwszName;
2014 DWORD dwGroupId;
2015 __MINGW_EXTENSION union {
2016 DWORD dwValue;
2017 ALG_ID Algid;
2018 DWORD dwLength;
2019 };
2020 CRYPT_DATA_BLOB ExtraInfo;
2021 } CRYPT_OID_INFO,*PCRYPT_OID_INFO;
2022 typedef const CRYPT_OID_INFO CCRYPT_OID_INFO,*PCCRYPT_OID_INFO;
2023
2024 #define CRYPT_HASH_ALG_OID_GROUP_ID 1
2025 #define CRYPT_ENCRYPT_ALG_OID_GROUP_ID 2
2026 #define CRYPT_PUBKEY_ALG_OID_GROUP_ID 3
2027 #define CRYPT_SIGN_ALG_OID_GROUP_ID 4
2028 #define CRYPT_RDN_ATTR_OID_GROUP_ID 5
2029 #define CRYPT_EXT_OR_ATTR_OID_GROUP_ID 6
2030 #define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7
2031 #define CRYPT_POLICY_OID_GROUP_ID 8
2032 #define CRYPT_TEMPLATE_OID_GROUP_ID 9
2033 #define CRYPT_LAST_OID_GROUP_ID 9
2034 #define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID
2035 #define CRYPT_LAST_ALG_OID_GROUP_ID CRYPT_SIGN_ALG_OID_GROUP_ID
2036
2037 #define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG 0x1
2038 #define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2
2039 #define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG 0x4
2040
2041 WINIMPM PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType,void *pvKey,DWORD dwGroupId);
2042
2043 #define CRYPT_OID_INFO_OID_KEY 1
2044 #define CRYPT_OID_INFO_NAME_KEY 2
2045 #define CRYPT_OID_INFO_ALGID_KEY 3
2046 #define CRYPT_OID_INFO_SIGN_KEY 4
2047
2048 WINIMPM WINBOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo,DWORD dwFlags);
2049
2050 #define CRYPT_INSTALL_OID_INFO_BEFORE_FLAG 1
2051
2052 WINIMPM WINBOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO pInfo);
2053
2054 typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo,void *pvArg);
2055
2056 WINIMPM WINBOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId,DWORD dwFlags,void *pvArg,PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);
2057 WINIMPM LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName);
2058
2059 #define CRYPT_LOCALIZED_NAME_ENCODING_TYPE 0
2060 #define CRYPT_LOCALIZED_NAME_OID "LocalizedNames"
2061
2062 typedef void *HCRYPTMSG;
2063
2064 #define szOID_PKCS_7_DATA "1.2.840.113549.1.7.1"
2065 #define szOID_PKCS_7_SIGNED "1.2.840.113549.1.7.2"
2066 #define szOID_PKCS_7_ENVELOPED "1.2.840.113549.1.7.3"
2067 #define szOID_PKCS_7_SIGNEDANDENVELOPED "1.2.840.113549.1.7.4"
2068 #define szOID_PKCS_7_DIGESTED "1.2.840.113549.1.7.5"
2069 #define szOID_PKCS_7_ENCRYPTED "1.2.840.113549.1.7.6"
2070
2071 #define szOID_PKCS_9_CONTENT_TYPE "1.2.840.113549.1.9.3"
2072 #define szOID_PKCS_9_MESSAGE_DIGEST "1.2.840.113549.1.9.4"
2073
2074 #define CMSG_DATA 1
2075 #define CMSG_SIGNED 2
2076 #define CMSG_ENVELOPED 3
2077 #define CMSG_SIGNED_AND_ENVELOPED 4
2078 #define CMSG_HASHED 5
2079 #define CMSG_ENCRYPTED 6
2080
2081 #define CMSG_ALL_FLAGS (~0UL)
2082 #define CMSG_DATA_FLAG (1 << CMSG_DATA)
2083 #define CMSG_SIGNED_FLAG (1 << CMSG_SIGNED)
2084 #define CMSG_ENVELOPED_FLAG (1 << CMSG_ENVELOPED)
2085 #define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED)
2086 #define CMSG_HASHED_FLAG (1 << CMSG_HASHED)
2087 #define CMSG_ENCRYPTED_FLAG (1 << CMSG_ENCRYPTED)
2088
2089 typedef struct _CERT_ISSUER_SERIAL_NUMBER {
2090 CERT_NAME_BLOB Issuer;
2091 CRYPT_INTEGER_BLOB SerialNumber;
2092 } CERT_ISSUER_SERIAL_NUMBER,*PCERT_ISSUER_SERIAL_NUMBER;
2093
2094 typedef struct _CERT_ID {
2095 DWORD dwIdChoice;
2096 __MINGW_EXTENSION union {
2097 CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber;
2098 CRYPT_HASH_BLOB KeyId;
2099 CRYPT_HASH_BLOB HashId;
2100 };
2101 } CERT_ID,*PCERT_ID;
2102
2103 #define CERT_ID_ISSUER_SERIAL_NUMBER 1
2104 #define CERT_ID_KEY_IDENTIFIER 2
2105 #define CERT_ID_SHA1_HASH 3
2106
2107 typedef struct _CMSG_SIGNER_ENCODE_INFO {
2108 DWORD cbSize;
2109 PCERT_INFO pCertInfo;
2110 HCRYPTPROV hCryptProv;
2111 DWORD dwKeySpec;
2112 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
2113 void *pvHashAuxInfo;
2114 DWORD cAuthAttr;
2115 PCRYPT_ATTRIBUTE rgAuthAttr;
2116 DWORD cUnauthAttr;
2117 PCRYPT_ATTRIBUTE rgUnauthAttr;
2118 #ifdef CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS
2119 CERT_ID SignerId;
2120 CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
2121 void *pvHashEncryptionAuxInfo;
2122 #endif
2123 } CMSG_SIGNER_ENCODE_INFO,*PCMSG_SIGNER_ENCODE_INFO;
2124
2125 typedef struct _CMSG_SIGNED_ENCODE_INFO {
2126 DWORD cbSize;
2127 DWORD cSigners;
2128 PCMSG_SIGNER_ENCODE_INFO rgSigners;
2129 DWORD cCertEncoded;
2130 PCERT_BLOB rgCertEncoded;
2131 DWORD cCrlEncoded;
2132 PCRL_BLOB rgCrlEncoded;
2133 #ifdef CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS
2134 DWORD cAttrCertEncoded;
2135 PCERT_BLOB rgAttrCertEncoded;
2136 #endif
2137 } CMSG_SIGNED_ENCODE_INFO,*PCMSG_SIGNED_ENCODE_INFO;
2138
2139 typedef struct _CMSG_RECIPIENT_ENCODE_INFO CMSG_RECIPIENT_ENCODE_INFO,*PCMSG_RECIPIENT_ENCODE_INFO;
2140
2141 typedef struct _CMSG_ENVELOPED_ENCODE_INFO {
2142 DWORD cbSize;
2143 HCRYPTPROV hCryptProv;
2144 CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
2145 void *pvEncryptionAuxInfo;
2146 DWORD cRecipients;
2147 PCERT_INFO *rgpRecipients;
2148 #ifdef CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS
2149 PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
2150 DWORD cCertEncoded;
2151 PCERT_BLOB rgCertEncoded;
2152 DWORD cCrlEncoded;
2153 PCRL_BLOB rgCrlEncoded;
2154 DWORD cAttrCertEncoded;
2155 PCERT_BLOB rgAttrCertEncoded;
2156 DWORD cUnprotectedAttr;
2157 PCRYPT_ATTRIBUTE rgUnprotectedAttr;
2158 #endif
2159 } CMSG_ENVELOPED_ENCODE_INFO,*PCMSG_ENVELOPED_ENCODE_INFO;
2160
2161 typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO {
2162 DWORD cbSize;
2163 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
2164 void *pvKeyEncryptionAuxInfo;
2165 HCRYPTPROV hCryptProv;
2166 CRYPT_BIT_BLOB RecipientPublicKey;
2167 CERT_ID RecipientId;
2168 } CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO,*PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
2169
2170 typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO {
2171 DWORD cbSize;
2172 CRYPT_BIT_BLOB RecipientPublicKey;
2173 CERT_ID RecipientId;
2174 FILETIME Date;
2175 PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
2176 } CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,*PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
2177
2178 typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO {
2179 DWORD cbSize;
2180 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
2181 void *pvKeyEncryptionAuxInfo;
2182 CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm;
2183 void *pvKeyWrapAuxInfo;
2184 HCRYPTPROV hCryptProv;
2185 DWORD dwKeySpec;
2186 DWORD dwKeyChoice;
2187 __MINGW_EXTENSION union {
2188 PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm;
2189 PCERT_ID pSenderId;
2190 };
2191 CRYPT_DATA_BLOB UserKeyingMaterial;
2192 DWORD cRecipientEncryptedKeys;
2193 PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys;
2194 } CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO,*PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
2195
2196 #define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 1
2197 #define CMSG_KEY_AGREE_STATIC_KEY_CHOICE 2
2198
2199 typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO {
2200 DWORD cbSize;
2201 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
2202 void *pvKeyEncryptionAuxInfo;
2203 HCRYPTPROV hCryptProv;
2204 DWORD dwKeyChoice;
2205 __MINGW_EXTENSION union {
2206
2207 HCRYPTKEY hKeyEncryptionKey;
2208 void *pvKeyEncryptionKey;
2209 };
2210 CRYPT_DATA_BLOB KeyId;
2211 FILETIME Date;
2212 PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
2213 } CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO,*PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
2214
2215 #define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1
2216
2217 struct _CMSG_RECIPIENT_ENCODE_INFO {
2218 DWORD dwRecipientChoice;
2219 __MINGW_EXTENSION union {
2220 PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans;
2221 PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree;
2222 PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList;
2223 };
2224 };
2225
2226 #define CMSG_KEY_TRANS_RECIPIENT 1
2227 #define CMSG_KEY_AGREE_RECIPIENT 2
2228 #define CMSG_MAIL_LIST_RECIPIENT 3
2229
2230 typedef struct _CMSG_RC2_AUX_INFO {
2231 DWORD cbSize;
2232 DWORD dwBitLen;
2233 } CMSG_RC2_AUX_INFO,*PCMSG_RC2_AUX_INFO;
2234
2235 typedef struct _CMSG_SP3_COMPATIBLE_AUX_INFO {
2236 DWORD cbSize;
2237 DWORD dwFlags;
2238 } CMSG_SP3_COMPATIBLE_AUX_INFO,*PCMSG_SP3_COMPATIBLE_AUX_INFO;
2239
2240 #define CMSG_SP3_COMPATIBLE_ENCRYPT_FLAG 0x80000000
2241
2242 typedef struct _CMSG_RC4_AUX_INFO {
2243 DWORD cbSize;
2244 DWORD dwBitLen;
2245 } CMSG_RC4_AUX_INFO,*PCMSG_RC4_AUX_INFO;
2246
2247 #define CMSG_RC4_NO_SALT_FLAG 0x40000000
2248
2249 typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO {
2250 DWORD cbSize;
2251 CMSG_SIGNED_ENCODE_INFO SignedInfo;
2252 CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo;
2253 } CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO,*PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;
2254
2255 typedef struct _CMSG_HASHED_ENCODE_INFO {
2256 DWORD cbSize;
2257 HCRYPTPROV hCryptProv;
2258 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
2259 void *pvHashAuxInfo;
2260 } CMSG_HASHED_ENCODE_INFO,*PCMSG_HASHED_ENCODE_INFO;
2261
2262 typedef struct _CMSG_ENCRYPTED_ENCODE_INFO {
2263 DWORD cbSize;
2264 CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
2265 void *pvEncryptionAuxInfo;
2266 } CMSG_ENCRYPTED_ENCODE_INFO,*PCMSG_ENCRYPTED_ENCODE_INFO;
2267
2268 typedef WINBOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg,BYTE *pbData,DWORD cbData,WINBOOL fFinal);
2269
2270 #define CMSG_INDEFINITE_LENGTH (0xFFFFFFFF)
2271
2272 typedef struct _CMSG_STREAM_INFO {
2273 DWORD cbContent;
2274 PFN_CMSG_STREAM_OUTPUT pfnStreamOutput;
2275 void *pvArg;
2276 } CMSG_STREAM_INFO,*PCMSG_STREAM_INFO;
2277
2278 #define CMSG_BARE_CONTENT_FLAG 0x1
2279 #define CMSG_LENGTH_ONLY_FLAG 0x2
2280 #define CMSG_DETACHED_FLAG 0x4
2281 #define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x8
2282 #define CMSG_CONTENTS_OCTETS_FLAG 0x10
2283 #define CMSG_MAX_LENGTH_FLAG 0x20
2284
2285 #define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x40
2286
2287 #define CMSG_CRYPT_RELEASE_CONTEXT_FLAG 0x8000
2288
2289 WINIMPM HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType,DWORD dwFlags,DWORD dwMsgType,void const *pvMsgEncodeInfo,LPSTR pszInnerContentObjID,PCMSG_STREAM_INFO pStreamInfo);
2290 WINIMPM DWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType,DWORD dwFlags,DWORD dwMsgType,void const *pvMsgEncodeInfo,LPSTR pszInnerContentObjID,DWORD cbData);
2291 WINIMPM HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType,DWORD dwFlags,DWORD dwMsgType,HCRYPTPROV hCryptProv,PCERT_INFO pRecipientInfo,PCMSG_STREAM_INFO pStreamInfo);
2292 WINIMPM HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg);
2293 WINIMPM WINBOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg);
2294 WINIMPM WINBOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg,const BYTE *pbData,DWORD cbData,WINBOOL fFinal);
2295 WINIMPM WINBOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg,DWORD dwParamType,DWORD dwIndex,void *pvData,DWORD *pcbData);
2296
2297 #define CMSG_TYPE_PARAM 1
2298 #define CMSG_CONTENT_PARAM 2
2299 #define CMSG_BARE_CONTENT_PARAM 3
2300 #define CMSG_INNER_CONTENT_TYPE_PARAM 4
2301 #define CMSG_SIGNER_COUNT_PARAM 5
2302 #define CMSG_SIGNER_INFO_PARAM 6
2303 #define CMSG_SIGNER_CERT_INFO_PARAM 7
2304 #define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8
2305 #define CMSG_SIGNER_AUTH_ATTR_PARAM 9
2306 #define CMSG_SIGNER_UNAUTH_ATTR_PARAM 10
2307 #define CMSG_CERT_COUNT_PARAM 11
2308 #define CMSG_CERT_PARAM 12
2309 #define CMSG_CRL_COUNT_PARAM 13
2310 #define CMSG_CRL_PARAM 14
2311 #define CMSG_ENVELOPE_ALGORITHM_PARAM 15
2312 #define CMSG_RECIPIENT_COUNT_PARAM 17
2313 #define CMSG_RECIPIENT_INDEX_PARAM 18
2314 #define CMSG_RECIPIENT_INFO_PARAM 19
2315 #define CMSG_HASH_ALGORITHM_PARAM 20
2316 #define CMSG_HASH_DATA_PARAM 21
2317 #define CMSG_COMPUTED_HASH_PARAM 22
2318 #define CMSG_ENCRYPT_PARAM 26
2319 #define CMSG_ENCRYPTED_DIGEST 27
2320 #define CMSG_ENCODED_SIGNER 28
2321 #define CMSG_ENCODED_MESSAGE 29
2322 #define CMSG_VERSION_PARAM 30
2323 #define CMSG_ATTR_CERT_COUNT_PARAM 31
2324 #define CMSG_ATTR_CERT_PARAM 32
2325 #define CMSG_CMS_RECIPIENT_COUNT_PARAM 33
2326 #define CMSG_CMS_RECIPIENT_INDEX_PARAM 34
2327 #define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 35
2328 #define CMSG_CMS_RECIPIENT_INFO_PARAM 36
2329 #define CMSG_UNPROTECTED_ATTR_PARAM 37
2330 #define CMSG_SIGNER_CERT_ID_PARAM 38
2331 #define CMSG_CMS_SIGNER_INFO_PARAM 39
2332
2333 typedef struct _CMSG_SIGNER_INFO {
2334 DWORD dwVersion;
2335 CERT_NAME_BLOB Issuer;
2336 CRYPT_INTEGER_BLOB SerialNumber;
2337 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
2338 CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
2339 CRYPT_DATA_BLOB EncryptedHash;
2340 CRYPT_ATTRIBUTES AuthAttrs;
2341 CRYPT_ATTRIBUTES UnauthAttrs;
2342 } CMSG_SIGNER_INFO,*PCMSG_SIGNER_INFO;
2343
2344 typedef struct _CMSG_CMS_SIGNER_INFO {
2345 DWORD dwVersion;
2346 CERT_ID SignerId;
2347 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
2348 CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
2349 CRYPT_DATA_BLOB EncryptedHash;
2350 CRYPT_ATTRIBUTES AuthAttrs;
2351 CRYPT_ATTRIBUTES UnauthAttrs;
2352 } CMSG_CMS_SIGNER_INFO,*PCMSG_CMS_SIGNER_INFO;
2353
2354 typedef CRYPT_ATTRIBUTES CMSG_ATTR;
2355 typedef CRYPT_ATTRIBUTES *PCMSG_ATTR;
2356
2357 #define CMSG_SIGNED_DATA_V1 1
2358 #define CMSG_SIGNED_DATA_V3 3
2359 #define CMSG_SIGNED_DATA_PKCS_1_5_VERSION CMSG_SIGNED_DATA_V1
2360 #define CMSG_SIGNED_DATA_CMS_VERSION CMSG_SIGNED_DATA_V3
2361
2362 #define CMSG_SIGNER_INFO_V1 1
2363 #define CMSG_SIGNER_INFO_V3 3
2364 #define CMSG_SIGNER_INFO_PKCS_1_5_VERSION CMSG_SIGNER_INFO_V1
2365 #define CMSG_SIGNER_INFO_CMS_VERSION CMSG_SIGNER_INFO_V3
2366
2367 #define CMSG_HASHED_DATA_V0 0
2368 #define CMSG_HASHED_DATA_V2 2
2369 #define CMSG_HASHED_DATA_PKCS_1_5_VERSION CMSG_HASHED_DATA_V0
2370 #define CMSG_HASHED_DATA_CMS_VERSION CMSG_HASHED_DATA_V2
2371
2372 #define CMSG_ENVELOPED_DATA_V0 0
2373 #define CMSG_ENVELOPED_DATA_V2 2
2374 #define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION CMSG_ENVELOPED_DATA_V0
2375 #define CMSG_ENVELOPED_DATA_CMS_VERSION CMSG_ENVELOPED_DATA_V2
2376
2377 typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO {
2378 DWORD dwVersion;
2379 CERT_ID RecipientId;
2380 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
2381 CRYPT_DATA_BLOB EncryptedKey;
2382 } CMSG_KEY_TRANS_RECIPIENT_INFO,*PCMSG_KEY_TRANS_RECIPIENT_INFO;
2383
2384 typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {
2385 CERT_ID RecipientId;
2386 CRYPT_DATA_BLOB EncryptedKey;
2387 FILETIME Date;
2388 PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
2389 } CMSG_RECIPIENT_ENCRYPTED_KEY_INFO,*PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO;
2390
2391 typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO {
2392 DWORD dwVersion;
2393 DWORD dwOriginatorChoice;
2394 __MINGW_EXTENSION union {
2395 CERT_ID OriginatorCertId;
2396 CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo;
2397 };
2398 CRYPT_DATA_BLOB UserKeyingMaterial;
2399 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
2400 DWORD cRecipientEncryptedKeys;
2401 PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO *rgpRecipientEncryptedKeys;
2402 } CMSG_KEY_AGREE_RECIPIENT_INFO,*PCMSG_KEY_AGREE_RECIPIENT_INFO;
2403
2404 #define CMSG_KEY_AGREE_ORIGINATOR_CERT 1
2405 #define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 2
2406
2407 typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO {
2408 DWORD dwVersion;
2409 CRYPT_DATA_BLOB KeyId;
2410 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
2411 CRYPT_DATA_BLOB EncryptedKey;
2412 FILETIME Date;
2413 PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
2414 } CMSG_MAIL_LIST_RECIPIENT_INFO,*PCMSG_MAIL_LIST_RECIPIENT_INFO;
2415
2416 typedef struct _CMSG_CMS_RECIPIENT_INFO {
2417 DWORD dwRecipientChoice;
2418 __MINGW_EXTENSION union {
2419 PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
2420 PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;
2421 PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList;
2422 };
2423 } CMSG_CMS_RECIPIENT_INFO,*PCMSG_CMS_RECIPIENT_INFO;
2424
2425 #define CMSG_ENVELOPED_RECIPIENT_V0 0
2426 #define CMSG_ENVELOPED_RECIPIENT_V2 2
2427 #define CMSG_ENVELOPED_RECIPIENT_V3 3
2428 #define CMSG_ENVELOPED_RECIPIENT_V4 4
2429 #define CMSG_KEY_TRANS_PKCS_1_5_VERSION CMSG_ENVELOPED_RECIPIENT_V0
2430 #define CMSG_KEY_TRANS_CMS_VERSION CMSG_ENVELOPED_RECIPIENT_V2
2431 #define CMSG_KEY_AGREE_VERSION CMSG_ENVELOPED_RECIPIENT_V3
2432 #define CMSG_MAIL_LIST_VERSION CMSG_ENVELOPED_RECIPIENT_V4
2433
2434 WINIMPM WINBOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg,DWORD dwFlags,DWORD dwCtrlType,void const *pvCtrlPara);
2435
2436 #define CMSG_CTRL_VERIFY_SIGNATURE 1
2437 #define CMSG_CTRL_DECRYPT 2
2438 #define CMSG_CTRL_VERIFY_HASH 5
2439 #define CMSG_CTRL_ADD_SIGNER 6
2440 #define CMSG_CTRL_DEL_SIGNER 7
2441 #define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8
2442 #define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9
2443 #define CMSG_CTRL_ADD_CERT 10
2444 #define CMSG_CTRL_DEL_CERT 11
2445 #define CMSG_CTRL_ADD_CRL 12
2446 #define CMSG_CTRL_DEL_CRL 13
2447 #define CMSG_CTRL_ADD_ATTR_CERT 14
2448 #define CMSG_CTRL_DEL_ATTR_CERT 15
2449 #define CMSG_CTRL_KEY_TRANS_DECRYPT 16
2450 #define CMSG_CTRL_KEY_AGREE_DECRYPT 17
2451 #define CMSG_CTRL_MAIL_LIST_DECRYPT 18
2452 #define CMSG_CTRL_VERIFY_SIGNATURE_EX 19
2453 #define CMSG_CTRL_ADD_CMS_SIGNER_INFO 20
2454
2455 typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
2456 DWORD cbSize;
2457 HCRYPTPROV hCryptProv;
2458 DWORD dwSignerIndex;
2459 DWORD dwSignerType;
2460 void *pvSigner;
2461 } CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA,*PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;
2462
2463 #define CMSG_VERIFY_SIGNER_PUBKEY 1
2464 #define CMSG_VERIFY_SIGNER_CERT 2
2465 #define CMSG_VERIFY_SIGNER_CHAIN 3
2466 #define CMSG_VERIFY_SIGNER_NULL 4
2467
2468 typedef struct _CMSG_CTRL_DECRYPT_PARA {
2469 DWORD cbSize;
2470 HCRYPTPROV hCryptProv;
2471 DWORD dwKeySpec;
2472 DWORD dwRecipientIndex;
2473 } CMSG_CTRL_DECRYPT_PARA,*PCMSG_CTRL_DECRYPT_PARA;
2474
2475 typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
2476 DWORD cbSize;
2477 HCRYPTPROV hCryptProv;
2478 DWORD dwKeySpec;
2479 PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
2480 DWORD dwRecipientIndex;
2481 } CMSG_CTRL_KEY_TRANS_DECRYPT_PARA,*PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA;
2482
2483 typedef struct _CMSG_CTRL_KEY_AGREE_DECRYPT_PARA {
2484 DWORD cbSize;
2485 HCRYPTPROV hCryptProv;
2486 DWORD dwKeySpec;
2487 PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;
2488 DWORD dwRecipientIndex;
2489 DWORD dwRecipientEncryptedKeyIndex;
2490 CRYPT_BIT_BLOB OriginatorPublicKey;
2491 } CMSG_CTRL_KEY_AGREE_DECRYPT_PARA,*PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA;
2492
2493 typedef struct _CMSG_CTRL_MAIL_LIST_DECRYPT_PARA {
2494 DWORD cbSize;
2495 HCRYPTPROV hCryptProv;
2496 PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList;
2497 DWORD dwRecipientIndex;
2498 DWORD dwKeyChoice;
2499 __MINGW_EXTENSION union {
2500 HCRYPTKEY hKeyEncryptionKey;
2501 void *pvKeyEncryptionKey;
2502 };
2503 } CMSG_CTRL_MAIL_LIST_DECRYPT_PARA,*PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA;
2504
2505 typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA {
2506 DWORD cbSize;
2507 DWORD dwSignerIndex;
2508 CRYPT_DATA_BLOB blob;
2509 } CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA,*PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;
2510
2511 typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA {
2512 DWORD cbSize;
2513 DWORD dwSignerIndex;
2514 DWORD dwUnauthAttrIndex;
2515 } CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA,*PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
2516
2517 WINBOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV hCryptProv,DWORD dwEncodingType,PBYTE pbSignerInfo,DWORD cbSignerInfo,PBYTE pbSignerInfoCountersignature,DWORD cbSignerInfoCountersignature,PCERT_INFO pciCountersigner);
2518 WINBOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV hCryptProv,DWORD dwEncodingType,PBYTE pbSignerInfo,DWORD cbSignerInfo,PBYTE pbSignerInfoCountersignature,DWORD cbSignerInfoCountersignature,DWORD dwSignerType,void *pvSigner,DWORD dwFlags,void *pvReserved);
2519 WINBOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg,DWORD dwIndex,DWORD cCountersigners,PCMSG_SIGNER_ENCODE_INFO rgCountersigners);
2520 WINBOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType,PBYTE pbSignerInfo,DWORD cbSignerInfo,DWORD cCountersigners,PCMSG_SIGNER_ENCODE_INFO rgCountersigners,PBYTE pbCountersignature,PDWORD pcbCountersignature);
2521
2522 typedef void *(WINAPI *PFN_CMSG_ALLOC)(size_t cb);
2523 typedef void (WINAPI *PFN_CMSG_FREE)(void *pv);
2524
2525 #define CMSG_OID_GEN_ENCRYPT_KEY_FUNC "CryptMsgDllGenEncryptKey"
2526 typedef WINBOOL (WINAPI *PFN_CMSG_GEN_ENCRYPT_KEY)(HCRYPTPROV *phCryptProv,PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt,PVOID pvEncryptAuxInfo,PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,PFN_CMSG_ALLOC pfnAlloc,HCRYPTKEY *phEncryptKey,PBYTE *ppbEncryptParameters,PDWORD pcbEncryptParameters);
2527
2528 #define CMSG_OID_EXPORT_ENCRYPT_KEY_FUNC "CryptMsgDllExportEncryptKey"
2529 typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_ENCRYPT_KEY)(HCRYPTPROV hCryptProv,HCRYPTKEY hEncryptKey,PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,PBYTE pbData,PDWORD pcbData);
2530
2531 #define CMSG_OID_IMPORT_ENCRYPT_KEY_FUNC "CryptMsgDllImportEncryptKey"
2532 typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_ENCRYPT_KEY)(HCRYPTPROV hCryptProv,DWORD dwKeySpec,PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt,PCRYPT_ALGORITHM_IDENTIFIER paiPubKey,PBYTE pbEncodedKey,DWORD cbEncodedKey,HCRYPTKEY *phEncryptKey);
2533
2534 #define CMSG_DEFAULT_INSTALLABLE_FUNC_OID ((LPCSTR) 1)
2535
2536 typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
2537 DWORD cbSize;
2538 HCRYPTPROV hCryptProv;
2539 CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
2540 void *pvEncryptionAuxInfo;
2541 DWORD cRecipients;
2542 PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
2543 PFN_CMSG_ALLOC pfnAlloc;
2544 PFN_CMSG_FREE pfnFree;
2545 DWORD dwEncryptFlags;
2546 HCRYPTKEY hContentEncryptKey;
2547 DWORD dwFlags;
2548 } CMSG_CONTENT_ENCRYPT_INFO,*PCMSG_CONTENT_ENCRYPT_INFO;
2549
2550 #define CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG 0x1
2551
2552 #define CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG 0x1
2553 #define CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG 0x8000
2554
2555 #define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey"
2556 typedef WINBOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,DWORD dwFlags,void *pvReserved);
2557
2558 typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO {
2559 DWORD cbSize;
2560 DWORD dwRecipientIndex;
2561 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
2562 CRYPT_DATA_BLOB EncryptedKey;
2563 DWORD dwFlags;
2564 } CMSG_KEY_TRANS_ENCRYPT_INFO,*PCMSG_KEY_TRANS_ENCRYPT_INFO;
2565
2566 #define CMSG_KEY_TRANS_ENCRYPT_FREE_PARA_FLAG 0x1
2567
2568 #define CMSG_OID_EXPORT_KEY_TRANS_FUNC "CryptMsgDllExportKeyTrans"
2569 typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo,PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo,DWORD dwFlags,void *pvReserved);
2570
2571 typedef struct _CMSG_KEY_AGREE_KEY_ENCRYPT_INFO {
2572 DWORD cbSize;
2573 CRYPT_DATA_BLOB EncryptedKey;
2574 } CMSG_KEY_AGREE_KEY_ENCRYPT_INFO,*PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO;
2575
2576 typedef struct _CMSG_KEY_AGREE_ENCRYPT_INFO {
2577 DWORD cbSize;
2578 DWORD dwRecipientIndex;
2579 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
2580 CRYPT_DATA_BLOB UserKeyingMaterial;
2581 DWORD dwOriginatorChoice;
2582 __MINGW_EXTENSION union {
2583
2584 CERT_ID OriginatorCertId;
2585
2586 CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo;
2587 };
2588 DWORD cKeyAgreeKeyEncryptInfo;
2589 PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO *rgpKeyAgreeKeyEncryptInfo;
2590 DWORD dwFlags;
2591 } CMSG_KEY_AGREE_ENCRYPT_INFO,*PCMSG_KEY_AGREE_ENCRYPT_INFO;
2592
2593 #define CMSG_KEY_AGREE_ENCRYPT_FREE_PARA_FLAG 0x1
2594 #define CMSG_KEY_AGREE_ENCRYPT_FREE_MATERIAL_FLAG 0x2
2595 #define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_ALG_FLAG 0x4
2596 #define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_PARA_FLAG 0x8
2597 #define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_BITS_FLAG 0x10
2598
2599 #define CMSG_OID_EXPORT_KEY_AGREE_FUNC "CryptMsgDllExportKeyAgree"
2600
2601 typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_KEY_AGREE)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgreeEncodeInfo,PCMSG_KEY_AGREE_ENCRYPT_INFO pKeyAgreeEncryptInfo,DWORD dwFlags,void *pvReserved);
2602
2603 typedef struct _CMSG_MAIL_LIST_ENCRYPT_INFO {
2604 DWORD cbSize;
2605 DWORD dwRecipientIndex;
2606 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
2607 CRYPT_DATA_BLOB EncryptedKey;
2608 DWORD dwFlags;
2609 } CMSG_MAIL_LIST_ENCRYPT_INFO,*PCMSG_MAIL_LIST_ENCRYPT_INFO;
2610
2611 #define CMSG_MAIL_LIST_ENCRYPT_FREE_PARA_FLAG 0x1
2612
2613 #define CMSG_OID_EXPORT_MAIL_LIST_FUNC "CryptMsgDllExportMailList"
2614 typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_MAIL_LIST)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailListEncodeInfo,PCMSG_MAIL_LIST_ENCRYPT_INFO pMailListEncryptInfo,DWORD dwFlags,void *pvReserved);
2615
2616 #define CMSG_OID_IMPORT_KEY_TRANS_FUNC "CryptMsgDllImportKeyTrans"
2617 typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)(PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara,DWORD dwFlags,void *pvReserved,HCRYPTKEY *phContentEncryptKey);
2618
2619 #define CMSG_OID_IMPORT_KEY_AGREE_FUNC "CryptMsgDllImportKeyAgree"
2620 typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_KEY_AGREE)(PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara,DWORD dwFlags,void *pvReserved,HCRYPTKEY *phContentEncryptKey);
2621
2622 #define CMSG_OID_IMPORT_MAIL_LIST_FUNC "CryptMsgDllImportMailList"
2623 typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_MAIL_LIST)(PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA pMailListDecryptPara,DWORD dwFlags,void *pvReserved,HCRYPTKEY *phContentEncryptKey);
2624
2625 typedef void *HCERTSTORE;
2626
2627 typedef struct _CERT_CONTEXT {
2628 DWORD dwCertEncodingType;
2629 BYTE *pbCertEncoded;
2630 DWORD cbCertEncoded;
2631 PCERT_INFO pCertInfo;
2632 HCERTSTORE hCertStore;
2633 } CERT_CONTEXT,*PCERT_CONTEXT;
2634
2635 typedef const CERT_CONTEXT *PCCERT_CONTEXT;
2636
2637 typedef struct _CRL_CONTEXT {
2638 DWORD dwCertEncodingType;
2639 BYTE *pbCrlEncoded;
2640 DWORD cbCrlEncoded;
2641 PCRL_INFO pCrlInfo;
2642 HCERTSTORE hCertStore;
2643 } CRL_CONTEXT,*PCRL_CONTEXT;
2644
2645 typedef const CRL_CONTEXT *PCCRL_CONTEXT;
2646
2647 typedef struct _CTL_CONTEXT {
2648 DWORD dwMsgAndCertEncodingType;
2649 BYTE *pbCtlEncoded;
2650 DWORD cbCtlEncoded;
2651 PCTL_INFO pCtlInfo;
2652 HCERTSTORE hCertStore;
2653 HCRYPTMSG hCryptMsg;
2654 BYTE *pbCtlContent;
2655 DWORD cbCtlContent;
2656 } CTL_CONTEXT,*PCTL_CONTEXT;
2657
2658 typedef const CTL_CONTEXT *PCCTL_CONTEXT;
2659
2660 #define CERT_KEY_PROV_HANDLE_PROP_ID 1
2661 #define CERT_KEY_PROV_INFO_PROP_ID 2
2662 #define CERT_SHA1_HASH_PROP_ID 3
2663 #define CERT_MD5_HASH_PROP_ID 4
2664 #define CERT_HASH_PROP_ID CERT_SHA1_HASH_PROP_ID
2665 #define CERT_KEY_CONTEXT_PROP_ID 5
2666 #define CERT_KEY_SPEC_PROP_ID 6
2667 #define CERT_IE30_RESERVED_PROP_ID 7
2668 #define CERT_PUBKEY_HASH_RESERVED_PROP_ID 8
2669 #define CERT_ENHKEY_USAGE_PROP_ID 9
2670 #define CERT_CTL_USAGE_PROP_ID CERT_ENHKEY_USAGE_PROP_ID
2671 #define CERT_NEXT_UPDATE_LOCATION_PROP_ID 10
2672 #define CERT_FRIENDLY_NAME_PROP_ID 11
2673 #define CERT_PVK_FILE_PROP_ID 12
2674 #define CERT_DESCRIPTION_PROP_ID 13
2675 #define CERT_ACCESS_STATE_PROP_ID 14
2676 #define CERT_SIGNATURE_HASH_PROP_ID 15
2677 #define CERT_SMART_CARD_DATA_PROP_ID 16
2678 #define CERT_EFS_PROP_ID 17
2679 #define CERT_FORTEZZA_DATA_PROP_ID 18
2680 #define CERT_ARCHIVED_PROP_ID 19
2681 #define CERT_KEY_IDENTIFIER_PROP_ID 20
2682 #define CERT_AUTO_ENROLL_PROP_ID 21
2683 #define CERT_PUBKEY_ALG_PARA_PROP_ID 22
2684 #define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 23
2685 #define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID 24
2686 #define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID 25
2687 #define CERT_ENROLLMENT_PROP_ID 26
2688 #define CERT_DATE_STAMP_PROP_ID 27
2689 #define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28
2690 #define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID 29
2691 #define CERT_EXTENDED_ERROR_INFO_PROP_ID 30
2692 #define CERT_RENEWAL_PROP_ID 64
2693 #define CERT_ARCHIVED_KEY_HASH_PROP_ID 65
2694 #define CERT_AUTO_ENROLL_RETRY_PROP_ID 66
2695 #define CERT_AIA_URL_RETRIEVED_PROP_ID 67
2696 #define CERT_REQUEST_ORIGINATOR_PROP_ID 71
2697 #define CERT_FIRST_RESERVED_PROP_ID 72
2698 #define CERT_LAST_RESERVED_PROP_ID 0x7fff
2699 #define CERT_FIRST_USER_PROP_ID 0x8000
2700 #define CERT_LAST_USER_PROP_ID 0xffff
2701
2702 #define IS_CERT_HASH_PROP_ID(X) (CERT_SHA1_HASH_PROP_ID==(X) || CERT_MD5_HASH_PROP_ID==(X) || CERT_SIGNATURE_HASH_PROP_ID==(X))
2703 #define IS_PUBKEY_HASH_PROP_ID(X) (CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID==(X) || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID==(X))
2704 #define IS_CHAIN_HASH_PROP_ID(X) (CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID==(X) || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID==(X) || CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID==(X) || CERT_SUBJECT_NAME_MD5_HASH_PROP_ID==(X))
2705
2706 #define szOID_CERT_PROP_ID_PREFIX "1.3.6.1.4.1.311.10.11."
2707 #define szOID_CERT_KEY_IDENTIFIER_PROP_ID "1.3.6.1.4.1.311.10.11.20"
2708 #define szOID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.28"
2709 #define szOID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.29"
2710
2711 #define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG 0x1
2712
2713 #define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG 0x2
2714
2715 #define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4
2716
2717 typedef struct _CRYPT_KEY_PROV_PARAM {
2718 DWORD dwParam;
2719 BYTE *pbData;
2720 DWORD cbData;
2721 DWORD dwFlags;
2722 } CRYPT_KEY_PROV_PARAM,*PCRYPT_KEY_PROV_PARAM;
2723
2724 typedef struct _CRYPT_KEY_PROV_INFO {
2725 LPWSTR pwszContainerName;
2726 LPWSTR pwszProvName;
2727 DWORD dwProvType;
2728 DWORD dwFlags;
2729 DWORD cProvParam;
2730 PCRYPT_KEY_PROV_PARAM rgProvParam;
2731 DWORD dwKeySpec;
2732 } CRYPT_KEY_PROV_INFO,*PCRYPT_KEY_PROV_INFO;
2733
2734 #define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x1
2735 #define CERT_SET_KEY_CONTEXT_PROP_ID 0x1
2736
2737 typedef struct _CERT_KEY_CONTEXT {
2738 DWORD cbSize;
2739 HCRYPTPROV hCryptProv;
2740 DWORD dwKeySpec;
2741 } CERT_KEY_CONTEXT,*PCERT_KEY_CONTEXT;
2742
2743 #define CERT_STORE_PROV_MSG ((LPCSTR) 1)
2744 #define CERT_STORE_PROV_MEMORY ((LPCSTR) 2)
2745 #define CERT_STORE_PROV_FILE ((LPCSTR) 3)
2746 #define CERT_STORE_PROV_REG ((LPCSTR) 4)
2747
2748 #define CERT_STORE_PROV_PKCS7 ((LPCSTR) 5)
2749 #define CERT_STORE_PROV_SERIALIZED ((LPCSTR) 6)
2750 #define CERT_STORE_PROV_FILENAME_A ((LPCSTR) 7)
2751 #define CERT_STORE_PROV_FILENAME_W ((LPCSTR) 8)
2752 #define CERT_STORE_PROV_FILENAME CERT_STORE_PROV_FILENAME_W
2753 #define CERT_STORE_PROV_SYSTEM_A ((LPCSTR) 9)
2754 #define CERT_STORE_PROV_SYSTEM_W ((LPCSTR) 10)
2755 #define CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W
2756
2757 #define CERT_STORE_PROV_COLLECTION ((LPCSTR) 11)
2758 #define CERT_STORE_PROV_SYSTEM_REGISTRY_A ((LPCSTR) 12)
2759 #define CERT_STORE_PROV_SYSTEM_REGISTRY_W ((LPCSTR) 13)
2760 #define CERT_STORE_PROV_SYSTEM_REGISTRY CERT_STORE_PROV_SYSTEM_REGISTRY_W
2761 #define CERT_STORE_PROV_PHYSICAL_W ((LPCSTR) 14)
2762 #define CERT_STORE_PROV_PHYSICAL CERT_STORE_PROV_PHYSICAL_W
2763 #define CERT_STORE_PROV_SMART_CARD_W ((LPCSTR) 15)
2764 #define CERT_STORE_PROV_SMART_CARD CERT_STORE_PROV_SMART_CARD_W
2765 #define CERT_STORE_PROV_LDAP_W ((LPCSTR) 16)
2766 #define CERT_STORE_PROV_LDAP CERT_STORE_PROV_LDAP_W
2767 #define sz_CERT_STORE_PROV_MEMORY "Memory"
2768 #define sz_CERT_STORE_PROV_FILENAME_W "File"
2769 #define sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W
2770 #define sz_CERT_STORE_PROV_SYSTEM_W "System"
2771 #define sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W
2772 #define sz_CERT_STORE_PROV_PKCS7 "PKCS7"
2773 #define sz_CERT_STORE_PROV_SERIALIZED "Serialized"
2774 #define sz_CERT_STORE_PROV_COLLECTION "Collection"
2775 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
2776 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
2777 #define sz_CERT_STORE_PROV_PHYSICAL_W "Physical"
2778 #define sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W
2779 #define sz_CERT_STORE_PROV_SMART_CARD_W "SmartCard"
2780 #define sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W
2781 #define sz_CERT_STORE_PROV_LDAP_W "Ldap"
2782 #define sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W
2783 #define CERT_STORE_SIGNATURE_FLAG 0x1
2784 #define CERT_STORE_TIME_VALIDITY_FLAG 0x2
2785 #define CERT_STORE_REVOCATION_FLAG 0x4
2786 #define CERT_STORE_NO_CRL_FLAG 0x10000
2787 #define CERT_STORE_NO_ISSUER_FLAG 0x20000
2788 #define CERT_STORE_BASE_CRL_FLAG 0x100
2789 #define CERT_STORE_DELTA_CRL_FLAG 0x200
2790 #define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x1
2791 #define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x2
2792 #define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x4
2793 #define CERT_STORE_DELETE_FLAG 0x10
2794 #define CERT_STORE_UNSAFE_PHYSICAL_FLAG 0x20
2795 #define CERT_STORE_SHARE_STORE_FLAG 0x40
2796 #define CERT_STORE_SHARE_CONTEXT_FLAG 0x80
2797 #define CERT_STORE_MANIFOLD_FLAG 0x100
2798 #define CERT_STORE_ENUM_ARCHIVED_FLAG 0x200
2799 #define CERT_STORE_UPDATE_KEYID_FLAG 0x400
2800 #define CERT_STORE_BACKUP_RESTORE_FLAG 0x800
2801 #define CERT_STORE_READONLY_FLAG 0x8000
2802 #define CERT_STORE_OPEN_EXISTING_FLAG 0x4000
2803 #define CERT_STORE_CREATE_NEW_FLAG 0x2000
2804 #define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x1000
2805
2806 #define CERT_SYSTEM_STORE_MASK 0xFFFF0000
2807 #define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000
2808
2809 typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {
2810 __MINGW_EXTENSION union {
2811 HKEY hKeyBase;
2812 void *pvBase;
2813 };
2814 __MINGW_EXTENSION union {
2815 void *pvSystemStore;
2816 LPCSTR pszSystemStore;
2817 LPCWSTR pwszSystemStore;
2818 };
2819 } CERT_SYSTEM_STORE_RELOCATE_PARA,*PCERT_SYSTEM_STORE_RELOCATE_PARA;
2820
2821 #define CERT_SYSTEM_STORE_UNPROTECTED_FLAG 0x40000000
2822 #define CERT_SYSTEM_STORE_LOCATION_MASK 0xff0000
2823 #define CERT_SYSTEM_STORE_LOCATION_SHIFT 16
2824 #define CERT_SYSTEM_STORE_CURRENT_USER_ID 1
2825 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID 2
2826 #define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID 4
2827 #define CERT_SYSTEM_STORE_SERVICES_ID 5
2828 #define CERT_SYSTEM_STORE_USERS_ID 6
2829 #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID 7
2830 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8
2831 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID 9
2832 #define CERT_SYSTEM_STORE_CURRENT_USER (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2833 #define CERT_SYSTEM_STORE_LOCAL_MACHINE (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2834 #define CERT_SYSTEM_STORE_CURRENT_SERVICE (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2835 #define CERT_SYSTEM_STORE_SERVICES (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2836 #define CERT_SYSTEM_STORE_USERS (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2837 #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2838 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2839 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2840
2841 #define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"Software\\Policies\\Microsoft\\SystemCertificates"
2842
2843 #define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\EFS"
2844 #define CERT_EFSBLOB_VALUE_NAME L"EFSBlob"
2845
2846 #define CERT_PROT_ROOT_FLAGS_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\Root\\ProtectedRoots"
2847 #define CERT_PROT_ROOT_FLAGS_VALUE_NAME L"Flags"
2848 #define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG 0x1
2849 #define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG 0x2
2850 #define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG 0x4
2851 #define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG 0x8
2852 #define CERT_PROT_ROOT_ONLY_LM_GPT_FLAG 0x8
2853 #define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG 0x10
2854 #define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20
2855
2856 #define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
2857 #define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"Software\\Microsoft\\SystemCertificates"
2858 #define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
2859 #define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L"AuthenticodeFlags"
2860 #define CERT_TRUST_PUB_ALLOW_TRUST_MASK 0x3
2861 #define CERT_TRUST_PUB_ALLOW_END_USER_TRUST 0x0
2862 #define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST 0x1
2863 #define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x2
2864 #define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG 0x100
2865 #define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG 0x200
2866
2867 #define CERT_OCM_SUBCOMPONENTS_LOCAL_MACHINE_REGPATH L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\OC Manager\\Subcomponents"
2868 #define CERT_OCM_SUBCOMPONENTS_ROOT_AUTO_UPDATE_VALUE_NAME L"RootAutoUpdate"
2869
2870 #define CERT_AUTH_ROOT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\AuthRoot\\AutoUpdate"
2871 #define CERT_AUTH_ROOT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME L"RootDirUrl"
2872 #define CERT_AUTH_ROOT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME L"SyncDeltaTime"
2873 #define CERT_AUTH_ROOT_AUTO_UPDATE_FLAGS_VALUE_NAME L"Flags"
2874 #define CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_UNTRUSTED_ROOT_LOGGING_FLAG 0x1
2875 #define CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_PARTIAL_CHAIN_LOGGING_FLAG 0x2
2876 #define CERT_AUTH_ROOT_CTL_FILENAME L"authroot.stl"
2877 #define CERT_AUTH_ROOT_CTL_FILENAME_A "authroot.stl"
2878 #define CERT_AUTH_ROOT_CAB_FILENAME L"authrootstl.cab"
2879 #define CERT_AUTH_ROOT_SEQ_FILENAME L"authrootseq.txt"
2880 #define CERT_AUTH_ROOT_CERT_EXT L".crt"
2881
2882 #define CERT_REGISTRY_STORE_REMOTE_FLAG 0x10000
2883 #define CERT_REGISTRY_STORE_SERIALIZED_FLAG 0x20000
2884 #define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG 0x80000000
2885 #define CERT_REGISTRY_STORE_LM_GPT_FLAG 0x1000000
2886
2887 typedef struct _CERT_REGISTRY_STORE_CLIENT_GPT_PARA {
2888 HKEY hKeyBase;
2889 LPWSTR pwszRegPath;
2890 } CERT_REGISTRY_STORE_CLIENT_GPT_PARA,*PCERT_REGISTRY_STORE_CLIENT_GPT_PARA;
2891
2892 #define CERT_REGISTRY_STORE_ROAMING_FLAG 0x40000
2893
2894 typedef struct _CERT_REGISTRY_STORE_ROAMING_PARA {
2895 HKEY hKey;
2896 LPWSTR pwszStoreDirectory;
2897 } CERT_REGISTRY_STORE_ROAMING_PARA,*PCERT_REGISTRY_STORE_ROAMING_PARA;
2898
2899 #define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x80000
2900 #define CERT_IE_DIRTY_FLAGS_REGPATH L"Software\\Microsoft\\Cryptography\\IEDirtyFlags"
2901 #define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x10000
2902 #define CERT_LDAP_STORE_SIGN_FLAG 0x10000
2903 #define CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG 0x20000
2904 #define CERT_LDAP_STORE_OPENED_FLAG 0x40000
2905
2906 typedef struct _CERT_LDAP_STORE_OPENED_PARA {
2907 void *pvLdapSessionHandle;
2908 LPCWSTR pwszLdapUrl;
2909 } CERT_LDAP_STORE_OPENED_PARA,*PCERT_LDAP_STORE_OPENED_PARA;
2910
2911 #define CERT_LDAP_STORE_UNBIND_FLAG 0x80000
2912
2913 WINIMPM HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider,DWORD dwEncodingType,HCRYPTPROV hCryptProv,DWORD dwFlags,const void *pvPara);
2914
2915 typedef void *HCERTSTOREPROV;
2916
2917 #define CRYPT_OID_OPEN_STORE_PROV_FUNC "CertDllOpenStoreProv"
2918
2919 typedef struct _CERT_STORE_PROV_INFO {
2920 DWORD cbSize;
2921 DWORD cStoreProvFunc;
2922 void **rgpvStoreProvFunc;
2923 HCERTSTOREPROV hStoreProv;
2924 DWORD dwStoreProvFlags;
2925 HCRYPTOIDFUNCADDR hStoreProvFuncAddr2;
2926 } CERT_STORE_PROV_INFO,*PCERT_STORE_PROV_INFO;
2927
2928 typedef WINBOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(LPCSTR lpszStoreProvider,DWORD dwEncodingType,HCRYPTPROV hCryptProv,DWORD dwFlags,const void *pvPara,HCERTSTORE hCertStore,PCERT_STORE_PROV_INFO pStoreProvInfo);
2929
2930 #define CERT_STORE_PROV_EXTERNAL_FLAG 0x1
2931 #define CERT_STORE_PROV_DELETED_FLAG 0x2
2932 #define CERT_STORE_PROV_NO_PERSIST_FLAG 0x4
2933 #define CERT_STORE_PROV_SYSTEM_STORE_FLAG 0x8
2934 #define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10
2935 #define CERT_STORE_PROV_CLOSE_FUNC 0
2936 #define CERT_STORE_PROV_READ_CERT_FUNC 1
2937 #define CERT_STORE_PROV_WRITE_CERT_FUNC 2
2938 #define CERT_STORE_PROV_DELETE_CERT_FUNC 3
2939 #define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4
2940 #define CERT_STORE_PROV_READ_CRL_FUNC 5
2941 #define CERT_STORE_PROV_WRITE_CRL_FUNC 6
2942 #define CERT_STORE_PROV_DELETE_CRL_FUNC 7
2943 #define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC 8
2944 #define CERT_STORE_PROV_READ_CTL_FUNC 9
2945 #define CERT_STORE_PROV_WRITE_CTL_FUNC 10
2946 #define CERT_STORE_PROV_DELETE_CTL_FUNC 11
2947 #define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC 12
2948 #define CERT_STORE_PROV_CONTROL_FUNC 13
2949 #define CERT_STORE_PROV_FIND_CERT_FUNC 14
2950 #define CERT_STORE_PROV_FREE_FIND_CERT_FUNC 15
2951 #define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 16
2952 #define CERT_STORE_PROV_FIND_CRL_FUNC 17
2953 #define CERT_STORE_PROV_FREE_FIND_CRL_FUNC 18
2954 #define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC 19
2955 #define CERT_STORE_PROV_FIND_CTL_FUNC 20
2956 #define CERT_STORE_PROV_FREE_FIND_CTL_FUNC 21
2957 #define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC 22
2958
2959 typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE)(HCERTSTOREPROV hStoreProv,DWORD dwFlags);
2960 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pStoreCertContext,DWORD dwFlags,PCCERT_CONTEXT *ppProvCertContext);
2961
2962 #define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1
2963
2964 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,DWORD dwFlags);
2965 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,DWORD dwFlags);
2966 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
2967 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pStoreCrlContext,DWORD dwFlags,PCCRL_CONTEXT *ppProvCrlContext);
2968 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,DWORD dwFlags);
2969 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,DWORD dwFlags);
2970 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
2971 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pStoreCtlContext,DWORD dwFlags,PCCTL_CONTEXT *ppProvCtlContext);
2972 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,DWORD dwFlags);
2973 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,DWORD dwFlags);
2974 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
2975 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL)(HCERTSTOREPROV hStoreProv,DWORD dwFlags,DWORD dwCtrlType,void const *pvCtrlPara);
2976
2977 typedef struct _CERT_STORE_PROV_FIND_INFO {
2978 DWORD cbSize;
2979 DWORD dwMsgAndCertEncodingType;
2980 DWORD dwFindFlags;
2981 DWORD dwFindType;
2982 const void *pvFindPara;
2983 } CERT_STORE_PROV_FIND_INFO,*PCERT_STORE_PROV_FIND_INFO;
2984
2985 typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,*PCCERT_STORE_PROV_FIND_INFO;
2986 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_STORE_PROV_FIND_INFO pFindInfo,PCCERT_CONTEXT pPrevCertContext,DWORD dwFlags,void **ppvStoreProvFindInfo,PCCERT_CONTEXT *ppProvCertContext);
2987 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,void *pvStoreProvFindInfo,DWORD dwFlags);
2988 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,DWORD dwPropId,DWORD dwFlags,void *pvData,DWORD *pcbData);
2989 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(HCERTSTOREPROV hStoreProv,PCCERT_STORE_PROV_FIND_INFO pFindInfo,PCCRL_CONTEXT pPrevCrlContext,DWORD dwFlags,void **ppvStoreProvFindInfo,PCCRL_CONTEXT *ppProvCrlContext);
2990 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,void *pvStoreProvFindInfo,DWORD dwFlags);
2991 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,DWORD dwPropId,DWORD dwFlags,void *pvData,DWORD *pcbData);
2992 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(HCERTSTOREPROV hStoreProv,PCCERT_STORE_PROV_FIND_INFO pFindInfo,PCCTL_CONTEXT pPrevCtlContext,DWORD dwFlags,void **ppvStoreProvFindInfo,PCCTL_CONTEXT *ppProvCtlContext);
2993 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CTL)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,void *pvStoreProvFindInfo,DWORD dwFlags);
2994 typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,DWORD dwPropId,DWORD dwFlags,void *pvData,DWORD *pcbData);
2995
2996 WINIMPM HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore);
2997
2998 #define CERT_STORE_SAVE_AS_STORE 1
2999 #define CERT_STORE_SAVE_AS_PKCS7 2
3000 #define CERT_STORE_SAVE_TO_FILE 1
3001 #define CERT_STORE_SAVE_TO_MEMORY 2
3002 #define CERT_STORE_SAVE_TO_FILENAME_A 3
3003 #define CERT_STORE_SAVE_TO_FILENAME_W 4
3004 #define CERT_STORE_SAVE_TO_FILENAME CERT_STORE_SAVE_TO_FILENAME_W
3005
3006 WINIMPM WINBOOL WINAPI CertSaveStore(HCERTSTORE hCertStore,DWORD dwEncodingType,DWORD dwSaveAs,DWORD dwSaveTo,void *pvSaveToPara,DWORD dwFlags);
3007
3008 #define CERT_CLOSE_STORE_FORCE_FLAG 0x1
3009 #define CERT_CLOSE_STORE_CHECK_FLAG 0x2
3010
3011 WINIMPM WINBOOL WINAPI CertCloseStore(HCERTSTORE hCertStore,DWORD dwFlags);
3012 WINIMPM PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,PCERT_INFO pCertId);
3013 WINIMPM PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pPrevCertContext);
3014 WINIMPM PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,DWORD dwFindFlags,DWORD dwFindType,const void *pvFindPara,PCCERT_CONTEXT pPrevCertContext);
3015
3016 #define CERT_COMPARE_MASK 0xFFFF
3017 #define CERT_COMPARE_SHIFT 16
3018 #define CERT_COMPARE_ANY 0
3019 #define CERT_COMPARE_SHA1_HASH 1
3020 #define CERT_COMPARE_NAME 2
3021 #define CERT_COMPARE_ATTR 3
3022 #define CERT_COMPARE_MD5_HASH 4
3023 #define CERT_COMPARE_PROPERTY 5
3024 #define CERT_COMPARE_PUBLIC_KEY 6
3025 #define CERT_COMPARE_HASH CERT_COMPARE_SHA1_HASH
3026 #define CERT_COMPARE_NAME_STR_A 7
3027 #define CERT_COMPARE_NAME_STR_W 8
3028 #define CERT_COMPARE_KEY_SPEC 9
3029 #define CERT_COMPARE_ENHKEY_USAGE 10
3030 #define CERT_COMPARE_CTL_USAGE CERT_COMPARE_ENHKEY_USAGE
3031 #define CERT_COMPARE_SUBJECT_CERT 11
3032 #define CERT_COMPARE_ISSUER_OF 12
3033 #define CERT_COMPARE_EXISTING 13
3034 #define CERT_COMPARE_SIGNATURE_HASH 14
3035 #define CERT_COMPARE_KEY_IDENTIFIER 15
3036 #define CERT_COMPARE_CERT_ID 16
3037 #define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17
3038 #define CERT_COMPARE_PUBKEY_MD5_HASH 18
3039
3040 #define CERT_FIND_ANY (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
3041 #define CERT_FIND_SHA1_HASH (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
3042 #define CERT_FIND_MD5_HASH (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
3043 #define CERT_FIND_SIGNATURE_HASH (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
3044 #define CERT_FIND_KEY_IDENTIFIER (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
3045 #define CERT_FIND_HASH CERT_FIND_SHA1_HASH
3046 #define CERT_FIND_PROPERTY (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
3047 #define CERT_FIND_PUBLIC_KEY (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
3048 #define CERT_FIND_SUBJECT_NAME (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
3049 #define CERT_FIND_SUBJECT_ATTR (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
3050 #define CERT_FIND_ISSUER_NAME (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
3051 #define CERT_FIND_ISSUER_ATTR (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
3052 #define CERT_FIND_SUBJECT_STR_A (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
3053 #define CERT_FIND_SUBJECT_STR_W (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
3054 #define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
3055 #define CERT_FIND_ISSUER_STR_A (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
3056 #define CERT_FIND_ISSUER_STR_W (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
3057 #define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
3058 #define CERT_FIND_KEY_SPEC (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
3059 #define CERT_FIND_ENHKEY_USAGE (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
3060 #define CERT_FIND_CTL_USAGE CERT_FIND_ENHKEY_USAGE
3061 #define CERT_FIND_SUBJECT_CERT (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
3062 #define CERT_FIND_ISSUER_OF (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
3063 #define CERT_FIND_EXISTING (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
3064 #define CERT_FIND_CERT_ID (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
3065 #define CERT_FIND_CROSS_CERT_DIST_POINTS (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
3066 #define CERT_FIND_PUBKEY_MD5_HASH (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
3067 #define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 0x1
3068 #define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 0x2
3069 #define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4
3070 #define CERT_FIND_NO_ENHKEY_USAGE_FLAG 0x8
3071 #define CERT_FIND_OR_ENHKEY_USAGE_FLAG 0x10
3072 #define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 0x20
3073 #define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG
3074 #define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
3075 #define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
3076 #define CERT_FIND_NO_CTL_USAGE_FLAG CERT_FIND_NO_ENHKEY_USAGE_FLAG
3077 #define CERT_FIND_OR_CTL_USAGE_FLAG CERT_FIND_OR_ENHKEY_USAGE_FLAG
3078 #define CERT_FIND_VALID_CTL_USAGE_FLAG CERT_FIND_VALID_ENHKEY_USAGE_FLAG
3079
3080 WINIMPM PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pSubjectContext,PCCERT_CONTEXT pPrevIssuerContext,DWORD *pdwFlags);
3081 WINIMPM WINBOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject,PCCERT_CONTEXT pIssuer,DWORD *pdwFlags);
3082 WINIMPM PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT pCertContext);
3083 WINIMPM PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,const BYTE *pbCertEncoded,DWORD cbCertEncoded);
3084 WINIMPM WINBOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext);
3085 WINIMPM WINBOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
3086
3087 #define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000
3088 #define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG 0x40000000
3089
3090 WINIMPM WINBOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,DWORD dwPropId,void *pvData,DWORD *pcbData);
3091 WINIMPM DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext,DWORD dwPropId);
3092 WINIMPM WINBOOL WINAPI CertCreateCTLEntryFromCertificateContextProperties(PCCERT_CONTEXT pCertContext,DWORD cOptAttr,PCRYPT_ATTRIBUTE rgOptAttr,DWORD dwFlags,void *pvReserved,PCTL_ENTRY pCtlEntry,DWORD *pcbCtlEntry);
3093
3094 #define CTL_ENTRY_FROM_PROP_CHAIN_FLAG 0x1
3095
3096 WINIMPM WINBOOL WINAPI CertSetCertificateContextPropertiesFromCTLEntry(PCCERT_CONTEXT pCertContext,PCTL_ENTRY pCtlEntry,DWORD dwFlags);
3097 WINIMPM PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pIssuerContext,PCCRL_CONTEXT pPrevCrlContext,DWORD *pdwFlags);
3098 WINIMPM PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore,PCCRL_CONTEXT pPrevCrlContext);
3099 WINIMPM PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,DWORD dwFindFlags,DWORD dwFindType,const void *pvFindPara,PCCRL_CONTEXT pPrevCrlContext);
3100
3101 #define CRL_FIND_ANY 0
3102 #define CRL_FIND_ISSUED_BY 1
3103 #define CRL_FIND_EXISTING 2
3104 #define CRL_FIND_ISSUED_FOR 3
3105 #define CRL_FIND_ISSUED_BY_AKI_FLAG 0x1
3106 #define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2
3107 #define CRL_FIND_ISSUED_BY_DELTA_FLAG 0x4
3108 #define CRL_FIND_ISSUED_BY_BASE_FLAG 0x8
3109
3110 typedef struct _CRL_FIND_ISSUED_FOR_PARA {
3111 PCCERT_CONTEXT pSubjectCert;
3112 PCCERT_CONTEXT pIssuerCert;
3113 } CRL_FIND_ISSUED_FOR_PARA,*PCRL_FIND_ISSUED_FOR_PARA;
3114
3115 WINIMPM PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext);
3116 WINIMPM PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType,const BYTE *pbCrlEncoded,DWORD cbCrlEncoded);
3117 WINIMPM WINBOOL WINAPI CertFreeCRLContext(PCCRL_CONTEXT pCrlContext);
3118 WINIMPM WINBOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCrlContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
3119 WINIMPM WINBOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCrlContext,DWORD dwPropId,void *pvData,DWORD *pcbData);
3120 WINIMPM DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCrlContext,DWORD dwPropId);
3121 WINIMPM WINBOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert,PCCRL_CONTEXT pCrlContext,DWORD dwFlags,void *pvReserved,PCRL_ENTRY *ppCrlEntry);
3122 WINIMPM WINBOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert,PCCRL_CONTEXT pCrl,DWORD dwFlags,void *pvReserved);
3123
3124 #define CERT_STORE_ADD_NEW 1
3125 #define CERT_STORE_ADD_USE_EXISTING 2
3126 #define CERT_STORE_ADD_REPLACE_EXISTING 3
3127 #define CERT_STORE_ADD_ALWAYS 4
3128 #define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5
3129 #define CERT_STORE_ADD_NEWER 6
3130 #define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 7
3131
3132 WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,const BYTE *pbCertEncoded,DWORD cbCertEncoded,DWORD dwAddDisposition,PCCERT_CONTEXT *ppCertContext);
3133 WINIMPM WINBOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pCertContext,DWORD dwAddDisposition,PCCERT_CONTEXT *ppStoreContext);
3134
3135 #define CERT_STORE_CERTIFICATE_CONTEXT 1
3136 #define CERT_STORE_CRL_CONTEXT 2
3137 #define CERT_STORE_CTL_CONTEXT 3
3138 #define CERT_STORE_ALL_CONTEXT_FLAG (~0UL)
3139 #define CERT_STORE_CERTIFICATE_CONTEXT_FLAG (1 << CERT_STORE_CERTIFICATE_CONTEXT)
3140 #define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT)
3141 #define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT)
3142
3143 WINIMPM WINBOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore,const BYTE *pbElement,DWORD cbElement,DWORD dwAddDisposition,DWORD dwFlags,DWORD dwContextTypeFlags,DWORD *pdwContextType,const void **ppvContext);
3144 WINIMPM WINBOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext);
3145 WINIMPM WINBOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,const BYTE *pbCrlEncoded,DWORD cbCrlEncoded,DWORD dwAddDisposition,PCCRL_CONTEXT *ppCrlContext);
3146 WINIMPM WINBOOL WINAPI CertAddCRLContextToStore(HCERTSTORE hCertStore,PCCRL_CONTEXT pCrlContext,DWORD dwAddDisposition,PCCRL_CONTEXT *ppStoreContext);
3147 WINIMPM WINBOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext);
3148 WINIMPM WINBOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,DWORD dwFlags,BYTE *pbElement,DWORD *pcbElement);
3149 WINIMPM WINBOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,DWORD dwFlags,BYTE *pbElement,DWORD *pcbElement);
3150 WINIMPM PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext);
3151 WINIMPM PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,const BYTE *pbCtlEncoded,DWORD cbCtlEncoded);
3152 WINIMPM WINBOOL WINAPI CertFreeCTLContext(PCCTL_CONTEXT pCtlContext);
3153 WINIMPM WINBOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCtlContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
3154 WINIMPM WINBOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCtlContext,DWORD dwPropId,void *pvData,DWORD *pcbData);
3155 WINIMPM DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCtlContext,DWORD dwPropId);
3156 WINIMPM PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore,PCCTL_CONTEXT pPrevCtlContext);
3157 WINIMPM PCTL_ENTRY WINAPI CertFindSubjectInCTL(DWORD dwEncodingType,DWORD dwSubjectType,void *pvSubject,PCCTL_CONTEXT pCtlContext,DWORD dwFlags);
3158
3159 #define CTL_ANY_SUBJECT_TYPE 1
3160 #define CTL_CERT_SUBJECT_TYPE 2
3161
3162 typedef struct _CTL_ANY_SUBJECT_INFO {
3163 CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
3164 CRYPT_DATA_BLOB SubjectIdentifier;
3165 } CTL_ANY_SUBJECT_INFO,*PCTL_ANY_SUBJECT_INFO;
3166
3167 WINIMPM PCCTL_CONTEXT WINAPI CertFindCTLInStore(HCERTSTORE hCertStore,DWORD dwMsgAndCertEncodingType,DWORD dwFindFlags,DWORD dwFindType,const void *pvFindPara,PCCTL_CONTEXT pPrevCtlContext);
3168
3169 #define CTL_FIND_ANY 0
3170 #define CTL_FIND_SHA1_HASH 1
3171 #define CTL_FIND_MD5_HASH 2
3172 #define CTL_FIND_USAGE 3
3173 #define CTL_FIND_SUBJECT 4
3174 #define CTL_FIND_EXISTING 5
3175
3176 typedef struct _CTL_FIND_USAGE_PARA {
3177 DWORD cbSize;
3178 CTL_USAGE SubjectUsage;
3179 CRYPT_DATA_BLOB ListIdentifier;
3180 PCERT_INFO pSigner;
3181 } CTL_FIND_USAGE_PARA,*PCTL_FIND_USAGE_PARA;
3182
3183 #define CTL_FIND_NO_LIST_ID_CBDATA 0xFFFFFFFF
3184 #define CTL_FIND_NO_SIGNER_PTR ((PCERT_INFO) -1)
3185
3186 #define CTL_FIND_SAME_USAGE_FLAG 0x1
3187
3188 typedef struct _CTL_FIND_SUBJECT_PARA {
3189 DWORD cbSize;
3190 PCTL_FIND_USAGE_PARA pUsagePara;
3191 DWORD dwSubjectType;
3192 void *pvSubject;
3193 } CTL_FIND_SUBJECT_PARA,*PCTL_FIND_SUBJECT_PARA;
3194
3195 WINIMPM WINBOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore,DWORD dwMsgAndCertEncodingType,const BYTE *pbCtlEncoded,DWORD cbCtlEncoded,DWORD dwAddDisposition,PCCTL_CONTEXT *ppCtlContext);
3196 WINIMPM WINBOOL WINAPI CertAddCTLContextToStore(HCERTSTORE hCertStore,PCCTL_CONTEXT pCtlContext,DWORD dwAddDisposition,PCCTL_CONTEXT *ppStoreContext);
3197 WINIMPM WINBOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,DWORD dwFlags,BYTE *pbElement,DWORD *pcbElement);
3198 WINIMPM WINBOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext);
3199 WINIMPM WINBOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pCertContext,DWORD dwAddDisposition,PCCERT_CONTEXT *ppStoreContext);
3200 WINIMPM WINBOOL WINAPI CertAddCRLLinkToStore(HCERTSTORE hCertStore,PCCRL_CONTEXT pCrlContext,DWORD dwAddDisposition,PCCRL_CONTEXT *ppStoreContext);
3201 WINIMPM WINBOOL WINAPI CertAddCTLLinkToStore(HCERTSTORE hCertStore,PCCTL_CONTEXT pCtlContext,DWORD dwAddDisposition,PCCTL_CONTEXT *ppStoreContext);
3202 WINIMPM WINBOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,HCERTSTORE hSiblingStore,DWORD dwUpdateFlags,DWORD dwPriority);
3203 WINIMPM void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore,HCERTSTORE hSiblingStore);
3204 WINIMPM WINBOOL WINAPI CertControlStore(HCERTSTORE hCertStore,DWORD dwFlags,DWORD dwCtrlType,void const *pvCtrlPara);
3205
3206 #define CERT_STORE_CTRL_RESYNC 1
3207 #define CERT_STORE_CTRL_NOTIFY_CHANGE 2
3208 #define CERT_STORE_CTRL_COMMIT 3
3209 #define CERT_STORE_CTRL_AUTO_RESYNC 4
3210 #define CERT_STORE_CTRL_CANCEL_NOTIFY 5
3211 #define CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG 0x1
3212 #define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1
3213 #define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2
3214 #define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000
3215
3216 WINIMPM WINBOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore,DWORD dwPropId,DWORD dwFlags,const void *pvData);
3217 WINIMPM WINBOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore,DWORD dwPropId,void *pvData,DWORD *pcbData);
3218
3219 typedef struct _CERT_CREATE_CONTEXT_PARA {
3220 DWORD cbSize;
3221 PFN_CRYPT_FREE pfnFree;
3222 void *pvFree;
3223 } CERT_CREATE_CONTEXT_PARA,*PCERT_CREATE_CONTEXT_PARA;
3224
3225 WINIMPM const void *WINAPI CertCreateContext(DWORD dwContextType,DWORD dwEncodingType,const BYTE *pbEncoded,DWORD cbEncoded,DWORD dwFlags,PCERT_CREATE_CONTEXT_PARA pCreatePara);
3226
3227 #define CERT_CREATE_CONTEXT_NOCOPY_FLAG 0x1
3228 #define CERT_CREATE_CONTEXT_SORTED_FLAG 0x2
3229 #define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4
3230 #define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG 0x8
3231
3232 typedef struct _CERT_SYSTEM_STORE_INFO {
3233 DWORD cbSize;
3234 } CERT_SYSTEM_STORE_INFO,*PCERT_SYSTEM_STORE_INFO;
3235
3236 typedef struct _CERT_PHYSICAL_STORE_INFO {
3237 DWORD cbSize;
3238 LPSTR pszOpenStoreProvider;
3239 DWORD dwOpenEncodingType;
3240 DWORD dwOpenFlags;
3241 CRYPT_DATA_BLOB OpenParameters;
3242 DWORD dwFlags;
3243 DWORD dwPriority;
3244 } CERT_PHYSICAL_STORE_INFO,*PCERT_PHYSICAL_STORE_INFO;
3245
3246 #define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1
3247 #define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2
3248 #define CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG 0x4
3249 #define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8
3250
3251 WINIMPM WINBOOL WINAPI CertRegisterSystemStore(const void *pvSystemStore,DWORD dwFlags,PCERT_SYSTEM_STORE_INFO pStoreInfo,void *pvReserved);
3252 WINIMPM WINBOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore,DWORD dwFlags,LPCWSTR pwszStoreName,PCERT_PHYSICAL_STORE_INFO pStoreInfo,void *pvReserved);
3253 WINIMPM WINBOOL WINAPI CertUnregisterSystemStore(const void *pvSystemStore,DWORD dwFlags);
3254 WINIMPM WINBOOL WINAPI CertUnregisterPhysicalStore(const void *pvSystemStore,DWORD dwFlags,LPCWSTR pwszStoreName);
3255
3256 typedef WINBOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(LPCWSTR pwszStoreLocation,DWORD dwFlags,void *pvReserved,void *pvArg);
3257 typedef WINBOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore,DWORD dwFlags,PCERT_SYSTEM_STORE_INFO pStoreInfo,void *pvReserved,void *pvArg);
3258 typedef WINBOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore,DWORD dwFlags,LPCWSTR pwszStoreName,PCERT_PHYSICAL_STORE_INFO pStoreInfo,void *pvReserved,void *pvArg);
3259
3260 #define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1
3261 #define CERT_PHYSICAL_STORE_DEFAULT_NAME L".Default"
3262 #define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME L".GroupPolicy"
3263 #define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME L".LocalMachine"
3264 #define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME L".UserCertificate"
3265 #define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME L".LocalMachineGroupPolicy"
3266 #define CERT_PHYSICAL_STORE_ENTERPRISE_NAME L".Enterprise"
3267 #define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME L".AuthRoot"
3268
3269 WINIMPM WINBOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags,void *pvArg,PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
3270 WINIMPM WINBOOL WINAPI CertEnumSystemStore(DWORD dwFlags,void *pvSystemStoreLocationPara,void *pvArg,PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
3271 WINIMPM WINBOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore,DWORD dwFlags,void *pvArg,PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
3272
3273 #define CRYPT_OID_OPEN_SYSTEM_STORE_PROV_FUNC "CertDllOpenSystemStoreProv"
3274 #define CRYPT_OID_REGISTER_SYSTEM_STORE_FUNC "CertDllRegisterSystemStore"
3275 #define CRYPT_OID_UNREGISTER_SYSTEM_STORE_FUNC "CertDllUnregisterSystemStore"
3276 #define CRYPT_OID_ENUM_SYSTEM_STORE_FUNC "CertDllEnumSystemStore"
3277 #define CRYPT_OID_REGISTER_PHYSICAL_STORE_FUNC "CertDllRegisterPhysicalStore"
3278 #define CRYPT_OID_UNREGISTER_PHYSICAL_STORE_FUNC "CertDllUnregisterPhysicalStore"
3279 #define CRYPT_OID_ENUM_PHYSICAL_STORE_FUNC "CertDllEnumPhysicalStore"
3280 #define CRYPT_OID_SYSTEM_STORE_LOCATION_VALUE_NAME L"SystemStoreLocation"
3281
3282 WINIMPM WINBOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext,DWORD dwFlags,PCERT_ENHKEY_USAGE pUsage,DWORD *pcbUsage);
3283 WINIMPM WINBOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext,PCERT_ENHKEY_USAGE pUsage);
3284 WINIMPM WINBOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,LPCSTR pszUsageIdentifier);
3285 WINIMPM WINBOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,LPCSTR pszUsageIdentifier);
3286 WINIMPM WINBOOL WINAPI CertGetValidUsages(DWORD cCerts,PCCERT_CONTEXT *rghCerts,int *cNumOIDs,LPSTR *rghOIDs,DWORD *pcbOIDs);
3287 WINIMPM WINBOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg,DWORD cSignerStore,HCERTSTORE *rghSignerStore,DWORD dwFlags,PCCERT_CONTEXT *ppSigner,DWORD *pdwSignerIndex);
3288
3289 #define CMSG_TRUSTED_SIGNER_FLAG 0x1
3290 #define CMSG_SIGNER_ONLY_FLAG 0x2
3291 #define CMSG_USE_SIGNER_INDEX_FLAG 0x4
3292
3293 WINIMPM WINBOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType,BYTE *pbCtlContent,DWORD cbCtlContent,PCMSG_SIGNED_ENCODE_INFO pSignInfo,DWORD dwFlags,BYTE *pbEncoded,DWORD *pcbEncoded);
3294
3295 #define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x8000
3296
3297 WINIMPM WINBOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType,PCTL_INFO pCtlInfo,PCMSG_SIGNED_ENCODE_INFO pSignInfo,DWORD dwFlags,BYTE *pbEncoded,DWORD *pcbEncoded);
3298
3299 #define CMSG_ENCODE_SORTED_CTL_FLAG 0x1
3300
3301 #define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2
3302
3303 WINIMPM WINBOOL WINAPI CertFindSubjectInSortedCTL(PCRYPT_DATA_BLOB pSubjectIdentifier,PCCTL_CONTEXT pCtlContext,DWORD dwFlags,void *pvReserved,PCRYPT_DER_BLOB pEncodedAttributes);
3304 WINIMPM WINBOOL WINAPI CertEnumSubjectInSortedCTL(PCCTL_CONTEXT pCtlContext,void **ppvNextSubject,PCRYPT_DER_BLOB pSubjectIdentifier,PCRYPT_DER_BLOB pEncodedAttributes);
3305
3306 typedef struct _CTL_VERIFY_USAGE_PARA {
3307 DWORD cbSize;
3308 CRYPT_DATA_BLOB ListIdentifier;
3309 DWORD cCtlStore;
3310 HCERTSTORE *rghCtlStore;
3311 DWORD cSignerStore;
3312 HCERTSTORE *rghSignerStore;
3313 } CTL_VERIFY_USAGE_PARA,*PCTL_VERIFY_USAGE_PARA;
3314
3315 typedef struct _CTL_VERIFY_USAGE_STATUS {
3316 DWORD cbSize;
3317 DWORD dwError;
3318 DWORD dwFlags;
3319 PCCTL_CONTEXT *ppCtl;
3320 DWORD dwCtlEntryIndex;
3321 PCCERT_CONTEXT *ppSigner;
3322 DWORD dwSignerIndex;
3323 } CTL_VERIFY_USAGE_STATUS,*PCTL_VERIFY_USAGE_STATUS;
3324
3325 #define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1
3326 #define CERT_VERIFY_TRUSTED_SIGNERS_FLAG 0x2
3327 #define CERT_VERIFY_NO_TIME_CHECK_FLAG 0x4
3328 #define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG 0x8
3329
3330 #define CERT_VERIFY_UPDATED_CTL_FLAG 0x1
3331
3332 WINIMPM WINBOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType,DWORD dwSubjectType,void *pvSubject,PCTL_USAGE pSubjectUsage,DWORD dwFlags,PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);
3333
3334 typedef struct _CERT_REVOCATION_CRL_INFO {
3335 DWORD cbSize;
3336 PCCRL_CONTEXT pBaseCrlContext;
3337 PCCRL_CONTEXT pDeltaCrlContext;
3338 PCRL_ENTRY pCrlEntry;
3339 WINBOOL fDeltaCrlEntry;
3340 } CERT_REVOCATION_CRL_INFO,*PCERT_REVOCATION_CRL_INFO;
3341
3342 typedef struct _CERT_REVOCATION_PARA {
3343 DWORD cbSize;
3344 PCCERT_CONTEXT pIssuerCert;
3345 DWORD cCertStore;
3346 HCERTSTORE *rgCertStore;
3347 HCERTSTORE hCrlStore;
3348 LPFILETIME pftTimeToUse;
3349 #ifdef CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS
3350 DWORD dwUrlRetrievalTimeout;
3351 WINBOOL fCheckFreshnessTime;
3352 DWORD dwFreshnessTime;
3353 LPFILETIME pftCurrentTime;
3354 PCERT_REVOCATION_CRL_INFO pCrlInfo;
3355 #endif
3356 } CERT_REVOCATION_PARA,*PCERT_REVOCATION_PARA;
3357
3358 typedef struct _CERT_REVOCATION_STATUS {
3359 DWORD cbSize;
3360 DWORD dwIndex;
3361 DWORD dwError;
3362 DWORD dwReason;
3363 WINBOOL fHasFreshnessTime;
3364 DWORD dwFreshnessTime;
3365 } CERT_REVOCATION_STATUS,*PCERT_REVOCATION_STATUS;
3366
3367 WINIMPM WINBOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType,DWORD dwRevType,DWORD cContext,PVOID rgpvContext[],DWORD dwFlags,PCERT_REVOCATION_PARA pRevPara,PCERT_REVOCATION_STATUS pRevStatus);
3368
3369 #define CERT_CONTEXT_REVOCATION_TYPE 1
3370 #define CERT_VERIFY_REV_CHAIN_FLAG 0x1
3371 #define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION 0x2
3372 #define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x4
3373
3374 WINBOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1,PCRYPT_INTEGER_BLOB pInt2);
3375 WINIMPM WINBOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType,PCERT_INFO pCertId1,PCERT_INFO pCertId2);
3376 WINIMPM WINBOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType,PCERT_NAME_BLOB pCertName1,PCERT_NAME_BLOB pCertName2);
3377 WINIMPM WINBOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType,DWORD dwFlags,PCERT_NAME_BLOB pCertName,PCERT_RDN pRDN);
3378
3379 #define CERT_UNICODE_IS_RDN_ATTRS_FLAG 0x1
3380 #define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2
3381
3382 WINIMPM WINBOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pPublicKey1,PCERT_PUBLIC_KEY_INFO pPublicKey2);
3383 WINIMPM DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pPublicKey);
3384 WINIMPM WINBOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,const BYTE *pbEncoded,DWORD cbEncoded,PCERT_PUBLIC_KEY_INFO pPublicKey);
3385 WINIMPM WINBOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,DWORD dwSubjectType,void *pvSubject,DWORD dwIssuerType,void *pvIssuer,DWORD dwFlags,void *pvReserved);
3386
3387 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1
3388 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2
3389 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 3
3390 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1
3391 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT 2
3392 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN 3
3393 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 4
3394
3395 WINIMPM WINBOOL WINAPI CryptHashToBeSigned(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,const BYTE *pbEncoded,DWORD cbEncoded,BYTE *pbComputedHash,DWORD *pcbComputedHash);
3396 WINIMPM WINBOOL WINAPI CryptHashCertificate(HCRYPTPROV hCryptProv,ALG_ID Algid,DWORD dwFlags,const BYTE *pbEncoded,DWORD cbEncoded,BYTE *pbComputedHash,DWORD *pcbComputedHash);
3397 WINIMPM WINBOOL WINAPI CryptSignCertificate(HCRYPTPROV hCryptProv,DWORD dwKeySpec,DWORD dwCertEncodingType,const BYTE *pbEncodedToBeSigned,DWORD cbEncodedToBeSigned,PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,const void *pvHashAuxInfo,BYTE *pbSignature,DWORD *pcbSignature);
3398 WINIMPM WINBOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV hCryptProv,DWORD dwKeySpec,DWORD dwCertEncodingType,LPCSTR lpszStructType,const void *pvStructInfo,PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,const void *pvHashAuxInfo,PBYTE pbEncoded,DWORD *pcbEncoded);
3399 WINIMPM LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify,PCERT_INFO pCertInfo);
3400 WINIMPM LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify,PCRL_INFO pCrlInfo);
3401 WINIMPM WINBOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo,PCERT_INFO pIssuerInfo);
3402 WINIMPM WINBOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType,PCERT_INFO pCertId,DWORD cCrlInfo,PCRL_INFO rgpCrlInfo[]);
3403 WINIMPM LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId);
3404 WINIMPM DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId);
3405 WINIMPM PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId,DWORD cExtensions,CERT_EXTENSION rgExtensions[]);
3406 WINIMPM PCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId,DWORD cAttr,CRYPT_ATTRIBUTE rgAttr[]);
3407 WINIMPM PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId,PCERT_NAME_INFO pName);
3408 WINIMPM WINBOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType,PCERT_INFO pCertInfo,BYTE *pbKeyUsage,DWORD cbKeyUsage);
3409
3410 typedef void *HCRYPTDEFAULTCONTEXT;
3411
3412 WINIMPM WINBOOL WINAPI CryptInstallDefaultContext(HCRYPTPROV hCryptProv,DWORD dwDefaultType,const void *pvDefaultPara,DWORD dwFlags,void *pvReserved,HCRYPTDEFAULTCONTEXT *phDefaultContext);
3413
3414 #define CRYPT_DEFAULT_CONTEXT_AUTO_RELEASE_FLAG 0x1
3415 #define CRYPT_DEFAULT_CONTEXT_PROCESS_FLAG 0x2
3416
3417 #define CRYPT_DEFAULT_CONTEXT_CERT_SIGN_OID 1
3418 #define CRYPT_DEFAULT_CONTEXT_MULTI_CERT_SIGN_OID 2
3419
3420 typedef struct _CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA {
3421 DWORD cOID;
3422 LPSTR *rgpszOID;
3423 } CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA,*PCRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA;
3424
3425 WINIMPM WINBOOL WINAPI CryptUninstallDefaultContext(HCRYPTDEFAULTCONTEXT hDefaultContext,DWORD dwFlags,void *pvReserved);
3426 WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV hCryptProv,DWORD dwKeySpec,DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pInfo,DWORD *pcbInfo);
3427
3428 #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC "CryptDllExportPublicKeyInfoEx"
3429
3430 WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfoEx(HCRYPTPROV hCryptProv,DWORD dwKeySpec,DWORD dwCertEncodingType,LPSTR pszPublicKeyObjId,DWORD dwFlags,void *pvAuxInfo,PCERT_PUBLIC_KEY_INFO pInfo,DWORD *pcbInfo);
3431 WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pInfo,HCRYPTKEY *phKey);
3432
3433 #define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC "CryptDllImportPublicKeyInfoEx"
3434
3435 WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pInfo,ALG_ID aiKeyAlg,DWORD dwFlags,void *pvAuxInfo,HCRYPTKEY *phKey);
3436 WINIMPM WINBOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert,DWORD dwFlags,void *pvReserved,HCRYPTPROV *phCryptProv,DWORD *pdwKeySpec,WINBOOL *pfCallerFreeProv);
3437
3438 #define CRYPT_ACQUIRE_CACHE_FLAG 0x1
3439 #define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x2
3440 #define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x4
3441
3442 #define CRYPT_ACQUIRE_SILENT_FLAG 0x40
3443
3444 WINIMPM WINBOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert,DWORD dwFlags,void *pvReserved);
3445
3446 #define CRYPT_FIND_USER_KEYSET_FLAG 0x1
3447 #define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x2
3448 #define CRYPT_FIND_SILENT_KEYSET_FLAG 0x40
3449
3450 typedef WINBOOL (WINAPI *PFN_IMPORT_PRIV_KEY_FUNC)(HCRYPTPROV hCryptProv,CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo,DWORD dwFlags,void *pvAuxInfo);
3451
3452 #define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx"
3453
3454 WINIMPM WINBOOL WINAPI CryptImportPKCS8(CRYPT_PKCS8_IMPORT_PARAMS sImportParams,DWORD dwFlags,HCRYPTPROV *phCryptProv,void *pvAuxInfo);
3455
3456 typedef WINBOOL (WINAPI *PFN_EXPORT_PRIV_KEY_FUNC)(HCRYPTPROV hCryptProv,DWORD dwKeySpec,LPSTR pszPrivateKeyObjId,DWORD dwFlags,void *pvAuxInfo,CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo,DWORD *pcbPrivateKeyBlob);
3457
3458 #define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx"
3459 #define CRYPT_DELETE_KEYSET 0x1
3460
3461 #ifdef UNICODE
3462 #define CertRDNValueToStr CertRDNValueToStrW
3463 #define CertNameToStr CertNameToStrW
3464 #else
3465 #define CertRDNValueToStr CertRDNValueToStrA
3466 #define CertNameToStr CertNameToStrA
3467 #endif
3468
3469 WINIMPM WINBOOL WINAPI CryptExportPKCS8(HCRYPTPROV hCryptProv,DWORD dwKeySpec,LPSTR pszPrivateKeyObjId,DWORD dwFlags,void *pvAuxInfo,BYTE *pbPrivateKeyBlob,DWORD *pcbPrivateKeyBlob);
3470 WINIMPM WINBOOL WINAPI CryptExportPKCS8Ex(CRYPT_PKCS8_EXPORT_PARAMS *psExportParams,DWORD dwFlags,void *pvAuxInfo,BYTE *pbPrivateKeyBlob,DWORD *pcbPrivateKeyBlob);
3471 WINIMPM WINBOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV hCryptProv,ALG_ID Algid,DWORD dwFlags,DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pInfo,BYTE *pbComputedHash,DWORD *pcbComputedHash);
3472 WINIMPM DWORD WINAPI CertRDNValueToStrA(DWORD dwValueType,PCERT_RDN_VALUE_BLOB pValue,LPSTR psz,DWORD csz);
3473 WINIMPM DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType,PCERT_RDN_VALUE_BLOB pValue,LPWSTR psz,DWORD csz);
3474 WINIMPM DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType,PCERT_NAME_BLOB pName,DWORD dwStrType,LPSTR psz,DWORD csz);
3475 WINIMPM DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType,PCERT_NAME_BLOB pName,DWORD dwStrType,LPWSTR psz,DWORD csz);
3476
3477 #define CERT_SIMPLE_NAME_STR 1
3478 #define CERT_OID_NAME_STR 2
3479 #define CERT_X500_NAME_STR 3
3480
3481 #define CERT_NAME_STR_SEMICOLON_FLAG 0x40000000
3482 #define CERT_NAME_STR_NO_PLUS_FLAG 0x20000000
3483 #define CERT_NAME_STR_NO_QUOTING_FLAG 0x10000000
3484 #define CERT_NAME_STR_CRLF_FLAG 0x8000000
3485 #define CERT_NAME_STR_COMMA_FLAG 0x4000000
3486 #define CERT_NAME_STR_REVERSE_FLAG 0x2000000
3487
3488 #define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x10000
3489 #define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 0x20000
3490 #define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x40000
3491 #define CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG 0x80000
3492
3493 #ifdef UNICODE
3494 #define CertStrToName CertStrToNameW
3495 #define CertGetNameString CertGetNameStringW
3496 #else
3497 #define CertStrToName CertStrToNameA
3498 #define CertGetNameString CertGetNameStringA
3499 #endif
3500
3501 WINIMPM WINBOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType,LPCSTR pszX500,DWORD dwStrType,void *pvReserved,BYTE *pbEncoded,DWORD *pcbEncoded,LPCSTR *ppszError);
3502 WINIMPM WINBOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType,LPCWSTR pszX500,DWORD dwStrType,void *pvReserved,BYTE *pbEncoded,DWORD *pcbEncoded,LPCWSTR *ppszError);
3503 WINIMPM DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext,DWORD dwType,DWORD dwFlags,void *pvTypePara,LPSTR pszNameString,DWORD cchNameString);
3504 WINIMPM DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext,DWORD dwType,DWORD dwFlags,void *pvTypePara,LPWSTR pszNameString,DWORD cchNameString);
3505
3506 #define CERT_NAME_EMAIL_TYPE 1
3507 #define CERT_NAME_RDN_TYPE 2
3508 #define CERT_NAME_ATTR_TYPE 3
3509 #define CERT_NAME_SIMPLE_DISPLAY_TYPE 4
3510 #define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5
3511 #define CERT_NAME_DNS_TYPE 6
3512 #define CERT_NAME_URL_TYPE 7
3513 #define CERT_NAME_UPN_TYPE 8
3514
3515 #define CERT_NAME_ISSUER_FLAG 0x1
3516 #define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x10000
3517
3518 typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(void *pvGetArg,DWORD dwCertEncodingType,PCERT_INFO pSignerId,HCERTSTORE hMsgCertStore);
3519
3520 typedef struct _CRYPT_SIGN_MESSAGE_PARA {
3521 DWORD cbSize;
3522 DWORD dwMsgEncodingType;
3523 PCCERT_CONTEXT pSigningCert;
3524 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
3525 void *pvHashAuxInfo;
3526 DWORD cMsgCert;
3527 PCCERT_CONTEXT *rgpMsgCert;
3528 DWORD cMsgCrl;
3529 PCCRL_CONTEXT *rgpMsgCrl;
3530 DWORD cAuthAttr;
3531 PCRYPT_ATTRIBUTE rgAuthAttr;
3532 DWORD cUnauthAttr;
3533 PCRYPT_ATTRIBUTE rgUnauthAttr;
3534 DWORD dwFlags;
3535 DWORD dwInnerContentType;
3536 #ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS
3537 CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
3538 void *pvHashEncryptionAuxInfo;
3539 #endif
3540 } CRYPT_SIGN_MESSAGE_PARA,*PCRYPT_SIGN_MESSAGE_PARA;
3541
3542 #define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG 0x1
3543 #define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x2
3544 #define CRYPT_MESSAGE_KEYID_SIGNER_FLAG 0x4
3545 #define CRYPT_MESSAGE_SILENT_KEYSET_FLAG 0x40
3546
3547 typedef struct _CRYPT_VERIFY_MESSAGE_PARA {
3548 DWORD cbSize;
3549 DWORD dwMsgAndCertEncodingType;
3550 HCRYPTPROV hCryptProv;
3551 PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate;
3552 void *pvGetArg;
3553 } CRYPT_VERIFY_MESSAGE_PARA,*PCRYPT_VERIFY_MESSAGE_PARA;
3554
3555 typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
3556 DWORD cbSize;
3557 DWORD dwMsgEncodingType;
3558 HCRYPTPROV hCryptProv;
3559 CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
3560 void *pvEncryptionAuxInfo;
3561 DWORD dwFlags;
3562 DWORD dwInnerContentType;
3563 } CRYPT_ENCRYPT_MESSAGE_PARA,*PCRYPT_ENCRYPT_MESSAGE_PARA;
3564
3565 #define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x4
3566
3567 typedef struct _CRYPT_DECRYPT_MESSAGE_PARA {
3568 DWORD cbSize;
3569 DWORD dwMsgAndCertEncodingType;
3570 DWORD cCertStore;
3571 HCERTSTORE *rghCertStore;
3572
3573 #ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS
3574
3575 DWORD dwFlags;
3576 #endif
3577
3578 } CRYPT_DECRYPT_MESSAGE_PARA,*PCRYPT_DECRYPT_MESSAGE_PARA;
3579
3580 typedef struct _CRYPT_HASH_MESSAGE_PARA {
3581 DWORD cbSize;
3582 DWORD dwMsgEncodingType;
3583 HCRYPTPROV hCryptProv;
3584 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
3585 void *pvHashAuxInfo;
3586 } CRYPT_HASH_MESSAGE_PARA,*PCRYPT_HASH_MESSAGE_PARA;
3587
3588 typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {
3589 DWORD cbSize;
3590 DWORD dwMsgAndCertEncodingType;
3591 HCRYPTPROV hCryptProv;
3592 DWORD dwKeySpec;
3593 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
3594 void *pvHashAuxInfo;
3595 CRYPT_ALGORITHM_IDENTIFIER PubKeyAlgorithm;
3596 } CRYPT_KEY_SIGN_MESSAGE_PARA,*PCRYPT_KEY_SIGN_MESSAGE_PARA;
3597
3598 typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {
3599 DWORD cbSize;
3600 DWORD dwMsgEncodingType;
3601 HCRYPTPROV hCryptProv;
3602 } CRYPT_KEY_VERIFY_MESSAGE_PARA,*PCRYPT_KEY_VERIFY_MESSAGE_PARA;
3603
3604 #ifdef UNICODE
3605 #define CertOpenSystemStore CertOpenSystemStoreW
3606 #define CertAddEncodedCertificateToSystemStore CertAddEncodedCertificateToSystemStoreW
3607 #else
3608 #define CertOpenSystemStore CertOpenSystemStoreA
3609 #define CertAddEncodedCertificateToSystemStore CertAddEncodedCertificateToSystemStoreA
3610 #endif
3611
3612 WINIMPM WINBOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,WINBOOL fDetachedSignature,DWORD cToBeSigned,const BYTE *rgpbToBeSigned[],DWORD rgcbToBeSigned[],BYTE *pbSignedBlob,DWORD *pcbSignedBlob);
3613 WINIMPM WINBOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,DWORD dwSignerIndex,const BYTE *pbSignedBlob,DWORD cbSignedBlob,BYTE *pbDecoded,DWORD *pcbDecoded,PCCERT_CONTEXT *ppSignerCert);
3614 WINIMPM LONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType,const BYTE *pbSignedBlob,DWORD cbSignedBlob);
3615 WINIMPM HCERTSTORE WINAPI CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType,HCRYPTPROV hCryptProv,DWORD dwFlags,const BYTE *pbSignedBlob,DWORD cbSignedBlob);
3616 WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,DWORD dwSignerIndex,const BYTE *pbDetachedSignBlob,DWORD cbDetachedSignBlob,DWORD cToBeSigned,const BYTE *rgpbToBeSigned[],DWORD rgcbToBeSigned[],PCCERT_CONTEXT *ppSignerCert);
3617 WINIMPM WINBOOL WINAPI CryptEncryptMessage(PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,DWORD cRecipientCert,PCCERT_CONTEXT rgpRecipientCert[],const BYTE *pbToBeEncrypted,DWORD cbToBeEncrypted,BYTE *pbEncryptedBlob,DWORD *pcbEncryptedBlob);
3618 WINIMPM WINBOOL WINAPI CryptDecryptMessage(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,const BYTE *pbEncryptedBlob,DWORD cbEncryptedBlob,BYTE *pbDecrypted,DWORD *pcbDecrypted,PCCERT_CONTEXT *ppXchgCert);
3619 WINIMPM WINBOOL WINAPI CryptSignAndEncryptMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,DWORD cRecipientCert,PCCERT_CONTEXT rgpRecipientCert[],const BYTE *pbToBeSignedAndEncrypted,DWORD cbToBeSignedAndEncrypted,BYTE *pbSignedAndEncryptedBlob,DWORD *pcbSignedAndEncryptedBlob);
3620 WINIMPM WINBOOL WINAPI CryptDecryptAndVerifyMessageSignature(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,DWORD dwSignerIndex,const BYTE *pbEncryptedBlob,DWORD cbEncryptedBlob,BYTE *pbDecrypted,DWORD *pcbDecrypted,PCCERT_CONTEXT *ppXchgCert,PCCERT_CONTEXT *ppSignerCert);
3621 WINIMPM WINBOOL WINAPI CryptDecodeMessage(DWORD dwMsgTypeFlags,PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,DWORD dwSignerIndex,const BYTE *pbEncodedBlob,DWORD cbEncodedBlob,DWORD dwPrevInnerContentType,DWORD *pdwMsgType,DWORD *pdwInnerContentType,BYTE *pbDecoded,DWORD *pcbDecoded,PCCERT_CONTEXT *ppXchgCert,PCCERT_CONTEXT *ppSignerCert);
3622 WINIMPM WINBOOL WINAPI CryptHashMessage(PCRYPT_HASH_MESSAGE_PARA pHashPara,WINBOOL fDetachedHash,DWORD cToBeHashed,const BYTE *rgpbToBeHashed[],DWORD rgcbToBeHashed[],BYTE *pbHashedBlob,DWORD *pcbHashedBlob,BYTE *pbComputedHash,DWORD *pcbComputedHash);
3623 WINIMPM WINBOOL WINAPI CryptVerifyMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,BYTE *pbHashedBlob,DWORD cbHashedBlob,BYTE *pbToBeHashed,DWORD *pcbToBeHashed,BYTE *pbComputedHash,DWORD *pcbComputedHash);
3624 WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,BYTE *pbDetachedHashBlob,DWORD cbDetachedHashBlob,DWORD cToBeHashed,const BYTE *rgpbToBeHashed[],DWORD rgcbToBeHashed[],BYTE *pbComputedHash,DWORD *pcbComputedHash);
3625 WINIMPM WINBOOL WINAPI CryptSignMessageWithKey(PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara,const BYTE *pbToBeSigned,DWORD cbToBeSigned,BYTE *pbSignedBlob,DWORD *pcbSignedBlob);
3626 WINIMPM WINBOOL WINAPI CryptVerifyMessageSignatureWithKey(PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,const BYTE *pbSignedBlob,DWORD cbSignedBlob,BYTE *pbDecoded,DWORD *pcbDecoded);
3627 WINIMPM HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV hProv,LPCSTR szSubsystemProtocol);
3628 WINIMPM HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV hProv,LPCWSTR szSubsystemProtocol);
3629 WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR szCertStoreName,const BYTE *pbCertEncoded,DWORD cbCertEncoded);
3630 WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR szCertStoreName,const BYTE *pbCertEncoded,DWORD cbCertEncoded);
3631
3632 typedef struct _CERT_CHAIN {
3633 DWORD cCerts;
3634 PCERT_BLOB certs;
3635 CRYPT_KEY_PROV_INFO keyLocatorInfo;
3636 } CERT_CHAIN,*PCERT_CHAIN;
3637
3638 HRESULT WINAPI FindCertsByIssuer(PCERT_CHAIN pCertChains,DWORD *pcbCertChains,DWORD *pcCertChains,BYTE *pbEncodedIssuerName,DWORD cbEncodedIssuerName,LPCWSTR pwszPurpose,DWORD dwKeySpec);
3639 WINIMPM WINBOOL WINAPI CryptQueryObject(DWORD dwObjectType,const void *pvObject,DWORD dwExpectedContentTypeFlags,DWORD dwExpectedFormatTypeFlags,DWORD dwFlags,DWORD *pdwMsgAndCertEncodingType,DWORD *pdwContentType,DWORD *pdwFormatType,HCERTSTORE *phCertStore,HCRYPTMSG *phMsg,const void **ppvContext);
3640
3641 #define CERT_QUERY_OBJECT_FILE 0x1
3642 #define CERT_QUERY_OBJECT_BLOB 0x2
3643 #define CERT_QUERY_CONTENT_CERT 1
3644 #define CERT_QUERY_CONTENT_CTL 2
3645 #define CERT_QUERY_CONTENT_CRL 3
3646 #define CERT_QUERY_CONTENT_SERIALIZED_STORE 4
3647 #define CERT_QUERY_CONTENT_SERIALIZED_CERT 5
3648 #define CERT_QUERY_CONTENT_SERIALIZED_CTL 6
3649 #define CERT_QUERY_CONTENT_SERIALIZED_CRL 7
3650 #define CERT_QUERY_CONTENT_PKCS7_SIGNED 8
3651 #define CERT_QUERY_CONTENT_PKCS7_UNSIGNED 9
3652 #define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 10
3653 #define CERT_QUERY_CONTENT_PKCS10 11
3654 #define CERT_QUERY_CONTENT_PFX 12
3655 #define CERT_QUERY_CONTENT_CERT_PAIR 13
3656 #define CERT_QUERY_CONTENT_FLAG_CERT (1 << CERT_QUERY_CONTENT_CERT)
3657 #define CERT_QUERY_CONTENT_FLAG_CTL (1 << CERT_QUERY_CONTENT_CTL)
3658 #define CERT_QUERY_CONTENT_FLAG_CRL (1 << CERT_QUERY_CONTENT_CRL)
3659 #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
3660 #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
3661 #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
3662 #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
3663 #define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
3664 #define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
3665 #define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
3666 #define CERT_QUERY_CONTENT_FLAG_PKCS10 (1 << CERT_QUERY_CONTENT_PKCS10)
3667 #define CERT_QUERY_CONTENT_FLAG_PFX (1 << CERT_QUERY_CONTENT_PFX)
3668 #define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR)
3669 #define CERT_QUERY_CONTENT_FLAG_ALL CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR
3670 #define CERT_QUERY_FORMAT_BINARY 1
3671 #define CERT_QUERY_FORMAT_BASE64_ENCODED 2
3672 #define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3
3673 #define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY)
3674 #define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
3675 #define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
3676 #define CERT_QUERY_FORMAT_FLAG_ALL CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED
3677
3678 WINIMPM LPVOID WINAPI CryptMemAlloc(ULONG cbSize);
3679 WINIMPM LPVOID WINAPI CryptMemRealloc(LPVOID pv,ULONG cbSize);
3680 WINIMPM VOID WINAPI CryptMemFree(LPVOID pv);
3681
3682 typedef HANDLE HCRYPTASYNC,*PHCRYPTASYNC;
3683
3684 typedef VOID (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid,LPVOID pvParam);
3685
3686 WINIMPM WINBOOL WINAPI CryptCreateAsyncHandle(DWORD dwFlags,PHCRYPTASYNC phAsync);
3687 WINIMPM WINBOOL WINAPI CryptSetAsyncParam(HCRYPTASYNC hAsync,LPSTR pszParamOid,LPVOID pvParam,PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);
3688 WINIMPM WINBOOL WINAPI CryptGetAsyncParam(HCRYPTASYNC hAsync,LPSTR pszParamOid,LPVOID *ppvParam,PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree);
3689 WINIMPM WINBOOL WINAPI CryptCloseAsyncHandle(HCRYPTASYNC hAsync);
3690
3691 typedef struct _CRYPT_BLOB_ARRAY {
3692 DWORD cBlob;
3693 PCRYPT_DATA_BLOB rgBlob;
3694 } CRYPT_BLOB_ARRAY,*PCRYPT_BLOB_ARRAY;
3695
3696 typedef struct _CRYPT_CREDENTIALS {
3697 DWORD cbSize;
3698 LPCSTR pszCredentialsOid;
3699 LPVOID pvCredentials;
3700 } CRYPT_CREDENTIALS,*PCRYPT_CREDENTIALS;
3701
3702 #define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A ((LPCSTR)1)
3703 #define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W ((LPCSTR)2)
3704
3705 #ifdef UNICODE
3706 #define CREDENTIAL_OID_PASSWORD_CREDENTIALS CREDENTIAL_OID_PASSWORD_CREDENTIALS_W
3707 #else
3708 #define CREDENTIAL_OID_PASSWORD_CREDENTIALS CREDENTIAL_OID_PASSWORD_CREDENTIALS_A
3709 #endif
3710
3711 typedef struct _CRYPT_PASSWORD_CREDENTIALSA {
3712 DWORD cbSize;
3713 LPSTR pszUsername;
3714 LPSTR pszPassword;
3715 } CRYPT_PASSWORD_CREDENTIALSA,*PCRYPT_PASSWORD_CREDENTIALSA;
3716 typedef struct _CRYPT_PASSWORD_CREDENTIALSW {
3717 DWORD cbSize;
3718 LPWSTR pszUsername;
3719 LPWSTR pszPassword;
3720 } CRYPT_PASSWORD_CREDENTIALSW,*PCRYPT_PASSWORD_CREDENTIALSW;
3721 #ifdef UNICODE
3722 typedef CRYPT_PASSWORD_CREDENTIALSW CRYPT_PASSWORD_CREDENTIALS;
3723 typedef PCRYPT_PASSWORD_CREDENTIALSW PCRYPT_PASSWORD_CREDENTIALS;
3724 #define CryptRetrieveObjectByUrl CryptRetrieveObjectByUrlW
3725 #define CryptStringToBinary CryptStringToBinaryW
3726 #define CryptBinaryToString CryptBinaryToStringW
3727 #else
3728 typedef CRYPT_PASSWORD_CREDENTIALSA CRYPT_PASSWORD_CREDENTIALS;
3729 typedef PCRYPT_PASSWORD_CREDENTIALSA PCRYPT_PASSWORD_CREDENTIALS;
3730 #define CryptRetrieveObjectByUrl CryptRetrieveObjectByUrlA
3731 #define CryptStringToBinary CryptStringToBinaryA
3732 #define CryptBinaryToString CryptBinaryToStringA
3733 #endif
3734
3735 #define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC "SchemeDllRetrieveEncodedObject"
3736 #define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC "SchemeDllRetrieveEncodedObjectW"
3737
3738 typedef VOID (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid,PCRYPT_BLOB_ARRAY pObject,LPVOID pvFreeContext);
3739
3740 #define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext"
3741
3742 #define CONTEXT_OID_CERTIFICATE ((LPCSTR)1)
3743 #define CONTEXT_OID_CRL ((LPCSTR)2)
3744 #define CONTEXT_OID_CTL ((LPCSTR)3)
3745 #define CONTEXT_OID_PKCS7 ((LPCSTR)4)
3746 #define CONTEXT_OID_CAPI2_ANY ((LPCSTR)5)
3747
3748 #define CRYPT_RETRIEVE_MULTIPLE_OBJECTS 0x1
3749 #define CRYPT_CACHE_ONLY_RETRIEVAL 0x2
3750 #define CRYPT_WIRE_ONLY_RETRIEVAL 0x4
3751 #define CRYPT_DONT_CACHE_RESULT 0x8
3752 #define CRYPT_ASYNC_RETRIEVAL 0x10
3753 #define CRYPT_STICKY_CACHE_RETRIEVAL 0x1000
3754 #define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x2000
3755 #define CRYPT_OFFLINE_CHECK_RETRIEVAL 0x4000
3756 #define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE 0x8000
3757 #define CRYPT_LDAP_SIGN_RETRIEVAL 0x10000
3758 #define CRYPT_NO_AUTH_RETRIEVAL 0x20000
3759 #define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL 0x40000
3760 #define CRYPT_AIA_RETRIEVAL 0x80000
3761 #define CRYPT_VERIFY_CONTEXT_SIGNATURE 0x20
3762 #define CRYPT_VERIFY_DATA_HASH 0x40
3763 #define CRYPT_KEEP_TIME_VALID 0x80
3764 #define CRYPT_DONT_VERIFY_SIGNATURE 0x100
3765 #define CRYPT_DONT_CHECK_TIME_VALIDITY 0x200
3766 #define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x400
3767 #define CRYPT_ACCUMULATIVE_TIMEOUT 0x800
3768
3769 typedef struct _CRYPT_RETRIEVE_AUX_INFO {
3770 DWORD cbSize;
3771 FILETIME *pLastSyncTime;
3772 DWORD dwMaxUrlRetrievalByteCount;
3773 } CRYPT_RETRIEVE_AUX_INFO,*PCRYPT_RETRIEVE_AUX_INFO;
3774
3775 WINIMPM WINBOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszUrl,LPCSTR pszObjectOid,DWORD dwRetrievalFlags,DWORD dwTimeout,LPVOID *ppvObject,HCRYPTASYNC hAsyncRetrieve,PCRYPT_CREDENTIALS pCredentials,LPVOID pvVerify,PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
3776 WINIMPM WINBOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszUrl,LPCSTR pszObjectOid,DWORD dwRetrievalFlags,DWORD dwTimeout,LPVOID *ppvObject,HCRYPTASYNC hAsyncRetrieve,PCRYPT_CREDENTIALS pCredentials,LPVOID pvVerify,PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
3777
3778 typedef WINBOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(DWORD dwFlags,void *pvArg);
3779
3780 WINIMPM WINBOOL WINAPI CryptInstallCancelRetrieval(PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel,const void *pvArg,DWORD dwFlags,void *pvReserved);
3781 WINIMPM WINBOOL WINAPI CryptUninstallCancelRetrieval(DWORD dwFlags,void *pvReserved);
3782 WINIMPM WINBOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval);
3783
3784 #define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1)
3785
3786 typedef VOID (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)(LPVOID pvCompletion,DWORD dwCompletionCode,LPCSTR pszUrl,LPSTR pszObjectOid,LPVOID pvObject);
3787
3788 typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION {
3789 PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;
3790 LPVOID pvCompletion;
3791 } CRYPT_ASYNC_RETRIEVAL_COMPLETION,*PCRYPT_ASYNC_RETRIEVAL_COMPLETION;
3792
3793 #define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL ((LPCSTR)2)
3794
3795 typedef WINBOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)(HCRYPTASYNC hAsyncRetrieve);
3796
3797 #define CRYPT_GET_URL_FROM_PROPERTY 0x1
3798 #define CRYPT_GET_URL_FROM_EXTENSION 0x2
3799 #define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x4
3800 #define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE 0x8
3801
3802 typedef struct _CRYPT_URL_ARRAY {
3803 DWORD cUrl;
3804 LPWSTR *rgwszUrl;
3805 } CRYPT_URL_ARRAY,*PCRYPT_URL_ARRAY;
3806
3807 typedef struct _CRYPT_URL_INFO {
3808 DWORD cbSize;
3809 DWORD dwSyncDeltaTime;
3810 DWORD cGroup;
3811 DWORD *rgcGroupEntry;
3812 } CRYPT_URL_INFO,*PCRYPT_URL_INFO;
3813
3814 WINIMPM WINBOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid,LPVOID pvPara,DWORD dwFlags,PCRYPT_URL_ARRAY pUrlArray,DWORD *pcbUrlArray,PCRYPT_URL_INFO pUrlInfo,DWORD *pcbUrlInfo,LPVOID pvReserved);
3815
3816 #define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
3817
3818 #define URL_OID_CERTIFICATE_ISSUER ((LPCSTR)1)
3819 #define URL_OID_CERTIFICATE_CRL_DIST_POINT ((LPCSTR)2)
3820 #define URL_OID_CTL_ISSUER ((LPCSTR)3)
3821 #define URL_OID_CTL_NEXT_UPDATE ((LPCSTR)4)
3822 #define URL_OID_CRL_ISSUER ((LPCSTR)5)
3823 #define URL_OID_CERTIFICATE_FRESHEST_CRL ((LPCSTR)6)
3824 #define URL_OID_CRL_FRESHEST_CRL ((LPCSTR)7)
3825 #define URL_OID_CROSS_CERT_DIST_POINT ((LPCSTR)8)
3826
3827 typedef struct _CERT_CRL_CONTEXT_PAIR {
3828 PCCERT_CONTEXT pCertContext;
3829 PCCRL_CONTEXT pCrlContext;
3830 } CERT_CRL_CONTEXT_PAIR,*PCERT_CRL_CONTEXT_PAIR;
3831 typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
3832
3833 WINIMPM WINBOOL WINAPI CryptGetTimeValidObject(LPCSTR pszTimeValidOid,LPVOID pvPara,PCCERT_CONTEXT pIssuer,LPFILETIME pftValidFor,DWORD dwFlags,DWORD dwTimeout,LPVOID *ppvObject,PCRYPT_CREDENTIALS pCredentials,LPVOID pvReserved);
3834
3835 #define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
3836
3837 #define TIME_VALID_OID_GET_CTL ((LPCSTR)1)
3838 #define TIME_VALID_OID_GET_CRL ((LPCSTR)2)
3839 #define TIME_VALID_OID_GET_CRL_FROM_CERT ((LPCSTR)3)
3840
3841 #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
3842 #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
3843
3844 WINIMPM WINBOOL WINAPI CryptFlushTimeValidObject(LPCSTR pszFlushTimeValidOid,LPVOID pvPara,PCCERT_CONTEXT pIssuer,DWORD dwFlags,LPVOID pvReserved);
3845
3846 #define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject"
3847 #define TIME_VALID_OID_FLUSH_CTL ((LPCSTR)1)
3848 #define TIME_VALID_OID_FLUSH_CRL ((LPCSTR)2)
3849 #define TIME_VALID_OID_FLUSH_CRL_FROM_CERT ((LPCSTR)3)
3850
3851 #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
3852 #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
3853
3854 typedef struct _CRYPTPROTECT_PROMPTSTRUCT {
3855 DWORD cbSize;
3856 DWORD dwPromptFlags;
3857 HWND hwndApp;
3858 LPCWSTR szPrompt;
3859 } CRYPTPROTECT_PROMPTSTRUCT,*PCRYPTPROTECT_PROMPTSTRUCT;
3860
3861 #define CRYPTPROTECT_DEFAULT_PROVIDER { 0xdf9d8cd0,0x1501,0x11d1,{0x8c,0x7a,0x00,0xc0,0x4f,0xc2,0x97,0xeb} }
3862 #define CRYPTPROTECT_PROMPT_ON_UNPROTECT 0x1
3863
3864 #define CRYPTPROTECT_PROMPT_ON_PROTECT 0x2
3865 #define CRYPTPROTECT_PROMPT_RESERVED 0x4
3866
3867 #define CRYPTPROTECT_PROMPT_STRONG 0x8
3868 #define CRYPTPROTECT_PROMPT_REQUIRE_STRONG 0x10
3869 #define CRYPTPROTECT_UI_FORBIDDEN 0x1
3870 #define CRYPTPROTECT_LOCAL_MACHINE 0x4
3871 #define CRYPTPROTECT_CRED_SYNC 0x8
3872 #define CRYPTPROTECT_AUDIT 0x10
3873 #define CRYPTPROTECT_NO_RECOVERY 0x20
3874 #define CRYPTPROTECT_VERIFY_PROTECTION 0x40
3875 #define CRYPTPROTECT_CRED_REGENERATE 0x80
3876 #define CRYPTPROTECT_FIRST_RESERVED_FLAGVAL 0x0FFFFFFF
3877 #define CRYPTPROTECT_LAST_RESERVED_FLAGVAL 0xFFFFFFFF
3878
3879 WINIMPM WINBOOL WINAPI CryptProtectData(DATA_BLOB *pDataIn,LPCWSTR szDataDescr,DATA_BLOB *pOptionalEntropy,PVOID pvReserved,CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,DWORD dwFlags,DATA_BLOB *pDataOut);
3880 WINIMPM WINBOOL WINAPI CryptUnprotectData(DATA_BLOB *pDataIn,LPWSTR *ppszDataDescr,DATA_BLOB *pOptionalEntropy,PVOID pvReserved,CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,DWORD dwFlags,DATA_BLOB *pDataOut);
3881
3882 #define CRYPTPROTECTMEMORY_BLOCK_SIZE 16
3883 #define CRYPTPROTECTMEMORY_SAME_PROCESS 0x0
3884 #define CRYPTPROTECTMEMORY_CROSS_PROCESS 0x1
3885 #define CRYPTPROTECTMEMORY_SAME_LOGON 0x2
3886
3887 WINIMPM WINBOOL WINAPI CryptProtectMemory(LPVOID pDataIn,DWORD cbDataIn,DWORD dwFlags);
3888 WINIMPM WINBOOL WINAPI CryptUnprotectMemory(LPVOID pDataIn,DWORD cbDataIn,DWORD dwFlags);
3889 WINIMPM PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV hProv,PCERT_NAME_BLOB pSubjectIssuerBlob,DWORD dwFlags,PCRYPT_KEY_PROV_INFO pKeyProvInfo,PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,PSYSTEMTIME pStartTime,PSYSTEMTIME pEndTime,PCERT_EXTENSIONS pExtensions);
3890
3891 #define CERT_CREATE_SELFSIGN_NO_SIGN 1
3892 #define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2
3893
3894 WINIMPM WINBOOL WINAPI CryptGetKeyIdentifierProperty(const CRYPT_HASH_BLOB *pKeyIdentifier,DWORD dwPropId,DWORD dwFlags,LPCWSTR pwszComputerName,void *pvReserved,void *pvData,DWORD *pcbData);
3895
3896 #define CRYPT_KEYID_MACHINE_FLAG 0x20
3897
3898 #define CRYPT_KEYID_ALLOC_FLAG 0x8000
3899
3900 WINIMPM WINBOOL WINAPI CryptSetKeyIdentifierProperty(const CRYPT_HASH_BLOB *pKeyIdentifier,DWORD dwPropId,DWORD dwFlags,LPCWSTR pwszComputerName,void *pvReserved,const void *pvData);
3901
3902 #define CRYPT_KEYID_DELETE_FLAG 0x10
3903 #define CRYPT_KEYID_SET_NEW_FLAG 0x2000
3904
3905 typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_KEYID_PROP)(const CRYPT_HASH_BLOB *pKeyIdentifier,DWORD dwFlags,void *pvReserved,void *pvArg,DWORD cProp,DWORD *rgdwPropId,void **rgpvData,DWORD *rgcbData);
3906
3907 WINIMPM WINBOOL WINAPI CryptEnumKeyIdentifierProperties(const CRYPT_HASH_BLOB *pKeyIdentifier,DWORD dwPropId,DWORD dwFlags,LPCWSTR pwszComputerName,void *pvReserved,void *pvArg,PFN_CRYPT_ENUM_KEYID_PROP pfnEnum);
3908 WINIMPM WINBOOL WINAPI CryptCreateKeyIdentifierFromCSP(DWORD dwCertEncodingType,LPCSTR pszPubKeyOID,const PUBLICKEYSTRUC *pPubKeyStruc,DWORD cbPubKeyStruc,DWORD dwFlags,void *pvReserved,BYTE *pbHash,DWORD *pcbHash);
3909
3910 #define CERT_CHAIN_CONFIG_REGPATH L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CertDllCreateCertificateChainEngine\\Config"
3911 #define CERT_CHAIN_DISABLE_AIA_URL_RETRIEVAL_VALUE_NAME L"DisableAIAUrlRetrieval"
3912 #define CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_VALUE_NAME L"MaxAIAUrlCountInCert"
3913 #define CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_DEFAULT 5
3914 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_VALUE_NAME L"MaxAIAUrlRetrievalCountPerChain"
3915 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_DEFAULT 10
3916 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME L"MaxAIAUrlRetrievalByteCount"
3917 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_DEFAULT 100000
3918 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_VALUE_NAME L"MaxAIAUrlRetrievalCertCount"
3919 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_DEFAULT 10
3920
3921 typedef HANDLE HCERTCHAINENGINE;
3922
3923 #define HCCE_CURRENT_USER ((HCERTCHAINENGINE)NULL)
3924 #define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)0x1)
3925
3926 #define CERT_CHAIN_CACHE_END_CERT 0x1
3927 #define CERT_CHAIN_THREAD_STORE_SYNC 0x2
3928 #define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x4
3929 #define CERT_CHAIN_USE_LOCAL_MACHINE_STORE 0x8
3930 #define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x10
3931 #define CERT_CHAIN_ENABLE_SHARE_STORE 0x20
3932
3933 typedef struct _CERT_CHAIN_ENGINE_CONFIG {
3934 DWORD cbSize;
3935 HCERTSTORE hRestrictedRoot;
3936 HCERTSTORE hRestrictedTrust;
3937 HCERTSTORE hRestrictedOther;
3938 DWORD cAdditionalStore;
3939 HCERTSTORE *rghAdditionalStore;
3940 DWORD dwFlags;
3941 DWORD dwUrlRetrievalTimeout;
3942 DWORD MaximumCachedCertificates;
3943 DWORD CycleDetectionModulus;
3944 } CERT_CHAIN_ENGINE_CONFIG,*PCERT_CHAIN_ENGINE_CONFIG;
3945
3946 WINIMPM WINBOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig,HCERTCHAINENGINE *phChainEngine);
3947 WINIMPM VOID WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
3948 WINIMPM WINBOOL WINAPI CertResyncCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
3949
3950 typedef struct _CERT_TRUST_STATUS {
3951 DWORD dwErrorStatus;
3952 DWORD dwInfoStatus;
3953 } CERT_TRUST_STATUS,*PCERT_TRUST_STATUS;
3954
3955 #define CERT_TRUST_NO_ERROR 0x0
3956 #define CERT_TRUST_IS_NOT_TIME_VALID 0x1
3957 #define CERT_TRUST_IS_NOT_TIME_NESTED 0x2
3958 #define CERT_TRUST_IS_REVOKED 0x4
3959 #define CERT_TRUST_IS_NOT_SIGNATURE_VALID 0x8
3960 #define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 0x10
3961 #define CERT_TRUST_IS_UNTRUSTED_ROOT 0x20
3962 #define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 0x40
3963 #define CERT_TRUST_IS_CYCLIC 0x80
3964
3965 #define CERT_TRUST_INVALID_EXTENSION 0x100
3966 #define CERT_TRUST_INVALID_POLICY_CONSTRAINTS 0x200
3967 #define CERT_TRUST_INVALID_BASIC_CONSTRAINTS 0x400
3968 #define CERT_TRUST_INVALID_NAME_CONSTRAINTS 0x800
3969 #define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x1000
3970 #define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT 0x2000
3971 #define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x4000
3972 #define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT 0x8000
3973
3974 #define CERT_TRUST_IS_OFFLINE_REVOCATION 0x1000000
3975 #define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY 0x2000000
3976
3977 #define CERT_TRUST_IS_PARTIAL_CHAIN 0x10000
3978 #define CERT_TRUST_CTL_IS_NOT_TIME_VALID 0x20000
3979 #define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 0x40000
3980 #define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 0x80000
3981
3982 #define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 0x1
3983 #define CERT_TRUST_HAS_KEY_MATCH_ISSUER 0x2
3984 #define CERT_TRUST_HAS_NAME_MATCH_ISSUER 0x4
3985 #define CERT_TRUST_IS_SELF_SIGNED 0x8
3986
3987 #define CERT_TRUST_HAS_PREFERRED_ISSUER 0x100
3988 #define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY 0x200
3989 #define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS 0x400
3990
3991 #define CERT_TRUST_IS_COMPLEX_CHAIN 0x10000
3992
3993 typedef struct _CERT_REVOCATION_INFO {
3994 DWORD cbSize;
3995 DWORD dwRevocationResult;
3996 LPCSTR pszRevocationOid;
3997 LPVOID pvOidSpecificInfo;
3998 WINBOOL fHasFreshnessTime;
3999 DWORD dwFreshnessTime;
4000 PCERT_REVOCATION_CRL_INFO pCrlInfo;
4001 } CERT_REVOCATION_INFO,*PCERT_REVOCATION_INFO;
4002
4003 typedef struct _CERT_TRUST_LIST_INFO {
4004 DWORD cbSize;
4005 PCTL_ENTRY pCtlEntry;
4006 PCCTL_CONTEXT pCtlContext;
4007 } CERT_TRUST_LIST_INFO,*PCERT_TRUST_LIST_INFO;
4008
4009 typedef struct _CERT_CHAIN_ELEMENT {
4010 DWORD cbSize;
4011 PCCERT_CONTEXT pCertContext;
4012 CERT_TRUST_STATUS TrustStatus;
4013 PCERT_REVOCATION_INFO pRevocationInfo;
4014 PCERT_ENHKEY_USAGE pIssuanceUsage;
4015 PCERT_ENHKEY_USAGE pApplicationUsage;
4016 LPCWSTR pwszExtendedErrorInfo;
4017 } CERT_CHAIN_ELEMENT,*PCERT_CHAIN_ELEMENT;
4018
4019 typedef struct _CERT_SIMPLE_CHAIN {
4020 DWORD cbSize;
4021 CERT_TRUST_STATUS TrustStatus;
4022 DWORD cElement;
4023 PCERT_CHAIN_ELEMENT *rgpElement;
4024 PCERT_TRUST_LIST_INFO pTrustListInfo;
4025 WINBOOL fHasRevocationFreshnessTime;
4026 DWORD dwRevocationFreshnessTime;
4027 } CERT_SIMPLE_CHAIN,*PCERT_SIMPLE_CHAIN;
4028
4029 typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT,*PCERT_CHAIN_CONTEXT;
4030 typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;
4031
4032 struct _CERT_CHAIN_CONTEXT {
4033 DWORD cbSize;
4034 CERT_TRUST_STATUS TrustStatus;
4035 DWORD cChain;
4036 PCERT_SIMPLE_CHAIN *rgpChain;
4037 DWORD cLowerQualityChainContext;
4038 PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext;
4039 WINBOOL fHasRevocationFreshnessTime;
4040 DWORD dwRevocationFreshnessTime;
4041 };
4042
4043 #define USAGE_MATCH_TYPE_AND 0x0
4044 #define USAGE_MATCH_TYPE_OR 0x1
4045
4046 typedef struct _CERT_USAGE_MATCH {
4047 DWORD dwType;
4048 CERT_ENHKEY_USAGE Usage;
4049 } CERT_USAGE_MATCH,*PCERT_USAGE_MATCH;
4050
4051 typedef struct _CTL_USAGE_MATCH {
4052 DWORD dwType;
4053 CTL_USAGE Usage;
4054 } CTL_USAGE_MATCH,*PCTL_USAGE_MATCH;
4055
4056 typedef struct _CERT_CHAIN_PARA {
4057 DWORD cbSize;
4058 CERT_USAGE_MATCH RequestedUsage;
4059 #ifdef CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
4060 CERT_USAGE_MATCH RequestedIssuancePolicy;
4061 DWORD dwUrlRetrievalTimeout;
4062 WINBOOL fCheckRevocationFreshnessTime;
4063 DWORD dwRevocationFreshnessTime;
4064 #endif
4065 } CERT_CHAIN_PARA,*PCERT_CHAIN_PARA;
4066
4067 #define CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000
4068 #define CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000
4069 #define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000
4070 #define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000
4071
4072 #define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x8000000
4073 #define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING 0x40
4074 #define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS 0x80
4075 #define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE 0x100
4076 #define CERT_CHAIN_TIMESTAMP_TIME 0x200
4077
4078 WINIMPM WINBOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,PCCERT_CONTEXT pCertContext,LPFILETIME pTime,HCERTSTORE hAdditionalStore,PCERT_CHAIN_PARA pChainPara,DWORD dwFlags,LPVOID pvReserved,PCCERT_CHAIN_CONTEXT *ppChainContext);
4079 WINIMPM VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext);
4080 WINIMPM PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext);
4081
4082 #define REVOCATION_OID_CRL_REVOCATION ((LPCSTR)1)
4083
4084 typedef struct _CRL_REVOCATION_INFO {
4085 PCRL_ENTRY pCrlEntry;
4086 PCCRL_CONTEXT pCrlContext;
4087 PCCERT_CHAIN_CONTEXT pCrlIssuerChain;
4088 } CRL_REVOCATION_INFO,*PCRL_REVOCATION_INFO;
4089
4090 WINIMPM PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,DWORD dwFindFlags,DWORD dwFindType,const void *pvFindPara,PCCERT_CHAIN_CONTEXT pPrevChainContext);
4091
4092 #define CERT_CHAIN_FIND_BY_ISSUER 1
4093
4094 typedef WINBOOL (WINAPI *PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK)(PCCERT_CONTEXT pCert,void *pvFindArg);
4095
4096 typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
4097 DWORD cbSize;
4098 LPCSTR pszUsageIdentifier;
4099 DWORD dwKeySpec;
4100 DWORD dwAcquirePrivateKeyFlags;
4101 DWORD cIssuer;
4102 CERT_NAME_BLOB *rgIssuer;
4103 PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFindCallback;
4104 void *pvFindArg;
4105 #ifdef CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS
4106 DWORD *pdwIssuerChainIndex;
4107 DWORD *pdwIssuerElementIndex;
4108 #endif
4109 } CERT_CHAIN_FIND_ISSUER_PARA,*PCERT_CHAIN_FIND_ISSUER_PARA,CERT_CHAIN_FIND_BY_ISSUER_PARA,*PCERT_CHAIN_FIND_BY_ISSUER_PARA;
4110
4111 #define CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG 0x1
4112 #define CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG 0x2
4113 #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG 0x4
4114 #define CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG 0x8
4115 #define CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG 0x4000
4116 #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG 0x8000
4117
4118 typedef struct _CERT_CHAIN_POLICY_PARA {
4119 DWORD cbSize;
4120 DWORD dwFlags;
4121 void *pvExtraPolicyPara;
4122 } CERT_CHAIN_POLICY_PARA,*PCERT_CHAIN_POLICY_PARA;
4123
4124 typedef struct _CERT_CHAIN_POLICY_STATUS {
4125 DWORD cbSize;
4126 DWORD dwError;
4127 LONG lChainIndex;
4128 LONG lElementIndex;
4129 void *pvExtraPolicyStatus;
4130 } CERT_CHAIN_POLICY_STATUS,*PCERT_CHAIN_POLICY_STATUS;
4131
4132 #define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG 0x1
4133 #define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG 0x2
4134 #define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG 0x4
4135 #define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x8
4136
4137 #define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS (CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG | CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG | CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG)
4138
4139 #define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG 0x10
4140 #define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG 0x20
4141 #define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG 0x40
4142 #define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG 0x80
4143
4144 #define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG 0x100
4145 #define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG 0x200
4146 #define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG 0x400
4147 #define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG 0x800
4148
4149 #define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS (CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG | CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG | CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG | CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG)
4150
4151 #define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG 0x8000
4152 #define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG 0x4000
4153
4154 WINIMPM WINBOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR pszPolicyOID,PCCERT_CHAIN_CONTEXT pChainContext,PCERT_CHAIN_POLICY_PARA pPolicyPara,PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
4155
4156 #define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC "CertDllVerifyCertificateChainPolicy"
4157
4158 #define CERT_CHAIN_POLICY_BASE ((LPCSTR) 1)
4159 #define CERT_CHAIN_POLICY_AUTHENTICODE ((LPCSTR) 2)
4160 #define CERT_CHAIN_POLICY_AUTHENTICODE_TS ((LPCSTR) 3)
4161 #define CERT_CHAIN_POLICY_SSL ((LPCSTR) 4)
4162 #define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR) 5)
4163 #define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR) 6)
4164 #define CERT_CHAIN_POLICY_MICROSOFT_ROOT ((LPCSTR) 7)
4165
4166 typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
4167 DWORD cbSize;
4168 DWORD dwRegPolicySettings;
4169 PCMSG_SIGNER_INFO pSignerInfo;
4170 } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA,*PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
4171
4172 typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
4173 DWORD cbSize;
4174 WINBOOL fCommercial;
4175 } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS,*PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
4176
4177 typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
4178 DWORD cbSize;
4179 DWORD dwRegPolicySettings;
4180 WINBOOL fCommercial;
4181 } AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA,*PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;
4182
4183 #define AUTHTYPE_CLIENT 1
4184 #define AUTHTYPE_SERVER 2
4185
4186 typedef struct _HTTPSPolicyCallbackData {
4187 __MINGW_EXTENSION union {
4188 DWORD cbStruct;
4189 DWORD cbSize;
4190 };
4191 DWORD dwAuthType;
4192 DWORD fdwChecks;
4193 WCHAR *pwszServerName;
4194 } HTTPSPolicyCallbackData,*PHTTPSPolicyCallbackData,SSL_EXTRA_CERT_CHAIN_POLICY_PARA,*PSSL_EXTRA_CERT_CHAIN_POLICY_PARA;
4195
4196 #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG 0x80000000
4197 #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000
4198
4199 #define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x10000
4200
4201 WINIMPM WINBOOL WINAPI CryptStringToBinaryA(LPCSTR pszString,DWORD cchString,DWORD dwFlags,BYTE *pbBinary,DWORD *pcbBinary,DWORD *pdwSkip,DWORD *pdwFlags);
4202 WINIMPM WINBOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString,DWORD cchString,DWORD dwFlags,BYTE *pbBinary,DWORD *pcbBinary,DWORD *pdwSkip,DWORD *pdwFlags);
4203 WINIMPM WINBOOL WINAPI CryptBinaryToStringA(CONST BYTE *pbBinary,DWORD cbBinary,DWORD dwFlags,LPSTR pszString,DWORD *pcchString);
4204 WINIMPM WINBOOL WINAPI CryptBinaryToStringW(CONST BYTE *pbBinary,DWORD cbBinary,DWORD dwFlags,LPWSTR pszString,DWORD *pcchString);
4205
4206 #define CRYPT_STRING_BASE64HEADER 0x0
4207 #define CRYPT_STRING_BASE64 0x1
4208 #define CRYPT_STRING_BINARY 0x2
4209 #define CRYPT_STRING_BASE64REQUESTHEADER 0x3
4210 #define CRYPT_STRING_HEX 0x4
4211 #define CRYPT_STRING_HEXASCII 0x5
4212 #define CRYPT_STRING_BASE64_ANY 0x6
4213 #define CRYPT_STRING_ANY 0x7
4214 #define CRYPT_STRING_HEX_ANY 0x8
4215 #define CRYPT_STRING_BASE64X509CRLHEADER 0x9
4216 #define CRYPT_STRING_HEXADDR 0xa
4217 #define CRYPT_STRING_HEXASCIIADDR 0xb
4218
4219 #define CRYPT_STRING_NOCR 0x80000000
4220
4221 WINIMPM HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX,LPCWSTR szPassword,DWORD dwFlags);
4222
4223 #define CRYPT_USER_KEYSET 0x1000
4224 #define PKCS12_IMPORT_RESERVED_MASK 0xffff0000
4225
4226 WINIMPM WINBOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX);
4227 WINIMPM WINBOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX,LPCWSTR szPassword,DWORD dwFlags);
4228 WINIMPM WINBOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore,CRYPT_DATA_BLOB *pPFX,LPCWSTR szPassword,void *pvReserved,DWORD dwFlags);
4229
4230 #define REPORT_NO_PRIVATE_KEY 0x1
4231 #define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x2
4232 #define EXPORT_PRIVATE_KEYS 0x4
4233 #define PKCS12_EXPORT_RESERVED_MASK 0xffff0000
4234
4235 WINIMPM WINBOOL WINAPI PFXExportCertStore(HCERTSTORE hStore,CRYPT_DATA_BLOB *pPFX,LPCWSTR szPassword,DWORD dwFlags);
4236
4237 #ifdef __cplusplus
4238 }
4239 #endif
4240 #endif