1 // Copyright © 2015-2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 //! Cryptographic API Prototypes and Definitions
8 use ctypes::{c_int, c_uchar, c_uint, c_void};
9 use shared::basetsd::ULONG_PTR;
10 use shared::bcrypt::BCRYPT_KEY_HANDLE;
11 use shared::guiddef::{GUID, LPCGUID};
12 use shared::minwindef::{
13     BOOL, BYTE, DWORD, FALSE, FILETIME, HKEY, HMODULE, LPFILETIME, LPVOID, PBYTE, PDWORD,
14     PFILETIME, TRUE, ULONG, WORD,
15 };
16 use um::minwinbase::PSYSTEMTIME;
17 use um::ncrypt::NCRYPT_KEY_HANDLE;
18 use um::winnt::{
19     CHAR, HANDLE, HRESULT, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PVOID, PWSTR, WCHAR,
20 };
21 use vc::vcruntime::size_t;
22 //108
23 #[inline]
GET_ALG_CLASS(x: ALG_ID) -> ALG_ID24 pub fn GET_ALG_CLASS(x: ALG_ID) -> ALG_ID {
25     x & (7 << 13)
26 }
27 #[inline]
GET_ALG_TYPE(x: ALG_ID) -> ALG_ID28 pub fn GET_ALG_TYPE(x: ALG_ID) -> ALG_ID {
29     x & (15 << 9)
30 }
31 #[inline]
GET_ALG_SID(x: ALG_ID) -> ALG_ID32 pub fn GET_ALG_SID(x: ALG_ID) -> ALG_ID {
33     x & 511
34 }
35 pub const ALG_CLASS_ANY: ALG_ID = 0;
36 pub const ALG_CLASS_SIGNATURE: ALG_ID = 1 << 13;
37 pub const ALG_CLASS_MSG_ENCRYPT: ALG_ID = 2 << 13;
38 pub const ALG_CLASS_DATA_ENCRYPT: ALG_ID = 3 << 13;
39 pub const ALG_CLASS_HASH: ALG_ID = 4 << 13;
40 pub const ALG_CLASS_KEY_EXCHANGE: ALG_ID = 5 << 13;
41 pub const ALG_CLASS_ALL: ALG_ID = 7 << 13;
42 pub const ALG_TYPE_ANY: ALG_ID = 0;
43 pub const ALG_TYPE_DSS: ALG_ID = 1 << 9;
44 pub const ALG_TYPE_RSA: ALG_ID = 2 << 9;
45 pub const ALG_TYPE_BLOCK: ALG_ID = 3 << 9;
46 pub const ALG_TYPE_STREAM: ALG_ID = 4 << 9;
47 pub const ALG_TYPE_DH: ALG_ID = 5 << 9;
48 pub const ALG_TYPE_SECURECHANNEL: ALG_ID = 6 << 9;
49 pub const ALG_TYPE_ECDH: ALG_ID = 7 << 9;
50 pub const ALG_TYPE_THIRDPARTY: ALG_ID = 8 << 9;
51 pub const ALG_SID_ANY: ALG_ID = 0;
52 pub const ALG_SID_THIRDPARTY_ANY: ALG_ID = 0;
53 pub const ALG_SID_RSA_ANY: ALG_ID = 0;
54 pub const ALG_SID_RSA_PKCS: ALG_ID = 1;
55 pub const ALG_SID_RSA_MSATWORK: ALG_ID = 2;
56 pub const ALG_SID_RSA_ENTRUST: ALG_ID = 3;
57 pub const ALG_SID_RSA_PGP: ALG_ID = 4;
58 pub const ALG_SID_DSS_ANY: ALG_ID = 0;
59 pub const ALG_SID_DSS_PKCS: ALG_ID = 1;
60 pub const ALG_SID_DSS_DMS: ALG_ID = 2;
61 pub const ALG_SID_ECDSA: ALG_ID = 3;
62 pub const ALG_SID_DES: ALG_ID = 1;
63 pub const ALG_SID_3DES: ALG_ID = 3;
64 pub const ALG_SID_DESX: ALG_ID = 4;
65 pub const ALG_SID_IDEA: ALG_ID = 5;
66 pub const ALG_SID_CAST: ALG_ID = 6;
67 pub const ALG_SID_SAFERSK64: ALG_ID = 7;
68 pub const ALG_SID_SAFERSK128: ALG_ID = 8;
69 pub const ALG_SID_3DES_112: ALG_ID = 9;
70 pub const ALG_SID_CYLINK_MEK: ALG_ID = 12;
71 pub const ALG_SID_RC5: ALG_ID = 13;
72 pub const ALG_SID_AES_128: ALG_ID = 14;
73 pub const ALG_SID_AES_192: ALG_ID = 15;
74 pub const ALG_SID_AES_256: ALG_ID = 16;
75 pub const ALG_SID_AES: ALG_ID = 17;
76 pub const ALG_SID_SKIPJACK: ALG_ID = 10;
77 pub const ALG_SID_TEK: ALG_ID = 11;
78 pub const CRYPT_MODE_CBCI: ALG_ID = 6;
79 pub const CRYPT_MODE_CFBP: ALG_ID = 7;
80 pub const CRYPT_MODE_OFBP: ALG_ID = 8;
81 pub const CRYPT_MODE_CBCOFM: ALG_ID = 9;
82 pub const CRYPT_MODE_CBCOFMI: ALG_ID = 10;
83 pub const ALG_SID_RC2: ALG_ID = 2;
84 pub const ALG_SID_RC4: ALG_ID = 1;
85 pub const ALG_SID_SEAL: ALG_ID = 2;
86 pub const ALG_SID_DH_SANDF: ALG_ID = 1;
87 pub const ALG_SID_DH_EPHEM: ALG_ID = 2;
88 pub const ALG_SID_AGREED_KEY_ANY: ALG_ID = 3;
89 pub const ALG_SID_KEA: ALG_ID = 4;
90 pub const ALG_SID_ECDH: ALG_ID = 5;
91 pub const ALG_SID_ECDH_EPHEM: ALG_ID = 6;
92 pub const ALG_SID_MD2: ALG_ID = 1;
93 pub const ALG_SID_MD4: ALG_ID = 2;
94 pub const ALG_SID_MD5: ALG_ID = 3;
95 pub const ALG_SID_SHA: ALG_ID = 4;
96 pub const ALG_SID_SHA1: ALG_ID = 4;
97 pub const ALG_SID_MAC: ALG_ID = 5;
98 pub const ALG_SID_RIPEMD: ALG_ID = 6;
99 pub const ALG_SID_RIPEMD160: ALG_ID = 7;
100 pub const ALG_SID_SSL3SHAMD5: ALG_ID = 8;
101 pub const ALG_SID_HMAC: ALG_ID = 9;
102 pub const ALG_SID_TLS1PRF: ALG_ID = 10;
103 pub const ALG_SID_HASH_REPLACE_OWF: ALG_ID = 11;
104 pub const ALG_SID_SHA_256: ALG_ID = 12;
105 pub const ALG_SID_SHA_384: ALG_ID = 13;
106 pub const ALG_SID_SHA_512: ALG_ID = 14;
107 pub const ALG_SID_SSL3_MASTER: ALG_ID = 1;
108 pub const ALG_SID_SCHANNEL_MASTER_HASH: ALG_ID = 2;
109 pub const ALG_SID_SCHANNEL_MAC_KEY: ALG_ID = 3;
110 pub const ALG_SID_PCT1_MASTER: ALG_ID = 4;
111 pub const ALG_SID_SSL2_MASTER: ALG_ID = 5;
112 pub const ALG_SID_TLS1_MASTER: ALG_ID = 6;
113 pub const ALG_SID_SCHANNEL_ENC_KEY: ALG_ID = 7;
114 pub const ALG_SID_ECMQV: ALG_ID = 1;
115 pub const ALG_SID_EXAMPLE: ALG_ID = 80;
116 pub type ALG_ID = c_uint;
117 pub const CALG_MD2: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2;
118 pub const CALG_MD4: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4;
119 pub const CALG_MD5: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5;
120 pub const CALG_SHA: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA;
121 pub const CALG_SHA1: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA1;
122 pub const CALG_MAC: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC;
123 pub const CALG_RSA_SIGN: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY;
124 pub const CALG_DSS_SIGN: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY;
125 pub const CALG_NO_SIGN: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY;
126 pub const CALG_RSA_KEYX: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY;
127 pub const CALG_DES: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES;
128 pub const CALG_3DES_112: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES_112;
129 pub const CALG_3DES: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES;
130 pub const CALG_DESX: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DESX;
131 pub const CALG_RC2: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2;
132 pub const CALG_RC4: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4;
133 pub const CALG_SEAL: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL;
134 pub const CALG_DH_SF: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_SANDF;
135 pub const CALG_DH_EPHEM: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EPHEM;
136 pub const CALG_AGREEDKEY_ANY: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH
137     | ALG_SID_AGREED_KEY_ANY;
138 pub const CALG_KEA_KEYX: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_KEA;
139 pub const CALG_HUGHES_MD5: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_MD5;
140 pub const CALG_SKIPJACK: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SKIPJACK;
141 pub const CALG_TEK: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_TEK;
142 pub const CALG_CYLINK_MEK: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_CYLINK_MEK;
143 pub const CALG_SSL3_SHAMD5: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5;
144 pub const CALG_SSL3_MASTER: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
145     | ALG_SID_SSL3_MASTER;
146 pub const CALG_SCHANNEL_MASTER_HASH: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
147     | ALG_SID_SCHANNEL_MASTER_HASH;
148 pub const CALG_SCHANNEL_MAC_KEY: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
149     | ALG_SID_SCHANNEL_MAC_KEY;
150 pub const CALG_SCHANNEL_ENC_KEY: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
151     | ALG_SID_SCHANNEL_ENC_KEY;
152 pub const CALG_PCT1_MASTER: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
153     | ALG_SID_PCT1_MASTER;
154 pub const CALG_SSL2_MASTER: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
155     | ALG_SID_SSL2_MASTER;
156 pub const CALG_TLS1_MASTER: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
157     | ALG_SID_TLS1_MASTER;
158 pub const CALG_RC5: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC5;
159 pub const CALG_HMAC: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC;
160 pub const CALG_TLS1PRF: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF;
161 pub const CALG_HASH_REPLACE_OWF: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF;
162 pub const CALG_AES_128: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128;
163 pub const CALG_AES_192: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192;
164 pub const CALG_AES_256: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256;
165 pub const CALG_AES: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES;
166 pub const CALG_SHA_256: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256;
167 pub const CALG_SHA_384: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384;
168 pub const CALG_SHA_512: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512;
169 pub const CALG_ECDH: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH;
170 pub const CALG_ECDH_EPHEM: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ECDH | ALG_SID_ECDH_EPHEM;
171 pub const CALG_ECMQV: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_ECMQV;
172 pub const CALG_ECDSA: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA;
173 pub const CALG_NULLCIPHER: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_ANY | 0;
174 pub const CALG_THIRDPARTY_KEY_EXCHANGE: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_THIRDPARTY
175     | ALG_SID_THIRDPARTY_ANY;
176 pub const CALG_THIRDPARTY_SIGNATURE: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_THIRDPARTY
177     | ALG_SID_THIRDPARTY_ANY;
178 pub const CALG_THIRDPARTY_CIPHER: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_THIRDPARTY
179     | ALG_SID_THIRDPARTY_ANY;
180 pub const CALG_THIRDPARTY_HASH: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_THIRDPARTY
181     | ALG_SID_THIRDPARTY_ANY;
182 pub type HCRYPTPROV = ULONG_PTR;
183 pub type HCRYPTKEY = ULONG_PTR;
184 pub type HCRYPTHASH = ULONG_PTR;
185 pub const CRYPT_VERIFYCONTEXT: DWORD = 0xF0000000;
186 pub const CRYPT_NEWKEYSET: DWORD = 0x00000008;
187 pub const CRYPT_DELETEKEYSET: DWORD = 0x00000010;
188 pub const CRYPT_MACHINE_KEYSET: DWORD = 0x00000020;
189 pub const CRYPT_SILENT: DWORD = 0x00000040;
190 pub const CRYPT_DEFAULT_CONTAINER_OPTIONAL: DWORD = 0x00000080;
191 pub const CRYPT_EXPORTABLE: DWORD = 0x00000001;
192 pub const CRYPT_USER_PROTECTED: DWORD = 0x00000002;
193 pub const CRYPT_CREATE_SALT: DWORD = 0x00000004;
194 pub const CRYPT_UPDATE_KEY: DWORD = 0x00000008;
195 pub const CRYPT_NO_SALT: DWORD = 0x00000010;
196 pub const CRYPT_PREGEN: DWORD = 0x00000040;
197 pub const CRYPT_RECIPIENT: DWORD = 0x00000010;
198 pub const CRYPT_INITIATOR: DWORD = 0x00000040;
199 pub const CRYPT_ONLINE: DWORD = 0x00000080;
200 pub const CRYPT_SF: DWORD = 0x00000100;
201 pub const CRYPT_CREATE_IV: DWORD = 0x00000200;
202 pub const CRYPT_KEK: DWORD = 0x00000400;
203 pub const CRYPT_DATA_KEY: DWORD = 0x00000800;
204 pub const CRYPT_VOLATILE: DWORD = 0x00001000;
205 pub const CRYPT_SGCKEY: DWORD = 0x00002000;
206 pub const CRYPT_USER_PROTECTED_STRONG: DWORD = 0x00100000;
207 pub const CRYPT_ARCHIVABLE: DWORD = 0x00004000;
208 pub const CRYPT_FORCE_KEY_PROTECTION_HIGH: DWORD = 0x00008000;
209 pub const RSA1024BIT_KEY: DWORD = 0x04000000;
210 pub const CRYPT_SERVER: DWORD = 0x00000400;
211 pub const KEY_LENGTH_MASK: DWORD = 0xFFFF0000;
212 pub const CRYPT_Y_ONLY: DWORD = 0x00000001;
213 pub const CRYPT_SSL2_FALLBACK: DWORD = 0x00000002;
214 pub const CRYPT_DESTROYKEY: DWORD = 0x00000004;
215 pub const CRYPT_OAEP: DWORD = 0x00000040;
216 pub const CRYPT_BLOB_VER3: DWORD = 0x00000080;
217 pub const CRYPT_IPSEC_HMAC_KEY: DWORD = 0x00000100;
218 pub const CRYPT_DECRYPT_RSA_NO_PADDING_CHECK: DWORD = 0x00000020;
219 pub const CRYPT_SECRETDIGEST: DWORD = 0x00000001;
220 pub const CRYPT_OWF_REPL_LM_HASH: DWORD = 0x00000001;
221 pub const CRYPT_LITTLE_ENDIAN: DWORD = 0x00000001;
222 pub const CRYPT_NOHASHOID: DWORD = 0x00000001;
223 pub const CRYPT_TYPE2_FORMAT: DWORD = 0x00000002;
224 pub const CRYPT_X931_FORMAT: DWORD = 0x00000004;
225 pub const CRYPT_MACHINE_DEFAULT: DWORD = 0x00000001;
226 pub const CRYPT_USER_DEFAULT: DWORD = 0x00000002;
227 pub const CRYPT_DELETE_DEFAULT: DWORD = 0x00000004;
228 pub const SIMPLEBLOB: DWORD = 0x1;
229 pub const PUBLICKEYBLOB: DWORD = 0x6;
230 pub const PRIVATEKEYBLOB: DWORD = 0x7;
231 pub const PLAINTEXTKEYBLOB: DWORD = 0x8;
232 pub const OPAQUEKEYBLOB: DWORD = 0x9;
233 pub const PUBLICKEYBLOBEX: DWORD = 0xA;
234 pub const SYMMETRICWRAPKEYBLOB: DWORD = 0xB;
235 pub const KEYSTATEBLOB: DWORD = 0xC;
236 pub const AT_KEYEXCHANGE: DWORD = 1;
237 pub const AT_SIGNATURE: DWORD = 2;
238 pub const CRYPT_USERDATA: DWORD = 1;
239 pub const KP_IV: DWORD = 1;
240 pub const KP_SALT: DWORD = 2;
241 pub const KP_PADDING: DWORD = 3;
242 pub const KP_MODE: DWORD = 4;
243 pub const KP_MODE_BITS: DWORD = 5;
244 pub const KP_PERMISSIONS: DWORD = 6;
245 pub const KP_ALGID: DWORD = 7;
246 pub const KP_BLOCKLEN: DWORD = 8;
247 pub const KP_KEYLEN: DWORD = 9;
248 pub const KP_SALT_EX: DWORD = 10;
249 pub const KP_P: DWORD = 11;
250 pub const KP_G: DWORD = 12;
251 pub const KP_Q: DWORD = 13;
252 pub const KP_X: DWORD = 14;
253 pub const KP_Y: DWORD = 15;
254 pub const KP_RA: DWORD = 16;
255 pub const KP_RB: DWORD = 17;
256 pub const KP_INFO: DWORD = 18;
257 pub const KP_EFFECTIVE_KEYLEN: DWORD = 19;
258 pub const KP_SCHANNEL_ALG: DWORD = 20;
259 pub const KP_CLIENT_RANDOM: DWORD = 21;
260 pub const KP_SERVER_RANDOM: DWORD = 22;
261 pub const KP_RP: DWORD = 23;
262 pub const KP_PRECOMP_MD5: DWORD = 24;
263 pub const KP_PRECOMP_SHA: DWORD = 25;
264 pub const KP_CERTIFICATE: DWORD = 26;
265 pub const KP_CLEAR_KEY: DWORD = 27;
266 pub const KP_PUB_EX_LEN: DWORD = 28;
267 pub const KP_PUB_EX_VAL: DWORD = 29;
268 pub const KP_KEYVAL: DWORD = 30;
269 pub const KP_ADMIN_PIN: DWORD = 31;
270 pub const KP_KEYEXCHANGE_PIN: DWORD = 32;
271 pub const KP_SIGNATURE_PIN: DWORD = 33;
272 pub const KP_PREHASH: DWORD = 34;
273 pub const KP_ROUNDS: DWORD = 35;
274 pub const KP_OAEP_PARAMS: DWORD = 36;
275 pub const KP_CMS_KEY_INFO: DWORD = 37;
276 pub const KP_CMS_DH_KEY_INFO: DWORD = 38;
277 pub const KP_PUB_PARAMS: DWORD = 39;
278 pub const KP_VERIFY_PARAMS: DWORD = 40;
279 pub const KP_HIGHEST_VERSION: DWORD = 41;
280 pub const KP_GET_USE_COUNT: DWORD = 42;
281 pub const KP_PIN_ID: DWORD = 43;
282 pub const KP_PIN_INFO: DWORD = 44;
283 pub const PKCS5_PADDING: DWORD = 1;
284 pub const RANDOM_PADDING: DWORD = 2;
285 pub const ZERO_PADDING: DWORD = 3;
286 pub const CRYPT_MODE_CBC: DWORD = 1;
287 pub const CRYPT_MODE_ECB: DWORD = 2;
288 pub const CRYPT_MODE_OFB: DWORD = 3;
289 pub const CRYPT_MODE_CFB: DWORD = 4;
290 pub const CRYPT_MODE_CTS: DWORD = 5;
291 pub const CRYPT_ENCRYPT: DWORD = 0x0001;
292 pub const CRYPT_DECRYPT: DWORD = 0x0002;
293 pub const CRYPT_EXPORT: DWORD = 0x0004;
294 pub const CRYPT_READ: DWORD = 0x0008;
295 pub const CRYPT_WRITE: DWORD = 0x0010;
296 pub const CRYPT_MAC: DWORD = 0x0020;
297 pub const CRYPT_EXPORT_KEY: DWORD = 0x0040;
298 pub const CRYPT_IMPORT_KEY: DWORD = 0x0080;
299 pub const CRYPT_ARCHIVE: DWORD = 0x0100;
300 pub const HP_ALGID: DWORD = 0x0001;
301 pub const HP_HASHVAL: DWORD = 0x0002;
302 pub const HP_HASHSIZE: DWORD = 0x0004;
303 pub const HP_HMAC_INFO: DWORD = 0x0005;
304 pub const HP_TLS1PRF_LABEL: DWORD = 0x0006;
305 pub const HP_TLS1PRF_SEED: DWORD = 0x0007;
306 pub const CRYPT_FAILED: BOOL = FALSE;
307 pub const CRYPT_SUCCEED: BOOL = TRUE;
308 #[inline]
RCRYPT_SUCCEEDED(rt: BOOL) -> bool309 pub fn RCRYPT_SUCCEEDED(rt: BOOL) -> bool {
310     rt == CRYPT_SUCCEED
311 }
312 #[inline]
RCRYPT_FAILED(rt: BOOL) -> bool313 pub fn RCRYPT_FAILED(rt: BOOL) -> bool {
314     rt == CRYPT_FAILED
315 }
316 pub const PP_ENUMALGS: DWORD = 1;
317 pub const PP_ENUMCONTAINERS: DWORD = 2;
318 pub const PP_IMPTYPE: DWORD = 3;
319 pub const PP_NAME: DWORD = 4;
320 pub const PP_VERSION: DWORD = 5;
321 pub const PP_CONTAINER: DWORD = 6;
322 pub const PP_CHANGE_PASSWORD: DWORD = 7;
323 pub const PP_KEYSET_SEC_DESCR: DWORD = 8;
324 pub const PP_CERTCHAIN: DWORD = 9;
325 pub const PP_KEY_TYPE_SUBTYPE: DWORD = 10;
326 pub const PP_PROVTYPE: DWORD = 16;
327 pub const PP_KEYSTORAGE: DWORD = 17;
328 pub const PP_APPLI_CERT: DWORD = 18;
329 pub const PP_SYM_KEYSIZE: DWORD = 19;
330 pub const PP_SESSION_KEYSIZE: DWORD = 20;
331 pub const PP_UI_PROMPT: DWORD = 21;
332 pub const PP_ENUMALGS_EX: DWORD = 22;
333 pub const PP_ENUMMANDROOTS: DWORD = 25;
334 pub const PP_ENUMELECTROOTS: DWORD = 26;
335 pub const PP_KEYSET_TYPE: DWORD = 27;
336 pub const PP_ADMIN_PIN: DWORD = 31;
337 pub const PP_KEYEXCHANGE_PIN: DWORD = 32;
338 pub const PP_SIGNATURE_PIN: DWORD = 33;
339 pub const PP_SIG_KEYSIZE_INC: DWORD = 34;
340 pub const PP_KEYX_KEYSIZE_INC: DWORD = 35;
341 pub const PP_UNIQUE_CONTAINER: DWORD = 36;
342 pub const PP_SGC_INFO: DWORD = 37;
343 pub const PP_USE_HARDWARE_RNG: DWORD = 38;
344 pub const PP_KEYSPEC: DWORD = 39;
345 pub const PP_ENUMEX_SIGNING_PROT: DWORD = 40;
346 pub const PP_CRYPT_COUNT_KEY_USE: DWORD = 41;
347 pub const PP_USER_CERTSTORE: DWORD = 42;
348 pub const PP_SMARTCARD_READER: DWORD = 43;
349 pub const PP_SMARTCARD_GUID: DWORD = 45;
350 pub const PP_ROOT_CERTSTORE: DWORD = 46;
351 pub const PP_SMARTCARD_READER_ICON: DWORD = 47;
352 pub const CRYPT_FIRST: DWORD = 1;
353 pub const CRYPT_NEXT: DWORD = 2;
354 pub const CRYPT_SGC_ENUM: DWORD = 4;
355 pub const CRYPT_IMPL_HARDWARE: DWORD = 1;
356 pub const CRYPT_IMPL_SOFTWARE: DWORD = 2;
357 pub const CRYPT_IMPL_MIXED: DWORD = 3;
358 pub const CRYPT_IMPL_UNKNOWN: DWORD = 4;
359 pub const CRYPT_IMPL_REMOVABLE: DWORD = 8;
360 pub const CRYPT_SEC_DESCR: DWORD = 0x00000001;
361 pub const CRYPT_PSTORE: DWORD = 0x00000002;
362 pub const CRYPT_UI_PROMPT: DWORD = 0x00000004;
363 pub const CRYPT_FLAG_PCT1: DWORD = 0x0001;
364 pub const CRYPT_FLAG_SSL2: DWORD = 0x0002;
365 pub const CRYPT_FLAG_SSL3: DWORD = 0x0004;
366 pub const CRYPT_FLAG_TLS1: DWORD = 0x0008;
367 pub const CRYPT_FLAG_IPSEC: DWORD = 0x0010;
368 pub const CRYPT_FLAG_SIGNING: DWORD = 0x0020;
369 pub const CRYPT_SGC: DWORD = 0x0001;
370 pub const CRYPT_FASTSGC: DWORD = 0x0002;
371 pub const PP_CLIENT_HWND: DWORD = 1;
372 pub const PP_CONTEXT_INFO: DWORD = 11;
373 pub const PP_KEYEXCHANGE_KEYSIZE: DWORD = 12;
374 pub const PP_SIGNATURE_KEYSIZE: DWORD = 13;
375 pub const PP_KEYEXCHANGE_ALG: DWORD = 14;
376 pub const PP_SIGNATURE_ALG: DWORD = 15;
377 pub const PP_DELETEKEY: DWORD = 24;
378 pub const PP_PIN_PROMPT_STRING: DWORD = 44;
379 pub const PP_SECURE_KEYEXCHANGE_PIN: DWORD = 47;
380 pub const PP_SECURE_SIGNATURE_PIN: DWORD = 48;
381 pub const PROV_RSA_FULL: DWORD = 1;
382 pub const PROV_RSA_SIG: DWORD = 2;
383 pub const PROV_DSS: DWORD = 3;
384 pub const PROV_FORTEZZA: DWORD = 4;
385 pub const PROV_MS_EXCHANGE: DWORD = 5;
386 pub const PROV_SSL: DWORD = 6;
387 pub const PROV_RSA_SCHANNEL: DWORD = 12;
388 pub const PROV_DSS_DH: DWORD = 13;
389 pub const PROV_EC_ECDSA_SIG: DWORD = 14;
390 pub const PROV_EC_ECNRA_SIG: DWORD = 15;
391 pub const PROV_EC_ECDSA_FULL: DWORD = 16;
392 pub const PROV_EC_ECNRA_FULL: DWORD = 17;
393 pub const PROV_DH_SCHANNEL: DWORD = 18;
394 pub const PROV_SPYRUS_LYNKS: DWORD = 20;
395 pub const PROV_RNG: DWORD = 21;
396 pub const PROV_INTEL_SEC: DWORD = 22;
397 pub const PROV_REPLACE_OWF: DWORD = 23;
398 pub const PROV_RSA_AES: DWORD = 24;
399 pub const MS_DEF_PROV: &'static str = "Microsoft Base Cryptographic Provider v1.0";
400 pub const MS_ENHANCED_PROV: &'static str = "Microsoft Enhanced Cryptographic Provider v1.0";
401 pub const MS_STRONG_PROV: &'static str = "Microsoft Strong Cryptographic Provider";
402 pub const MS_DEF_RSA_SIG_PROV: &'static str = "Microsoft RSA Signature Cryptographic Provider";
403 pub const MS_DEF_RSA_SCHANNEL_PROV: &'static str = "Microsoft RSA SChannel Cryptographic Provider";
404 pub const MS_DEF_DSS_PROV: &'static str = "Microsoft Base DSS Cryptographic Provider";
405 pub const MS_DEF_DSS_DH_PROV: &'static str
406     = "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider";
407 pub const MS_ENH_DSS_DH_PROV: &'static str
408     = "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider";
409 pub const MS_DEF_DH_SCHANNEL_PROV: &'static str = "Microsoft DH SChannel Cryptographic Provider";
410 pub const MS_SCARD_PROV: &'static str = "Microsoft Base Smart Card Crypto Provider";
411 pub const MS_ENH_RSA_AES_PROV: &'static str
412     = "Microsoft Enhanced RSA and AES Cryptographic Provider";
413 pub const MS_ENH_RSA_AES_PROV_XP: &'static str
414     = "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)";
415 pub const MAXUIDLEN: usize = 64;
416 pub const EXPO_OFFLOAD_REG_VALUE: &'static str = "ExpoOffload";
417 pub const EXPO_OFFLOAD_FUNC_NAME: &'static str = "OffloadModExpo";
418 pub const szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS: &'static str
419     = "Software\\Policies\\Microsoft\\Cryptography";
420 pub const szKEY_CACHE_ENABLED: &'static str = "CachePrivateKeys";
421 pub const szKEY_CACHE_SECONDS: &'static str = "PrivateKeyLifetimeSeconds";
422 pub const szPRIV_KEY_CACHE_MAX_ITEMS: &'static str = "PrivKeyCacheMaxItems";
423 pub const cPRIV_KEY_CACHE_MAX_ITEMS_DEFAULT: DWORD = 20;
424 pub const szPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS: &'static str
425     = "PrivKeyCachePurgeIntervalSeconds";
426 pub const cPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS_DEFAULT: DWORD = 86400;
427 pub const CUR_BLOB_VERSION: DWORD = 2;
428 STRUCT!{struct CMS_KEY_INFO {
429     dwVersion: DWORD,
430     Algid: ALG_ID,
431     pbOID: *mut BYTE,
432     cbOID: DWORD,
433 }}
434 pub type PCMS_KEY_INFO = *mut CMS_KEY_INFO;
435 STRUCT!{struct HMAC_INFO {
436     HashAlgid: ALG_ID,
437     pbInnerString: *mut BYTE,
438     cbInnerString: DWORD,
439     pbOuterString: *mut BYTE,
440     cbOuterString: DWORD,
441 }}
442 pub type PHMAC_INFO = *mut HMAC_INFO;
443 STRUCT!{struct SCHANNEL_ALG {
444     dwUse: DWORD,
445     Algid: ALG_ID,
446     cBits: DWORD,
447     dwFlags: DWORD,
448     dwReserved: DWORD,
449 }}
450 pub type PSCHANNEL_ALG = *mut SCHANNEL_ALG;
451 pub const SCHANNEL_MAC_KEY: DWORD = 0x00000000;
452 pub const SCHANNEL_ENC_KEY: DWORD = 0x00000001;
453 pub const INTERNATIONAL_USAGE: DWORD = 0x00000001;
454 STRUCT!{struct PROV_ENUMALGS {
455     aiAlgid: ALG_ID,
456     dwBitLen: DWORD,
457     dwNameLen: DWORD,
458     szName: [CHAR; 20],
459 }}
460 STRUCT!{struct PROV_ENUMALGS_EX {
461     aiAlgid: ALG_ID,
462     dwDefaultLen: DWORD,
463     dwMinLen: DWORD,
464     dwMaxLen: DWORD,
465     dwProtocols: DWORD,
466     dwNameLen: DWORD,
467     szName: [CHAR; 20],
468     dwLongNameLen: DWORD,
469     szLongName: [CHAR; 40],
470 }}
471 STRUCT!{struct BLOBHEADER {
472     bType: BYTE,
473     bVersion: BYTE,
474     reserved: WORD,
475     aiKeyAlg: ALG_ID,
476 }}
477 pub type PUBLICKEYSTRUC = BLOBHEADER;
478 STRUCT!{struct RSAPUBKEY {
479     magic: DWORD,
480     bitlen: DWORD,
481     pubexp: DWORD,
482 }}
483 STRUCT!{struct DHPUBKEY {
484     magic: DWORD,
485     bitlen: DWORD,
486 }}
487 pub type DSSPUBKEY = DHPUBKEY;
488 pub type KEAPUBKEY = DHPUBKEY;
489 pub type TEKPUBKEY = DHPUBKEY;
490 STRUCT!{struct DSSSEED {
491     counter: DWORD,
492     seed: [BYTE; 20],
493 }}
494 STRUCT!{struct DHPUBKEY_VER3 {
495     magic: DWORD,
496     bitlenP: DWORD,
497     bitlenQ: DWORD,
498     bitlenJ: DWORD,
499     DSSSeed: DSSSEED,
500 }}
501 pub type DSSPUBKEY_VER3 = DHPUBKEY_VER3;
502 STRUCT!{struct DHPRIVKEY_VER3 {
503     magic: DWORD,
504     bitlenP: DWORD,
505     bitlenQ: DWORD,
506     bitlenJ: DWORD,
507     bitlenX: DWORD,
508     DSSSeed: DSSSEED,
509 }}
510 pub type DSSPRIVKEY_VER3 = DHPRIVKEY_VER3;
511 STRUCT!{struct KEY_TYPE_SUBTYPE {
512     dwKeySpec: DWORD,
513     Type: GUID,
514     Subtype: GUID,
515 }}
516 pub type PKEY_TYPE_SUBTYPE = *mut KEY_TYPE_SUBTYPE;
517 STRUCT!{struct CERT_FORTEZZA_DATA_PROP {
518     SerialNumber: [c_uchar; 8],
519     CertIndex: c_int,
520     CertLabel: [c_uchar; 36],
521 }}
522 STRUCT!{struct CRYPT_RC4_KEY_STATE {
523     Key: [c_uchar; 16],
524     SBox: [c_uchar; 256],
525     i: c_uchar,
526     j: c_uchar,
527 }}
528 pub type PCRYPT_RC4_KEY_STATE = *mut CRYPT_RC4_KEY_STATE;
529 STRUCT!{struct CRYPT_DES_KEY_STATE {
530     Key: [c_uchar; 8],
531     IV: [c_uchar; 8],
532     Feedback: [c_uchar; 8],
533 }}
534 pub type PCRYPT_DES_KEY_STATE = *mut CRYPT_DES_KEY_STATE;
535 STRUCT!{struct CRYPT_3DES_KEY_STATE {
536     Key: [c_uchar; 24],
537     IV: [c_uchar; 8],
538     Feedback: [c_uchar; 8],
539 }}
540 pub type PCRYPT_3DES_KEY_STATE = *mut CRYPT_3DES_KEY_STATE;
541 STRUCT!{struct CRYPT_AES_128_KEY_STATE {
542     Key: [c_uchar; 16],
543     IV: [c_uchar; 16],
544     EncryptionState: [[c_uchar; 16]; 11],
545     DecryptionState: [[c_uchar; 16]; 11],
546     Feedback: [c_uchar; 16],
547 }}
548 pub type PCRYPT_AES_128_KEY_STATE = *mut CRYPT_AES_128_KEY_STATE;
549 STRUCT!{struct CRYPT_AES_256_KEY_STATE {
550     Key: [c_uchar; 32],
551     IV: [c_uchar; 16],
552     EncryptionState: [[c_uchar; 16]; 15],
553     DecryptionState: [[c_uchar; 16]; 15],
554     Feedback: [c_uchar; 16],
555 }}
556 pub type PCRYPT_AES_256_KEY_STATE = *mut CRYPT_AES_256_KEY_STATE;
557 STRUCT!{struct CRYPTOAPI_BLOB {
558     cbData: DWORD,
559     pbData: *mut BYTE,
560 }}
561 pub type CRYPT_INTEGER_BLOB = CRYPTOAPI_BLOB;
562 pub type PCRYPT_INTEGER_BLOB = *mut CRYPTOAPI_BLOB;
563 pub type CRYPT_UINT_BLOB = CRYPTOAPI_BLOB;
564 pub type PCRYPT_UINT_BLOB = *mut CRYPTOAPI_BLOB;
565 pub type CRYPT_OBJID_BLOB = CRYPTOAPI_BLOB;
566 pub type PCRYPT_OBJID_BLOB = *mut CRYPTOAPI_BLOB;
567 pub type CERT_NAME_BLOB = CRYPTOAPI_BLOB;
568 pub type PCERT_NAME_BLOB = *mut CRYPTOAPI_BLOB;
569 pub type CERT_RDN_VALUE_BLOB = CRYPTOAPI_BLOB;
570 pub type PCERT_RDN_VALUE_BLOB = *mut CRYPTOAPI_BLOB;
571 pub type CERT_BLOB = CRYPTOAPI_BLOB;
572 pub type PCERT_BLOB = *mut CRYPTOAPI_BLOB;
573 pub type CRL_BLOB = CRYPTOAPI_BLOB;
574 pub type PCRL_BLOB = *mut CRYPTOAPI_BLOB;
575 pub type DATA_BLOB = CRYPTOAPI_BLOB;
576 pub type PDATA_BLOB = *mut CRYPTOAPI_BLOB;
577 pub type CRYPT_DATA_BLOB = CRYPTOAPI_BLOB;
578 pub type PCRYPT_DATA_BLOB = *mut CRYPTOAPI_BLOB;
579 pub type CRYPT_HASH_BLOB = CRYPTOAPI_BLOB;
580 pub type PCRYPT_HASH_BLOB = *mut CRYPTOAPI_BLOB;
581 pub type CRYPT_DIGEST_BLOB = CRYPTOAPI_BLOB;
582 pub type PCRYPT_DIGEST_BLOB = *mut CRYPTOAPI_BLOB;
583 pub type CRYPT_DER_BLOB = CRYPTOAPI_BLOB;
584 pub type PCRYPT_DER_BLOB = *mut CRYPTOAPI_BLOB;
585 pub type CRYPT_ATTR_BLOB = CRYPTOAPI_BLOB;
586 pub type PCRYPT_ATTR_BLOB = *mut CRYPTOAPI_BLOB;
587 STRUCT!{struct CMS_DH_KEY_INFO {
588     dwVersion: DWORD,
589     Algid: ALG_ID,
590     pszContentEncObjId: LPSTR,
591     PubInfo: CRYPT_DATA_BLOB,
592     pReserved: *mut c_void,
593 }}
594 pub type PCMS_DH_KEY_INFO = *mut CMS_DH_KEY_INFO;
595 extern "system" {
CryptAcquireContextA( phProv: *mut HCRYPTPROV, szContainer: LPCSTR, szProvider: LPCSTR, dwProvType: DWORD, dwFlags: DWORD, ) -> BOOL596     pub fn CryptAcquireContextA(
597         phProv: *mut HCRYPTPROV,
598         szContainer: LPCSTR,
599         szProvider: LPCSTR,
600         dwProvType: DWORD,
601         dwFlags: DWORD,
602     ) -> BOOL;
CryptAcquireContextW( phProv: *mut HCRYPTPROV, szContainer: LPCWSTR, szProvider: LPCWSTR, dwProvType: DWORD, dwFlags: DWORD, ) -> BOOL603     pub fn CryptAcquireContextW(
604         phProv: *mut HCRYPTPROV,
605         szContainer: LPCWSTR,
606         szProvider: LPCWSTR,
607         dwProvType: DWORD,
608         dwFlags: DWORD,
609     ) -> BOOL;
CryptReleaseContext( hProv: HCRYPTPROV, dwFlags: DWORD, ) -> BOOL610     pub fn CryptReleaseContext(
611         hProv: HCRYPTPROV,
612         dwFlags: DWORD,
613     ) -> BOOL;
CryptGenKey( hProv: HCRYPTPROV, Algid: ALG_ID, dwFlags: DWORD, phKey: *mut HCRYPTKEY, ) -> BOOL614     pub fn CryptGenKey(
615         hProv: HCRYPTPROV,
616         Algid: ALG_ID,
617         dwFlags: DWORD,
618         phKey: *mut HCRYPTKEY,
619     ) -> BOOL;
CryptDeriveKey( hProv: HCRYPTPROV, Algid: ALG_ID, hBaseData: HCRYPTHASH, dwFlags: DWORD, phKey: *mut HCRYPTKEY, ) -> BOOL620     pub fn CryptDeriveKey(
621         hProv: HCRYPTPROV,
622         Algid: ALG_ID,
623         hBaseData: HCRYPTHASH,
624         dwFlags: DWORD,
625         phKey: *mut HCRYPTKEY,
626     ) -> BOOL;
CryptDestroyKey( hKey: HCRYPTKEY, ) -> BOOL627     pub fn CryptDestroyKey(
628         hKey: HCRYPTKEY,
629     ) -> BOOL;
CryptSetKeyParam( hKey: HCRYPTKEY, dwParam: DWORD, pbData: *const BYTE, dwFlags: DWORD, ) -> BOOL630     pub fn CryptSetKeyParam(
631         hKey: HCRYPTKEY,
632         dwParam: DWORD,
633         pbData: *const BYTE,
634         dwFlags: DWORD,
635     ) -> BOOL;
CryptGetKeyParam( hKey: HCRYPTKEY, dwParam: DWORD, pbData: *mut BYTE, pdwDataLen: *mut DWORD, dwFlags: DWORD, ) -> BOOL636     pub fn CryptGetKeyParam(
637         hKey: HCRYPTKEY,
638         dwParam: DWORD,
639         pbData: *mut BYTE,
640         pdwDataLen: *mut DWORD,
641         dwFlags: DWORD,
642     ) -> BOOL;
CryptSetHashParam( hHash: HCRYPTHASH, dwParam: DWORD, pbData: *const BYTE, dwFlags: DWORD, ) -> BOOL643     pub fn CryptSetHashParam(
644         hHash: HCRYPTHASH,
645         dwParam: DWORD,
646         pbData: *const BYTE,
647         dwFlags: DWORD,
648     ) -> BOOL;
CryptGetHashParam( hHash: HCRYPTHASH, dwParam: DWORD, pbData: *mut BYTE, pdwDataLen: *mut DWORD, dwFlags: DWORD, ) -> BOOL649     pub fn CryptGetHashParam(
650         hHash: HCRYPTHASH,
651         dwParam: DWORD,
652         pbData: *mut BYTE,
653         pdwDataLen: *mut DWORD,
654         dwFlags: DWORD,
655     ) -> BOOL;
CryptSetProvParam( hProv: HCRYPTPROV, dwParam: DWORD, pbData: *const BYTE, dwFlags: DWORD, ) -> BOOL656     pub fn CryptSetProvParam(
657         hProv: HCRYPTPROV,
658         dwParam: DWORD,
659         pbData: *const BYTE,
660         dwFlags: DWORD,
661     ) -> BOOL;
CryptGetProvParam( hProv: HCRYPTPROV, dwParam: DWORD, pbData: *mut BYTE, pdwDataLen: *mut DWORD, dwFlags: DWORD, ) -> BOOL662     pub fn CryptGetProvParam(
663         hProv: HCRYPTPROV,
664         dwParam: DWORD,
665         pbData: *mut BYTE,
666         pdwDataLen: *mut DWORD,
667         dwFlags: DWORD,
668     ) -> BOOL;
CryptGenRandom( hProv: HCRYPTPROV, dwLen: DWORD, pbBuffer: *mut BYTE, ) -> BOOL669     pub fn CryptGenRandom(
670         hProv: HCRYPTPROV,
671         dwLen: DWORD,
672         pbBuffer: *mut BYTE,
673     ) -> BOOL;
CryptGetUserKey( hProv: HCRYPTPROV, dwKeySpec: DWORD, phUserKey: *mut HCRYPTKEY, ) -> BOOL674     pub fn CryptGetUserKey(
675         hProv: HCRYPTPROV,
676         dwKeySpec: DWORD,
677         phUserKey: *mut HCRYPTKEY,
678     ) -> BOOL;
CryptExportKey( hKey: HCRYPTKEY, hExpKey: HCRYPTKEY, dwBlobType: DWORD, dwFlags: DWORD, pbData: *mut BYTE, pdwDataLen: *mut DWORD, ) -> BOOL679     pub fn CryptExportKey(
680         hKey: HCRYPTKEY,
681         hExpKey: HCRYPTKEY,
682         dwBlobType: DWORD,
683         dwFlags: DWORD,
684         pbData: *mut BYTE,
685         pdwDataLen: *mut DWORD,
686     ) -> BOOL;
CryptImportKey( hProv: HCRYPTPROV, pbData: *const BYTE, dwDataLen: DWORD, hPubKey: HCRYPTKEY, dwFlags: DWORD, phKey: *mut HCRYPTKEY, ) -> BOOL687     pub fn CryptImportKey(
688         hProv: HCRYPTPROV,
689         pbData: *const BYTE,
690         dwDataLen: DWORD,
691         hPubKey: HCRYPTKEY,
692         dwFlags: DWORD,
693         phKey: *mut HCRYPTKEY,
694     ) -> BOOL;
CryptEncrypt( hKey: HCRYPTKEY, hHash: HCRYPTHASH, Final: BOOL, dwFlags: DWORD, pbData: *mut BYTE, pdwDataLen: *mut DWORD, dwBufLen: DWORD, ) -> BOOL695     pub fn CryptEncrypt(
696         hKey: HCRYPTKEY,
697         hHash: HCRYPTHASH,
698         Final: BOOL,
699         dwFlags: DWORD,
700         pbData: *mut BYTE,
701         pdwDataLen: *mut DWORD,
702         dwBufLen: DWORD,
703     ) -> BOOL;
CryptDecrypt( hKey: HCRYPTKEY, hHash: HCRYPTHASH, Final: BOOL, dwFlags: DWORD, pbData: *mut BYTE, pdwDataLen: *mut DWORD, ) -> BOOL704     pub fn CryptDecrypt(
705         hKey: HCRYPTKEY,
706         hHash: HCRYPTHASH,
707         Final: BOOL,
708         dwFlags: DWORD,
709         pbData: *mut BYTE,
710         pdwDataLen: *mut DWORD,
711     ) -> BOOL;
CryptCreateHash( hProv: HCRYPTPROV, Algid: ALG_ID, hKey: HCRYPTKEY, dwFlags: DWORD, phHash: *mut HCRYPTHASH, ) -> BOOL712     pub fn CryptCreateHash(
713         hProv: HCRYPTPROV,
714         Algid: ALG_ID,
715         hKey: HCRYPTKEY,
716         dwFlags: DWORD,
717         phHash: *mut HCRYPTHASH,
718     ) -> BOOL;
CryptHashData( hHash: HCRYPTHASH, pbData: *const BYTE, dwDataLen: DWORD, dwFlags: DWORD, ) -> BOOL719     pub fn CryptHashData(
720         hHash: HCRYPTHASH,
721         pbData: *const BYTE,
722         dwDataLen: DWORD,
723         dwFlags: DWORD,
724     ) -> BOOL;
CryptHashSessionKey( hHash: HCRYPTHASH, hKey: HCRYPTKEY, dwFlags: DWORD, ) -> BOOL725     pub fn CryptHashSessionKey(
726         hHash: HCRYPTHASH,
727         hKey: HCRYPTKEY,
728         dwFlags: DWORD,
729     ) -> BOOL;
CryptDestroyHash( hHash: HCRYPTHASH, ) -> BOOL730     pub fn CryptDestroyHash(
731         hHash: HCRYPTHASH,
732     ) -> BOOL;
CryptSignHashA( hHash: HCRYPTHASH, dwKeySpec: DWORD, szDescription: LPCSTR, dwFlags: DWORD, pbSignature: *mut BYTE, pdwSigLen: *mut DWORD, ) -> BOOL733     pub fn CryptSignHashA(
734         hHash: HCRYPTHASH,
735         dwKeySpec: DWORD,
736         szDescription: LPCSTR,
737         dwFlags: DWORD,
738         pbSignature: *mut BYTE,
739         pdwSigLen: *mut DWORD,
740     ) -> BOOL;
CryptSignHashW( hHash: HCRYPTHASH, dwKeySpec: DWORD, szDescription: LPCWSTR, dwFlags: DWORD, pbSignature: *mut BYTE, pdwSigLen: *mut DWORD, ) -> BOOL741     pub fn CryptSignHashW(
742         hHash: HCRYPTHASH,
743         dwKeySpec: DWORD,
744         szDescription: LPCWSTR,
745         dwFlags: DWORD,
746         pbSignature: *mut BYTE,
747         pdwSigLen: *mut DWORD,
748     ) -> BOOL;
CryptVerifySignatureA( hHash: HCRYPTHASH, pbSignature: *const BYTE, dwSigLen: DWORD, hPubKey: HCRYPTKEY, szDescription: LPCSTR, dwFlags: DWORD, ) -> BOOL749     pub fn CryptVerifySignatureA(
750         hHash: HCRYPTHASH,
751         pbSignature: *const BYTE,
752         dwSigLen: DWORD,
753         hPubKey: HCRYPTKEY,
754         szDescription: LPCSTR,
755         dwFlags: DWORD,
756     ) -> BOOL;
CryptVerifySignatureW( hHash: HCRYPTHASH, pbSignature: *const BYTE, dwSigLen: DWORD, hPubKey: HCRYPTKEY, szDescription: LPCWSTR, dwFlags: DWORD, ) -> BOOL757     pub fn CryptVerifySignatureW(
758         hHash: HCRYPTHASH,
759         pbSignature: *const BYTE,
760         dwSigLen: DWORD,
761         hPubKey: HCRYPTKEY,
762         szDescription: LPCWSTR,
763         dwFlags: DWORD,
764     ) -> BOOL;
CryptSetProviderA( pszProvName: LPCSTR, dwProvType: DWORD, ) -> BOOL765     pub fn CryptSetProviderA(
766         pszProvName: LPCSTR,
767         dwProvType: DWORD,
768     ) -> BOOL;
CryptSetProviderW( pszProvName: LPCWSTR, dwProvType: DWORD, ) -> BOOL769     pub fn CryptSetProviderW(
770         pszProvName: LPCWSTR,
771         dwProvType: DWORD,
772     ) -> BOOL;
CryptSetProviderExA( pszProvName: LPCSTR, dwProvType: DWORD, pdwReserved: *mut DWORD, dwFlags: DWORD, ) -> BOOL773     pub fn CryptSetProviderExA(
774         pszProvName: LPCSTR,
775         dwProvType: DWORD,
776         pdwReserved: *mut DWORD,
777         dwFlags: DWORD,
778     ) -> BOOL;
CryptSetProviderExW( pszProvName: LPCWSTR, dwProvType: DWORD, pdwReserved: *mut DWORD, dwFlags: DWORD, ) -> BOOL779     pub fn CryptSetProviderExW(
780         pszProvName: LPCWSTR,
781         dwProvType: DWORD,
782         pdwReserved: *mut DWORD,
783         dwFlags: DWORD,
784     ) -> BOOL;
CryptGetDefaultProviderA( dwProvType: DWORD, pdwReserved: *mut DWORD, dwFlags: DWORD, pszProvName: LPSTR, pcbProvName: *mut DWORD, ) -> BOOL785     pub fn CryptGetDefaultProviderA(
786         dwProvType: DWORD,
787         pdwReserved: *mut DWORD,
788         dwFlags: DWORD,
789         pszProvName: LPSTR,
790         pcbProvName: *mut DWORD,
791     ) -> BOOL;
CryptGetDefaultProviderW( dwProvType: DWORD, pdwReserved: *mut DWORD, dwFlags: DWORD, pszProvName: LPWSTR, pcbProvName: *mut DWORD, ) -> BOOL792     pub fn CryptGetDefaultProviderW(
793         dwProvType: DWORD,
794         pdwReserved: *mut DWORD,
795         dwFlags: DWORD,
796         pszProvName: LPWSTR,
797         pcbProvName: *mut DWORD,
798     ) -> BOOL;
CryptEnumProviderTypesA( dwIndex: DWORD, pdwReserved: *mut DWORD, dwFlags: DWORD, pdwProvType: *mut DWORD, szTypeName: LPSTR, pcbTypeName: *mut DWORD, ) -> BOOL799     pub fn CryptEnumProviderTypesA(
800         dwIndex: DWORD,
801         pdwReserved: *mut DWORD,
802         dwFlags: DWORD,
803         pdwProvType: *mut DWORD,
804         szTypeName: LPSTR,
805         pcbTypeName: *mut DWORD,
806     ) -> BOOL;
CryptEnumProviderTypesW( dwIndex: DWORD, pdwReserved: *mut DWORD, dwFlags: DWORD, pdwProvType: *mut DWORD, szTypeName: LPWSTR, pcbTypeName: *mut DWORD, ) -> BOOL807     pub fn CryptEnumProviderTypesW(
808         dwIndex: DWORD,
809         pdwReserved: *mut DWORD,
810         dwFlags: DWORD,
811         pdwProvType: *mut DWORD,
812         szTypeName: LPWSTR,
813         pcbTypeName: *mut DWORD,
814     ) -> BOOL;
CryptEnumProvidersA( dwIndex: DWORD, pdwReserved: *mut DWORD, dwFlags: DWORD, pdwProvType: *mut DWORD, szProvName: LPSTR, pcbProvName: *mut DWORD, ) -> BOOL815     pub fn CryptEnumProvidersA(
816         dwIndex: DWORD,
817         pdwReserved: *mut DWORD,
818         dwFlags: DWORD,
819         pdwProvType: *mut DWORD,
820         szProvName: LPSTR,
821         pcbProvName: *mut DWORD,
822     ) -> BOOL;
CryptEnumProvidersW( dwIndex: DWORD, pdwReserved: *mut DWORD, dwFlags: DWORD, pdwProvType: *mut DWORD, szProvName: LPWSTR, pcbProvName: *mut DWORD, ) -> BOOL823     pub fn CryptEnumProvidersW(
824         dwIndex: DWORD,
825         pdwReserved: *mut DWORD,
826         dwFlags: DWORD,
827         pdwProvType: *mut DWORD,
828         szProvName: LPWSTR,
829         pcbProvName: *mut DWORD,
830     ) -> BOOL;
CryptContextAddRef( hProv: HCRYPTPROV, pdwReserved: *mut DWORD, dwFlags: DWORD, ) -> BOOL831     pub fn CryptContextAddRef(
832         hProv: HCRYPTPROV,
833         pdwReserved: *mut DWORD,
834         dwFlags: DWORD,
835     ) -> BOOL;
CryptDuplicateKey( hKey: HCRYPTKEY, pdwReserved: *mut DWORD, dwFlags: DWORD, phKey: *mut HCRYPTKEY, ) -> BOOL836     pub fn CryptDuplicateKey(
837         hKey: HCRYPTKEY,
838         pdwReserved: *mut DWORD,
839         dwFlags: DWORD,
840         phKey: *mut HCRYPTKEY,
841     ) -> BOOL;
CryptDuplicateHash( hHash: HCRYPTHASH, pdwReserved: *mut DWORD, dwFlags: DWORD, phHash: *mut HCRYPTHASH, ) -> BOOL842     pub fn CryptDuplicateHash(
843         hHash: HCRYPTHASH,
844         pdwReserved: *mut DWORD,
845         dwFlags: DWORD,
846         phHash: *mut HCRYPTHASH,
847     ) -> BOOL;
848 }
849 extern "C" {
GetEncSChannel( pData: *mut *mut BYTE, dwDecSize: *mut DWORD, ) -> BOOL850     pub fn GetEncSChannel(
851         pData: *mut *mut BYTE,
852         dwDecSize: *mut DWORD,
853     ) -> BOOL;
854 }
855 pub type HCRYPTPROV_OR_NCRYPT_KEY_HANDLE = ULONG_PTR;
856 pub type HCRYPTPROV_LEGACY = ULONG_PTR;
857 STRUCT!{struct CRYPT_BIT_BLOB {
858     cbData: DWORD,
859     pbData: *mut BYTE,
860     cUnusedBits: DWORD,
861 }}
862 pub type PCRYPT_BIT_BLOB = *mut CRYPT_BIT_BLOB;
863 STRUCT!{struct CRYPT_ALGORITHM_IDENTIFIER {
864     pszObjId: LPSTR,
865     Parameters: CRYPT_OBJID_BLOB,
866 }}
867 pub type PCRYPT_ALGORITHM_IDENTIFIER = *mut CRYPT_ALGORITHM_IDENTIFIER;
868 pub const szOID_RSA: &'static str = "1.2.840.113549";
869 pub const szOID_PKCS: &'static str = "1.2.840.113549.1";
870 pub const szOID_RSA_HASH: &'static str = "1.2.840.113549.2";
871 pub const szOID_RSA_ENCRYPT: &'static str = "1.2.840.113549.3";
872 pub const szOID_PKCS_1: &'static str = "1.2.840.113549.1.1";
873 pub const szOID_PKCS_2: &'static str = "1.2.840.113549.1.2";
874 pub const szOID_PKCS_3: &'static str = "1.2.840.113549.1.3";
875 pub const szOID_PKCS_4: &'static str = "1.2.840.113549.1.4";
876 pub const szOID_PKCS_5: &'static str = "1.2.840.113549.1.5";
877 pub const szOID_PKCS_6: &'static str = "1.2.840.113549.1.6";
878 pub const szOID_PKCS_7: &'static str = "1.2.840.113549.1.7";
879 pub const szOID_PKCS_8: &'static str = "1.2.840.113549.1.8";
880 pub const szOID_PKCS_9: &'static str = "1.2.840.113549.1.9";
881 pub const szOID_PKCS_10: &'static str = "1.2.840.113549.1.10";
882 pub const szOID_PKCS_12: &'static str = "1.2.840.113549.1.12";
883 pub const szOID_RSA_RSA: &'static str = "1.2.840.113549.1.1.1";
884 pub const szOID_RSA_MD2RSA: &'static str = "1.2.840.113549.1.1.2";
885 pub const szOID_RSA_MD4RSA: &'static str = "1.2.840.113549.1.1.3";
886 pub const szOID_RSA_MD5RSA: &'static str = "1.2.840.113549.1.1.4";
887 pub const szOID_RSA_SHA1RSA: &'static str = "1.2.840.113549.1.1.5";
888 pub const szOID_RSA_SETOAEP_RSA: &'static str = "1.2.840.113549.1.1.6";
889 pub const szOID_RSAES_OAEP: &'static str = "1.2.840.113549.1.1.7";
890 pub const szOID_RSA_MGF1: &'static str = "1.2.840.113549.1.1.8";
891 pub const szOID_RSA_PSPECIFIED: &'static str = "1.2.840.113549.1.1.9";
892 pub const szOID_RSA_SSA_PSS: &'static str = "1.2.840.113549.1.1.10";
893 pub const szOID_RSA_SHA256RSA: &'static str = "1.2.840.113549.1.1.11";
894 pub const szOID_RSA_SHA384RSA: &'static str = "1.2.840.113549.1.1.12";
895 pub const szOID_RSA_SHA512RSA: &'static str = "1.2.840.113549.1.1.13";
896 pub const szOID_RSA_DH: &'static str = "1.2.840.113549.1.3.1";
897 pub const szOID_RSA_data: &'static str = "1.2.840.113549.1.7.1";
898 pub const szOID_RSA_signedData: &'static str = "1.2.840.113549.1.7.2";
899 pub const szOID_RSA_envelopedData: &'static str = "1.2.840.113549.1.7.3";
900 pub const szOID_RSA_signEnvData: &'static str = "1.2.840.113549.1.7.4";
901 pub const szOID_RSA_digestedData: &'static str = "1.2.840.113549.1.7.5";
902 pub const szOID_RSA_hashedData: &'static str = "1.2.840.113549.1.7.5";
903 pub const szOID_RSA_encryptedData: &'static str = "1.2.840.113549.1.7.6";
904 pub const szOID_RSA_emailAddr: &'static str = "1.2.840.113549.1.9.1";
905 pub const szOID_RSA_unstructName: &'static str = "1.2.840.113549.1.9.2";
906 pub const szOID_RSA_contentType: &'static str = "1.2.840.113549.1.9.3";
907 pub const szOID_RSA_messageDigest: &'static str = "1.2.840.113549.1.9.4";
908 pub const szOID_RSA_signingTime: &'static str = "1.2.840.113549.1.9.5";
909 pub const szOID_RSA_counterSign: &'static str = "1.2.840.113549.1.9.6";
910 pub const szOID_RSA_challengePwd: &'static str = "1.2.840.113549.1.9.7";
911 pub const szOID_RSA_unstructAddr: &'static str = "1.2.840.113549.1.9.8";
912 pub const szOID_RSA_extCertAttrs: &'static str = "1.2.840.113549.1.9.9";
913 pub const szOID_RSA_certExtensions: &'static str = "1.2.840.113549.1.9.14";
914 pub const szOID_RSA_SMIMECapabilities: &'static str = "1.2.840.113549.1.9.15";
915 pub const szOID_RSA_preferSignedData: &'static str = "1.2.840.113549.1.9.15.1";
916 pub const szOID_TIMESTAMP_TOKEN: &'static str = "1.2.840.113549.1.9.16.1.4";
917 pub const szOID_RFC3161_counterSign: &'static str = "1.3.6.1.4.1.311.3.3.1";
918 pub const szOID_RSA_SMIMEalg: &'static str = "1.2.840.113549.1.9.16.3";
919 pub const szOID_RSA_SMIMEalgESDH: &'static str = "1.2.840.113549.1.9.16.3.5";
920 pub const szOID_RSA_SMIMEalgCMS3DESwrap: &'static str = "1.2.840.113549.1.9.16.3.6";
921 pub const szOID_RSA_SMIMEalgCMSRC2wrap: &'static str = "1.2.840.113549.1.9.16.3.7";
922 pub const szOID_RSA_MD2: &'static str = "1.2.840.113549.2.2";
923 pub const szOID_RSA_MD4: &'static str = "1.2.840.113549.2.4";
924 pub const szOID_RSA_MD5: &'static str = "1.2.840.113549.2.5";
925 pub const szOID_RSA_RC2CBC: &'static str = "1.2.840.113549.3.2";
926 pub const szOID_RSA_RC4: &'static str = "1.2.840.113549.3.4";
927 pub const szOID_RSA_DES_EDE3_CBC: &'static str = "1.2.840.113549.3.7";
928 pub const szOID_RSA_RC5_CBCPad: &'static str = "1.2.840.113549.3.9";
929 pub const szOID_ANSI_X942: &'static str = "1.2.840.10046";
930 pub const szOID_ANSI_X942_DH: &'static str = "1.2.840.10046.2.1";
931 pub const szOID_X957: &'static str = "1.2.840.10040";
932 pub const szOID_X957_DSA: &'static str = "1.2.840.10040.4.1";
933 pub const szOID_X957_SHA1DSA: &'static str = "1.2.840.10040.4.3";
934 pub const szOID_ECC_PUBLIC_KEY: &'static str = "1.2.840.10045.2.1";
935 pub const szOID_ECC_CURVE_P256: &'static str = "1.2.840.10045.3.1.7";
936 pub const szOID_ECC_CURVE_P384: &'static str = "1.3.132.0.34";
937 pub const szOID_ECC_CURVE_P521: &'static str = "1.3.132.0.35";
938 pub const szOID_ECC_CURVE_BRAINPOOLP160R1: &'static str = "1.3.36.3.3.2.8.1.1.1";
939 pub const szOID_ECC_CURVE_BRAINPOOLP160T1: &'static str = "1.3.36.3.3.2.8.1.1.2";
940 pub const szOID_ECC_CURVE_BRAINPOOLP192R1: &'static str = "1.3.36.3.3.2.8.1.1.3";
941 pub const szOID_ECC_CURVE_BRAINPOOLP192T1: &'static str = "1.3.36.3.3.2.8.1.1.4";
942 pub const szOID_ECC_CURVE_BRAINPOOLP224R1: &'static str = "1.3.36.3.3.2.8.1.1.5";
943 pub const szOID_ECC_CURVE_BRAINPOOLP224T1: &'static str = "1.3.36.3.3.2.8.1.1.6";
944 pub const szOID_ECC_CURVE_BRAINPOOLP256R1: &'static str = "1.3.36.3.3.2.8.1.1.7";
945 pub const szOID_ECC_CURVE_BRAINPOOLP256T1: &'static str = "1.3.36.3.3.2.8.1.1.8";
946 pub const szOID_ECC_CURVE_BRAINPOOLP320R1: &'static str = "1.3.36.3.3.2.8.1.1.9";
947 pub const szOID_ECC_CURVE_BRAINPOOLP320T1: &'static str = "1.3.36.3.3.2.8.1.1.10";
948 pub const szOID_ECC_CURVE_BRAINPOOLP384R1: &'static str = "1.3.36.3.3.2.8.1.1.11";
949 pub const szOID_ECC_CURVE_BRAINPOOLP384T1: &'static str = "1.3.36.3.3.2.8.1.1.12";
950 pub const szOID_ECC_CURVE_BRAINPOOLP512R1: &'static str = "1.3.36.3.3.2.8.1.1.13";
951 pub const szOID_ECC_CURVE_BRAINPOOLP512T1: &'static str = "1.3.36.3.3.2.8.1.1.14";
952 pub const szOID_ECC_CURVE_EC192WAPI: &'static str = "1.2.156.11235.1.1.2.1";
953 pub const szOID_CN_ECDSA_SHA256: &'static str = "1.2.156.11235.1.1.1";
954 pub const szOID_ECC_CURVE_NISTP192: &'static str = "1.2.840.10045.3.1.1";
955 pub const szOID_ECC_CURVE_NISTP224: &'static str = "1.3.132.0.33";
956 pub const szOID_ECC_CURVE_NISTP256: &'static str = szOID_ECC_CURVE_P256;
957 pub const szOID_ECC_CURVE_NISTP384: &'static str = szOID_ECC_CURVE_P384;
958 pub const szOID_ECC_CURVE_NISTP521: &'static str = szOID_ECC_CURVE_P521;
959 pub const szOID_ECC_CURVE_SECP160K1: &'static str = "1.3.132.0.9";
960 pub const szOID_ECC_CURVE_SECP160R1: &'static str = "1.3.132.0.8";
961 pub const szOID_ECC_CURVE_SECP160R2: &'static str = "1.3.132.0.30";
962 pub const szOID_ECC_CURVE_SECP192K1: &'static str = "1.3.132.0.31";
963 pub const szOID_ECC_CURVE_SECP192R1: &'static str = szOID_ECC_CURVE_NISTP192;
964 pub const szOID_ECC_CURVE_SECP224K1: &'static str = "1.3.132.0.32";
965 pub const szOID_ECC_CURVE_SECP224R1: &'static str = szOID_ECC_CURVE_NISTP224;
966 pub const szOID_ECC_CURVE_SECP256K1: &'static str = "1.3.132.0.10";
967 pub const szOID_ECC_CURVE_SECP256R1: &'static str = szOID_ECC_CURVE_P256;
968 pub const szOID_ECC_CURVE_SECP384R1: &'static str = szOID_ECC_CURVE_P384;
969 pub const szOID_ECC_CURVE_SECP521R1: &'static str = szOID_ECC_CURVE_P521;
970 pub const szOID_ECC_CURVE_WTLS7: &'static str = szOID_ECC_CURVE_SECP160R2;
971 pub const szOID_ECC_CURVE_WTLS9: &'static str = "2.23.43.1.4.9";
972 pub const szOID_ECC_CURVE_WTLS12: &'static str = szOID_ECC_CURVE_NISTP224;
973 pub const szOID_ECC_CURVE_X962P192V1: &'static str = "1.2.840.10045.3.1.1";
974 pub const szOID_ECC_CURVE_X962P192V2: &'static str = "1.2.840.10045.3.1.2";
975 pub const szOID_ECC_CURVE_X962P192V3: &'static str = "1.2.840.10045.3.1.3";
976 pub const szOID_ECC_CURVE_X962P239V1: &'static str = "1.2.840.10045.3.1.4";
977 pub const szOID_ECC_CURVE_X962P239V2: &'static str = "1.2.840.10045.3.1.5";
978 pub const szOID_ECC_CURVE_X962P239V3: &'static str = "1.2.840.10045.3.1.6";
979 pub const szOID_ECC_CURVE_X962P256V1: &'static str = szOID_ECC_CURVE_P256;
980 pub const szOID_ECDSA_SHA1: &'static str = "1.2.840.10045.4.1";
981 pub const szOID_ECDSA_SPECIFIED: &'static str = "1.2.840.10045.4.3";
982 pub const szOID_ECDSA_SHA256: &'static str = "1.2.840.10045.4.3.2";
983 pub const szOID_ECDSA_SHA384: &'static str = "1.2.840.10045.4.3.3";
984 pub const szOID_ECDSA_SHA512: &'static str = "1.2.840.10045.4.3.4";
985 pub const szOID_NIST_AES128_CBC: &'static str = "2.16.840.1.101.3.4.1.2";
986 pub const szOID_NIST_AES192_CBC: &'static str = "2.16.840.1.101.3.4.1.22";
987 pub const szOID_NIST_AES256_CBC: &'static str = "2.16.840.1.101.3.4.1.42";
988 pub const szOID_NIST_AES128_WRAP: &'static str = "2.16.840.1.101.3.4.1.5";
989 pub const szOID_NIST_AES192_WRAP: &'static str = "2.16.840.1.101.3.4.1.25";
990 pub const szOID_NIST_AES256_WRAP: &'static str = "2.16.840.1.101.3.4.1.45";
991 pub const szOID_DH_SINGLE_PASS_STDDH_SHA1_KDF: &'static str = "1.3.133.16.840.63.0.2";
992 pub const szOID_DH_SINGLE_PASS_STDDH_SHA256_KDF: &'static str = "1.3.132.1.11.1";
993 pub const szOID_DH_SINGLE_PASS_STDDH_SHA384_KDF: &'static str = "1.3.132.1.11.2";
994 pub const szOID_DS: &'static str = "2.5";
995 pub const szOID_DSALG: &'static str = "2.5.8";
996 pub const szOID_DSALG_CRPT: &'static str = "2.5.8.1";
997 pub const szOID_DSALG_HASH: &'static str = "2.5.8.2";
998 pub const szOID_DSALG_SIGN: &'static str = "2.5.8.3";
999 pub const szOID_DSALG_RSA: &'static str = "2.5.8.1.1";
1000 pub const szOID_OIW: &'static str = "1.3.14";
1001 pub const szOID_OIWSEC: &'static str = "1.3.14.3.2";
1002 pub const szOID_OIWSEC_md4RSA: &'static str = "1.3.14.3.2.2";
1003 pub const szOID_OIWSEC_md5RSA: &'static str = "1.3.14.3.2.3";
1004 pub const szOID_OIWSEC_md4RSA2: &'static str = "1.3.14.3.2.4";
1005 pub const szOID_OIWSEC_desECB: &'static str = "1.3.14.3.2.6";
1006 pub const szOID_OIWSEC_desCBC: &'static str = "1.3.14.3.2.7";
1007 pub const szOID_OIWSEC_desOFB: &'static str = "1.3.14.3.2.8";
1008 pub const szOID_OIWSEC_desCFB: &'static str = "1.3.14.3.2.9";
1009 pub const szOID_OIWSEC_desMAC: &'static str = "1.3.14.3.2.10";
1010 pub const szOID_OIWSEC_rsaSign: &'static str = "1.3.14.3.2.11";
1011 pub const szOID_OIWSEC_dsa: &'static str = "1.3.14.3.2.12";
1012 pub const szOID_OIWSEC_shaDSA: &'static str = "1.3.14.3.2.13";
1013 pub const szOID_OIWSEC_mdc2RSA: &'static str = "1.3.14.3.2.14";
1014 pub const szOID_OIWSEC_shaRSA: &'static str = "1.3.14.3.2.15";
1015 pub const szOID_OIWSEC_dhCommMod: &'static str = "1.3.14.3.2.16";
1016 pub const szOID_OIWSEC_desEDE: &'static str = "1.3.14.3.2.17";
1017 pub const szOID_OIWSEC_sha: &'static str = "1.3.14.3.2.18";
1018 pub const szOID_OIWSEC_mdc2: &'static str = "1.3.14.3.2.19";
1019 pub const szOID_OIWSEC_dsaComm: &'static str = "1.3.14.3.2.20";
1020 pub const szOID_OIWSEC_dsaCommSHA: &'static str = "1.3.14.3.2.21";
1021 pub const szOID_OIWSEC_rsaXchg: &'static str = "1.3.14.3.2.22";
1022 pub const szOID_OIWSEC_keyHashSeal: &'static str = "1.3.14.3.2.23";
1023 pub const szOID_OIWSEC_md2RSASign: &'static str = "1.3.14.3.2.24";
1024 pub const szOID_OIWSEC_md5RSASign: &'static str = "1.3.14.3.2.25";
1025 pub const szOID_OIWSEC_sha1: &'static str = "1.3.14.3.2.26";
1026 pub const szOID_OIWSEC_dsaSHA1: &'static str = "1.3.14.3.2.27";
1027 pub const szOID_OIWSEC_dsaCommSHA1: &'static str = "1.3.14.3.2.28";
1028 pub const szOID_OIWSEC_sha1RSASign: &'static str = "1.3.14.3.2.29";
1029 pub const szOID_OIWDIR: &'static str = "1.3.14.7.2";
1030 pub const szOID_OIWDIR_CRPT: &'static str = "1.3.14.7.2.1";
1031 pub const szOID_OIWDIR_HASH: &'static str = "1.3.14.7.2.2";
1032 pub const szOID_OIWDIR_SIGN: &'static str = "1.3.14.7.2.3";
1033 pub const szOID_OIWDIR_md2: &'static str = "1.3.14.7.2.2.1";
1034 pub const szOID_OIWDIR_md2RSA: &'static str = "1.3.14.7.2.3.1";
1035 pub const szOID_INFOSEC: &'static str = "2.16.840.1.101.2.1";
1036 pub const szOID_INFOSEC_sdnsSignature: &'static str = "2.16.840.1.101.2.1.1.1";
1037 pub const szOID_INFOSEC_mosaicSignature: &'static str = "2.16.840.1.101.2.1.1.2";
1038 pub const szOID_INFOSEC_sdnsConfidentiality: &'static str = "2.16.840.1.101.2.1.1.3";
1039 pub const szOID_INFOSEC_mosaicConfidentiality: &'static str = "2.16.840.1.101.2.1.1.4";
1040 pub const szOID_INFOSEC_sdnsIntegrity: &'static str = "2.16.840.1.101.2.1.1.5";
1041 pub const szOID_INFOSEC_mosaicIntegrity: &'static str = "2.16.840.1.101.2.1.1.6";
1042 pub const szOID_INFOSEC_sdnsTokenProtection: &'static str = "2.16.840.1.101.2.1.1.7";
1043 pub const szOID_INFOSEC_mosaicTokenProtection: &'static str = "2.16.840.1.101.2.1.1.8";
1044 pub const szOID_INFOSEC_sdnsKeyManagement: &'static str = "2.16.840.1.101.2.1.1.9";
1045 pub const szOID_INFOSEC_mosaicKeyManagement: &'static str = "2.16.840.1.101.2.1.1.10";
1046 pub const szOID_INFOSEC_sdnsKMandSig: &'static str = "2.16.840.1.101.2.1.1.11";
1047 pub const szOID_INFOSEC_mosaicKMandSig: &'static str = "2.16.840.1.101.2.1.1.12";
1048 pub const szOID_INFOSEC_SuiteASignature: &'static str = "2.16.840.1.101.2.1.1.13";
1049 pub const szOID_INFOSEC_SuiteAConfidentiality: &'static str = "2.16.840.1.101.2.1.1.14";
1050 pub const szOID_INFOSEC_SuiteAIntegrity: &'static str = "2.16.840.1.101.2.1.1.15";
1051 pub const szOID_INFOSEC_SuiteATokenProtection: &'static str = "2.16.840.1.101.2.1.1.16";
1052 pub const szOID_INFOSEC_SuiteAKeyManagement: &'static str = "2.16.840.1.101.2.1.1.17";
1053 pub const szOID_INFOSEC_SuiteAKMandSig: &'static str = "2.16.840.1.101.2.1.1.18";
1054 pub const szOID_INFOSEC_mosaicUpdatedSig: &'static str = "2.16.840.1.101.2.1.1.19";
1055 pub const szOID_INFOSEC_mosaicKMandUpdSig: &'static str = "2.16.840.1.101.2.1.1.20";
1056 pub const szOID_INFOSEC_mosaicUpdatedInteg: &'static str = "2.16.840.1.101.2.1.1.21";
1057 pub const szOID_NIST_sha256: &'static str = "2.16.840.1.101.3.4.2.1";
1058 pub const szOID_NIST_sha384: &'static str = "2.16.840.1.101.3.4.2.2";
1059 pub const szOID_NIST_sha512: &'static str = "2.16.840.1.101.3.4.2.3";
1060 STRUCT!{struct CRYPT_OBJID_TABLE {
1061     dwAlgId: DWORD,
1062     pszObjId: LPCSTR,
1063 }}
1064 pub type PCRYPT_OBJID_TABLE = *mut CRYPT_OBJID_TABLE;
1065 STRUCT!{struct CRYPT_HASH_INFO {
1066     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
1067     Hash: CRYPT_HASH_BLOB,
1068 }}
1069 pub type PCRYPT_HASH_INFO = *mut CRYPT_HASH_INFO;
1070 STRUCT!{struct CERT_EXTENSION {
1071     pszObjId: LPSTR,
1072     fCritical: BOOL,
1073     Value: CRYPT_OBJID_BLOB,
1074 }}
1075 pub type PCERT_EXTENSION = *mut CERT_EXTENSION;
1076 pub type PCCERT_EXTENSION = *const CERT_EXTENSION;
1077 STRUCT!{struct CRYPT_ATTRIBUTE_TYPE_VALUE {
1078     pszObjId: LPSTR,
1079     Value: CRYPT_OBJID_BLOB,
1080 }}
1081 pub type PCRYPT_ATTRIBUTE_TYPE_VALUE = *mut CRYPT_ATTRIBUTE_TYPE_VALUE;
1082 STRUCT!{struct CRYPT_ATTRIBUTE {
1083     pszObjId: LPSTR,
1084     cValue: DWORD,
1085     rgValue: PCRYPT_ATTR_BLOB,
1086 }}
1087 pub type PCRYPT_ATTRIBUTE = *mut CRYPT_ATTRIBUTE;
1088 STRUCT!{struct CRYPT_ATTRIBUTES {
1089     cAttr: DWORD,
1090     rgAttr: PCRYPT_ATTRIBUTE,
1091 }}
1092 pub type PCRYPT_ATTRIBUTES = *mut CRYPT_ATTRIBUTES;
1093 STRUCT!{struct CERT_RDN_ATTR {
1094     pszObjId: LPSTR,
1095     dwValueType: DWORD,
1096     Value: CERT_RDN_VALUE_BLOB,
1097 }}
1098 pub type PCERT_RDN_ATTR = *mut CERT_RDN_ATTR;
1099 pub const szOID_COMMON_NAME: &'static str = "2.5.4.3";
1100 pub const szOID_SUR_NAME: &'static str = "2.5.4.4";
1101 pub const szOID_DEVICE_SERIAL_NUMBER: &'static str = "2.5.4.5";
1102 pub const szOID_COUNTRY_NAME: &'static str = "2.5.4.6";
1103 pub const szOID_LOCALITY_NAME: &'static str = "2.5.4.7";
1104 pub const szOID_STATE_OR_PROVINCE_NAME: &'static str = "2.5.4.8";
1105 pub const szOID_STREET_ADDRESS: &'static str = "2.5.4.9";
1106 pub const szOID_ORGANIZATION_NAME: &'static str = "2.5.4.10";
1107 pub const szOID_ORGANIZATIONAL_UNIT_NAME: &'static str = "2.5.4.11";
1108 pub const szOID_TITLE: &'static str = "2.5.4.12";
1109 pub const szOID_DESCRIPTION: &'static str = "2.5.4.13";
1110 pub const szOID_SEARCH_GUIDE: &'static str = "2.5.4.14";
1111 pub const szOID_BUSINESS_CATEGORY: &'static str = "2.5.4.15";
1112 pub const szOID_POSTAL_ADDRESS: &'static str = "2.5.4.16";
1113 pub const szOID_POSTAL_CODE: &'static str = "2.5.4.17";
1114 pub const szOID_POST_OFFICE_BOX: &'static str = "2.5.4.18";
1115 pub const szOID_PHYSICAL_DELIVERY_OFFICE_NAME: &'static str = "2.5.4.19";
1116 pub const szOID_TELEPHONE_NUMBER: &'static str = "2.5.4.20";
1117 pub const szOID_TELEX_NUMBER: &'static str = "2.5.4.21";
1118 pub const szOID_TELETEXT_TERMINAL_IDENTIFIER: &'static str = "2.5.4.22";
1119 pub const szOID_FACSIMILE_TELEPHONE_NUMBER: &'static str = "2.5.4.23";
1120 pub const szOID_X21_ADDRESS: &'static str = "2.5.4.24";
1121 pub const szOID_INTERNATIONAL_ISDN_NUMBER: &'static str = "2.5.4.25";
1122 pub const szOID_REGISTERED_ADDRESS: &'static str = "2.5.4.26";
1123 pub const szOID_DESTINATION_INDICATOR: &'static str = "2.5.4.27";
1124 pub const szOID_PREFERRED_DELIVERY_METHOD: &'static str = "2.5.4.28";
1125 pub const szOID_PRESENTATION_ADDRESS: &'static str = "2.5.4.29";
1126 pub const szOID_SUPPORTED_APPLICATION_CONTEXT: &'static str = "2.5.4.30";
1127 pub const szOID_MEMBER: &'static str = "2.5.4.31";
1128 pub const szOID_OWNER: &'static str = "2.5.4.32";
1129 pub const szOID_ROLE_OCCUPANT: &'static str = "2.5.4.33";
1130 pub const szOID_SEE_ALSO: &'static str = "2.5.4.34";
1131 pub const szOID_USER_PASSWORD: &'static str = "2.5.4.35";
1132 pub const szOID_USER_CERTIFICATE: &'static str = "2.5.4.36";
1133 pub const szOID_CA_CERTIFICATE: &'static str = "2.5.4.37";
1134 pub const szOID_AUTHORITY_REVOCATION_LIST: &'static str = "2.5.4.38";
1135 pub const szOID_CERTIFICATE_REVOCATION_LIST: &'static str = "2.5.4.39";
1136 pub const szOID_CROSS_CERTIFICATE_PAIR: &'static str = "2.5.4.40";
1137 pub const szOID_GIVEN_NAME: &'static str = "2.5.4.42";
1138 pub const szOID_INITIALS: &'static str = "2.5.4.43";
1139 pub const szOID_DN_QUALIFIER: &'static str = "2.5.4.46";
1140 pub const szOID_DOMAIN_COMPONENT: &'static str = "0.9.2342.19200300.100.1.25";
1141 pub const szOID_PKCS_12_FRIENDLY_NAME_ATTR: &'static str = "1.2.840.113549.1.9.20";
1142 pub const szOID_PKCS_12_LOCAL_KEY_ID: &'static str = "1.2.840.113549.1.9.21";
1143 pub const szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR: &'static str = "1.3.6.1.4.1.311.17.1";
1144 pub const szOID_LOCAL_MACHINE_KEYSET: &'static str = "1.3.6.1.4.1.311.17.2";
1145 pub const szOID_PKCS_12_EXTENDED_ATTRIBUTES: &'static str = "1.3.6.1.4.1.311.17.3";
1146 pub const szOID_PKCS_12_PROTECTED_PASSWORD_SECRET_BAG_TYPE_ID: &'static str
1147     = "1.3.6.1.4.1.311.17.4";
1148 pub const szOID_KEYID_RDN: &'static str = "1.3.6.1.4.1.311.10.7.1";
1149 pub const szOID_EV_RDN_LOCALE: &'static str = "1.3.6.1.4.1.311.60.2.1.1";
1150 pub const szOID_EV_RDN_STATE_OR_PROVINCE: &'static str = "1.3.6.1.4.1.311.60.2.1.2";
1151 pub const szOID_EV_RDN_COUNTRY: &'static str = "1.3.6.1.4.1.311.60.2.1.3";
1152 pub const CERT_RDN_ANY_TYPE: DWORD = 0;
1153 pub const CERT_RDN_ENCODED_BLOB: DWORD = 1;
1154 pub const CERT_RDN_OCTET_STRING: DWORD = 2;
1155 pub const CERT_RDN_NUMERIC_STRING: DWORD = 3;
1156 pub const CERT_RDN_PRINTABLE_STRING: DWORD = 4;
1157 pub const CERT_RDN_TELETEX_STRING: DWORD = 5;
1158 pub const CERT_RDN_T61_STRING: DWORD = 5;
1159 pub const CERT_RDN_VIDEOTEX_STRING: DWORD = 6;
1160 pub const CERT_RDN_IA5_STRING: DWORD = 7;
1161 pub const CERT_RDN_GRAPHIC_STRING: DWORD = 8;
1162 pub const CERT_RDN_VISIBLE_STRING: DWORD = 9;
1163 pub const CERT_RDN_ISO646_STRING: DWORD = 9;
1164 pub const CERT_RDN_GENERAL_STRING: DWORD = 10;
1165 pub const CERT_RDN_UNIVERSAL_STRING: DWORD = 11;
1166 pub const CERT_RDN_INT4_STRING: DWORD = 11;
1167 pub const CERT_RDN_BMP_STRING: DWORD = 12;
1168 pub const CERT_RDN_UNICODE_STRING: DWORD = 12;
1169 pub const CERT_RDN_UTF8_STRING: DWORD = 13;
1170 pub const CERT_RDN_TYPE_MASK: DWORD = 0x000000FF;
1171 pub const CERT_RDN_FLAGS_MASK: DWORD = 0xFF000000;
1172 pub const CERT_RDN_ENABLE_T61_UNICODE_FLAG: DWORD = 0x80000000;
1173 pub const CERT_RDN_ENABLE_UTF8_UNICODE_FLAG: DWORD = 0x20000000;
1174 pub const CERT_RDN_FORCE_UTF8_UNICODE_FLAG: DWORD = 0x10000000;
1175 pub const CERT_RDN_DISABLE_CHECK_TYPE_FLAG: DWORD = 0x40000000;
1176 pub const CERT_RDN_DISABLE_IE4_UTF8_FLAG: DWORD = 0x01000000;
1177 pub const CERT_RDN_ENABLE_PUNYCODE_FLAG: DWORD = 0x02000000;
1178 #[inline]
IS_CERT_RDN_CHAR_STRING(X: DWORD) -> bool1179 pub fn IS_CERT_RDN_CHAR_STRING(X: DWORD) -> bool {
1180     (X & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING
1181 }
1182 STRUCT!{struct CERT_RDN {
1183     cRDNAttr: DWORD,
1184     rgRDNAttr: PCERT_RDN_ATTR,
1185 }}
1186 pub type PCERT_RDN = *mut CERT_RDN;
1187 STRUCT!{struct CERT_NAME_INFO {
1188     cRDN: DWORD,
1189     rgRDN: PCERT_RDN,
1190 }}
1191 pub type PCERT_NAME_INFO = *mut CERT_NAME_INFO;
1192 STRUCT!{struct CERT_NAME_VALUE {
1193     dwValueType: DWORD,
1194     Value: CERT_RDN_VALUE_BLOB,
1195 }}
1196 pub type PCERT_NAME_VALUE = *mut CERT_NAME_VALUE;
1197 STRUCT!{struct CERT_PUBLIC_KEY_INFO {
1198     Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
1199     PublicKey: CRYPT_BIT_BLOB,
1200 }}
1201 pub type PCERT_PUBLIC_KEY_INFO = *mut CERT_PUBLIC_KEY_INFO;
1202 pub const CERT_RSA_PUBLIC_KEY_OBJID: &'static str = szOID_RSA_RSA;
1203 pub const CERT_DEFAULT_OID_PUBLIC_KEY_SIGN: &'static str = szOID_RSA_RSA;
1204 pub const CERT_DEFAULT_OID_PUBLIC_KEY_XCHG: &'static str = szOID_RSA_RSA;
1205 STRUCT!{struct CRYPT_ECC_PRIVATE_KEY_INFO {
1206     dwVersion: DWORD,
1207     PrivateKey: CRYPT_DER_BLOB,
1208     szCurveOid: LPSTR,
1209     PublicKey: CRYPT_BIT_BLOB,
1210 }}
1211 pub type PCRYPT_ECC_PRIVATE_KEY_INFO = *mut CRYPT_ECC_PRIVATE_KEY_INFO;
1212 pub const CRYPT_ECC_PRIVATE_KEY_INFO_v1: DWORD = 1;
1213 STRUCT!{struct CRYPT_PRIVATE_KEY_INFO {
1214     Version: DWORD,
1215     Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
1216     PrivateKey: CRYPT_DER_BLOB,
1217     pAttributes: PCRYPT_ATTRIBUTES,
1218 }}
1219 pub type PCRYPT_PRIVATE_KEY_INFO = *mut CRYPT_PRIVATE_KEY_INFO;
1220 STRUCT!{struct CRYPT_ENCRYPTED_PRIVATE_KEY_INFO {
1221     EncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
1222     EncryptedPrivateKey: CRYPT_DATA_BLOB,
1223 }}
1224 pub type PCRYPT_ENCRYPTED_PRIVATE_KEY_INFO = *mut CRYPT_ENCRYPTED_PRIVATE_KEY_INFO;
1225 FN!{stdcall PCRYPT_DECRYPT_PRIVATE_KEY_FUNC(
1226     Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
1227     EncryptedPrivateKey: CRYPT_DATA_BLOB,
1228     pbClearTextKey: *mut BYTE,
1229     pcbClearTextKey: *mut DWORD,
1230     pVoidDecryptFunc: LPVOID,
1231 ) -> BOOL}
1232 FN!{stdcall PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC(
1233     Algorithm: *mut CRYPT_ALGORITHM_IDENTIFIER,
1234     pClearTextPrivateKey: *mut CRYPT_DATA_BLOB,
1235     pbEncryptedKey: *mut BYTE,
1236     pcbEncryptedKey: *mut DWORD,
1237     pVoidEncryptFunc: LPVOID,
1238 ) -> BOOL}
1239 FN!{stdcall PCRYPT_RESOLVE_HCRYPTPROV_FUNC(
1240     pPrivateKeyInfo: *mut CRYPT_PRIVATE_KEY_INFO,
1241     phCryptProv: *mut HCRYPTPROV,
1242     pVoidResolveFunc: LPVOID,
1243 ) -> BOOL}
1244 STRUCT!{struct CRYPT_PKCS8_IMPORT_PARAMS {
1245     PrivateKey: CRYPT_DIGEST_BLOB,
1246     pResolvehCryptProvFunc: PCRYPT_RESOLVE_HCRYPTPROV_FUNC,
1247     pVoidResolveFunc: LPVOID,
1248     pDecryptPrivateKeyFunc: PCRYPT_DECRYPT_PRIVATE_KEY_FUNC,
1249     pVoidDecryptFunc: LPVOID,
1250 }}
1251 pub type PCRYPT_PKCS8_IMPORT_PARAMS = *mut CRYPT_PKCS8_IMPORT_PARAMS;
1252 pub type CRYPT_PRIVATE_KEY_BLOB_AND_PARAMS = CRYPT_PKCS8_IMPORT_PARAMS;
1253 pub type PPCRYPT_PRIVATE_KEY_BLOB_AND_PARAMS = *mut CRYPT_PKCS8_IMPORT_PARAMS;
1254 STRUCT!{struct CRYPT_PKCS8_EXPORT_PARAMS {
1255     hCryptProv: HCRYPTPROV,
1256     dwKeySpec: DWORD,
1257     pszPrivateKeyObjId: LPSTR,
1258     pEncryptPrivateKeyFunc: PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC,
1259     pVoidEncryptFunc: LPVOID,
1260 }}
1261 pub type PCRYPT_PKCS8_EXPORT_PARAMS = *mut CRYPT_PKCS8_EXPORT_PARAMS;
1262 STRUCT!{struct CERT_INFO {
1263     dwVersion: DWORD,
1264     SerialNumber: CRYPT_INTEGER_BLOB,
1265     SignatureAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
1266     Issuer: CERT_NAME_BLOB,
1267     NotBefore: FILETIME,
1268     NotAfter: FILETIME,
1269     Subject: CERT_NAME_BLOB,
1270     SubjectPublicKeyInfo: CERT_PUBLIC_KEY_INFO,
1271     IssuerUniqueId: CRYPT_BIT_BLOB,
1272     SubjectUniqueId: CRYPT_BIT_BLOB,
1273     cExtension: DWORD,
1274     rgExtension: PCERT_EXTENSION,
1275 }}
1276 pub type PCERT_INFO = *mut CERT_INFO;
1277 pub const CERT_V1: DWORD = 0;
1278 pub const CERT_V2: DWORD = 1;
1279 pub const CERT_V3: DWORD = 2;
1280 pub const CERT_INFO_VERSION_FLAG: DWORD = 1;
1281 pub const CERT_INFO_SERIAL_NUMBER_FLAG: DWORD = 2;
1282 pub const CERT_INFO_SIGNATURE_ALGORITHM_FLAG: DWORD = 3;
1283 pub const CERT_INFO_ISSUER_FLAG: DWORD = 4;
1284 pub const CERT_INFO_NOT_BEFORE_FLAG: DWORD = 5;
1285 pub const CERT_INFO_NOT_AFTER_FLAG: DWORD = 6;
1286 pub const CERT_INFO_SUBJECT_FLAG: DWORD = 7;
1287 pub const CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG: DWORD = 8;
1288 pub const CERT_INFO_ISSUER_UNIQUE_ID_FLAG: DWORD = 9;
1289 pub const CERT_INFO_SUBJECT_UNIQUE_ID_FLAG: DWORD = 10;
1290 pub const CERT_INFO_EXTENSION_FLAG: DWORD = 11;
1291 STRUCT!{struct CRL_ENTRY {
1292     SerialNumber: CRYPT_INTEGER_BLOB,
1293     RevocationDate: FILETIME,
1294     cExtension: DWORD,
1295     rgExtension: PCERT_EXTENSION,
1296 }}
1297 pub type PCRL_ENTRY = *mut CRL_ENTRY;
1298 STRUCT!{struct CRL_INFO {
1299     dwVersion: DWORD,
1300     SignatureAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
1301     Issuer: CERT_NAME_BLOB,
1302     ThisUpdate: FILETIME,
1303     NextUpdate: FILETIME,
1304     cCRLEntry: DWORD,
1305     rgCRLEntry: PCRL_ENTRY,
1306     cExtension: DWORD,
1307     rgExtension: PCERT_EXTENSION,
1308 }}
1309 pub type PCRL_INFO = *mut CRL_INFO;
1310 pub const CRL_V1: DWORD = 0;
1311 pub const CRL_V2: DWORD = 1;
1312 pub const CERT_BUNDLE_CERTIFICATE: DWORD = 0;
1313 pub const CERT_BUNDLE_CRL: DWORD = 1;
1314 STRUCT!{struct CERT_OR_CRL_BLOB {
1315     dwChoice: DWORD,
1316     cbEncoded: DWORD,
1317     pbEncoded: *mut BYTE,
1318 }}
1319 pub type PCERT_OR_CRL_BLOB = *mut CERT_OR_CRL_BLOB;
1320 STRUCT!{struct CERT_OR_CRL_BUNDLE {
1321     cItem: DWORD,
1322     rgItem: PCERT_OR_CRL_BLOB,
1323 }}
1324 pub type PCERT_OR_CRL_BUNDLE = *mut CERT_OR_CRL_BUNDLE;
1325 STRUCT!{struct CERT_REQUEST_INFO {
1326     dwVersion: DWORD,
1327     Subject: CERT_NAME_BLOB,
1328     SubjectPublicKeyInfo: CERT_PUBLIC_KEY_INFO,
1329     cAttribute: DWORD,
1330     rgAttribute: PCRYPT_ATTRIBUTE,
1331 }}
1332 pub type PCERT_REQUEST_INFO = *mut CERT_REQUEST_INFO;
1333 pub const CERT_REQUEST_V1: DWORD = 0;
1334 STRUCT!{struct CERT_KEYGEN_REQUEST_INFO {
1335     dwVersion: DWORD,
1336     SubjectPublicKeyInfo: CERT_PUBLIC_KEY_INFO,
1337     pwszChallengeString: LPWSTR,
1338 }}
1339 pub type PCERT_KEYGEN_REQUEST_INFO = *mut CERT_KEYGEN_REQUEST_INFO;
1340 pub const CERT_KEYGEN_REQUEST_V1: DWORD = 0;
1341 STRUCT!{struct CERT_SIGNED_CONTENT_INFO {
1342     ToBeSigned: CRYPT_DER_BLOB,
1343     SignatureAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
1344     Signature: CRYPT_BIT_BLOB,
1345 }}
1346 pub type PCERT_SIGNED_CONTENT_INFO = *mut CERT_SIGNED_CONTENT_INFO;
1347 STRUCT!{struct CTL_USAGE {
1348     cUsageIdentifier: DWORD,
1349     rgpszUsageIdentifier: *mut LPSTR,
1350 }}
1351 pub type PCTL_USAGE = *mut CTL_USAGE;
1352 pub type CERT_ENHKEY_USAGE = CTL_USAGE;
1353 pub type PCERT_ENHKEY_USAGE = *mut CERT_ENHKEY_USAGE;
1354 pub type PCCTL_USAGE = *const CTL_USAGE;
1355 pub type PCCERT_ENHKEY_USAGE = *const CERT_ENHKEY_USAGE;
1356 STRUCT!{struct CTL_ENTRY {
1357     SubjectIdentifier: CRYPT_DATA_BLOB,
1358     cAttribute: DWORD,
1359     rgAttribute: PCRYPT_ATTRIBUTE,
1360 }}
1361 pub type PCTL_ENTRY = *mut CTL_ENTRY;
1362 STRUCT!{struct CTL_INFO {
1363     dwVersion: DWORD,
1364     SubjectUsage: CTL_USAGE,
1365     ListIdentifier: CRYPT_DATA_BLOB,
1366     SequenceNumber: CRYPT_INTEGER_BLOB,
1367     ThisUpdate: FILETIME,
1368     NextUpdate: FILETIME,
1369     SubjectAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
1370     cCTLEntry: DWORD,
1371     rgCTLEntry: PCTL_ENTRY,
1372     cExtension: DWORD,
1373     rgExtension: PCERT_EXTENSION,
1374 }}
1375 pub type PCTL_INFO = *mut CTL_INFO;
1376 pub const CTL_V1: DWORD = 0;
1377 STRUCT!{struct CRYPT_TIME_STAMP_REQUEST_INFO {
1378     pszTimeStampAlgorithm: LPSTR,
1379     pszContentType: LPSTR,
1380     Content: CRYPT_OBJID_BLOB,
1381     cAttribute: DWORD,
1382     rgAttribute: PCRYPT_ATTRIBUTE,
1383 }}
1384 pub type PCRYPT_TIME_STAMP_REQUEST_INFO = *mut CRYPT_TIME_STAMP_REQUEST_INFO;
1385 STRUCT!{struct CRYPT_ENROLLMENT_NAME_VALUE_PAIR {
1386     pwszName: LPWSTR,
1387     pwszValue: LPWSTR,
1388 }}
1389 pub type PCRYPT_ENROLLMENT_NAME_VALUE_PAIR = *mut CRYPT_ENROLLMENT_NAME_VALUE_PAIR;
1390 STRUCT!{struct CRYPT_CSP_PROVIDER {
1391     dwKeySpec: DWORD,
1392     pwszProviderName: LPWSTR,
1393     Signature: CRYPT_BIT_BLOB,
1394 }}
1395 pub type PCRYPT_CSP_PROVIDER = *mut CRYPT_CSP_PROVIDER;
1396 pub const CERT_ENCODING_TYPE_MASK: DWORD = 0x0000FFFF;
1397 pub const CMSG_ENCODING_TYPE_MASK: DWORD = 0xFFFF0000;
1398 #[inline]
GET_CERT_ENCODING_TYPE(X: DWORD) -> DWORD1399 pub fn GET_CERT_ENCODING_TYPE(X: DWORD) -> DWORD {
1400     X & CERT_ENCODING_TYPE_MASK
1401 }
1402 #[inline]
GET_CMSG_ENCODING_TYPE(X: DWORD) -> DWORD1403 pub fn GET_CMSG_ENCODING_TYPE(X: DWORD) -> DWORD {
1404     X & CMSG_ENCODING_TYPE_MASK
1405 }
1406 pub const CRYPT_ASN_ENCODING: DWORD = 0x00000001;
1407 pub const CRYPT_NDR_ENCODING: DWORD = 0x00000002;
1408 pub const X509_ASN_ENCODING: DWORD = 0x00000001;
1409 pub const X509_NDR_ENCODING: DWORD = 0x00000002;
1410 pub const PKCS_7_ASN_ENCODING: DWORD = 0x00010000;
1411 pub const PKCS_7_NDR_ENCODING: DWORD = 0x00020000;
1412 extern "system" {
CryptFormatObject( dwCertEncodingType: DWORD, dwFormatType: DWORD, dwFormatStrType: DWORD, pFormatStruct: *mut c_void, lpszStructType: LPCSTR, pbEncoded: *const BYTE, cbEncoded: DWORD, pbFormat: *mut c_void, pcbFormat: *mut DWORD, ) -> BOOL1413     pub fn CryptFormatObject(
1414         dwCertEncodingType: DWORD,
1415         dwFormatType: DWORD,
1416         dwFormatStrType: DWORD,
1417         pFormatStruct: *mut c_void,
1418         lpszStructType: LPCSTR,
1419         pbEncoded: *const BYTE,
1420         cbEncoded: DWORD,
1421         pbFormat: *mut c_void,
1422         pcbFormat: *mut DWORD,
1423     ) -> BOOL;
1424 }
1425 pub const CRYPT_FORMAT_STR_MULTI_LINE: DWORD = 0x0001;
1426 pub const CRYPT_FORMAT_STR_NO_HEX: DWORD = 0x0010;
1427 pub const CRYPT_FORMAT_SIMPLE: DWORD = 0x0001;
1428 pub const CRYPT_FORMAT_X509: DWORD = 0x0002;
1429 pub const CRYPT_FORMAT_OID: DWORD = 0x0004;
1430 pub const CRYPT_FORMAT_RDN_SEMICOLON: DWORD = 0x0100;
1431 pub const CRYPT_FORMAT_RDN_CRLF: DWORD = 0x0200;
1432 pub const CRYPT_FORMAT_RDN_UNQUOTE: DWORD = 0x0400;
1433 pub const CRYPT_FORMAT_RDN_REVERSE: DWORD = 0x0800;
1434 pub const CRYPT_FORMAT_COMMA: DWORD = 0x1000;
1435 pub const CRYPT_FORMAT_SEMICOLON: DWORD = CRYPT_FORMAT_RDN_SEMICOLON;
1436 pub const CRYPT_FORMAT_CRLF: DWORD = CRYPT_FORMAT_RDN_CRLF;
1437 FN!{stdcall PFN_CRYPT_ALLOC(
1438     cbSize: size_t,
1439 ) -> LPVOID}
1440 FN!{stdcall PFN_CRYPT_FREE(
1441     pv: LPVOID,
1442 ) -> ()}
1443 STRUCT!{struct CRYPT_ENCODE_PARA {
1444     cbSize: DWORD,
1445     pfnAlloc: PFN_CRYPT_ALLOC,
1446     pfnFree: PFN_CRYPT_FREE,
1447 }}
1448 pub type PCRYPT_ENCODE_PARA = *mut CRYPT_ENCODE_PARA;
1449 extern "system" {
CryptEncodeObjectEx( dwCertEncodingType: DWORD, lpszStructType: LPCSTR, pvStructInfo: *const c_void, dwFlags: DWORD, pEncodePara: PCRYPT_ENCODE_PARA, pvEncoded: *mut c_void, pcbEncoded: *mut DWORD, ) -> BOOL1450     pub fn CryptEncodeObjectEx(
1451         dwCertEncodingType: DWORD,
1452         lpszStructType: LPCSTR,
1453         pvStructInfo: *const c_void,
1454         dwFlags: DWORD,
1455         pEncodePara: PCRYPT_ENCODE_PARA,
1456         pvEncoded: *mut c_void,
1457         pcbEncoded: *mut DWORD,
1458     ) -> BOOL;
CryptEncodeObject( dwCertEncodingType: DWORD, lpszStructType: LPCSTR, pvStructInfo: *const c_void, pbEncoded: *mut BYTE, pcbEncoded: *mut DWORD, ) -> BOOL1459     pub fn CryptEncodeObject(
1460         dwCertEncodingType: DWORD,
1461         lpszStructType: LPCSTR,
1462         pvStructInfo: *const c_void,
1463         pbEncoded: *mut BYTE,
1464         pcbEncoded: *mut DWORD,
1465     ) -> BOOL;
1466 }
1467 pub const CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG: DWORD = 0x8;
1468 pub const CRYPT_ENCODE_ALLOC_FLAG: DWORD = 0x8000;
1469 pub const CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG: DWORD
1470     = CERT_RDN_ENABLE_T61_UNICODE_FLAG;
1471 pub const CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG: DWORD
1472     = CERT_RDN_ENABLE_UTF8_UNICODE_FLAG;
1473 pub const CRYPT_UNICODE_NAME_ENCODE_FORCE_UTF8_UNICODE_FLAG: DWORD
1474     = CERT_RDN_FORCE_UTF8_UNICODE_FLAG;
1475 pub const CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG: DWORD
1476     = CERT_RDN_DISABLE_CHECK_TYPE_FLAG;
1477 pub const CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG: DWORD = 0x10000;
1478 pub const CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG: DWORD = 0x20000;
1479 pub const CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG: DWORD = 0x40000;
1480 pub const CRYPT_ENCODE_ENABLE_IA5CONVERSION_FLAG: DWORD = CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG
1481     | CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG;
1482 STRUCT!{struct CRYPT_DECODE_PARA {
1483     cbSize: DWORD,
1484     pfnAlloc: PFN_CRYPT_ALLOC,
1485     pfnFree: PFN_CRYPT_FREE,
1486 }}
1487 pub type PCRYPT_DECODE_PARA = *mut CRYPT_DECODE_PARA;
1488 extern "system" {
CryptDecodeObjectEx( dwCertEncodingType: DWORD, lpszStructType: LPCSTR, pbEncoded: *const BYTE, cbEncoded: DWORD, dwFlags: DWORD, pDecodePara: PCRYPT_DECODE_PARA, pvStructInfo: *mut c_void, pcbStructInfo: *mut DWORD, ) -> BOOL1489     pub fn CryptDecodeObjectEx(
1490         dwCertEncodingType: DWORD,
1491         lpszStructType: LPCSTR,
1492         pbEncoded: *const BYTE,
1493         cbEncoded: DWORD,
1494         dwFlags: DWORD,
1495         pDecodePara: PCRYPT_DECODE_PARA,
1496         pvStructInfo: *mut c_void,
1497         pcbStructInfo: *mut DWORD,
1498     ) -> BOOL;
CryptDecodeObject( dwCertEncodingType: DWORD, lpszStructType: LPCSTR, pbEncoded: *const BYTE, cbEncoded: DWORD, dwFlags: DWORD, pvStructInfo: *mut c_void, pcbStructInfo: *mut DWORD, ) -> BOOL1499     pub fn CryptDecodeObject(
1500         dwCertEncodingType: DWORD,
1501         lpszStructType: LPCSTR,
1502         pbEncoded: *const BYTE,
1503         cbEncoded: DWORD,
1504         dwFlags: DWORD,
1505         pvStructInfo: *mut c_void,
1506         pcbStructInfo: *mut DWORD,
1507     ) -> BOOL;
1508 }
1509 pub const CRYPT_DECODE_NOCOPY_FLAG: DWORD = 0x1;
1510 pub const CRYPT_DECODE_TO_BE_SIGNED_FLAG: DWORD = 0x2;
1511 pub const CRYPT_DECODE_SHARE_OID_STRING_FLAG: DWORD = 0x4;
1512 pub const CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG: DWORD = 0x8;
1513 pub const CRYPT_DECODE_ALLOC_FLAG: DWORD = 0x8000;
1514 pub const CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG: DWORD
1515     = CERT_RDN_DISABLE_IE4_UTF8_FLAG;
1516 pub const CRYPT_DECODE_ENABLE_PUNYCODE_FLAG: DWORD = 0x02000000;
1517 pub const CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG: DWORD = 0x04000000;
1518 pub const CRYPT_DECODE_ENABLE_IA5CONVERSION_FLAG: DWORD = CRYPT_DECODE_ENABLE_PUNYCODE_FLAG
1519     | CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG;
1520 pub const CRYPT_ENCODE_DECODE_NONE: LPCSTR = 0 as LPCSTR;
1521 pub const X509_CERT: LPCSTR = 1 as LPCSTR;
1522 pub const X509_CERT_TO_BE_SIGNED: LPCSTR = 2 as LPCSTR;
1523 pub const X509_CERT_CRL_TO_BE_SIGNED: LPCSTR = 3 as LPCSTR;
1524 pub const X509_CERT_REQUEST_TO_BE_SIGNED: LPCSTR = 4 as LPCSTR;
1525 pub const X509_EXTENSIONS: LPCSTR = 5 as LPCSTR;
1526 pub const X509_NAME_VALUE: LPCSTR = 6 as LPCSTR;
1527 pub const X509_NAME: LPCSTR = 7 as LPCSTR;
1528 pub const X509_PUBLIC_KEY_INFO: LPCSTR = 8 as LPCSTR;
1529 pub const X509_AUTHORITY_KEY_ID: LPCSTR = 9 as LPCSTR;
1530 pub const X509_KEY_ATTRIBUTES: LPCSTR = 10 as LPCSTR;
1531 pub const X509_KEY_USAGE_RESTRICTION: LPCSTR = 11 as LPCSTR;
1532 pub const X509_ALTERNATE_NAME: LPCSTR = 12 as LPCSTR;
1533 pub const X509_BASIC_CONSTRAINTS: LPCSTR = 13 as LPCSTR;
1534 pub const X509_KEY_USAGE: LPCSTR = 14 as LPCSTR;
1535 pub const X509_BASIC_CONSTRAINTS2: LPCSTR = 15 as LPCSTR;
1536 pub const X509_CERT_POLICIES: LPCSTR = 16 as LPCSTR;
1537 pub const PKCS_UTC_TIME: LPCSTR = 17 as LPCSTR;
1538 pub const PKCS_TIME_REQUEST: LPCSTR = 18 as LPCSTR;
1539 pub const RSA_CSP_PUBLICKEYBLOB: LPCSTR = 19 as LPCSTR;
1540 pub const X509_UNICODE_NAME: LPCSTR = 20 as LPCSTR;
1541 pub const X509_KEYGEN_REQUEST_TO_BE_SIGNED: LPCSTR = 21 as LPCSTR;
1542 pub const PKCS_ATTRIBUTE: LPCSTR = 22 as LPCSTR;
1543 pub const PKCS_CONTENT_INFO_SEQUENCE_OF_ANY: LPCSTR = 23 as LPCSTR;
1544 pub const X509_UNICODE_NAME_VALUE: LPCSTR = 24 as LPCSTR;
1545 pub const X509_ANY_STRING: LPCSTR = X509_NAME_VALUE;
1546 pub const X509_UNICODE_ANY_STRING: LPCSTR = X509_UNICODE_NAME_VALUE;
1547 pub const X509_OCTET_STRING: LPCSTR = 25 as LPCSTR;
1548 pub const X509_BITS: LPCSTR = 26 as LPCSTR;
1549 pub const X509_INTEGER: LPCSTR = 27 as LPCSTR;
1550 pub const X509_MULTI_BYTE_INTEGER: LPCSTR = 28 as LPCSTR;
1551 pub const X509_ENUMERATED: LPCSTR = 29 as LPCSTR;
1552 pub const X509_CHOICE_OF_TIME: LPCSTR = 30 as LPCSTR;
1553 pub const X509_AUTHORITY_KEY_ID2: LPCSTR = 31 as LPCSTR;
1554 pub const X509_AUTHORITY_INFO_ACCESS: LPCSTR = 32 as LPCSTR;
1555 pub const X509_SUBJECT_INFO_ACCESS: LPCSTR = X509_AUTHORITY_INFO_ACCESS;
1556 pub const X509_CRL_REASON_CODE: LPCSTR = X509_ENUMERATED;
1557 pub const PKCS_CONTENT_INFO: LPCSTR = 33 as LPCSTR;
1558 pub const X509_SEQUENCE_OF_ANY: LPCSTR = 34 as LPCSTR;
1559 pub const X509_CRL_DIST_POINTS: LPCSTR = 35 as LPCSTR;
1560 pub const X509_ENHANCED_KEY_USAGE: LPCSTR = 36 as LPCSTR;
1561 pub const PKCS_CTL: LPCSTR = 37 as LPCSTR;
1562 pub const X509_MULTI_BYTE_UINT: LPCSTR = 38 as LPCSTR;
1563 pub const X509_DSS_PUBLICKEY: LPCSTR = X509_MULTI_BYTE_UINT;
1564 pub const X509_DSS_PARAMETERS: LPCSTR = 39 as LPCSTR;
1565 pub const X509_DSS_SIGNATURE: LPCSTR = 40 as LPCSTR;
1566 pub const PKCS_RC2_CBC_PARAMETERS: LPCSTR = 41 as LPCSTR;
1567 pub const PKCS_SMIME_CAPABILITIES: LPCSTR = 42 as LPCSTR;
1568 pub const X509_QC_STATEMENTS_EXT: LPCSTR = 42 as LPCSTR;
1569 pub const PKCS_RSA_PRIVATE_KEY: LPCSTR = 43 as LPCSTR;
1570 pub const PKCS_PRIVATE_KEY_INFO: LPCSTR = 44 as LPCSTR;
1571 pub const PKCS_ENCRYPTED_PRIVATE_KEY_INFO: LPCSTR = 45 as LPCSTR;
1572 pub const X509_PKIX_POLICY_QUALIFIER_USERNOTICE: LPCSTR = 46 as LPCSTR;
1573 pub const X509_DH_PUBLICKEY: LPCSTR = X509_MULTI_BYTE_UINT;
1574 pub const X509_DH_PARAMETERS: LPCSTR = 47 as LPCSTR;
1575 pub const PKCS_ATTRIBUTES: LPCSTR = 48 as LPCSTR;
1576 pub const PKCS_SORTED_CTL: LPCSTR = 49 as LPCSTR;
1577 pub const X509_ECC_SIGNATURE: LPCSTR = 47 as LPCSTR;
1578 pub const X942_DH_PARAMETERS: LPCSTR = 50 as LPCSTR;
1579 pub const X509_BITS_WITHOUT_TRAILING_ZEROES: LPCSTR = 51 as LPCSTR;
1580 pub const X942_OTHER_INFO: LPCSTR = 52 as LPCSTR;
1581 pub const X509_CERT_PAIR: LPCSTR = 53 as LPCSTR;
1582 pub const X509_ISSUING_DIST_POINT: LPCSTR = 54 as LPCSTR;
1583 pub const X509_NAME_CONSTRAINTS: LPCSTR = 55 as LPCSTR;
1584 pub const X509_POLICY_MAPPINGS: LPCSTR = 56 as LPCSTR;
1585 pub const X509_POLICY_CONSTRAINTS: LPCSTR = 57 as LPCSTR;
1586 pub const X509_CROSS_CERT_DIST_POINTS: LPCSTR = 58 as LPCSTR;
1587 pub const CMC_DATA: LPCSTR = 59 as LPCSTR;
1588 pub const CMC_RESPONSE: LPCSTR = 60 as LPCSTR;
1589 pub const CMC_STATUS: LPCSTR = 61 as LPCSTR;
1590 pub const CMC_ADD_EXTENSIONS: LPCSTR = 62 as LPCSTR;
1591 pub const CMC_ADD_ATTRIBUTES: LPCSTR = 63 as LPCSTR;
1592 pub const X509_CERTIFICATE_TEMPLATE: LPCSTR = 64 as LPCSTR;
1593 pub const OCSP_SIGNED_REQUEST: LPCSTR = 65 as LPCSTR;
1594 pub const OCSP_REQUEST: LPCSTR = 66 as LPCSTR;
1595 pub const OCSP_RESPONSE: LPCSTR = 67 as LPCSTR;
1596 pub const OCSP_BASIC_SIGNED_RESPONSE: LPCSTR = 68 as LPCSTR;
1597 pub const OCSP_BASIC_RESPONSE: LPCSTR = 69 as LPCSTR;
1598 pub const X509_LOGOTYPE_EXT: LPCSTR = 70 as LPCSTR;
1599 pub const X509_BIOMETRIC_EXT: LPCSTR = 71 as LPCSTR;
1600 pub const CNG_RSA_PUBLIC_KEY_BLOB: LPCSTR = 72 as LPCSTR;
1601 pub const X509_OBJECT_IDENTIFIER: LPCSTR = 73 as LPCSTR;
1602 pub const X509_ALGORITHM_IDENTIFIER: LPCSTR = 74 as LPCSTR;
1603 pub const PKCS_RSA_SSA_PSS_PARAMETERS: LPCSTR = 75 as LPCSTR;
1604 pub const PKCS_RSAES_OAEP_PARAMETERS: LPCSTR = 76 as LPCSTR;
1605 pub const ECC_CMS_SHARED_INFO: LPCSTR = 77 as LPCSTR;
1606 pub const TIMESTAMP_REQUEST: LPCSTR = 78 as LPCSTR;
1607 pub const TIMESTAMP_RESPONSE: LPCSTR = 79 as LPCSTR;
1608 pub const TIMESTAMP_INFO: LPCSTR = 80 as LPCSTR;
1609 pub const X509_CERT_BUNDLE: LPCSTR = 81 as LPCSTR;
1610 pub const X509_ECC_PRIVATE_KEY: LPCSTR = 82 as LPCSTR;
1611 pub const CNG_RSA_PRIVATE_KEY_BLOB: LPCSTR = 83 as LPCSTR;
1612 pub const X509_SUBJECT_DIR_ATTRS: LPCSTR = 84 as LPCSTR;
1613 pub const X509_ECC_PARAMETERS: LPCSTR = 85 as LPCSTR;
1614 pub const PKCS7_SIGNER_INFO: LPCSTR = 500 as LPCSTR;
1615 pub const CMS_SIGNER_INFO: LPCSTR = 501 as LPCSTR;
1616 pub const szOID_AUTHORITY_KEY_IDENTIFIER: &'static str = "2.5.29.1";
1617 pub const szOID_KEY_ATTRIBUTES: &'static str = "2.5.29.2";
1618 pub const szOID_CERT_POLICIES_95: &'static str = "2.5.29.3";
1619 pub const szOID_KEY_USAGE_RESTRICTION: &'static str = "2.5.29.4";
1620 pub const szOID_SUBJECT_ALT_NAME: &'static str = "2.5.29.7";
1621 pub const szOID_ISSUER_ALT_NAME: &'static str = "2.5.29.8";
1622 pub const szOID_BASIC_CONSTRAINTS: &'static str = "2.5.29.10";
1623 pub const szOID_KEY_USAGE: &'static str = "2.5.29.15";
1624 pub const szOID_PRIVATEKEY_USAGE_PERIOD: &'static str = "2.5.29.16";
1625 pub const szOID_BASIC_CONSTRAINTS2: &'static str = "2.5.29.19";
1626 pub const szOID_CERT_POLICIES: &'static str = "2.5.29.32";
1627 pub const szOID_ANY_CERT_POLICY: &'static str = "2.5.29.32.0";
1628 pub const szOID_INHIBIT_ANY_POLICY: &'static str = "2.5.29.54";
1629 pub const szOID_AUTHORITY_KEY_IDENTIFIER2: &'static str = "2.5.29.35";
1630 pub const szOID_SUBJECT_KEY_IDENTIFIER: &'static str = "2.5.29.14";
1631 pub const szOID_SUBJECT_ALT_NAME2: &'static str = "2.5.29.17";
1632 pub const szOID_ISSUER_ALT_NAME2: &'static str = "2.5.29.18";
1633 pub const szOID_CRL_REASON_CODE: &'static str = "2.5.29.21";
1634 pub const szOID_REASON_CODE_HOLD: &'static str = "2.5.29.23";
1635 pub const szOID_CRL_DIST_POINTS: &'static str = "2.5.29.31";
1636 pub const szOID_ENHANCED_KEY_USAGE: &'static str = "2.5.29.37";
1637 pub const szOID_ANY_ENHANCED_KEY_USAGE: &'static str = "2.5.29.37.0";
1638 pub const szOID_CRL_NUMBER: &'static str = "2.5.29.20";
1639 pub const szOID_DELTA_CRL_INDICATOR: &'static str = "2.5.29.27";
1640 pub const szOID_ISSUING_DIST_POINT: &'static str = "2.5.29.28";
1641 pub const szOID_FRESHEST_CRL: &'static str = "2.5.29.46";
1642 pub const szOID_NAME_CONSTRAINTS: &'static str = "2.5.29.30";
1643 pub const szOID_POLICY_MAPPINGS: &'static str = "2.5.29.33";
1644 pub const szOID_LEGACY_POLICY_MAPPINGS: &'static str = "2.5.29.5";
1645 pub const szOID_POLICY_CONSTRAINTS: &'static str = "2.5.29.36";
1646 pub const szOID_RENEWAL_CERTIFICATE: &'static str = "1.3.6.1.4.1.311.13.1";
1647 pub const szOID_ENROLLMENT_NAME_VALUE_PAIR: &'static str = "1.3.6.1.4.1.311.13.2.1";
1648 pub const szOID_ENROLLMENT_CSP_PROVIDER: &'static str = "1.3.6.1.4.1.311.13.2.2";
1649 pub const szOID_OS_VERSION: &'static str = "1.3.6.1.4.1.311.13.2.3";
1650 pub const szOID_ENROLLMENT_AGENT: &'static str = "1.3.6.1.4.1.311.20.2.1";
1651 pub const szOID_PKIX: &'static str = "1.3.6.1.5.5.7";
1652 pub const szOID_PKIX_PE: &'static str = "1.3.6.1.5.5.7.1";
1653 pub const szOID_AUTHORITY_INFO_ACCESS: &'static str = "1.3.6.1.5.5.7.1.1";
1654 pub const szOID_SUBJECT_INFO_ACCESS: &'static str = "1.3.6.1.5.5.7.1.11";
1655 pub const szOID_BIOMETRIC_EXT: &'static str = "1.3.6.1.5.5.7.1.2";
1656 pub const szOID_QC_STATEMENTS_EXT: &'static str = "1.3.6.1.5.5.7.1.3";
1657 pub const szOID_LOGOTYPE_EXT: &'static str = "1.3.6.1.5.5.7.1.12";
1658 pub const szOID_TLS_FEATURES_EXT: &'static str = "1.3.6.1.5.5.7.1.24";
1659 pub const szOID_CERT_EXTENSIONS: &'static str = "1.3.6.1.4.1.311.2.1.14";
1660 pub const szOID_NEXT_UPDATE_LOCATION: &'static str = "1.3.6.1.4.1.311.10.2";
1661 pub const szOID_REMOVE_CERTIFICATE: &'static str = "1.3.6.1.4.1.311.10.8.1";
1662 pub const szOID_CROSS_CERT_DIST_POINTS: &'static str = "1.3.6.1.4.1.311.10.9.1";
1663 pub const szOID_CTL: &'static str = "1.3.6.1.4.1.311.10.1";
1664 pub const szOID_SORTED_CTL: &'static str = "1.3.6.1.4.1.311.10.1.1";
1665 pub const szOID_SERIALIZED: &'static str = "1.3.6.1.4.1.311.10.3.3.1";
1666 pub const szOID_NT_PRINCIPAL_NAME: &'static str = "1.3.6.1.4.1.311.20.2.3";
1667 pub const szOID_INTERNATIONALIZED_EMAIL_ADDRESS: &'static str = "1.3.6.1.4.1.311.20.2.4";
1668 pub const szOID_PRODUCT_UPDATE: &'static str = "1.3.6.1.4.1.311.31.1";
1669 pub const szOID_ANY_APPLICATION_POLICY: &'static str = "1.3.6.1.4.1.311.10.12.1";
1670 pub const szOID_AUTO_ENROLL_CTL_USAGE: &'static str = "1.3.6.1.4.1.311.20.1";
1671 pub const szOID_ENROLL_CERTTYPE_EXTENSION: &'static str = "1.3.6.1.4.1.311.20.2";
1672 pub const szOID_CERT_MANIFOLD: &'static str = "1.3.6.1.4.1.311.20.3";
1673 pub const szOID_CERTSRV_CA_VERSION: &'static str = "1.3.6.1.4.1.311.21.1";
1674 pub const szOID_CERTSRV_PREVIOUS_CERT_HASH: &'static str = "1.3.6.1.4.1.311.21.2";
1675 pub const szOID_CRL_VIRTUAL_BASE: &'static str = "1.3.6.1.4.1.311.21.3";
1676 pub const szOID_CRL_NEXT_PUBLISH: &'static str = "1.3.6.1.4.1.311.21.4";
1677 pub const szOID_KP_CA_EXCHANGE: &'static str = "1.3.6.1.4.1.311.21.5";
1678 pub const szOID_KP_PRIVACY_CA: &'static str = "1.3.6.1.4.1.311.21.36";
1679 pub const szOID_KP_KEY_RECOVERY_AGENT: &'static str = "1.3.6.1.4.1.311.21.6";
1680 pub const szOID_CERTIFICATE_TEMPLATE: &'static str = "1.3.6.1.4.1.311.21.7";
1681 pub const szOID_ENTERPRISE_OID_ROOT: &'static str = "1.3.6.1.4.1.311.21.8";
1682 pub const szOID_RDN_DUMMY_SIGNER: &'static str = "1.3.6.1.4.1.311.21.9";
1683 pub const szOID_APPLICATION_CERT_POLICIES: &'static str = "1.3.6.1.4.1.311.21.10";
1684 pub const szOID_APPLICATION_POLICY_MAPPINGS: &'static str = "1.3.6.1.4.1.311.21.11";
1685 pub const szOID_APPLICATION_POLICY_CONSTRAINTS: &'static str = "1.3.6.1.4.1.311.21.12";
1686 pub const szOID_ARCHIVED_KEY_ATTR: &'static str = "1.3.6.1.4.1.311.21.13";
1687 pub const szOID_CRL_SELF_CDP: &'static str = "1.3.6.1.4.1.311.21.14";
1688 pub const szOID_REQUIRE_CERT_CHAIN_POLICY: &'static str = "1.3.6.1.4.1.311.21.15";
1689 pub const szOID_ARCHIVED_KEY_CERT_HASH: &'static str = "1.3.6.1.4.1.311.21.16";
1690 pub const szOID_ISSUED_CERT_HASH: &'static str = "1.3.6.1.4.1.311.21.17";
1691 pub const szOID_DS_EMAIL_REPLICATION: &'static str = "1.3.6.1.4.1.311.21.19";
1692 pub const szOID_REQUEST_CLIENT_INFO: &'static str = "1.3.6.1.4.1.311.21.20";
1693 pub const szOID_ENCRYPTED_KEY_HASH: &'static str = "1.3.6.1.4.1.311.21.21";
1694 pub const szOID_CERTSRV_CROSSCA_VERSION: &'static str = "1.3.6.1.4.1.311.21.22";
1695 pub const szOID_NTDS_REPLICATION: &'static str = "1.3.6.1.4.1.311.25.1";
1696 pub const szOID_SUBJECT_DIR_ATTRS: &'static str = "2.5.29.9";
1697 pub const szOID_PKIX_KP: &'static str = "1.3.6.1.5.5.7.3";
1698 pub const szOID_PKIX_KP_SERVER_AUTH: &'static str = "1.3.6.1.5.5.7.3.1";
1699 pub const szOID_PKIX_KP_CLIENT_AUTH: &'static str = "1.3.6.1.5.5.7.3.2";
1700 pub const szOID_PKIX_KP_CODE_SIGNING: &'static str = "1.3.6.1.5.5.7.3.3";
1701 pub const szOID_PKIX_KP_EMAIL_PROTECTION: &'static str = "1.3.6.1.5.5.7.3.4";
1702 pub const szOID_PKIX_KP_IPSEC_END_SYSTEM: &'static str = "1.3.6.1.5.5.7.3.5";
1703 pub const szOID_PKIX_KP_IPSEC_TUNNEL: &'static str = "1.3.6.1.5.5.7.3.6";
1704 pub const szOID_PKIX_KP_IPSEC_USER: &'static str = "1.3.6.1.5.5.7.3.7";
1705 pub const szOID_PKIX_KP_TIMESTAMP_SIGNING: &'static str = "1.3.6.1.5.5.7.3.8";
1706 pub const szOID_PKIX_KP_OCSP_SIGNING: &'static str = "1.3.6.1.5.5.7.3.9";
1707 pub const szOID_PKIX_OCSP_NOCHECK: &'static str = "1.3.6.1.5.5.7.48.1.5";
1708 pub const szOID_PKIX_OCSP_NONCE: &'static str = "1.3.6.1.5.5.7.48.1.2";
1709 pub const szOID_IPSEC_KP_IKE_INTERMEDIATE: &'static str = "1.3.6.1.5.5.8.2.2";
1710 pub const szOID_PKINIT_KP_KDC: &'static str = "1.3.6.1.5.2.3.5";
1711 pub const szOID_KP_CTL_USAGE_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.1";
1712 pub const szOID_KP_TIME_STAMP_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.2";
1713 pub const szOID_SERVER_GATED_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.3";
1714 pub const szOID_SGC_NETSCAPE: &'static str = "2.16.840.1.113730.4.1";
1715 pub const szOID_KP_EFS: &'static str = "1.3.6.1.4.1.311.10.3.4";
1716 pub const szOID_EFS_RECOVERY: &'static str = "1.3.6.1.4.1.311.10.3.4.1";
1717 pub const szOID_WHQL_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.5";
1718 pub const szOID_ATTEST_WHQL_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.5.1";
1719 pub const szOID_NT5_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.6";
1720 pub const szOID_OEM_WHQL_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.7";
1721 pub const szOID_EMBEDDED_NT_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.8";
1722 pub const szOID_ROOT_LIST_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.9";
1723 pub const szOID_KP_QUALIFIED_SUBORDINATION: &'static str = "1.3.6.1.4.1.311.10.3.10";
1724 pub const szOID_KP_KEY_RECOVERY: &'static str = "1.3.6.1.4.1.311.10.3.11";
1725 pub const szOID_KP_DOCUMENT_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.12";
1726 pub const szOID_KP_LIFETIME_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.13";
1727 pub const szOID_KP_MOBILE_DEVICE_SOFTWARE: &'static str = "1.3.6.1.4.1.311.10.3.14";
1728 pub const szOID_KP_SMART_DISPLAY: &'static str = "1.3.6.1.4.1.311.10.3.15";
1729 pub const szOID_KP_CSP_SIGNATURE: &'static str = "1.3.6.1.4.1.311.10.3.16";
1730 pub const szOID_KP_FLIGHT_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.27";
1731 pub const szOID_PLATFORM_MANIFEST_BINARY_ID: &'static str = "1.3.6.1.4.1.311.10.3.28";
1732 pub const szOID_DRM: &'static str = "1.3.6.1.4.1.311.10.5.1";
1733 pub const szOID_DRM_INDIVIDUALIZATION: &'static str = "1.3.6.1.4.1.311.10.5.2";
1734 pub const szOID_LICENSES: &'static str = "1.3.6.1.4.1.311.10.6.1";
1735 pub const szOID_LICENSE_SERVER: &'static str = "1.3.6.1.4.1.311.10.6.2";
1736 pub const szOID_KP_SMARTCARD_LOGON: &'static str = "1.3.6.1.4.1.311.20.2.2";
1737 pub const szOID_KP_KERNEL_MODE_CODE_SIGNING: &'static str = "1.3.6.1.4.1.311.61.1.1";
1738 pub const szOID_KP_KERNEL_MODE_TRUSTED_BOOT_SIGNING: &'static str = "1.3.6.1.4.1.311.61.4.1";
1739 pub const szOID_REVOKED_LIST_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.19";
1740 pub const szOID_WINDOWS_KITS_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.20";
1741 pub const szOID_WINDOWS_RT_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.21";
1742 pub const szOID_PROTECTED_PROCESS_LIGHT_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.22";
1743 pub const szOID_WINDOWS_TCB_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.23";
1744 pub const szOID_PROTECTED_PROCESS_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.24";
1745 pub const szOID_WINDOWS_THIRD_PARTY_COMPONENT_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.25";
1746 pub const szOID_WINDOWS_SOFTWARE_EXTENSION_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.26";
1747 pub const szOID_DISALLOWED_LIST: &'static str = "1.3.6.1.4.1.311.10.3.30";
1748 pub const szOID_PIN_RULES_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.31";
1749 pub const szOID_PIN_RULES_CTL: &'static str = "1.3.6.1.4.1.311.10.3.32";
1750 pub const szOID_PIN_RULES_EXT: &'static str = "1.3.6.1.4.1.311.10.3.33";
1751 pub const szOID_PIN_RULES_DOMAIN_NAME: &'static str = "1.3.6.1.4.1.311.10.3.34";
1752 pub const szOID_PIN_RULES_LOG_END_DATE_EXT: &'static str = "1.3.6.1.4.1.311.10.3.35";
1753 pub const szOID_IUM_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.37";
1754 pub const szOID_EV_WHQL_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.39";
1755 pub const szOID_SYNC_ROOT_CTL_EXT: &'static str = "1.3.6.1.4.1.311.10.3.50";
1756 pub const szOID_HPKP_DOMAIN_NAME_CTL: &'static str = "1.3.6.1.4.1.311.10.3.60";
1757 pub const szOID_HPKP_HEADER_VALUE_CTL: &'static str = "1.3.6.1.4.1.311.10.3.61";
1758 pub const szOID_KP_KERNEL_MODE_HAL_EXTENSION_SIGNING: &'static str = "1.3.6.1.4.1.311.61.5.1";
1759 pub const szOID_WINDOWS_STORE_SIGNER: &'static str = "1.3.6.1.4.1.311.76.3.1";
1760 pub const szOID_DYNAMIC_CODE_GEN_SIGNER: &'static str = "1.3.6.1.4.1.311.76.5.1";
1761 pub const szOID_MICROSOFT_PUBLISHER_SIGNER: &'static str = "1.3.6.1.4.1.311.76.8.1";
1762 pub const szOID_YESNO_TRUST_ATTR: &'static str = "1.3.6.1.4.1.311.10.4.1";
1763 pub const szOID_SITE_PIN_RULES_INDEX_ATTR: &'static str = "1.3.6.1.4.1.311.10.4.2";
1764 pub const szOID_SITE_PIN_RULES_FLAGS_ATTR: &'static str = "1.3.6.1.4.1.311.10.4.3";
1765 pub const szOID_PKIX_POLICY_QUALIFIER_CPS: &'static str = "1.3.6.1.5.5.7.2.1";
1766 pub const szOID_PKIX_POLICY_QUALIFIER_USERNOTICE: &'static str = "1.3.6.1.5.5.7.2.2";
1767 pub const szOID_ROOT_PROGRAM_FLAGS: &'static str = "1.3.6.1.4.1.311.60.1.1";
1768 pub const CERT_ROOT_PROGRAM_FLAG_ORG: DWORD = 0x80;
1769 pub const CERT_ROOT_PROGRAM_FLAG_LSC: DWORD = 0x40;
1770 pub const CERT_ROOT_PROGRAM_FLAG_SUBJECT_LOGO: DWORD = 0x20;
1771 pub const CERT_ROOT_PROGRAM_FLAG_OU: DWORD = 0x10;
1772 pub const CERT_ROOT_PROGRAM_FLAG_ADDRESS: DWORD = 0x08;
1773 pub const szOID_CERT_POLICIES_95_QUALIFIER1: &'static str = "2.16.840.1.113733.1.7.1.1";
1774 pub const szOID_RDN_TPM_MANUFACTURER: &'static str = "2.23.133.2.1";
1775 pub const szOID_RDN_TPM_MODEL: &'static str = "2.23.133.2.2";
1776 pub const szOID_RDN_TPM_VERSION: &'static str = "2.23.133.2.3";
1777 pub const szOID_RDN_TCG_PLATFORM_MANUFACTURER: &'static str = "2.23.133.2.4";
1778 pub const szOID_RDN_TCG_PLATFORM_MODEL: &'static str = "2.23.133.2.5";
1779 pub const szOID_RDN_TCG_PLATFORM_VERSION: &'static str = "2.23.133.2.6";
1780 pub const szOID_ENROLL_EK_INFO: &'static str = "1.3.6.1.4.1.311.21.23";
1781 pub const szOID_ENROLL_AIK_INFO: &'static str = "1.3.6.1.4.1.311.21.39";
1782 pub const szOID_ENROLL_ATTESTATION_STATEMENT: &'static str = "1.3.6.1.4.1.311.21.24";
1783 pub const szOID_ENROLL_KSP_NAME: &'static str = "1.3.6.1.4.1.311.21.25";
1784 pub const szOID_ENROLL_EKPUB_CHALLENGE: &'static str = "1.3.6.1.4.1.311.21.26";
1785 pub const szOID_ENROLL_CAXCHGCERT_HASH: &'static str = "1.3.6.1.4.1.311.21.27";
1786 pub const szOID_ENROLL_ATTESTATION_CHALLENGE: &'static str = "1.3.6.1.4.1.311.21.28";
1787 pub const szOID_ENROLL_ENCRYPTION_ALGORITHM: &'static str = "1.3.6.1.4.1.311.21.29";
1788 pub const szOID_KP_TPM_EK_CERTIFICATE: &'static str = "2.23.133.8.1";
1789 pub const szOID_KP_TPM_PLATFORM_CERTIFICATE: &'static str = "2.23.133.8.2";
1790 pub const szOID_KP_TPM_AIK_CERTIFICATE: &'static str = "2.23.133.8.3";
1791 pub const szOID_ENROLL_EKVERIFYKEY: &'static str = "1.3.6.1.4.1.311.21.30";
1792 pub const szOID_ENROLL_EKVERIFYCERT: &'static str = "1.3.6.1.4.1.311.21.31";
1793 pub const szOID_ENROLL_EKVERIFYCREDS: &'static str = "1.3.6.1.4.1.311.21.32";
1794 pub const szOID_ENROLL_SCEP_ERROR: &'static str = "1.3.6.1.4.1.311.21.33";
1795 pub const szOID_ENROLL_SCEP_SERVER_STATE: &'static str = "1.3.6.1.4.1.311.21.34";
1796 pub const szOID_ENROLL_SCEP_CHALLENGE_ANSWER: &'static str = "1.3.6.1.4.1.311.21.35";
1797 pub const szOID_ENROLL_SCEP_CLIENT_REQUEST: &'static str = "1.3.6.1.4.1.311.21.37";
1798 pub const szOID_ENROLL_SCEP_SERVER_MESSAGE: &'static str = "1.3.6.1.4.1.311.21.38";
1799 pub const szOID_ENROLL_SCEP_SERVER_SECRET: &'static str = "1.3.6.1.4.1.311.21.40";
1800 pub const szOID_ENROLL_KEY_AFFINITY: &'static str = "1.3.6.1.4.1.311.21.41";
1801 pub const szOID_ENROLL_SCEP_SIGNER_HASH: &'static str = "1.3.6.1.4.1.311.21.42";
1802 pub const szOID_ENROLL_EK_CA_KEYID: &'static str = "1.3.6.1.4.1.311.21.43";
1803 pub const szOID_ATTR_SUPPORTED_ALGORITHMS: &'static str = "2.5.4.52";
1804 pub const szOID_ATTR_TPM_SPECIFICATION: &'static str = "2.23.133.2.16";
1805 pub const szOID_ATTR_PLATFORM_SPECIFICATION: &'static str = "2.23.133.2.17";
1806 pub const szOID_ATTR_TPM_SECURITY_ASSERTIONS: &'static str = "2.23.133.2.18";
1807 STRUCT!{struct CERT_EXTENSIONS {
1808     cExtension: DWORD,
1809     rgExtension: PCERT_EXTENSION,
1810 }}
1811 pub type PCERT_EXTENSIONS = *mut CERT_EXTENSIONS;
1812 pub const CERT_UNICODE_RDN_ERR_INDEX_MASK: DWORD = 0x3FF;
1813 pub const CERT_UNICODE_RDN_ERR_INDEX_SHIFT: DWORD = 22;
1814 pub const CERT_UNICODE_ATTR_ERR_INDEX_MASK: DWORD = 0x003F;
1815 pub const CERT_UNICODE_ATTR_ERR_INDEX_SHIFT: DWORD = 16;
1816 pub const CERT_UNICODE_VALUE_ERR_INDEX_MASK: DWORD = 0x0000FFFF;
1817 pub const CERT_UNICODE_VALUE_ERR_INDEX_SHIFT: DWORD = 0;
1818 #[inline]
GET_CERT_UNICODE_RDN_ERR_INDEX(X: DWORD) -> DWORD1819 pub fn GET_CERT_UNICODE_RDN_ERR_INDEX(X: DWORD) -> DWORD {
1820     (X >> CERT_UNICODE_RDN_ERR_INDEX_SHIFT) & CERT_UNICODE_RDN_ERR_INDEX_MASK
1821 }
1822 #[inline]
GET_CERT_UNICODE_ATTR_ERR_INDEX(X: DWORD) -> DWORD1823 pub fn GET_CERT_UNICODE_ATTR_ERR_INDEX(X: DWORD) -> DWORD {
1824     (X >> CERT_UNICODE_ATTR_ERR_INDEX_SHIFT) & CERT_UNICODE_ATTR_ERR_INDEX_MASK
1825 }
1826 #[inline]
GET_CERT_UNICODE_VALUE_ERR_INDEX(X: DWORD) -> DWORD1827 pub fn GET_CERT_UNICODE_VALUE_ERR_INDEX(X: DWORD) -> DWORD {
1828     X & CERT_UNICODE_VALUE_ERR_INDEX_MASK
1829 }
1830 STRUCT!{struct CERT_AUTHORITY_KEY_ID_INFO {
1831     KeyId: CRYPT_DATA_BLOB,
1832     CertIssuer: CERT_NAME_BLOB,
1833     CertSerialNumber: CRYPT_INTEGER_BLOB,
1834 }}
1835 pub type PCERT_AUTHORITY_KEY_ID_INFO = *mut CERT_AUTHORITY_KEY_ID_INFO;
1836 STRUCT!{struct CERT_PRIVATE_KEY_VALIDITY {
1837     NotBefore: FILETIME,
1838     NotAfter: FILETIME,
1839 }}
1840 pub type PCERT_PRIVATE_KEY_VALIDITY = *mut CERT_PRIVATE_KEY_VALIDITY;
1841 STRUCT!{struct CERT_KEY_ATTRIBUTES_INFO {
1842     KeyId: CRYPT_DATA_BLOB,
1843     IntendedKeyUsage: CRYPT_BIT_BLOB,
1844     pPrivateKeyUsagePeriod: PCERT_PRIVATE_KEY_VALIDITY,
1845 }}
1846 pub type PCERT_KEY_ATTRIBUTES_INFO = *mut CERT_KEY_ATTRIBUTES_INFO;
1847 pub const CERT_DIGITAL_SIGNATURE_KEY_USAGE: DWORD = 0x80;
1848 pub const CERT_NON_REPUDIATION_KEY_USAGE: DWORD = 0x40;
1849 pub const CERT_KEY_ENCIPHERMENT_KEY_USAGE: DWORD = 0x20;
1850 pub const CERT_DATA_ENCIPHERMENT_KEY_USAGE: DWORD = 0x10;
1851 pub const CERT_KEY_AGREEMENT_KEY_USAGE: DWORD = 0x08;
1852 pub const CERT_KEY_CERT_SIGN_KEY_USAGE: DWORD = 0x04;
1853 pub const CERT_OFFLINE_CRL_SIGN_KEY_USAGE: DWORD = 0x02;
1854 pub const CERT_CRL_SIGN_KEY_USAGE: DWORD = 0x02;
1855 pub const CERT_ENCIPHER_ONLY_KEY_USAGE: DWORD = 0x01;
1856 pub const CERT_DECIPHER_ONLY_KEY_USAGE: DWORD = 0x80;
1857 STRUCT!{struct CERT_POLICY_ID {
1858     cCertPolicyElementId: DWORD,
1859     rgpszCertPolicyElementId: *mut LPSTR,
1860 }}
1861 pub type PCERT_POLICY_ID = *mut CERT_POLICY_ID;
1862 STRUCT!{struct CERT_KEY_USAGE_RESTRICTION_INFO {
1863     cCertPolicyId: DWORD,
1864     rgCertPolicyId: PCERT_POLICY_ID,
1865     RestrictedKeyUsage: CRYPT_BIT_BLOB,
1866 }}
1867 pub type PCERT_KEY_USAGE_RESTRICTION_INFO = *mut CERT_KEY_USAGE_RESTRICTION_INFO;
1868 STRUCT!{struct CERT_OTHER_NAME {
1869     pszObjId: LPSTR,
1870     Value: CRYPT_OBJID_BLOB,
1871 }}
1872 pub type PCERT_OTHER_NAME = *mut CERT_OTHER_NAME;
1873 UNION!{union CERT_ALT_NAME_ENTRY_u {
1874     [usize; 2],
1875     pOtherName pOtherName_mut: PCERT_OTHER_NAME,
1876     pwszRfc822Name pwszRfc822Name_mut: LPWSTR,
1877     pwszDNSName pwszDNSName_mut: LPWSTR,
1878     DirectoryName DirectoryName_mut: CERT_NAME_BLOB,
1879     pwszURL pwszURL_mut: LPWSTR,
1880     IPAddress IPAddress_mut: CRYPT_DATA_BLOB,
1881     pszRegisteredID pszRegisteredID_mut: LPSTR,
1882 }}
1883 STRUCT!{struct CERT_ALT_NAME_ENTRY {
1884     dwAltNameChoice: DWORD,
1885     u: CERT_ALT_NAME_ENTRY_u,
1886 }}
1887 pub type PCERT_ALT_NAME_ENTRY = *mut CERT_ALT_NAME_ENTRY;
1888 pub const CERT_ALT_NAME_OTHER_NAME: DWORD = 1;
1889 pub const CERT_ALT_NAME_RFC822_NAME: DWORD = 2;
1890 pub const CERT_ALT_NAME_DNS_NAME: DWORD = 3;
1891 pub const CERT_ALT_NAME_X400_ADDRESS: DWORD = 4;
1892 pub const CERT_ALT_NAME_DIRECTORY_NAME: DWORD = 5;
1893 pub const CERT_ALT_NAME_EDI_PARTY_NAME: DWORD = 6;
1894 pub const CERT_ALT_NAME_URL: DWORD = 7;
1895 pub const CERT_ALT_NAME_IP_ADDRESS: DWORD = 8;
1896 pub const CERT_ALT_NAME_REGISTERED_ID: DWORD = 9;
1897 STRUCT!{struct CERT_ALT_NAME_INFO {
1898     cAltEntry: DWORD,
1899     rgAltEntry: PCERT_ALT_NAME_ENTRY,
1900 }}
1901 pub type PCERT_ALT_NAME_INFO = *mut CERT_ALT_NAME_INFO;
1902 pub const CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK: DWORD = 0xFF;
1903 pub const CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT: DWORD = 16;
1904 pub const CERT_ALT_NAME_VALUE_ERR_INDEX_MASK: DWORD = 0x0000FFFF;
1905 pub const CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT: DWORD = 0;
1906 #[inline]
GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(X: DWORD) -> DWORD1907 pub fn GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(X: DWORD) -> DWORD {
1908     (X >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK
1909 }
1910 #[inline]
GET_CERT_ALT_NAME_VALUE_ERR_INDEX(X: DWORD) -> DWORD1911 pub fn GET_CERT_ALT_NAME_VALUE_ERR_INDEX(X: DWORD) -> DWORD {
1912     X & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK
1913 }
1914 STRUCT!{struct CERT_BASIC_CONSTRAINTS_INFO {
1915     SubjectType: CRYPT_BIT_BLOB,
1916     fPathLenConstraint: BOOL,
1917     dwPathLenConstraint: DWORD,
1918     cSubtreesConstraint: DWORD,
1919     rgSubtreesConstraint: *mut CERT_NAME_BLOB,
1920 }}
1921 pub type PCERT_BASIC_CONSTRAINTS_INFO = *mut CERT_BASIC_CONSTRAINTS_INFO;
1922 pub const CERT_CA_SUBJECT_FLAG: DWORD = 0x80;
1923 pub const CERT_END_ENTITY_SUBJECT_FLAG: DWORD = 0x40;
1924 STRUCT!{struct CERT_BASIC_CONSTRAINTS2_INFO {
1925     fCA: BOOL,
1926     fPathLenConstraint: BOOL,
1927     dwPathLenConstraint: DWORD,
1928 }}
1929 pub type PCERT_BASIC_CONSTRAINTS2_INFO = *mut CERT_BASIC_CONSTRAINTS2_INFO;
1930 STRUCT!{struct CERT_POLICY_QUALIFIER_INFO {
1931     pszPolicyQualifierId: LPSTR,
1932     Qualifier: CRYPT_OBJID_BLOB,
1933 }}
1934 pub type PCERT_POLICY_QUALIFIER_INFO = *mut CERT_POLICY_QUALIFIER_INFO;
1935 STRUCT!{struct CERT_POLICY_INFO {
1936     pszPolicyIdentifier: LPSTR,
1937     cPolicyQualifier: DWORD,
1938     rgPolicyQualifier: *mut CERT_POLICY_QUALIFIER_INFO,
1939 }}
1940 pub type PCERT_POLICY_INFO = *mut CERT_POLICY_INFO;
1941 STRUCT!{struct CERT_POLICIES_INFO {
1942     cPolicyInfo: DWORD,
1943     rgPolicyInfo: *mut CERT_POLICY_INFO,
1944 }}
1945 pub type PCERT_POLICIES_INFO = *mut CERT_POLICIES_INFO;
1946 STRUCT!{struct CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
1947     pszOrganization: LPSTR,
1948     cNoticeNumbers: DWORD,
1949     rgNoticeNumbers: *mut c_int,
1950 }}
1951 pub type PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE = *mut CERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
1952 STRUCT!{struct CERT_POLICY_QUALIFIER_USER_NOTICE {
1953     pNoticeReference: *mut CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,
1954     pszDisplayText: LPWSTR,
1955 }}
1956 pub type PCERT_POLICY_QUALIFIER_USER_NOTICE = *mut CERT_POLICY_QUALIFIER_USER_NOTICE;
1957 STRUCT!{struct CPS_URLS {
1958     pszURL: LPWSTR,
1959     pAlgorithm: *mut CRYPT_ALGORITHM_IDENTIFIER,
1960     pDigest: *mut CRYPT_DATA_BLOB,
1961 }}
1962 pub type PCPS_URLS = *mut CPS_URLS;
1963 STRUCT!{struct CERT_POLICY95_QUALIFIER1 {
1964     pszPracticesReference: LPWSTR,
1965     pszNoticeIdentifier: LPSTR,
1966     pszNSINoticeIdentifier: LPSTR,
1967     cCPSURLs: DWORD,
1968     rgCPSURLs: *mut CPS_URLS,
1969 }}
1970 pub type PCERT_POLICY95_QUALIFIER1 = *mut CERT_POLICY95_QUALIFIER1;
1971 STRUCT!{struct CERT_POLICY_MAPPING {
1972     pszIssuerDomainPolicy: LPSTR,
1973     pszSubjectDomainPolicy: LPSTR,
1974 }}
1975 pub type PCERT_POLICY_MAPPING = *mut CERT_POLICY_MAPPING;
1976 STRUCT!{struct CERT_POLICY_MAPPINGS_INFO {
1977     cPolicyMapping: DWORD,
1978     rgPolicyMapping: PCERT_POLICY_MAPPING,
1979 }}
1980 pub type PCERT_POLICY_MAPPINGS_INFO = *mut CERT_POLICY_MAPPINGS_INFO;
1981 STRUCT!{struct CERT_POLICY_CONSTRAINTS_INFO {
1982     fRequireExplicitPolicy: BOOL,
1983     dwRequireExplicitPolicySkipCerts: DWORD,
1984     fInhibitPolicyMapping: BOOL,
1985     dwInhibitPolicyMappingSkipCerts: DWORD,
1986 }}
1987 pub type PCERT_POLICY_CONSTRAINTS_INFO = *mut CERT_POLICY_CONSTRAINTS_INFO;
1988 STRUCT!{struct CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {
1989     pszObjId: LPSTR,
1990     cValue: DWORD,
1991     rgValue: PCRYPT_DER_BLOB,
1992 }}
1993 pub type PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY = *mut CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;
1994 STRUCT!{struct CRYPT_CONTENT_INFO {
1995     pszObjId: LPSTR,
1996     Content: CRYPT_DER_BLOB,
1997 }}
1998 pub type PCRYPT_CONTENT_INFO = *mut CRYPT_CONTENT_INFO;
1999 STRUCT!{struct CRYPT_SEQUENCE_OF_ANY {
2000     cValue: DWORD,
2001     rgValue: PCRYPT_DER_BLOB,
2002 }}
2003 pub type PCRYPT_SEQUENCE_OF_ANY = *mut CRYPT_SEQUENCE_OF_ANY;
2004 STRUCT!{struct CERT_AUTHORITY_KEY_ID2_INFO {
2005     KeyId: CRYPT_DATA_BLOB,
2006     AuthorityCertIssuer: CERT_ALT_NAME_INFO,
2007     AuthorityCertSerialNumber: CRYPT_INTEGER_BLOB,
2008 }}
2009 pub type PCERT_AUTHORITY_KEY_ID2_INFO = *mut CERT_AUTHORITY_KEY_ID2_INFO;
2010 STRUCT!{struct CERT_ACCESS_DESCRIPTION {
2011     pszAccessMethod: LPSTR,
2012     AccessLocation: CERT_ALT_NAME_ENTRY,
2013 }}
2014 pub type PCERT_ACCESS_DESCRIPTION = *mut CERT_ACCESS_DESCRIPTION;
2015 STRUCT!{struct CERT_AUTHORITY_INFO_ACCESS {
2016     cAccDescr: DWORD,
2017     rgAccDescr: PCERT_ACCESS_DESCRIPTION,
2018 }}
2019 pub type PCERT_AUTHORITY_INFO_ACCESS = *mut CERT_AUTHORITY_INFO_ACCESS;
2020 pub type CERT_SUBJECT_INFO_ACCESS = CERT_AUTHORITY_INFO_ACCESS;
2021 pub type PCERT_SUBJECT_INFO_ACCESS = *mut CERT_AUTHORITY_INFO_ACCESS;
2022 pub const szOID_PKIX_ACC_DESCR: &'static str = "1.3.6.1.5.5.7.48";
2023 pub const szOID_PKIX_OCSP: &'static str = "1.3.6.1.5.5.7.48.1";
2024 pub const szOID_PKIX_CA_ISSUERS: &'static str = "1.3.6.1.5.5.7.48.2";
2025 pub const szOID_PKIX_TIME_STAMPING: &'static str = "1.3.6.1.5.5.7.48.3";
2026 pub const szOID_PKIX_CA_REPOSITORY: &'static str = "1.3.6.1.5.5.7.48.5";
2027 pub const CRL_REASON_UNSPECIFIED: DWORD = 0;
2028 pub const CRL_REASON_KEY_COMPROMISE: DWORD = 1;
2029 pub const CRL_REASON_CA_COMPROMISE: DWORD = 2;
2030 pub const CRL_REASON_AFFILIATION_CHANGED: DWORD = 3;
2031 pub const CRL_REASON_SUPERSEDED: DWORD = 4;
2032 pub const CRL_REASON_CESSATION_OF_OPERATION: DWORD = 5;
2033 pub const CRL_REASON_CERTIFICATE_HOLD: DWORD = 6;
2034 pub const CRL_REASON_REMOVE_FROM_CRL: DWORD = 8;
2035 pub const CRL_REASON_PRIVILEGE_WITHDRAWN: DWORD = 9;
2036 pub const CRL_REASON_AA_COMPROMISE: DWORD = 10;
2037 UNION!{union CRL_DIST_POINT_NAME_u {
2038     [usize; 2],
2039     FullName FullName_mut: CERT_ALT_NAME_INFO,
2040 }}
2041 STRUCT!{struct CRL_DIST_POINT_NAME {
2042     dwDistPointNameChoice: DWORD,
2043     u: CRL_DIST_POINT_NAME_u,
2044 }}
2045 pub type PCRL_DIST_POINT_NAME = *mut CRL_DIST_POINT_NAME;
2046 pub const CRL_DIST_POINT_NO_NAME: DWORD = 0;
2047 pub const CRL_DIST_POINT_FULL_NAME: DWORD = 1;
2048 pub const CRL_DIST_POINT_ISSUER_RDN_NAME: DWORD = 2;
2049 STRUCT!{struct CRL_DIST_POINT {
2050     DistPointName: CRL_DIST_POINT_NAME,
2051     ReasonFlags: CRYPT_BIT_BLOB,
2052     CRLIssuer: CERT_ALT_NAME_INFO,
2053 }}
2054 pub type PCRL_DIST_POINT = *mut CRL_DIST_POINT;
2055 pub const CRL_REASON_UNUSED_FLAG: DWORD = 0x80;
2056 pub const CRL_REASON_KEY_COMPROMISE_FLAG: DWORD = 0x40;
2057 pub const CRL_REASON_CA_COMPROMISE_FLAG: DWORD = 0x20;
2058 pub const CRL_REASON_AFFILIATION_CHANGED_FLAG: DWORD = 0x10;
2059 pub const CRL_REASON_SUPERSEDED_FLAG: DWORD = 0x08;
2060 pub const CRL_REASON_CESSATION_OF_OPERATION_FLAG: DWORD = 0x04;
2061 pub const CRL_REASON_CERTIFICATE_HOLD_FLAG: DWORD = 0x02;
2062 pub const CRL_REASON_PRIVILEGE_WITHDRAWN_FLAG: DWORD = 0x01;
2063 pub const CRL_REASON_AA_COMPROMISE_FLAG: DWORD = 0x80;
2064 STRUCT!{struct CRL_DIST_POINTS_INFO {
2065     cDistPoint: DWORD,
2066     rgDistPoint: PCRL_DIST_POINT,
2067 }}
2068 pub type PCRL_DIST_POINTS_INFO = *mut CRL_DIST_POINTS_INFO;
2069 pub const CRL_DIST_POINT_ERR_INDEX_MASK: DWORD = 0x7F;
2070 pub const CRL_DIST_POINT_ERR_INDEX_SHIFT: DWORD = 24;
2071 #[inline]
GET_CRL_DIST_POINT_ERR_INDEX(X: DWORD) -> DWORD2072 pub fn GET_CRL_DIST_POINT_ERR_INDEX(X: DWORD) -> DWORD {
2073     (X >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK
2074 }
2075 pub const CRL_DIST_POINT_ERR_CRL_ISSUER_BIT: DWORD = 0x80000000;
2076 #[inline]
IS_CRL_DIST_POINT_ERR_CRL_ISSUER(X: DWORD) -> bool2077 pub fn IS_CRL_DIST_POINT_ERR_CRL_ISSUER(X: DWORD) -> bool {
2078     0 != (X & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT)
2079 }
2080 STRUCT!{struct CROSS_CERT_DIST_POINTS_INFO {
2081     dwSyncDeltaTime: DWORD,
2082     cDistPoint: DWORD,
2083     rgDistPoint: PCERT_ALT_NAME_INFO,
2084 }}
2085 pub type PCROSS_CERT_DIST_POINTS_INFO = *mut CROSS_CERT_DIST_POINTS_INFO;
2086 pub const CROSS_CERT_DIST_POINT_ERR_INDEX_MASK: DWORD = 0xFF;
2087 pub const CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT: DWORD = 24;
2088 #[inline]
GET_CROSS_CERT_DIST_POINT_ERR_INDEX(X: DWORD) -> DWORD2089 pub fn GET_CROSS_CERT_DIST_POINT_ERR_INDEX(X: DWORD) -> DWORD {
2090     (X >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & CROSS_CERT_DIST_POINT_ERR_INDEX_MASK
2091 }
2092 STRUCT!{struct CERT_PAIR {
2093     Forward: CERT_BLOB,
2094     Reverse: CERT_BLOB,
2095 }}
2096 pub type PCERT_PAIR = *mut CERT_PAIR;
2097 STRUCT!{struct CRL_ISSUING_DIST_POINT {
2098     DistPointName: CRL_DIST_POINT_NAME,
2099     fOnlyContainsUserCerts: BOOL,
2100     fOnlyContainsCACerts: BOOL,
2101     OnlySomeReasonFlags: CRYPT_BIT_BLOB,
2102     fIndirectCRL: BOOL,
2103 }}
2104 pub type PCRL_ISSUING_DIST_POINT = *mut CRL_ISSUING_DIST_POINT;
2105 STRUCT!{struct CERT_GENERAL_SUBTREE {
2106     Base: CERT_ALT_NAME_ENTRY,
2107     dwMinimum: DWORD,
2108     fMaximum: BOOL,
2109     dwMaximum: DWORD,
2110 }}
2111 pub type PCERT_GENERAL_SUBTREE = *mut CERT_GENERAL_SUBTREE;
2112 STRUCT!{struct CERT_NAME_CONSTRAINTS_INFO {
2113     cPermittedSubtree: DWORD,
2114     rgPermittedSubtree: PCERT_GENERAL_SUBTREE,
2115     cExcludedSubtree: DWORD,
2116     rgExcludedSubtree: PCERT_GENERAL_SUBTREE,
2117 }}
2118 pub type PCERT_NAME_CONSTRAINTS_INFO = *mut CERT_NAME_CONSTRAINTS_INFO;
2119 pub const CERT_EXCLUDED_SUBTREE_BIT: DWORD = 0x80000000;
2120 #[inline]
IS_CERT_EXCLUDED_SUBTREE(X: DWORD) -> bool2121 pub fn IS_CERT_EXCLUDED_SUBTREE(X: DWORD) -> bool {
2122     0 != (X & CERT_EXCLUDED_SUBTREE_BIT)
2123 }
2124 pub const SORTED_CTL_EXT_FLAGS_OFFSET: c_int = 0 * 4;
2125 pub const SORTED_CTL_EXT_COUNT_OFFSET: c_int = 1 * 4;
2126 pub const SORTED_CTL_EXT_MAX_COLLISION_OFFSET: c_int = 2 * 4;
2127 pub const SORTED_CTL_EXT_HASH_BUCKET_OFFSET: c_int = 3 * 4;
2128 pub const SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG: DWORD = 0x1;
2129 STRUCT!{struct CERT_DSS_PARAMETERS {
2130     p: CRYPT_UINT_BLOB,
2131     q: CRYPT_UINT_BLOB,
2132     g: CRYPT_UINT_BLOB,
2133 }}
2134 pub type PCERT_DSS_PARAMETERS = *mut CERT_DSS_PARAMETERS;
2135 pub const CERT_DSS_R_LEN: usize = 20;
2136 pub const CERT_DSS_S_LEN: usize = 20;
2137 pub const CERT_DSS_SIGNATURE_LEN: usize = CERT_DSS_R_LEN + CERT_DSS_S_LEN;
2138 pub const CERT_MAX_ASN_ENCODED_DSS_SIGNATURE_LEN: usize = 2 + 2 * (2 + 20 + 1);
2139 STRUCT!{struct CERT_DH_PARAMETERS {
2140     p: CRYPT_UINT_BLOB,
2141     g: CRYPT_UINT_BLOB,
2142 }}
2143 pub type PCERT_DH_PARAMETERS = *mut CERT_DH_PARAMETERS;
2144 STRUCT!{struct CERT_ECC_SIGNATURE {
2145     r: CRYPT_UINT_BLOB,
2146     s: CRYPT_UINT_BLOB,
2147 }}
2148 pub type PCERT_ECC_SIGNATURE = *mut CERT_ECC_SIGNATURE;
2149 STRUCT!{struct CERT_X942_DH_VALIDATION_PARAMS {
2150     seed: CRYPT_BIT_BLOB,
2151     pgenCounter: DWORD,
2152 }}
2153 pub type PCERT_X942_DH_VALIDATION_PARAMS = *mut CERT_X942_DH_VALIDATION_PARAMS;
2154 STRUCT!{struct CERT_X942_DH_PARAMETERS {
2155     p: CRYPT_UINT_BLOB,
2156     g: CRYPT_UINT_BLOB,
2157     q: CRYPT_UINT_BLOB,
2158     j: CRYPT_UINT_BLOB,
2159     pValidationParams: PCERT_X942_DH_VALIDATION_PARAMS,
2160 }}
2161 pub type PCERT_X942_DH_PARAMETERS = *mut CERT_X942_DH_PARAMETERS;
2162 pub const CRYPT_X942_COUNTER_BYTE_LENGTH: usize = 4;
2163 pub const CRYPT_X942_KEY_LENGTH_BYTE_LENGTH: usize = 4;
2164 pub const CRYPT_X942_PUB_INFO_BYTE_LENGTH: usize = 512 / 8;
2165 STRUCT!{struct CRYPT_X942_OTHER_INFO {
2166     pszContentEncryptionObjId: LPSTR,
2167     rgbCounter: [BYTE; CRYPT_X942_COUNTER_BYTE_LENGTH],
2168     rgbKeyLength: [BYTE; CRYPT_X942_KEY_LENGTH_BYTE_LENGTH],
2169     PubInfo: CRYPT_DATA_BLOB,
2170 }}
2171 pub type PCRYPT_X942_OTHER_INFO = *mut CRYPT_X942_OTHER_INFO;
2172 pub const CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH: usize = 4;
2173 STRUCT!{struct CRYPT_ECC_CMS_SHARED_INFO {
2174     Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
2175     EntityUInfo: CRYPT_DATA_BLOB,
2176     rgbSuppPubInfo: [BYTE; CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH],
2177 }}
2178 pub type PCRYPT_ECC_CMS_SHARED_INFO = *mut CRYPT_ECC_CMS_SHARED_INFO;
2179 STRUCT!{struct CRYPT_RC2_CBC_PARAMETERS {
2180     dwVersion: DWORD,
2181     fIV: BOOL,
2182     rgbIV: [BYTE; 8],
2183 }}
2184 pub type PCRYPT_RC2_CBC_PARAMETERS = *mut CRYPT_RC2_CBC_PARAMETERS;
2185 pub const CRYPT_RC2_40BIT_VERSION: DWORD = 160;
2186 pub const CRYPT_RC2_56BIT_VERSION: DWORD = 52;
2187 pub const CRYPT_RC2_64BIT_VERSION: DWORD = 120;
2188 pub const CRYPT_RC2_128BIT_VERSION: DWORD = 58;
2189 STRUCT!{struct CRYPT_SMIME_CAPABILITY {
2190     pszObjId: LPSTR,
2191     Parameters: CRYPT_OBJID_BLOB,
2192 }}
2193 pub type PCRYPT_SMIME_CAPABILITY = *mut CRYPT_SMIME_CAPABILITY;
2194 STRUCT!{struct CRYPT_SMIME_CAPABILITIES {
2195     cCapability: DWORD,
2196     rgCapability: PCRYPT_SMIME_CAPABILITY,
2197 }}
2198 pub type PCRYPT_SMIME_CAPABILITIES = *mut CRYPT_SMIME_CAPABILITIES;
2199 STRUCT!{struct CERT_QC_STATEMENT {
2200     pszStatementId: LPSTR,
2201     StatementInfo: CRYPT_OBJID_BLOB,
2202 }}
2203 pub type PCERT_QC_STATEMENT = *mut CERT_QC_STATEMENT;
2204 STRUCT!{struct CERT_QC_STATEMENTS_EXT_INFO {
2205     cStatement: DWORD,
2206     rgStatement: PCERT_QC_STATEMENT,
2207 }}
2208 pub type PCERT_QC_STATEMENTS_EXT_INFO = *mut CERT_QC_STATEMENTS_EXT_INFO;
2209 pub const szOID_QC_EU_COMPLIANCE: &'static str = "0.4.0.1862.1.1";
2210 pub const szOID_QC_SSCD: &'static str = "0.4.0.1862.1.4";
2211 STRUCT!{struct CRYPT_MASK_GEN_ALGORITHM {
2212     pszObjId: LPSTR,
2213     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2214 }}
2215 pub type PCRYPT_MASK_GEN_ALGORITHM = *mut CRYPT_MASK_GEN_ALGORITHM;
2216 STRUCT!{struct CRYPT_RSA_SSA_PSS_PARAMETERS {
2217     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2218     MaskGenAlgorithm: CRYPT_MASK_GEN_ALGORITHM,
2219     dwSaltLength: DWORD,
2220     dwTrailerField: DWORD,
2221 }}
2222 pub type PCRYPT_RSA_SSA_PSS_PARAMETERS = *mut CRYPT_RSA_SSA_PSS_PARAMETERS;
2223 pub const PKCS_RSA_SSA_PSS_TRAILER_FIELD_BC: DWORD = 1;
2224 STRUCT!{struct CRYPT_PSOURCE_ALGORITHM {
2225     pszObjId: LPSTR,
2226     EncodingParameters: CRYPT_DATA_BLOB,
2227 }}
2228 pub type PCRYPT_PSOURCE_ALGORITHM = *mut CRYPT_PSOURCE_ALGORITHM;
2229 STRUCT!{struct CRYPT_RSAES_OAEP_PARAMETERS {
2230     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2231     MaskGenAlgorithm: CRYPT_MASK_GEN_ALGORITHM,
2232     PSourceAlgorithm: CRYPT_PSOURCE_ALGORITHM,
2233 }}
2234 pub type PCRYPT_RSAES_OAEP_PARAMETERS = *mut CRYPT_RSAES_OAEP_PARAMETERS;
2235 pub const szOID_VERISIGN_PRIVATE_6_9: &'static str = "2.16.840.1.113733.1.6.9";
2236 pub const szOID_VERISIGN_ONSITE_JURISDICTION_HASH: &'static str = "2.16.840.1.113733.1.6.11";
2237 pub const szOID_VERISIGN_BITSTRING_6_13: &'static str = "2.16.840.1.113733.1.6.13";
2238 pub const szOID_VERISIGN_ISS_STRONG_CRYPTO: &'static str = "2.16.840.1.113733.1.8.1";
2239 pub const szOIDVerisign_MessageType: &'static str = "2.16.840.1.113733.1.9.2";
2240 pub const szOIDVerisign_PkiStatus: &'static str = "2.16.840.1.113733.1.9.3";
2241 pub const szOIDVerisign_FailInfo: &'static str = "2.16.840.1.113733.1.9.4";
2242 pub const szOIDVerisign_SenderNonce: &'static str = "2.16.840.1.113733.1.9.5";
2243 pub const szOIDVerisign_RecipientNonce: &'static str = "2.16.840.1.113733.1.9.6";
2244 pub const szOIDVerisign_TransactionID: &'static str = "2.16.840.1.113733.1.9.7";
2245 pub const szOID_NETSCAPE: &'static str = "2.16.840.1.113730";
2246 pub const szOID_NETSCAPE_CERT_EXTENSION: &'static str = "2.16.840.1.113730.1";
2247 pub const szOID_NETSCAPE_CERT_TYPE: &'static str = "2.16.840.1.113730.1.1";
2248 pub const szOID_NETSCAPE_BASE_URL: &'static str = "2.16.840.1.113730.1.2";
2249 pub const szOID_NETSCAPE_REVOCATION_URL: &'static str = "2.16.840.1.113730.1.3";
2250 pub const szOID_NETSCAPE_CA_REVOCATION_URL: &'static str = "2.16.840.1.113730.1.4";
2251 pub const szOID_NETSCAPE_CERT_RENEWAL_URL: &'static str = "2.16.840.1.113730.1.7";
2252 pub const szOID_NETSCAPE_CA_POLICY_URL: &'static str = "2.16.840.1.113730.1.8";
2253 pub const szOID_NETSCAPE_SSL_SERVER_NAME: &'static str = "2.16.840.1.113730.1.12";
2254 pub const szOID_NETSCAPE_COMMENT: &'static str = "2.16.840.1.113730.1.13";
2255 pub const szOID_NETSCAPE_DATA_TYPE: &'static str = "2.16.840.1.113730.2";
2256 pub const szOID_NETSCAPE_CERT_SEQUENCE: &'static str = "2.16.840.1.113730.2.5";
2257 pub const NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE: DWORD = 0x80;
2258 pub const NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE: DWORD = 0x40;
2259 pub const NETSCAPE_SMIME_CERT_TYPE: DWORD = 0x20;
2260 pub const NETSCAPE_SIGN_CERT_TYPE: DWORD = 0x10;
2261 pub const NETSCAPE_SSL_CA_CERT_TYPE: DWORD = 0x04;
2262 pub const NETSCAPE_SMIME_CA_CERT_TYPE: DWORD = 0x02;
2263 pub const NETSCAPE_SIGN_CA_CERT_TYPE: DWORD = 0x01;
2264 pub const szOID_CT_PKI_DATA: &'static str = "1.3.6.1.5.5.7.12.2";
2265 pub const szOID_CT_PKI_RESPONSE: &'static str = "1.3.6.1.5.5.7.12.3";
2266 pub const szOID_PKIX_NO_SIGNATURE: &'static str = "1.3.6.1.5.5.7.6.2";
2267 pub const szOID_CMC: &'static str = "1.3.6.1.5.5.7.7";
2268 pub const szOID_CMC_STATUS_INFO: &'static str = "1.3.6.1.5.5.7.7.1";
2269 pub const szOID_CMC_IDENTIFICATION: &'static str = "1.3.6.1.5.5.7.7.2";
2270 pub const szOID_CMC_IDENTITY_PROOF: &'static str = "1.3.6.1.5.5.7.7.3";
2271 pub const szOID_CMC_DATA_RETURN: &'static str = "1.3.6.1.5.5.7.7.4";
2272 pub const szOID_CMC_TRANSACTION_ID: &'static str = "1.3.6.1.5.5.7.7.5";
2273 pub const szOID_CMC_SENDER_NONCE: &'static str = "1.3.6.1.5.5.7.7.6";
2274 pub const szOID_CMC_RECIPIENT_NONCE: &'static str = "1.3.6.1.5.5.7.7.7";
2275 pub const szOID_CMC_ADD_EXTENSIONS: &'static str = "1.3.6.1.5.5.7.7.8";
2276 pub const szOID_CMC_ENCRYPTED_POP: &'static str = "1.3.6.1.5.5.7.7.9";
2277 pub const szOID_CMC_DECRYPTED_POP: &'static str = "1.3.6.1.5.5.7.7.10";
2278 pub const szOID_CMC_LRA_POP_WITNESS: &'static str = "1.3.6.1.5.5.7.7.11";
2279 pub const szOID_CMC_GET_CERT: &'static str = "1.3.6.1.5.5.7.7.15";
2280 pub const szOID_CMC_GET_CRL: &'static str = "1.3.6.1.5.5.7.7.16";
2281 pub const szOID_CMC_REVOKE_REQUEST: &'static str = "1.3.6.1.5.5.7.7.17";
2282 pub const szOID_CMC_REG_INFO: &'static str = "1.3.6.1.5.5.7.7.18";
2283 pub const szOID_CMC_RESPONSE_INFO: &'static str = "1.3.6.1.5.5.7.7.19";
2284 pub const szOID_CMC_QUERY_PENDING: &'static str = "1.3.6.1.5.5.7.7.21";
2285 pub const szOID_CMC_ID_POP_LINK_RANDOM: &'static str = "1.3.6.1.5.5.7.7.22";
2286 pub const szOID_CMC_ID_POP_LINK_WITNESS: &'static str = "1.3.6.1.5.5.7.7.23";
2287 pub const szOID_CMC_ID_CONFIRM_CERT_ACCEPTANCE: &'static str = "1.3.6.1.5.5.7.7.24";
2288 pub const szOID_CMC_ADD_ATTRIBUTES: &'static str = "1.3.6.1.4.1.311.10.10.1";
2289 STRUCT!{struct CMC_TAGGED_ATTRIBUTE {
2290     dwBodyPartID: DWORD,
2291     Attribute: CRYPT_ATTRIBUTE,
2292 }}
2293 pub type PCMC_TAGGED_ATTRIBUTE = *mut CMC_TAGGED_ATTRIBUTE;
2294 STRUCT!{struct CMC_TAGGED_CERT_REQUEST {
2295     dwBodyPartID: DWORD,
2296     SignedCertRequest: CRYPT_DER_BLOB,
2297 }}
2298 pub type PCMC_TAGGED_CERT_REQUEST = *mut CMC_TAGGED_CERT_REQUEST;
2299 UNION!{union CMC_TAGGED_REQUEST_u {
2300     [usize; 1],
2301     pTaggedCertRequest pTaggedCertRequest_mut: PCMC_TAGGED_CERT_REQUEST,
2302 }}
2303 STRUCT!{struct CMC_TAGGED_REQUEST {
2304     dwTaggedRequestChoice: DWORD,
2305     u: CMC_TAGGED_REQUEST_u,
2306 }}
2307 pub type PCMC_TAGGED_REQUEST = *mut CMC_TAGGED_REQUEST;
2308 STRUCT!{struct CMC_TAGGED_CONTENT_INFO {
2309     dwBodyPartID: DWORD,
2310     EncodedContentInfo: CRYPT_DER_BLOB,
2311 }}
2312 pub type PCMC_TAGGED_CONTENT_INFO = *mut CMC_TAGGED_CONTENT_INFO;
2313 STRUCT!{struct CMC_TAGGED_OTHER_MSG {
2314     dwBodyPartID: DWORD,
2315     pszObjId: LPSTR,
2316     Value: CRYPT_OBJID_BLOB,
2317 }}
2318 pub type PCMC_TAGGED_OTHER_MSG = *mut CMC_TAGGED_OTHER_MSG;
2319 STRUCT!{struct CMC_DATA_INFO {
2320     cTaggedAttribute: DWORD,
2321     rgTaggedAttribute: PCMC_TAGGED_ATTRIBUTE,
2322     cTaggedRequest: DWORD,
2323     rgTaggedRequest: PCMC_TAGGED_REQUEST,
2324     cTaggedContentInfo: DWORD,
2325     rgTaggedContentInfo: PCMC_TAGGED_CONTENT_INFO,
2326     cTaggedOtherMsg: DWORD,
2327     rgTaggedOtherMsg: PCMC_TAGGED_OTHER_MSG,
2328 }}
2329 pub type PCMC_DATA_INFO = *mut CMC_DATA_INFO;
2330 STRUCT!{struct CMC_RESPONSE_INFO {
2331     cTaggedAttribute: DWORD,
2332     rgTaggedAttribute: PCMC_TAGGED_ATTRIBUTE,
2333     cTaggedContentInfo: DWORD,
2334     rgTaggedContentInfo: PCMC_TAGGED_CONTENT_INFO,
2335     cTaggedOtherMsg: DWORD,
2336     rgTaggedOtherMsg: PCMC_TAGGED_OTHER_MSG,
2337 }}
2338 pub type PCMC_RESPONSE_INFO = *mut CMC_RESPONSE_INFO;
2339 STRUCT!{struct CMC_PEND_INFO {
2340     PendToken: CRYPT_DATA_BLOB,
2341     PendTime: FILETIME,
2342 }}
2343 pub type PCMC_PEND_INFO = *mut CMC_PEND_INFO;
2344 UNION!{union CMC_STATUS_INFO_u {
2345     [usize; 1],
2346     dwFailInfo dwFailInfo_mut: DWORD,
2347     pPendInfo pPendInfo_mut: PCMC_PEND_INFO,
2348 }}
2349 STRUCT!{struct CMC_STATUS_INFO {
2350     dwStatus: DWORD,
2351     cBodyList: DWORD,
2352     rgdwBodyList: *mut DWORD,
2353     pwszStatusString: LPWSTR,
2354     dwOtherInfoChoice: DWORD,
2355     u: CMC_STATUS_INFO_u,
2356 }}
2357 pub type PCMC_STATUS_INFO = *mut CMC_STATUS_INFO;
2358 pub const CMC_OTHER_INFO_NO_CHOICE: DWORD = 0;
2359 pub const CMC_OTHER_INFO_FAIL_CHOICE: DWORD = 1;
2360 pub const CMC_OTHER_INFO_PEND_CHOICE: DWORD = 2;
2361 pub const CMC_STATUS_SUCCESS: DWORD = 0;
2362 pub const CMC_STATUS_FAILED: DWORD = 2;
2363 pub const CMC_STATUS_PENDING: DWORD = 3;
2364 pub const CMC_STATUS_NO_SUPPORT: DWORD = 4;
2365 pub const CMC_STATUS_CONFIRM_REQUIRED: DWORD = 5;
2366 pub const CMC_FAIL_BAD_ALG: DWORD = 0;
2367 pub const CMC_FAIL_BAD_MESSAGE_CHECK: DWORD = 1;
2368 pub const CMC_FAIL_BAD_REQUEST: DWORD = 2;
2369 pub const CMC_FAIL_BAD_TIME: DWORD = 3;
2370 pub const CMC_FAIL_BAD_CERT_ID: DWORD = 4;
2371 pub const CMC_FAIL_UNSUPORTED_EXT: DWORD = 5;
2372 pub const CMC_FAIL_MUST_ARCHIVE_KEYS: DWORD = 6;
2373 pub const CMC_FAIL_BAD_IDENTITY: DWORD = 7;
2374 pub const CMC_FAIL_POP_REQUIRED: DWORD = 8;
2375 pub const CMC_FAIL_POP_FAILED: DWORD = 9;
2376 pub const CMC_FAIL_NO_KEY_REUSE: DWORD = 10;
2377 pub const CMC_FAIL_INTERNAL_CA_ERROR: DWORD = 11;
2378 pub const CMC_FAIL_TRY_LATER: DWORD = 12;
2379 STRUCT!{struct CMC_ADD_EXTENSIONS_INFO {
2380     dwCmcDataReference: DWORD,
2381     cCertReference: DWORD,
2382     rgdwCertReference: *mut DWORD,
2383     cExtension: DWORD,
2384     rgExtension: PCERT_EXTENSION,
2385 }}
2386 pub type PCMC_ADD_EXTENSIONS_INFO = *mut CMC_ADD_EXTENSIONS_INFO;
2387 STRUCT!{struct CMC_ADD_ATTRIBUTES_INFO {
2388     dwCmcDataReference: DWORD,
2389     cCertReference: DWORD,
2390     rgdwCertReference: *mut DWORD,
2391     cAttribute: DWORD,
2392     rgAttribute: PCRYPT_ATTRIBUTE,
2393 }}
2394 pub type PCMC_ADD_ATTRIBUTES_INFO = *mut CMC_ADD_ATTRIBUTES_INFO;
2395 STRUCT!{struct CERT_TEMPLATE_EXT {
2396     pszObjId: LPSTR,
2397     dwMajorVersion: DWORD,
2398     fMinorVersion: BOOL,
2399     dwMinorVersion: DWORD,
2400 }}
2401 pub type PCERT_TEMPLATE_EXT = *mut CERT_TEMPLATE_EXT;
2402 STRUCT!{struct CERT_HASHED_URL {
2403     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2404     Hash: CRYPT_HASH_BLOB,
2405     pwszUrl: LPWSTR,
2406 }}
2407 pub type PCERT_HASHED_URL = *mut CERT_HASHED_URL;
2408 STRUCT!{struct CERT_LOGOTYPE_DETAILS {
2409     pwszMimeType: LPWSTR,
2410     cHashedUrl: DWORD,
2411     rgHashedUrl: PCERT_HASHED_URL,
2412 }}
2413 pub type PCERT_LOGOTYPE_DETAILS = *mut CERT_LOGOTYPE_DETAILS;
2414 STRUCT!{struct CERT_LOGOTYPE_REFERENCE {
2415     cHashedUrl: DWORD,
2416     rgHashedUrl: PCERT_HASHED_URL,
2417 }}
2418 pub type PCERT_LOGOTYPE_REFERENCE = *mut CERT_LOGOTYPE_REFERENCE;
2419 UNION!{union CERT_LOGOTYPE_IMAGE_INFO_u {
2420     [u32; 1],
2421     dwNumBits dwNumBits_mut: DWORD,
2422     dwTableSize dwTableSize_mut: DWORD,
2423 }}
2424 STRUCT!{struct CERT_LOGOTYPE_IMAGE_INFO {
2425     dwLogotypeImageInfoChoice: DWORD,
2426     dwFileSize: DWORD,
2427     dwXSize: DWORD,
2428     dwYSize: DWORD,
2429     dwLogotypeImageResolutionChoice: DWORD,
2430     u: CERT_LOGOTYPE_IMAGE_INFO_u,
2431     pwszLanguage: LPWSTR,
2432 }}
2433 pub type PCERT_LOGOTYPE_IMAGE_INFO = *mut CERT_LOGOTYPE_IMAGE_INFO;
2434 pub const CERT_LOGOTYPE_GRAY_SCALE_IMAGE_INFO_CHOICE: DWORD = 1;
2435 pub const CERT_LOGOTYPE_COLOR_IMAGE_INFO_CHOICE: DWORD = 2;
2436 pub const CERT_LOGOTYPE_NO_IMAGE_RESOLUTION_CHOICE: DWORD = 0;
2437 pub const CERT_LOGOTYPE_BITS_IMAGE_RESOLUTION_CHOICE: DWORD = 1;
2438 pub const CERT_LOGOTYPE_TABLE_SIZE_IMAGE_RESOLUTION_CHOICE: DWORD = 2;
2439 STRUCT!{struct CERT_LOGOTYPE_IMAGE {
2440     LogotypeDetails: CERT_LOGOTYPE_DETAILS,
2441     pLogotypeImageInfo: PCERT_LOGOTYPE_IMAGE_INFO,
2442 }}
2443 pub type PCERT_LOGOTYPE_IMAGE = *mut CERT_LOGOTYPE_IMAGE;
2444 STRUCT!{struct CERT_LOGOTYPE_AUDIO_INFO {
2445     dwFileSize: DWORD,
2446     dwPlayTime: DWORD,
2447     dwChannels: DWORD,
2448     dwSampleRate: DWORD,
2449     pwszLanguage: LPWSTR,
2450 }}
2451 pub type PCERT_LOGOTYPE_AUDIO_INFO = *mut CERT_LOGOTYPE_AUDIO_INFO;
2452 STRUCT!{struct CERT_LOGOTYPE_AUDIO {
2453     LogotypeDetails: CERT_LOGOTYPE_DETAILS,
2454     pLogotypeAudioInfo: PCERT_LOGOTYPE_AUDIO_INFO,
2455 }}
2456 pub type PCERT_LOGOTYPE_AUDIO = *mut CERT_LOGOTYPE_AUDIO;
2457 STRUCT!{struct CERT_LOGOTYPE_DATA {
2458     cLogotypeImage: DWORD,
2459     rgLogotypeImage: PCERT_LOGOTYPE_IMAGE,
2460     cLogotypeAudio: DWORD,
2461     rgLogotypeAudio: PCERT_LOGOTYPE_AUDIO,
2462 }}
2463 pub type PCERT_LOGOTYPE_DATA = *mut CERT_LOGOTYPE_DATA;
2464 UNION!{union CERT_LOGOTYPE_INFO_u {
2465     [usize; 1],
2466     pLogotypeDirectInfo pLogotypeDirectInfo_mut: PCERT_LOGOTYPE_DATA,
2467     pLogotypeIndirectInfo pLogotypeIndirectInfo__mut: PCERT_LOGOTYPE_REFERENCE,
2468 }}
2469 STRUCT!{struct CERT_LOGOTYPE_INFO {
2470     dwLogotypeInfoChoice: DWORD,
2471     u: CERT_LOGOTYPE_INFO_u,
2472 }}
2473 pub type PCERT_LOGOTYPE_INFO = *mut CERT_LOGOTYPE_INFO;
2474 pub const CERT_LOGOTYPE_DIRECT_INFO_CHOICE: DWORD = 1;
2475 pub const CERT_LOGOTYPE_INDIRECT_INFO_CHOICE: DWORD = 2;
2476 STRUCT!{struct CERT_OTHER_LOGOTYPE_INFO {
2477     pszObjId: LPSTR,
2478     LogotypeInfo: CERT_LOGOTYPE_INFO,
2479 }}
2480 pub type PCERT_OTHER_LOGOTYPE_INFO = *mut CERT_OTHER_LOGOTYPE_INFO;
2481 pub const szOID_LOYALTY_OTHER_LOGOTYPE: &'static str = "1.3.6.1.5.5.7.20.1";
2482 pub const szOID_BACKGROUND_OTHER_LOGOTYPE: &'static str = "1.3.6.1.5.5.7.20.2";
2483 STRUCT!{struct CERT_LOGOTYPE_EXT_INFO {
2484     cCommunityLogo: DWORD,
2485     rgCommunityLogo: PCERT_LOGOTYPE_INFO,
2486     pIssuerLogo: PCERT_LOGOTYPE_INFO,
2487     pSubjectLogo: PCERT_LOGOTYPE_INFO,
2488     cOtherLogo: DWORD,
2489     rgOtherLogo: PCERT_OTHER_LOGOTYPE_INFO,
2490 }}
2491 pub type PCERT_LOGOTYPE_EXT_INFO = *mut CERT_LOGOTYPE_EXT_INFO;
2492 UNION!{union CERT_BIOMETRIC_DATA_u {
2493     [usize; 1],
2494     dwPredefined dwPredefined_mut: DWORD,
2495     pszObjId pszObjId_mut: LPSTR,
2496 }}
2497 STRUCT!{struct CERT_BIOMETRIC_DATA {
2498     dwTypeOfBiometricDataChoice: DWORD,
2499     u: CERT_BIOMETRIC_DATA_u,
2500     HashedUrl: CERT_HASHED_URL,
2501 }}
2502 pub type PCERT_BIOMETRIC_DATA = *mut CERT_BIOMETRIC_DATA;
2503 pub const CERT_BIOMETRIC_PREDEFINED_DATA_CHOICE: DWORD = 1;
2504 pub const CERT_BIOMETRIC_OID_DATA_CHOICE: DWORD = 2;
2505 pub const CERT_BIOMETRIC_PICTURE_TYPE: DWORD = 0;
2506 pub const CERT_BIOMETRIC_SIGNATURE_TYPE: DWORD = 1;
2507 STRUCT!{struct CERT_BIOMETRIC_EXT_INFO {
2508     cBiometricData: DWORD,
2509     rgBiometricData: PCERT_BIOMETRIC_DATA,
2510 }}
2511 pub type PCERT_BIOMETRIC_EXT_INFO = *mut CERT_BIOMETRIC_EXT_INFO;
2512 STRUCT!{struct OCSP_SIGNATURE_INFO {
2513     SignatureAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2514     Signature: CRYPT_BIT_BLOB,
2515     cCertEncoded: DWORD,
2516     rgCertEncoded: PCERT_BLOB,
2517 }}
2518 pub type POCSP_SIGNATURE_INFO = *mut OCSP_SIGNATURE_INFO;
2519 STRUCT!{struct OCSP_SIGNED_REQUEST_INFO {
2520     ToBeSigned: CRYPT_DER_BLOB,
2521     pOptionalSignatureInfo: POCSP_SIGNATURE_INFO,
2522 }}
2523 pub type POCSP_SIGNED_REQUEST_INFO = *mut OCSP_SIGNED_REQUEST_INFO;
2524 STRUCT!{struct OCSP_CERT_ID {
2525     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2526     IssuerNameHash: CRYPT_HASH_BLOB,
2527     IssuerKeyHash: CRYPT_HASH_BLOB,
2528     SerialNumber: CRYPT_INTEGER_BLOB,
2529 }}
2530 pub type POCSP_CERT_ID = *mut OCSP_CERT_ID;
2531 STRUCT!{struct OCSP_REQUEST_ENTRY {
2532     CertId: OCSP_CERT_ID,
2533     cExtension: DWORD,
2534     rgExtension: PCERT_EXTENSION,
2535 }}
2536 pub type POCSP_REQUEST_ENTRY = *mut OCSP_REQUEST_ENTRY;
2537 STRUCT!{struct OCSP_REQUEST_INFO {
2538     dwVersion: DWORD,
2539     pRequestorName: PCERT_ALT_NAME_ENTRY,
2540     cRequestEntry: DWORD,
2541     rgRequestEntry: POCSP_REQUEST_ENTRY,
2542     cExtension: DWORD,
2543     rgExtension: PCERT_EXTENSION,
2544 }}
2545 pub type POCSP_REQUEST_INFO = *mut OCSP_REQUEST_INFO;
2546 pub const OCSP_REQUEST_V1: DWORD = 0;
2547 STRUCT!{struct OCSP_RESPONSE_INFO {
2548     dwStatus: DWORD,
2549     pszObjId: LPSTR,
2550     Value: CRYPT_OBJID_BLOB,
2551 }}
2552 pub type POCSP_RESPONSE_INFO = *mut OCSP_RESPONSE_INFO;
2553 pub const OCSP_SUCCESSFUL_RESPONSE: DWORD = 0;
2554 pub const OCSP_MALFORMED_REQUEST_RESPONSE: DWORD = 1;
2555 pub const OCSP_INTERNAL_ERROR_RESPONSE: DWORD = 2;
2556 pub const OCSP_TRY_LATER_RESPONSE: DWORD = 3;
2557 pub const OCSP_SIG_REQUIRED_RESPONSE: DWORD = 5;
2558 pub const OCSP_UNAUTHORIZED_RESPONSE: DWORD = 6;
2559 pub const szOID_PKIX_OCSP_BASIC_SIGNED_RESPONSE: &'static str = "1.3.6.1.5.5.7.48.1.1";
2560 STRUCT!{struct OCSP_BASIC_SIGNED_RESPONSE_INFO {
2561     ToBeSigned: CRYPT_DER_BLOB,
2562     SignatureInfo: OCSP_SIGNATURE_INFO,
2563 }}
2564 pub type POCSP_BASIC_SIGNED_RESPONSE_INFO = *mut OCSP_BASIC_SIGNED_RESPONSE_INFO;
2565 STRUCT!{struct OCSP_BASIC_REVOKED_INFO {
2566     RevocationDate: FILETIME,
2567     dwCrlReasonCode: DWORD,
2568 }}
2569 pub type POCSP_BASIC_REVOKED_INFO = *mut OCSP_BASIC_REVOKED_INFO;
2570 UNION!{union OCSP_BASIC_RESPONSE_ENTRY_u {
2571     [usize; 1],
2572     pRevokedInfo pRevokedInfo_mut: POCSP_BASIC_REVOKED_INFO,
2573 }}
2574 STRUCT!{struct OCSP_BASIC_RESPONSE_ENTRY {
2575     CertId: OCSP_CERT_ID,
2576     dwCertStatus: DWORD,
2577     u: OCSP_BASIC_RESPONSE_ENTRY_u,
2578     ThisUpdate: FILETIME,
2579     NextUpdate: FILETIME,
2580     cExtension: DWORD,
2581     rgExtension: PCERT_EXTENSION,
2582 }}
2583 pub type POCSP_BASIC_RESPONSE_ENTRY = *mut OCSP_BASIC_RESPONSE_ENTRY;
2584 pub const OCSP_BASIC_GOOD_CERT_STATUS: DWORD = 0;
2585 pub const OCSP_BASIC_REVOKED_CERT_STATUS: DWORD = 1;
2586 pub const OCSP_BASIC_UNKNOWN_CERT_STATUS: DWORD = 2;
2587 UNION!{union OCSP_BASIC_RESPONSE_INFO_u {
2588     [usize; 2],
2589     ByNameResponderId ByNameResponderId_mut: CERT_NAME_BLOB,
2590     ByKeyResponderId ByKeyResponderId_mut: CRYPT_HASH_BLOB,
2591 }}
2592 STRUCT!{struct OCSP_BASIC_RESPONSE_INFO {
2593     dwVersion: DWORD,
2594     dwResponderIdChoice: DWORD,
2595     u: OCSP_BASIC_RESPONSE_INFO_u,
2596     ProducedAt: FILETIME,
2597     cResponseEntry: DWORD,
2598     rgResponseEntry: POCSP_BASIC_RESPONSE_ENTRY,
2599     cExtension: DWORD,
2600     rgExtension: PCERT_EXTENSION,
2601 }}
2602 pub type POCSP_BASIC_RESPONSE_INFO = *mut OCSP_BASIC_RESPONSE_INFO;
2603 pub const OCSP_BASIC_RESPONSE_V1: DWORD = 0;
2604 pub const OCSP_BASIC_BY_NAME_RESPONDER_ID: DWORD = 1;
2605 pub const OCSP_BASIC_BY_KEY_RESPONDER_ID: DWORD = 2;
2606 STRUCT!{struct CERT_SUPPORTED_ALGORITHM_INFO {
2607     Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
2608     IntendedKeyUsage: CRYPT_BIT_BLOB,
2609     IntendedCertPolicies: CERT_POLICIES_INFO,
2610 }}
2611 pub type PCERT_SUPPORTED_ALGORITHM_INFO = *mut CERT_SUPPORTED_ALGORITHM_INFO;
2612 STRUCT!{struct CERT_TPM_SPECIFICATION_INFO {
2613     pwszFamily: LPWSTR,
2614     dwLevel: DWORD,
2615     dwRevision: DWORD,
2616 }}
2617 pub type PCERT_TPM_SPECIFICATION_INFO = *mut CERT_TPM_SPECIFICATION_INFO;
2618 pub type HCRYPTOIDFUNCSET = *mut c_void;
2619 pub type HCRYPTOIDFUNCADDR = *mut c_void;
2620 pub const CRYPT_OID_ENCODE_OBJECT_FUNC: &'static str = "CryptDllEncodeObject";
2621 pub const CRYPT_OID_DECODE_OBJECT_FUNC: &'static str = "CryptDllDecodeObject";
2622 pub const CRYPT_OID_ENCODE_OBJECT_EX_FUNC: &'static str = "CryptDllEncodeObjectEx";
2623 pub const CRYPT_OID_DECODE_OBJECT_EX_FUNC: &'static str = "CryptDllDecodeObjectEx";
2624 pub const CRYPT_OID_CREATE_COM_OBJECT_FUNC: &'static str = "CryptDllCreateCOMObject";
2625 pub const CRYPT_OID_VERIFY_REVOCATION_FUNC: &'static str = "CertDllVerifyRevocation";
2626 pub const CRYPT_OID_VERIFY_CTL_USAGE_FUNC: &'static str = "CertDllVerifyCTLUsage";
2627 pub const CRYPT_OID_FORMAT_OBJECT_FUNC: &'static str = "CryptDllFormatObject";
2628 pub const CRYPT_OID_FIND_OID_INFO_FUNC: &'static str = "CryptDllFindOIDInfo";
2629 pub const CRYPT_OID_FIND_LOCALIZED_NAME_FUNC: &'static str = "CryptDllFindLocalizedName";
2630 pub const CRYPT_OID_REGPATH: &'static str = "Software\\Microsoft\\Cryptography\\OID";
2631 pub const CRYPT_OID_REG_ENCODING_TYPE_PREFIX: &'static str = "EncodingType ";
2632 pub const CRYPT_OID_REG_DLL_VALUE_NAME: &'static str = "Dll";
2633 pub const CRYPT_OID_REG_FUNC_NAME_VALUE_NAME: &'static str = "FuncName";
2634 pub const CRYPT_OID_REG_FLAGS_VALUE_NAME: &'static str = "CryptFlags";
2635 pub const CRYPT_DEFAULT_OID: &'static str = "DEFAULT";
2636 STRUCT!{struct CRYPT_OID_FUNC_ENTRY {
2637     pszOID: LPCSTR,
2638     pvFuncAddr: *mut c_void,
2639 }}
2640 pub type PCRYPT_OID_FUNC_ENTRY = *mut CRYPT_OID_FUNC_ENTRY;
2641 pub const CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG: DWORD = 1;
2642 extern "system" {
CryptInstallOIDFunctionAddress( hModule: HMODULE, dwEncodingType: DWORD, pszFuncName: LPCSTR, cFuncEntry: DWORD, rgFuncEntry: *const CRYPT_OID_FUNC_ENTRY, dwFlags: DWORD, ) -> BOOL2643     pub fn CryptInstallOIDFunctionAddress(
2644         hModule: HMODULE,
2645         dwEncodingType: DWORD,
2646         pszFuncName: LPCSTR,
2647         cFuncEntry: DWORD,
2648         rgFuncEntry: *const CRYPT_OID_FUNC_ENTRY,
2649         dwFlags: DWORD,
2650     ) -> BOOL;
CryptInitOIDFunctionSet( pszFuncName: LPCSTR, dwFlags: DWORD, ) -> HCRYPTOIDFUNCSET2651     pub fn CryptInitOIDFunctionSet(
2652         pszFuncName: LPCSTR,
2653         dwFlags: DWORD,
2654     ) -> HCRYPTOIDFUNCSET;
CryptGetOIDFunctionAddress( hFuncSet: HCRYPTOIDFUNCSET, dwEncodingType: DWORD, pszOID: LPCSTR, dwFlags: DWORD, ppvFuncAddr: *mut *mut c_void, phFuncAddr: *mut HCRYPTOIDFUNCADDR, ) -> BOOL2655     pub fn CryptGetOIDFunctionAddress(
2656         hFuncSet: HCRYPTOIDFUNCSET,
2657         dwEncodingType: DWORD,
2658         pszOID: LPCSTR,
2659         dwFlags: DWORD,
2660         ppvFuncAddr: *mut *mut c_void,
2661         phFuncAddr: *mut HCRYPTOIDFUNCADDR,
2662     ) -> BOOL;
2663 }
2664 pub const CRYPT_GET_INSTALLED_OID_FUNC_FLAG: DWORD = 0x1;
2665 extern "system" {
CryptGetDefaultOIDDllList( hFuncSet: HCRYPTOIDFUNCSET, dwEncodingType: DWORD, pwszDllList: *mut WCHAR, pcchDllList: *mut DWORD, ) -> BOOL2666     pub fn CryptGetDefaultOIDDllList(
2667         hFuncSet: HCRYPTOIDFUNCSET,
2668         dwEncodingType: DWORD,
2669         pwszDllList: *mut WCHAR,
2670         pcchDllList: *mut DWORD,
2671     ) -> BOOL;
CryptGetDefaultOIDFunctionAddress( hFuncSet: HCRYPTOIDFUNCSET, dwEncodingType: DWORD, pwszDll: LPCWSTR, dwFlags: DWORD, ppvFuncAddr: *mut *mut c_void, phFuncAddr: *mut HCRYPTOIDFUNCADDR, ) -> BOOL2672     pub fn CryptGetDefaultOIDFunctionAddress(
2673         hFuncSet: HCRYPTOIDFUNCSET,
2674         dwEncodingType: DWORD,
2675         pwszDll: LPCWSTR,
2676         dwFlags: DWORD,
2677         ppvFuncAddr: *mut *mut c_void,
2678         phFuncAddr: *mut HCRYPTOIDFUNCADDR,
2679     ) -> BOOL;
CryptFreeOIDFunctionAddress( hFuncAddr: HCRYPTOIDFUNCADDR, dwFlags: DWORD, ) -> BOOL2680     pub fn CryptFreeOIDFunctionAddress(
2681         hFuncAddr: HCRYPTOIDFUNCADDR,
2682         dwFlags: DWORD,
2683     ) -> BOOL;
CryptRegisterOIDFunction( dwEncodingType: DWORD, pszFuncName: LPCSTR, pszOID: LPCSTR, pwszDll: LPCWSTR, pszOverrideFuncName: LPCSTR, ) -> BOOL2684     pub fn CryptRegisterOIDFunction(
2685         dwEncodingType: DWORD,
2686         pszFuncName: LPCSTR,
2687         pszOID: LPCSTR,
2688         pwszDll: LPCWSTR,
2689         pszOverrideFuncName: LPCSTR,
2690     ) -> BOOL;
CryptUnregisterOIDFunction( dwEncodingType: DWORD, pszFuncName: LPCSTR, pszOID: LPCSTR, ) -> BOOL2691     pub fn CryptUnregisterOIDFunction(
2692         dwEncodingType: DWORD,
2693         pszFuncName: LPCSTR,
2694         pszOID: LPCSTR,
2695     ) -> BOOL;
CryptRegisterDefaultOIDFunction( dwEncodingType: DWORD, pszFuncName: LPCSTR, dwIndex: DWORD, pwszDll: LPCWSTR, ) -> BOOL2696     pub fn CryptRegisterDefaultOIDFunction(
2697         dwEncodingType: DWORD,
2698         pszFuncName: LPCSTR,
2699         dwIndex: DWORD,
2700         pwszDll: LPCWSTR,
2701     ) -> BOOL;
2702 }
2703 pub const CRYPT_REGISTER_FIRST_INDEX: DWORD = 0;
2704 pub const CRYPT_REGISTER_LAST_INDEX: DWORD = 0xFFFFFFFF;
2705 extern "system" {
CryptUnregisterDefaultOIDFunction( dwEncodingType: DWORD, pszFuncName: LPCSTR, pwszDll: LPCWSTR, ) -> BOOL2706     pub fn CryptUnregisterDefaultOIDFunction(
2707         dwEncodingType: DWORD,
2708         pszFuncName: LPCSTR,
2709         pwszDll: LPCWSTR,
2710     ) -> BOOL;
CryptSetOIDFunctionValue( dwEncodingType: DWORD, pszFuncName: LPCSTR, pszOID: LPCSTR, pwszValueName: LPCWSTR, dwValueType: DWORD, pbValueData: *const BYTE, cbValueData: DWORD, ) -> BOOL2711     pub fn CryptSetOIDFunctionValue(
2712         dwEncodingType: DWORD,
2713         pszFuncName: LPCSTR,
2714         pszOID: LPCSTR,
2715         pwszValueName: LPCWSTR,
2716         dwValueType: DWORD,
2717         pbValueData: *const BYTE,
2718         cbValueData: DWORD,
2719     ) -> BOOL;
CryptGetOIDFunctionValue( dwEncodingType: DWORD, pszFuncName: LPCSTR, pszOID: LPCSTR, pwszValueName: LPCWSTR, pdwValueType: *mut DWORD, pbValueData: *mut BYTE, pcbValueData: *mut DWORD, ) -> BOOL2720     pub fn CryptGetOIDFunctionValue(
2721         dwEncodingType: DWORD,
2722         pszFuncName: LPCSTR,
2723         pszOID: LPCSTR,
2724         pwszValueName: LPCWSTR,
2725         pdwValueType: *mut DWORD,
2726         pbValueData: *mut BYTE,
2727         pcbValueData: *mut DWORD,
2728     ) -> BOOL;
2729 }
2730 FN!{stdcall PFN_CRYPT_ENUM_OID_FUNC(
2731     dwEncodingType: DWORD,
2732     pszFuncName: LPCSTR,
2733     pszOID: LPCSTR,
2734     cValue: DWORD,
2735     rgdwValueType: *const DWORD,
2736     rgpwszValueName: *const LPCWSTR,
2737     rgpbValueData: *const *const BYTE,
2738     rgcbValueData: *const DWORD,
2739     pvArg: *mut c_void,
2740 ) -> BOOL}
2741 extern "system" {
CryptEnumOIDFunction( dwEncodingType: DWORD, pszFuncName: LPCSTR, pszOID: LPCSTR, dwFlags: DWORD, pvArg: *mut c_void, pfnEnumOIDFunc: PFN_CRYPT_ENUM_OID_FUNC, ) -> BOOL2742     pub fn CryptEnumOIDFunction(
2743         dwEncodingType: DWORD,
2744         pszFuncName: LPCSTR,
2745         pszOID: LPCSTR,
2746         dwFlags: DWORD,
2747         pvArg: *mut c_void,
2748         pfnEnumOIDFunc: PFN_CRYPT_ENUM_OID_FUNC,
2749     ) -> BOOL;
2750 }
2751 pub const CRYPT_MATCH_ANY_ENCODING_TYPE: DWORD = 0xFFFFFFFF;
2752 pub const CALG_OID_INFO_CNG_ONLY: ALG_ID = 0xFFFFFFFF;
2753 pub const CALG_OID_INFO_PARAMETERS: ALG_ID = 0xFFFFFFFE;
2754 #[inline]
IS_SPECIAL_OID_INFO_ALGID(Algid: ALG_ID) -> bool2755 pub fn IS_SPECIAL_OID_INFO_ALGID(Algid: ALG_ID) -> bool {
2756     Algid >= CALG_OID_INFO_PARAMETERS
2757 }
2758 pub const CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoHashParameters";
2759 pub const CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoECCParameters";
2760 pub const CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoMgf1Parameters";
2761 pub const CRYPT_OID_INFO_NO_SIGN_ALGORITHM: &'static str = "CryptOIDInfoNoSign";
2762 pub const CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoOAEPParameters";
2763 pub const CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM: &'static str
2764     = "CryptOIDInfoECCWrapParameters";
2765 pub const CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoNoParameters";
2766 UNION!{union CRYPT_OID_INFO_u {
2767     [u32; 1],
2768     dwValue dwValue_mut: DWORD,
2769     Algid Algid_mut: ALG_ID,
2770     dwLength dwLength_mut: DWORD,
2771 }}
2772 STRUCT!{struct CRYPT_OID_INFO {
2773     cbSize: DWORD,
2774     oszOID: LPCSTR,
2775     pwszName: LPCWSTR,
2776     dwGroupId: DWORD,
2777     u: CRYPT_OID_INFO_u,
2778     ExtraInfo: CRYPT_DATA_BLOB,
2779     pwszCNGAlgid: LPCWSTR,
2780     pwszCNGExtraAlgid: LPCWSTR,
2781 }}
2782 pub type PCRYPT_OID_INFO = *mut CRYPT_OID_INFO;
2783 pub type PCCRYPT_OID_INFO = *const CRYPT_OID_INFO;
2784 pub const CRYPT_HASH_ALG_OID_GROUP_ID: DWORD = 1;
2785 pub const CRYPT_ENCRYPT_ALG_OID_GROUP_ID: DWORD = 2;
2786 pub const CRYPT_PUBKEY_ALG_OID_GROUP_ID: DWORD = 3;
2787 pub const CRYPT_SIGN_ALG_OID_GROUP_ID: DWORD = 4;
2788 pub const CRYPT_RDN_ATTR_OID_GROUP_ID: DWORD = 5;
2789 pub const CRYPT_EXT_OR_ATTR_OID_GROUP_ID: DWORD = 6;
2790 pub const CRYPT_ENHKEY_USAGE_OID_GROUP_ID: DWORD = 7;
2791 pub const CRYPT_POLICY_OID_GROUP_ID: DWORD = 8;
2792 pub const CRYPT_TEMPLATE_OID_GROUP_ID: DWORD = 9;
2793 pub const CRYPT_KDF_OID_GROUP_ID: DWORD = 10;
2794 pub const CRYPT_LAST_OID_GROUP_ID: DWORD = 10;
2795 pub const CRYPT_FIRST_ALG_OID_GROUP_ID: DWORD = CRYPT_HASH_ALG_OID_GROUP_ID;
2796 pub const CRYPT_LAST_ALG_OID_GROUP_ID: DWORD = CRYPT_SIGN_ALG_OID_GROUP_ID;
2797 pub const CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG: DWORD = 0x00000001;
2798 pub const CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG: DWORD = 0x00000002;
2799 pub const CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG: DWORD = 0x00000004;
2800 pub const CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG: DWORD = 0x80000000;
2801 pub const CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG: DWORD = 0x40000000;
2802 pub const CRYPT_OID_USE_CURVE_NAME_FOR_ENCODE_FLAG: DWORD = 0x20000000;
2803 pub const CRYPT_OID_USE_CURVE_PARAMETERS_FOR_ENCODE_FLAG: DWORD = 0x10000000;
2804 extern "system" {
CryptFindOIDInfo( dwKeyType: DWORD, pvKey: *mut c_void, dwGroupId: DWORD, ) -> PCCRYPT_OID_INFO2805     pub fn CryptFindOIDInfo(
2806         dwKeyType: DWORD,
2807         pvKey: *mut c_void,
2808         dwGroupId: DWORD,
2809     ) -> PCCRYPT_OID_INFO;
2810 }
2811 pub const CRYPT_OID_INFO_OID_KEY: DWORD = 1;
2812 pub const CRYPT_OID_INFO_NAME_KEY: DWORD = 2;
2813 pub const CRYPT_OID_INFO_ALGID_KEY: DWORD = 3;
2814 pub const CRYPT_OID_INFO_SIGN_KEY: DWORD = 4;
2815 pub const CRYPT_OID_INFO_CNG_ALGID_KEY: DWORD = 5;
2816 pub const CRYPT_OID_INFO_CNG_SIGN_KEY: DWORD = 6;
2817 pub const CRYPT_OID_INFO_OID_KEY_FLAGS_MASK: DWORD = 0xFFFF0000;
2818 pub const CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG: DWORD = 0x80000000;
2819 pub const CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG: DWORD = 0x40000000;
2820 pub const CRYPT_OID_DISABLE_SEARCH_DS_FLAG: DWORD = 0x80000000;
2821 pub const CRYPT_OID_PREFER_CNG_ALGID_FLAG: DWORD = 0x40000000;
2822 pub const CRYPT_OID_INFO_OID_GROUP_BIT_LEN_MASK: DWORD = 0x0FFF0000;
2823 pub const CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT: DWORD = 16;
2824 extern "system" {
CryptRegisterOIDInfo( pInfo: PCCRYPT_OID_INFO, dwFlags: DWORD, ) -> BOOL2825     pub fn CryptRegisterOIDInfo(
2826         pInfo: PCCRYPT_OID_INFO,
2827         dwFlags: DWORD,
2828     ) -> BOOL;
CryptUnregisterOIDInfo( pInfo: PCCRYPT_OID_INFO, ) -> BOOL2829     pub fn CryptUnregisterOIDInfo(
2830         pInfo: PCCRYPT_OID_INFO,
2831     ) -> BOOL;
2832 }
2833 FN!{stdcall PFN_CRYPT_ENUM_OID_INFO(
2834     pInfo: PCCRYPT_OID_INFO,
2835     pvArg: *mut c_void,
2836 ) -> BOOL}
2837 extern "system" {
CryptEnumOIDInfo( dwGroupId: DWORD, dwFlags: DWORD, pvArg: *mut c_void, pfnEnumOIDInfo: PFN_CRYPT_ENUM_OID_INFO, ) -> BOOL2838     pub fn CryptEnumOIDInfo(
2839         dwGroupId: DWORD,
2840         dwFlags: DWORD,
2841         pvArg: *mut c_void,
2842         pfnEnumOIDInfo: PFN_CRYPT_ENUM_OID_INFO,
2843     ) -> BOOL;
CryptFindLocalizedName( pwszCryptName: LPCWSTR, ) -> LPCWSTR2844     pub fn CryptFindLocalizedName(
2845         pwszCryptName: LPCWSTR,
2846     ) -> LPCWSTR;
2847 }
2848 pub const CRYPT_LOCALIZED_NAME_ENCODING_TYPE: DWORD = 0;
2849 pub const CRYPT_LOCALIZED_NAME_OID: &'static str = "LocalizedNames";
2850 STRUCT!{struct CERT_STRONG_SIGN_SERIALIZED_INFO {
2851     dwFlags: DWORD,
2852     pwszCNGSignHashAlgids: LPWSTR,
2853     pwszCNGPubKeyMinBitLengths: LPWSTR,
2854 }}
2855 pub type PCERT_STRONG_SIGN_SERIALIZED_INFO = *mut CERT_STRONG_SIGN_SERIALIZED_INFO;
2856 pub const CERT_STRONG_SIGN_ECDSA_ALGORITHM: &'static str = "ECDSA";
2857 UNION!{union CERT_STRONG_SIGN_PARA_u {
2858     [usize; 1],
2859     pvInfo pvInfo_mut: *mut c_void,
2860     pSerializedInfo pSerializedInfo_mut: PCERT_STRONG_SIGN_SERIALIZED_INFO,
2861     pszOID pszOID_mut: LPSTR,
2862 }}
2863 STRUCT!{struct CERT_STRONG_SIGN_PARA {
2864     cbSize: DWORD,
2865     dwInfoChoice: DWORD,
2866     u: CERT_STRONG_SIGN_PARA_u,
2867 }}
2868 pub type PCERT_STRONG_SIGN_PARA = *mut CERT_STRONG_SIGN_PARA;
2869 pub type PCCERT_STRONG_SIGN_PARA = *const CERT_STRONG_SIGN_PARA;
2870 pub const CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE: DWORD = 1;
2871 pub const CERT_STRONG_SIGN_OID_INFO_CHOICE: DWORD = 2;
2872 pub const CERT_STRONG_SIGN_ENABLE_CRL_CHECK: DWORD = 0x1;
2873 pub const CERT_STRONG_SIGN_ENABLE_OCSP_CHECK: DWORD = 0x2;
2874 pub const szOID_CERT_STRONG_SIGN_OS_PREFIX: &'static str = "1.3.6.1.4.1.311.72.1.";
2875 pub const szOID_CERT_STRONG_SIGN_OS_1: &'static str = "1.3.6.1.4.1.311.72.1.1";
2876 pub const szOID_CERT_STRONG_SIGN_OS_CURRENT: &'static str = szOID_CERT_STRONG_SIGN_OS_1;
2877 pub const szOID_CERT_STRONG_KEY_OS_PREFIX: &'static str = "1.3.6.1.4.1.311.72.2.";
2878 pub const szOID_CERT_STRONG_KEY_OS_1: &'static str = "1.3.6.1.4.1.311.72.2.1";
2879 pub const szOID_CERT_STRONG_KEY_OS_CURRENT: &'static str = szOID_CERT_STRONG_KEY_OS_1;
2880 pub type HCRYPTMSG = *mut c_void;
2881 pub const szOID_PKCS_7_DATA: &'static str = "1.2.840.113549.1.7.1";
2882 pub const szOID_PKCS_7_SIGNED: &'static str = "1.2.840.113549.1.7.2";
2883 pub const szOID_PKCS_7_ENVELOPED: &'static str = "1.2.840.113549.1.7.3";
2884 pub const szOID_PKCS_7_SIGNEDANDENVELOPED: &'static str = "1.2.840.113549.1.7.4";
2885 pub const szOID_PKCS_7_DIGESTED: &'static str = "1.2.840.113549.1.7.5";
2886 pub const szOID_PKCS_7_ENCRYPTED: &'static str = "1.2.840.113549.1.7.6";
2887 pub const szOID_PKCS_9_CONTENT_TYPE: &'static str = "1.2.840.113549.1.9.3";
2888 pub const szOID_PKCS_9_MESSAGE_DIGEST: &'static str = "1.2.840.113549.1.9.4";
2889 pub const CMSG_DATA: DWORD = 1;
2890 pub const CMSG_SIGNED: DWORD = 2;
2891 pub const CMSG_ENVELOPED: DWORD = 3;
2892 pub const CMSG_SIGNED_AND_ENVELOPED: DWORD = 4;
2893 pub const CMSG_HASHED: DWORD = 5;
2894 pub const CMSG_ENCRYPTED: DWORD = 6;
2895 pub const CMSG_ALL_FLAGS: DWORD = !0;
2896 pub const CMSG_DATA_FLAG: DWORD = 1 << CMSG_DATA;
2897 pub const CMSG_SIGNED_FLAG: DWORD = 1 << CMSG_SIGNED;
2898 pub const CMSG_ENVELOPED_FLAG: DWORD = 1 << CMSG_ENVELOPED;
2899 pub const CMSG_SIGNED_AND_ENVELOPED_FLAG: DWORD = 1 << CMSG_SIGNED_AND_ENVELOPED;
2900 pub const CMSG_HASHED_FLAG: DWORD = 1 << CMSG_HASHED;
2901 pub const CMSG_ENCRYPTED_FLAG: DWORD = 1 << CMSG_ENCRYPTED;
2902 STRUCT!{struct CERT_ISSUER_SERIAL_NUMBER {
2903     Issuer: CERT_NAME_BLOB,
2904     SerialNumber: CRYPT_INTEGER_BLOB,
2905 }}
2906 pub type PCERT_ISSUER_SERIAL_NUMBER = *mut CERT_ISSUER_SERIAL_NUMBER;
2907 UNION!{union CERT_ID_u {
2908     [usize; 4],
2909     IssuerSerialNumber IssuerSerialNumber_mut: CERT_ISSUER_SERIAL_NUMBER,
2910     KeyId KeyId_mut: CRYPT_HASH_BLOB,
2911     HashId HashId_mut: CRYPT_HASH_BLOB,
2912 }}
2913 STRUCT!{struct CERT_ID {
2914     dwIdChoice: DWORD,
2915     u: CERT_ID_u,
2916 }}
2917 pub type PCERT_ID = *mut CERT_ID;
2918 pub const CERT_ID_ISSUER_SERIAL_NUMBER: DWORD = 1;
2919 pub const CERT_ID_KEY_IDENTIFIER: DWORD = 2;
2920 pub const CERT_ID_SHA1_HASH: DWORD = 3;
2921 UNION!{union CMSG_SIGNER_ENCODE_INFO_u {
2922     [usize; 1],
2923     hCryptProv hCryptProv_mut: HCRYPTPROV,
2924     hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
2925     hBCryptKey hBCryptKey_mut: BCRYPT_KEY_HANDLE,
2926 }}
2927 STRUCT!{struct CMSG_SIGNER_ENCODE_INFO {
2928     cbSize: DWORD,
2929     pCertInfo: PCERT_INFO,
2930     u: CMSG_SIGNER_ENCODE_INFO_u,
2931     dwKeySpec: DWORD,
2932     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2933     pvHashAuxInfo: *mut c_void,
2934     cAuthAttr: DWORD,
2935     rgAuthAttr: PCRYPT_ATTRIBUTE,
2936     cUnauthAttr: DWORD,
2937     rgUnauthAttr: PCRYPT_ATTRIBUTE,
2938     SignerId: CERT_ID,
2939     HashEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2940     pvHashEncryptionAuxInfo: *mut c_void,
2941 }}
2942 pub type PCMSG_SIGNER_ENCODE_INFO = *mut CMSG_SIGNER_ENCODE_INFO;
2943 STRUCT!{struct CMSG_SIGNED_ENCODE_INFO {
2944     cbSize: DWORD,
2945     cSigners: DWORD,
2946     rgSigners: PCMSG_SIGNER_ENCODE_INFO,
2947     cCertEncoded: DWORD,
2948     rgCertEncoded: PCERT_BLOB,
2949     cCrlEncoded: DWORD,
2950     rgCrlEncoded: PCRL_BLOB,
2951     cAttrCertEncoded: DWORD,
2952     rgAttrCertEncoded: PCERT_BLOB,
2953 }}
2954 pub type PCMSG_SIGNED_ENCODE_INFO = *mut CMSG_SIGNED_ENCODE_INFO;
2955 pub type PCMSG_RECIPIENT_ENCODE_INFO = *mut CMSG_RECIPIENT_ENCODE_INFO;
2956 STRUCT!{struct CMSG_ENVELOPED_ENCODE_INFO {
2957     cbSize: DWORD,
2958     hCryptProv: HCRYPTPROV_LEGACY,
2959     ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2960     pvEncryptionAuxInfo: *mut c_void,
2961     cRecipients: DWORD,
2962     rgpRecipients: *mut PCERT_INFO,
2963     rgCmsRecipients: PCMSG_RECIPIENT_ENCODE_INFO,
2964     cCertEncoded: DWORD,
2965     rgCertEncoded: PCERT_BLOB,
2966     cCrlEncoded: DWORD,
2967     rgCrlEncoded: PCRL_BLOB,
2968     cAttrCertEncoded: DWORD,
2969     rgAttrCertEncoded: PCERT_BLOB,
2970     cUnprotectedAttr: DWORD,
2971     rgUnprotectedAttr: PCRYPT_ATTRIBUTE,
2972 }}
2973 pub type PCMSG_ENVELOPED_ENCODE_INFO = *mut CMSG_ENVELOPED_ENCODE_INFO;
2974 STRUCT!{struct CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO {
2975     cbSize: DWORD,
2976     KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2977     pvKeyEncryptionAuxInfo: *mut c_void,
2978     hCryptProv: HCRYPTPROV_LEGACY,
2979     RecipientPublicKey: CRYPT_BIT_BLOB,
2980     RecipientId: CERT_ID,
2981 }}
2982 pub type PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO = *mut CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
2983 STRUCT!{struct CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO {
2984     cbSize: DWORD,
2985     RecipientPublicKey: CRYPT_BIT_BLOB,
2986     RecipientId: CERT_ID,
2987     Date: FILETIME,
2988     pOtherAttr: PCRYPT_ATTRIBUTE_TYPE_VALUE,
2989 }}
2990 pub type PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO = *mut CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
2991 UNION!{union CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO_u {
2992     [usize; 1],
2993     pEphemeralAlgorithm pEphemeralAlgorithm_mut: PCRYPT_ALGORITHM_IDENTIFIER,
2994     pSenderId pSenderId_mut: PCERT_ID,
2995 }}
2996 STRUCT!{struct CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO {
2997     cbSize: DWORD,
2998     KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
2999     pvKeyEncryptionAuxInfo: *mut c_void,
3000     KeyWrapAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3001     pvKeyWrapAuxInfo: *mut c_void,
3002     hCryptProv: HCRYPTPROV_LEGACY,
3003     dwKeySpec: DWORD,
3004     dwKeyChoice: DWORD,
3005     u: CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO_u,
3006     UserKeyingMaterial: CRYPT_DATA_BLOB,
3007     cRecipientEncryptedKeys: DWORD,
3008     rgpRecipientEncryptedKeys: *mut PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,
3009 }}
3010 pub type PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO = *mut CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
3011 pub const CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE: DWORD = 1;
3012 pub const CMSG_KEY_AGREE_STATIC_KEY_CHOICE: DWORD = 2;
3013 UNION!{union CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO_u {
3014     [usize; 1],
3015     hKeyEncryptionKey hKeyEncryptionKey_mut: HCRYPTKEY,
3016     pvKeyEncryptionKey pvKeyEncryptionKey_mut: *mut c_void,
3017 }}
3018 STRUCT!{struct CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO {
3019     cbSize: DWORD,
3020     KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3021     pvKeyEncryptionAuxInfo: *mut c_void,
3022     hCryptProv: HCRYPTPROV,
3023     dwKeyChoice: DWORD,
3024     u: CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO_u,
3025     KeyId: CRYPT_DATA_BLOB,
3026     Date: FILETIME,
3027     pOtherAttr: PCRYPT_ATTRIBUTE_TYPE_VALUE,
3028 }}
3029 pub type PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO = *mut CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
3030 pub const CMSG_MAIL_LIST_HANDLE_KEY_CHOICE: DWORD = 1;
3031 UNION!{union CMSG_RECIPIENT_ENCODE_INFO_u {
3032     [usize; 1],
3033     pKeyTrans pKeyTrans_mut: PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO,
3034     pKeyAgree pKeyAgree_mut: PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO,
3035     pMailList pMailList_mut: PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO,
3036 }}
3037 STRUCT!{struct CMSG_RECIPIENT_ENCODE_INFO {
3038     dwRecipientChoice: DWORD,
3039     u: CMSG_RECIPIENT_ENCODE_INFO_u,
3040 }}
3041 pub const CMSG_KEY_TRANS_RECIPIENT: DWORD = 1;
3042 pub const CMSG_KEY_AGREE_RECIPIENT: DWORD = 2;
3043 pub const CMSG_MAIL_LIST_RECIPIENT: DWORD = 3;
3044 STRUCT!{struct CMSG_RC2_AUX_INFO {
3045     cbSize: DWORD,
3046     dwBitLen: DWORD,
3047 }}
3048 pub type PCMSG_RC2_AUX_INFO = *mut CMSG_RC2_AUX_INFO;
3049 STRUCT!{struct CMSG_SP3_COMPATIBLE_AUX_INFO {
3050     cbSize: DWORD,
3051     dwFlags: DWORD,
3052 }}
3053 pub type PCMSG_SP3_COMPATIBLE_AUX_INFO = *mut CMSG_SP3_COMPATIBLE_AUX_INFO;
3054 pub const CMSG_SP3_COMPATIBLE_ENCRYPT_FLAG: DWORD = 0x80000000;
3055 STRUCT!{struct CMSG_RC4_AUX_INFO {
3056     cbSize: DWORD,
3057     dwBitLen: DWORD,
3058 }}
3059 pub type PCMSG_RC4_AUX_INFO = *mut CMSG_RC4_AUX_INFO;
3060 pub const CMSG_RC4_NO_SALT_FLAG: DWORD = 0x40000000;
3061 STRUCT!{struct CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO {
3062     cbSize: DWORD,
3063     SignedInfo: CMSG_SIGNED_ENCODE_INFO,
3064     EnvelopedInfo: CMSG_ENVELOPED_ENCODE_INFO,
3065 }}
3066 pub type PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO = *mut CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;
3067 STRUCT!{struct CMSG_HASHED_ENCODE_INFO {
3068     cbSize: DWORD,
3069     hCryptProv: HCRYPTPROV_LEGACY,
3070     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3071     pvHashAuxInfo: *mut c_void,
3072 }}
3073 pub type PCMSG_HASHED_ENCODE_INFO = *mut CMSG_HASHED_ENCODE_INFO;
3074 STRUCT!{struct CMSG_ENCRYPTED_ENCODE_INFO {
3075     cbSize: DWORD,
3076     ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3077     pvEncryptionAuxInfo: *mut c_void,
3078 }}
3079 pub type PCMSG_ENCRYPTED_ENCODE_INFO = *mut CMSG_ENCRYPTED_ENCODE_INFO;
3080 FN!{stdcall PFN_CMSG_STREAM_OUTPUT(
3081     pvArg: *const c_void,
3082     pbData: *mut BYTE,
3083     cbData: DWORD,
3084     fFinal: BOOL,
3085 ) -> BOOL}
3086 pub const CMSG_INDEFINITE_LENGTH: DWORD = 0xFFFFFFFF;
3087 STRUCT!{struct CMSG_STREAM_INFO {
3088     cbContent: DWORD,
3089     pfnStreamOutput: PFN_CMSG_STREAM_OUTPUT,
3090     pvArg: *mut c_void,
3091 }}
3092 pub type PCMSG_STREAM_INFO = *mut CMSG_STREAM_INFO;
3093 pub const CMSG_BARE_CONTENT_FLAG: DWORD = 0x00000001;
3094 pub const CMSG_LENGTH_ONLY_FLAG: DWORD = 0x00000002;
3095 pub const CMSG_DETACHED_FLAG: DWORD = 0x00000004;
3096 pub const CMSG_AUTHENTICATED_ATTRIBUTES_FLAG: DWORD = 0x00000008;
3097 pub const CMSG_CONTENTS_OCTETS_FLAG: DWORD = 0x00000010;
3098 pub const CMSG_MAX_LENGTH_FLAG: DWORD = 0x00000020;
3099 pub const CMSG_CMS_ENCAPSULATED_CONTENT_FLAG: DWORD = 0x00000040;
3100 pub const CMSG_SIGNED_DATA_NO_SIGN_FLAG: DWORD = 0x00000080;
3101 pub const CMSG_CRYPT_RELEASE_CONTEXT_FLAG: DWORD = 0x00008000;
3102 extern "system" {
CryptMsgOpenToEncode( dwMsgEncodingType: DWORD, dwFlags: DWORD, dwMsgType: DWORD, pvMsgEncodeInfo: *mut c_void, pszInnerContentObjID: LPSTR, pStreamInfo: PCMSG_STREAM_INFO, ) -> HCRYPTMSG3103     pub fn CryptMsgOpenToEncode(
3104         dwMsgEncodingType: DWORD,
3105         dwFlags: DWORD,
3106         dwMsgType: DWORD,
3107         pvMsgEncodeInfo: *mut c_void,
3108         pszInnerContentObjID: LPSTR,
3109         pStreamInfo: PCMSG_STREAM_INFO,
3110     ) -> HCRYPTMSG;
CryptMsgCalculateEncodedLength( dwMsgEncodingType: DWORD, dwFlags: DWORD, dwMsgType: DWORD, pvMsgEncodeInfo: *const c_void, pszInnerContentObjID: LPSTR, cbData: DWORD, ) -> DWORD3111     pub fn CryptMsgCalculateEncodedLength(
3112         dwMsgEncodingType: DWORD,
3113         dwFlags: DWORD,
3114         dwMsgType: DWORD,
3115         pvMsgEncodeInfo: *const c_void,
3116         pszInnerContentObjID: LPSTR,
3117         cbData: DWORD,
3118     ) -> DWORD;
CryptMsgOpenToDecode( dwMsgEncodingType: DWORD, dwFlags: DWORD, dwMsgType: DWORD, hCryptProv: HCRYPTPROV_LEGACY, pRecipientInfo: PCERT_INFO, pStreamInfo: PCMSG_STREAM_INFO, ) -> HCRYPTMSG3119     pub fn CryptMsgOpenToDecode(
3120         dwMsgEncodingType: DWORD,
3121         dwFlags: DWORD,
3122         dwMsgType: DWORD,
3123         hCryptProv: HCRYPTPROV_LEGACY,
3124         pRecipientInfo: PCERT_INFO,
3125         pStreamInfo: PCMSG_STREAM_INFO,
3126     ) -> HCRYPTMSG;
CryptMsgDuplicate( hCryptMsg: HCRYPTMSG, ) -> HCRYPTMSG3127     pub fn CryptMsgDuplicate(
3128         hCryptMsg: HCRYPTMSG,
3129     ) -> HCRYPTMSG;
CryptMsgClose( hCryptMsg: HCRYPTMSG, ) -> BOOL3130     pub fn CryptMsgClose(
3131         hCryptMsg: HCRYPTMSG,
3132     ) -> BOOL;
CryptMsgUpdate( hCryptMsg: HCRYPTMSG, pbData: *const BYTE, cbData: DWORD, fFinal: BOOL, ) -> BOOL3133     pub fn CryptMsgUpdate(
3134         hCryptMsg: HCRYPTMSG,
3135         pbData: *const BYTE,
3136         cbData: DWORD,
3137         fFinal: BOOL,
3138     ) -> BOOL;
CryptMsgGetParam( hCryptMsg: HCRYPTMSG, dwParamType: DWORD, dwIndex: DWORD, pvData: *mut c_void, pcbData: *mut DWORD, ) -> BOOL3139     pub fn CryptMsgGetParam(
3140         hCryptMsg: HCRYPTMSG,
3141         dwParamType: DWORD,
3142         dwIndex: DWORD,
3143         pvData: *mut c_void,
3144         pcbData: *mut DWORD,
3145     ) -> BOOL;
3146 }
3147 pub const CMSG_TYPE_PARAM: DWORD = 1;
3148 pub const CMSG_CONTENT_PARAM: DWORD = 2;
3149 pub const CMSG_BARE_CONTENT_PARAM: DWORD = 3;
3150 pub const CMSG_INNER_CONTENT_TYPE_PARAM: DWORD = 4;
3151 pub const CMSG_SIGNER_COUNT_PARAM: DWORD = 5;
3152 pub const CMSG_SIGNER_INFO_PARAM: DWORD = 6;
3153 pub const CMSG_SIGNER_CERT_INFO_PARAM: DWORD = 7;
3154 pub const CMSG_SIGNER_HASH_ALGORITHM_PARAM: DWORD = 8;
3155 pub const CMSG_SIGNER_AUTH_ATTR_PARAM: DWORD = 9;
3156 pub const CMSG_SIGNER_UNAUTH_ATTR_PARAM: DWORD = 10;
3157 pub const CMSG_CERT_COUNT_PARAM: DWORD = 11;
3158 pub const CMSG_CERT_PARAM: DWORD = 12;
3159 pub const CMSG_CRL_COUNT_PARAM: DWORD = 13;
3160 pub const CMSG_CRL_PARAM: DWORD = 14;
3161 pub const CMSG_ENVELOPE_ALGORITHM_PARAM: DWORD = 15;
3162 pub const CMSG_RECIPIENT_COUNT_PARAM: DWORD = 17;
3163 pub const CMSG_RECIPIENT_INDEX_PARAM: DWORD = 18;
3164 pub const CMSG_RECIPIENT_INFO_PARAM: DWORD = 19;
3165 pub const CMSG_HASH_ALGORITHM_PARAM: DWORD = 20;
3166 pub const CMSG_HASH_DATA_PARAM: DWORD = 21;
3167 pub const CMSG_COMPUTED_HASH_PARAM: DWORD = 22;
3168 pub const CMSG_ENCRYPT_PARAM: DWORD = 26;
3169 pub const CMSG_ENCRYPTED_DIGEST: DWORD = 27;
3170 pub const CMSG_ENCODED_SIGNER: DWORD = 28;
3171 pub const CMSG_ENCODED_MESSAGE: DWORD = 29;
3172 pub const CMSG_VERSION_PARAM: DWORD = 30;
3173 pub const CMSG_ATTR_CERT_COUNT_PARAM: DWORD = 31;
3174 pub const CMSG_ATTR_CERT_PARAM: DWORD = 32;
3175 pub const CMSG_CMS_RECIPIENT_COUNT_PARAM: DWORD = 33;
3176 pub const CMSG_CMS_RECIPIENT_INDEX_PARAM: DWORD = 34;
3177 pub const CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM: DWORD = 35;
3178 pub const CMSG_CMS_RECIPIENT_INFO_PARAM: DWORD = 36;
3179 pub const CMSG_UNPROTECTED_ATTR_PARAM: DWORD = 37;
3180 pub const CMSG_SIGNER_CERT_ID_PARAM: DWORD = 38;
3181 pub const CMSG_CMS_SIGNER_INFO_PARAM: DWORD = 39;
3182 STRUCT!{struct CMSG_SIGNER_INFO {
3183     dwVersion: DWORD,
3184     Issuer: CERT_NAME_BLOB,
3185     SerialNumber: CRYPT_INTEGER_BLOB,
3186     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3187     HashEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3188     EncryptedHash: CRYPT_DATA_BLOB,
3189     AuthAttrs: CRYPT_ATTRIBUTES,
3190     UnauthAttrs: CRYPT_ATTRIBUTES,
3191 }}
3192 pub type PCMSG_SIGNER_INFO = *mut CMSG_SIGNER_INFO;
3193 STRUCT!{struct CMSG_CMS_SIGNER_INFO {
3194     dwVersion: DWORD,
3195     SignerId: CERT_ID,
3196     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3197     HashEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3198     EncryptedHash: CRYPT_DATA_BLOB,
3199     AuthAttrs: CRYPT_ATTRIBUTES,
3200     UnauthAttrs: CRYPT_ATTRIBUTES,
3201 }}
3202 pub type PCMSG_CMS_SIGNER_INFO = *mut CMSG_CMS_SIGNER_INFO;
3203 pub type CMSG_ATTR = CRYPT_ATTRIBUTES;
3204 pub type PCMSG_ATTR = *mut CRYPT_ATTRIBUTES;
3205 pub const CMSG_SIGNED_DATA_V1: DWORD = 1;
3206 pub const CMSG_SIGNED_DATA_V3: DWORD = 3;
3207 pub const CMSG_SIGNED_DATA_PKCS_1_5_VERSION: DWORD = CMSG_SIGNED_DATA_V1;
3208 pub const CMSG_SIGNED_DATA_CMS_VERSION: DWORD = CMSG_SIGNED_DATA_V3;
3209 pub const CMSG_SIGNER_INFO_V1: DWORD = 1;
3210 pub const CMSG_SIGNER_INFO_V3: DWORD = 3;
3211 pub const CMSG_SIGNER_INFO_PKCS_1_5_VERSION: DWORD = CMSG_SIGNER_INFO_V1;
3212 pub const CMSG_SIGNER_INFO_CMS_VERSION: DWORD = CMSG_SIGNER_INFO_V3;
3213 pub const CMSG_HASHED_DATA_V0: DWORD = 0;
3214 pub const CMSG_HASHED_DATA_V2: DWORD = 2;
3215 pub const CMSG_HASHED_DATA_PKCS_1_5_VERSION: DWORD = CMSG_HASHED_DATA_V0;
3216 pub const CMSG_HASHED_DATA_CMS_VERSION: DWORD = CMSG_HASHED_DATA_V2;
3217 pub const CMSG_ENVELOPED_DATA_V0: DWORD = 0;
3218 pub const CMSG_ENVELOPED_DATA_V2: DWORD = 2;
3219 pub const CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION: DWORD = CMSG_ENVELOPED_DATA_V0;
3220 pub const CMSG_ENVELOPED_DATA_CMS_VERSION: DWORD = CMSG_ENVELOPED_DATA_V2;
3221 STRUCT!{struct CMSG_KEY_TRANS_RECIPIENT_INFO {
3222     dwVersion: DWORD,
3223     RecipientId: CERT_ID,
3224     KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3225     EncryptedKey: CRYPT_DATA_BLOB,
3226 }}
3227 pub type PCMSG_KEY_TRANS_RECIPIENT_INFO = *mut CMSG_KEY_TRANS_RECIPIENT_INFO;
3228 STRUCT!{struct CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {
3229     RecipientId: CERT_ID,
3230     EncryptedKey: CRYPT_DATA_BLOB,
3231     Date: FILETIME,
3232     pOtherAttr: PCRYPT_ATTRIBUTE_TYPE_VALUE,
3233 }}
3234 pub type PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO = *mut CMSG_RECIPIENT_ENCRYPTED_KEY_INFO;
3235 UNION!{union CMSG_KEY_AGREE_RECIPIENT_INFO_u {
3236     [usize; 6],
3237     OriginatorCertId OriginatorCertId_mut: CERT_ID,
3238     OriginatorPublicKeyInfo OriginatorPublicKeyInfo_mut: CERT_PUBLIC_KEY_INFO,
3239 }}
3240 STRUCT!{struct CMSG_KEY_AGREE_RECIPIENT_INFO {
3241     dwVersion: DWORD,
3242     dwOriginatorChoice: DWORD,
3243     u: CMSG_KEY_AGREE_RECIPIENT_INFO_u,
3244     UserKeyingMaterial: CRYPT_DATA_BLOB,
3245     KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3246     cRecipientEncryptedKeys: DWORD,
3247     rgpRecipientEncryptedKeys: *mut PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO,
3248 }}
3249 pub type PCMSG_KEY_AGREE_RECIPIENT_INFO = *mut CMSG_KEY_AGREE_RECIPIENT_INFO;
3250 pub const CMSG_KEY_AGREE_ORIGINATOR_CERT: DWORD = 1;
3251 pub const CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY: DWORD = 2;
3252 STRUCT!{struct CMSG_MAIL_LIST_RECIPIENT_INFO {
3253     dwVersion: DWORD,
3254     KeyId: CRYPT_DATA_BLOB,
3255     KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3256     EncryptedKey: CRYPT_DATA_BLOB,
3257     Date: FILETIME,
3258     pOtherAttr: PCRYPT_ATTRIBUTE_TYPE_VALUE,
3259 }}
3260 pub type PCMSG_MAIL_LIST_RECIPIENT_INFO = *mut CMSG_MAIL_LIST_RECIPIENT_INFO;
3261 UNION!{union CMSG_CMS_RECIPIENT_INFO_u {
3262     [usize; 1],
3263     pKeyTrans pKeyTrans_mut: PCMSG_KEY_TRANS_RECIPIENT_INFO,
3264     pKeyAgree pKeyAgree_mut: PCMSG_KEY_AGREE_RECIPIENT_INFO,
3265     pMailList pMailList_mut: PCMSG_MAIL_LIST_RECIPIENT_INFO,
3266 }}
3267 STRUCT!{struct CMSG_CMS_RECIPIENT_INFO {
3268     dwRecipientChoice: DWORD,
3269     u: CMSG_CMS_RECIPIENT_INFO_u,
3270 }}
3271 pub type PCMSG_CMS_RECIPIENT_INFO = *mut CMSG_CMS_RECIPIENT_INFO;
3272 pub const CMSG_ENVELOPED_RECIPIENT_V0: DWORD = 0;
3273 pub const CMSG_ENVELOPED_RECIPIENT_V2: DWORD = 2;
3274 pub const CMSG_ENVELOPED_RECIPIENT_V3: DWORD = 3;
3275 pub const CMSG_ENVELOPED_RECIPIENT_V4: DWORD = 4;
3276 pub const CMSG_KEY_TRANS_PKCS_1_5_VERSION: DWORD = CMSG_ENVELOPED_RECIPIENT_V0;
3277 pub const CMSG_KEY_TRANS_CMS_VERSION: DWORD = CMSG_ENVELOPED_RECIPIENT_V2;
3278 pub const CMSG_KEY_AGREE_VERSION: DWORD = CMSG_ENVELOPED_RECIPIENT_V3;
3279 pub const CMSG_MAIL_LIST_VERSION: DWORD = CMSG_ENVELOPED_RECIPIENT_V4;
3280 extern "system" {
CryptMsgControl( hCryptMsg: HCRYPTMSG, dwFlags: DWORD, dwCtrlType: DWORD, pvCtrlPara: *const c_void, ) -> BOOL3281     pub fn CryptMsgControl(
3282         hCryptMsg: HCRYPTMSG,
3283         dwFlags: DWORD,
3284         dwCtrlType: DWORD,
3285         pvCtrlPara: *const c_void,
3286     ) -> BOOL;
3287 }
3288 pub const CMSG_CTRL_VERIFY_SIGNATURE: DWORD = 1;
3289 pub const CMSG_CTRL_DECRYPT: DWORD = 2;
3290 pub const CMSG_CTRL_VERIFY_HASH: DWORD = 5;
3291 pub const CMSG_CTRL_ADD_SIGNER: DWORD = 6;
3292 pub const CMSG_CTRL_DEL_SIGNER: DWORD = 7;
3293 pub const CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR: DWORD = 8;
3294 pub const CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR: DWORD = 9;
3295 pub const CMSG_CTRL_ADD_CERT: DWORD = 10;
3296 pub const CMSG_CTRL_DEL_CERT: DWORD = 11;
3297 pub const CMSG_CTRL_ADD_CRL: DWORD = 12;
3298 pub const CMSG_CTRL_DEL_CRL: DWORD = 13;
3299 pub const CMSG_CTRL_ADD_ATTR_CERT: DWORD = 14;
3300 pub const CMSG_CTRL_DEL_ATTR_CERT: DWORD = 15;
3301 pub const CMSG_CTRL_KEY_TRANS_DECRYPT: DWORD = 16;
3302 pub const CMSG_CTRL_KEY_AGREE_DECRYPT: DWORD = 17;
3303 pub const CMSG_CTRL_MAIL_LIST_DECRYPT: DWORD = 18;
3304 pub const CMSG_CTRL_VERIFY_SIGNATURE_EX: DWORD = 19;
3305 pub const CMSG_CTRL_ADD_CMS_SIGNER_INFO: DWORD = 20;
3306 pub const CMSG_CTRL_ENABLE_STRONG_SIGNATURE: DWORD = 21;
3307 STRUCT!{struct CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
3308     cbSize: DWORD,
3309     hCryptProv: HCRYPTPROV_LEGACY,
3310     dwSignerIndex: DWORD,
3311     dwSignerType: DWORD,
3312     pvSigner: *mut c_void,
3313 }}
3314 pub type PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA = *mut CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;
3315 pub const CMSG_VERIFY_SIGNER_PUBKEY: DWORD = 1;
3316 pub const CMSG_VERIFY_SIGNER_CERT: DWORD = 2;
3317 pub const CMSG_VERIFY_SIGNER_CHAIN: DWORD = 3;
3318 pub const CMSG_VERIFY_SIGNER_NULL: DWORD = 4;
3319 UNION!{union CMSG_CTRL_DECRYPT_PARA_u {
3320     [usize; 1],
3321     hCryptProv hCryptProv_mut: HCRYPTPROV,
3322     hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
3323 }}
3324 STRUCT!{struct CMSG_CTRL_DECRYPT_PARA {
3325     cbSize: DWORD,
3326     u: CMSG_CTRL_DECRYPT_PARA_u,
3327     dwKeySpec: DWORD,
3328     dwRecipientIndex: DWORD,
3329 }}
3330 pub type PCMSG_CTRL_DECRYPT_PARA = *mut CMSG_CTRL_DECRYPT_PARA;
3331 UNION!{union CMSG_CTRL_KEY_TRANS_DECRYPT_PARA_u {
3332     [usize; 1],
3333     hCryptProv hCryptProv_mut: HCRYPTPROV,
3334     hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
3335 }}
3336 STRUCT!{struct CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
3337     cbSize: DWORD,
3338     u: CMSG_CTRL_KEY_TRANS_DECRYPT_PARA_u,
3339     dwKeySpec: DWORD,
3340     pKeyTrans: PCMSG_KEY_TRANS_RECIPIENT_INFO,
3341     dwRecipientIndex: DWORD,
3342 }}
3343 pub type PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA = *mut CMSG_CTRL_KEY_TRANS_DECRYPT_PARA;
3344 UNION!{union CMSG_CTRL_KEY_AGREE_DECRYPT_PARA_u {
3345     [usize; 1],
3346     hCryptProv hCryptProv_mut: HCRYPTPROV,
3347     hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
3348 }}
3349 STRUCT!{struct CMSG_CTRL_KEY_AGREE_DECRYPT_PARA {
3350     cbSize: DWORD,
3351     u: CMSG_CTRL_KEY_AGREE_DECRYPT_PARA_u,
3352     dwKeySpec: DWORD,
3353     pKeyAgree: PCMSG_KEY_AGREE_RECIPIENT_INFO,
3354     dwRecipientIndex: DWORD,
3355     dwRecipientEncryptedKeyIndex: DWORD,
3356     OriginatorPublicKey: CRYPT_BIT_BLOB,
3357 }}
3358 pub type PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA = *mut CMSG_CTRL_KEY_AGREE_DECRYPT_PARA;
3359 UNION!{union CMSG_CTRL_MAIL_LIST_DECRYPT_PARA_u {
3360     [usize; 1],
3361     hKeyEncryptionKey hKeyEncryptionKey_mut: HCRYPTKEY,
3362     pvKeyEncryptionKey pvKeyEncryptionKey_mut: *mut c_void,
3363 }}
3364 STRUCT!{struct CMSG_CTRL_MAIL_LIST_DECRYPT_PARA {
3365     cbSize: DWORD,
3366     hCryptProv: HCRYPTPROV,
3367     pMailList: PCMSG_MAIL_LIST_RECIPIENT_INFO,
3368     dwRecipientIndex: DWORD,
3369     dwKeyChoice: DWORD,
3370     u: CMSG_CTRL_MAIL_LIST_DECRYPT_PARA_u,
3371 }}
3372 pub type PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA = *mut CMSG_CTRL_MAIL_LIST_DECRYPT_PARA;
3373 STRUCT!{struct CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA {
3374     cbSize: DWORD,
3375     dwSignerIndex: DWORD,
3376     blob: CRYPT_DATA_BLOB,
3377 }}
3378 pub type PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA = *mut CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;
3379 STRUCT!{struct CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA {
3380     cbSize: DWORD,
3381     dwSignerIndex: DWORD,
3382     dwUnauthAttrIndex: DWORD,
3383 }}
3384 pub type PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA = *mut CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
3385 extern "system" {
CryptMsgVerifyCountersignatureEncoded( hCryptProv: HCRYPTPROV_LEGACY, dwEncodingType: DWORD, pbSignerInfo: PBYTE, cbSignerInfo: DWORD, pbSignerInfoCountersignature: PBYTE, cbSignerInfoCountersignature: DWORD, pciCountersigner: PCERT_INFO, ) -> BOOL3386     pub fn CryptMsgVerifyCountersignatureEncoded(
3387         hCryptProv: HCRYPTPROV_LEGACY,
3388         dwEncodingType: DWORD,
3389         pbSignerInfo: PBYTE,
3390         cbSignerInfo: DWORD,
3391         pbSignerInfoCountersignature: PBYTE,
3392         cbSignerInfoCountersignature: DWORD,
3393         pciCountersigner: PCERT_INFO,
3394     ) -> BOOL;
CryptMsgVerifyCountersignatureEncodedEx( hCryptProv: HCRYPTPROV_LEGACY, dwEncodingType: DWORD, pbSignerInfo: PBYTE, cbSignerInfo: DWORD, pbSignerInfoCountersignature: PBYTE, cbSignerInfoCountersignature: DWORD, dwSignerType: DWORD, pvSigner: *mut c_void, dwFlags: DWORD, pvExtra: *mut c_void, ) -> BOOL3395     pub fn CryptMsgVerifyCountersignatureEncodedEx(
3396         hCryptProv: HCRYPTPROV_LEGACY,
3397         dwEncodingType: DWORD,
3398         pbSignerInfo: PBYTE,
3399         cbSignerInfo: DWORD,
3400         pbSignerInfoCountersignature: PBYTE,
3401         cbSignerInfoCountersignature: DWORD,
3402         dwSignerType: DWORD,
3403         pvSigner: *mut c_void,
3404         dwFlags: DWORD,
3405         pvExtra: *mut c_void,
3406     ) -> BOOL;
3407 }
3408 pub const CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG: DWORD = 0x00000001;
3409 extern "system" {
CryptMsgCountersign( hCryptMsg: HCRYPTMSG, dwIndex: DWORD, cCountersigners: DWORD, rgCountersigners: PCMSG_SIGNER_ENCODE_INFO, ) -> BOOL3410     pub fn CryptMsgCountersign(
3411         hCryptMsg: HCRYPTMSG,
3412         dwIndex: DWORD,
3413         cCountersigners: DWORD,
3414         rgCountersigners: PCMSG_SIGNER_ENCODE_INFO,
3415     ) -> BOOL;
CryptMsgCountersignEncoded( dwEncodingType: DWORD, pbSignerInfo: PBYTE, cbSignerInfo: DWORD, cCountersigners: DWORD, rgCountersigners: PCMSG_SIGNER_ENCODE_INFO, pbCountersignature: PBYTE, pcbCountersignature: PDWORD, ) -> BOOL3416     pub fn CryptMsgCountersignEncoded(
3417         dwEncodingType: DWORD,
3418         pbSignerInfo: PBYTE,
3419         cbSignerInfo: DWORD,
3420         cCountersigners: DWORD,
3421         rgCountersigners: PCMSG_SIGNER_ENCODE_INFO,
3422         pbCountersignature: PBYTE,
3423         pcbCountersignature: PDWORD,
3424     ) -> BOOL;
3425 }
3426 FN!{stdcall PFN_CMSG_ALLOC(
3427     cb: size_t,
3428 ) -> ()}
3429 FN!{stdcall PFN_CMSG_FREE(
3430     pv: *mut c_void,
3431 ) -> ()}
3432 pub const CMSG_OID_GEN_ENCRYPT_KEY_FUNC: &'static str = "CryptMsgDllGenEncryptKey";
3433 FN!{stdcall PFN_CMSG_GEN_ENCRYPT_KEY(
3434     phCryptProv: *mut HCRYPTPROV,
3435     paiEncrypt: PCRYPT_ALGORITHM_IDENTIFIER,
3436     pvEncryptAuxInfo: PVOID,
3437     pPublicKeyInfo: PCERT_PUBLIC_KEY_INFO,
3438     pfnAlloc: PFN_CMSG_ALLOC,
3439     phEncryptKey: *mut HCRYPTKEY,
3440     ppbEncryptParameters: *mut PBYTE,
3441     pcbEncryptParameters: PDWORD,
3442 ) -> BOOL}
3443 pub const CMSG_OID_EXPORT_ENCRYPT_KEY_FUNC: &'static str = "CryptMsgDllExportEncryptKey";
3444 FN!{stdcall PFN_CMSG_EXPORT_ENCRYPT_KEY(
3445     hCryptProv: HCRYPTPROV,
3446     hEncryptKey: HCRYPTKEY,
3447     pPublicKeyInfo: PCERT_PUBLIC_KEY_INFO,
3448     pbData: PBYTE,
3449     pcbData: PDWORD,
3450 ) -> BOOL}
3451 pub const CMSG_OID_IMPORT_ENCRYPT_KEY_FUNC: &'static str = "CryptMsgDllImportEncryptKey";
3452 FN!{stdcall PFN_CMSG_IMPORT_ENCRYPT_KEY(
3453     hCryptProv: HCRYPTPROV,
3454     dwKeySpec: DWORD,
3455     paiEncrypt: PCRYPT_ALGORITHM_IDENTIFIER,
3456     paiPubKey: PCRYPT_ALGORITHM_IDENTIFIER,
3457     pbEncodedKey: PBYTE,
3458     cbEncodedKey: DWORD,
3459     phEncryptKey: *mut HCRYPTKEY,
3460 ) -> BOOL}
3461 pub const CMSG_DEFAULT_INSTALLABLE_FUNC_OID: LPCSTR = 1 as LPCSTR;
3462 UNION!{union CMSG_CONTENT_ENCRYPT_INFO_u {
3463     [usize; 1],
3464     hContentEncryptKey hContentEncryptKey_mut: HCRYPTKEY,
3465     hCNGContentEncryptKey hCNGContentEncryptKey_mut: BCRYPT_KEY_HANDLE,
3466 }}
3467 STRUCT!{struct CMSG_CONTENT_ENCRYPT_INFO {
3468     cbSize: DWORD,
3469     hCryptProv: HCRYPTPROV_LEGACY,
3470     ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3471     pvEncryptionAuxInfo: *mut c_void,
3472     cRecipients: DWORD,
3473     rgCmsRecipients: PCMSG_RECIPIENT_ENCODE_INFO,
3474     pfnAlloc: PFN_CMSG_ALLOC,
3475     pfnFree: PFN_CMSG_FREE,
3476     dwEncryptFlags: DWORD,
3477     u: CMSG_CONTENT_ENCRYPT_INFO_u,
3478     dwFlags: DWORD,
3479     fCNG: BOOL,
3480     pbCNGContentEncryptKeyObject: *mut BYTE,
3481     pbContentEncryptKey: *mut BYTE,
3482     cbContentEncryptKey: DWORD,
3483 }}
3484 pub type PCMSG_CONTENT_ENCRYPT_INFO = *mut CMSG_CONTENT_ENCRYPT_INFO;
3485 pub const CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG: DWORD = 0x00000001;
3486 pub const CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG: DWORD = 0x00000001;
3487 pub const CMSG_CONTENT_ENCRYPT_FREE_OBJID_FLAG: DWORD = 0x00000002;
3488 pub const CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG: DWORD = 0x00008000;
3489 pub const CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC: &'static str = "CryptMsgDllGenContentEncryptKey";
3490 pub const CMSG_OID_CAPI1_GEN_CONTENT_ENCRYPT_KEY_FUNC: &'static str
3491     = CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC;
3492 FN!{stdcall PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY(
3493     pContentEncryptInfo: PCMSG_CONTENT_ENCRYPT_INFO,
3494     dwFlags: DWORD,
3495     pvReserved: *mut c_void,
3496 ) -> BOOL}
3497 pub const CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC: &'static str
3498     = "CryptMsgDllCNGGenContentEncryptKey";
3499 STRUCT!{struct CMSG_KEY_TRANS_ENCRYPT_INFO {
3500     cbSize: DWORD,
3501     dwRecipientIndex: DWORD,
3502     KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3503     EncryptedKey: CRYPT_DATA_BLOB,
3504     dwFlags: DWORD,
3505 }}
3506 pub type PCMSG_KEY_TRANS_ENCRYPT_INFO = *mut CMSG_KEY_TRANS_ENCRYPT_INFO;
3507 pub const CMSG_KEY_TRANS_ENCRYPT_FREE_PARA_FLAG: DWORD = 0x00000001;
3508 pub const CMSG_KEY_TRANS_ENCRYPT_FREE_OBJID_FLAG: DWORD = 0x00000002;
3509 pub const CMSG_OID_EXPORT_KEY_TRANS_FUNC: &'static str = "CryptMsgDllExportKeyTrans";
3510 pub const CMSG_OID_CAPI1_EXPORT_KEY_TRANS_FUNC: &'static str = CMSG_OID_EXPORT_KEY_TRANS_FUNC;
3511 FN!{stdcall PFN_CMSG_EXPORT_KEY_TRANS(
3512     pContentEncryptInfo: PCMSG_CONTENT_ENCRYPT_INFO,
3513     pKeyTransEncodeInfo: PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO,
3514     pKeyTransEncryptInfo: PCMSG_KEY_TRANS_ENCRYPT_INFO,
3515     dwFlags: DWORD,
3516     pvReserved: *mut c_void,
3517 ) -> BOOL}
3518 pub const CMSG_OID_CNG_EXPORT_KEY_TRANS_FUNC: &'static str = "CryptMsgDllCNGExportKeyTrans";
3519 STRUCT!{struct CMSG_KEY_AGREE_KEY_ENCRYPT_INFO {
3520     cbSize: DWORD,
3521     EncryptedKey: CRYPT_DATA_BLOB,
3522 }}
3523 pub type PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO = *mut CMSG_KEY_AGREE_KEY_ENCRYPT_INFO;
3524 UNION!{union CMSG_KEY_AGREE_ENCRYPT_INFO_u {
3525     [usize; 6],
3526     OriginatorCertId OriginatorCertId_mut: CERT_ID,
3527     OriginatorPublicKeyInfo OriginatorPublicKeyInfo_mut: CERT_PUBLIC_KEY_INFO,
3528 }}
3529 STRUCT!{struct CMSG_KEY_AGREE_ENCRYPT_INFO {
3530     cbSize: DWORD,
3531     dwRecipientIndex: DWORD,
3532     KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3533     UserKeyingMaterial: CRYPT_DATA_BLOB,
3534     dwOriginatorChoice: DWORD,
3535     u: CMSG_KEY_AGREE_ENCRYPT_INFO_u,
3536     cKeyAgreeKeyEncryptInfo: DWORD,
3537     rgpKeyAgreeKeyEncryptInfo: *mut PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO,
3538     dwFlags: DWORD,
3539 }}
3540 pub type PCMSG_KEY_AGREE_ENCRYPT_INFO = *mut CMSG_KEY_AGREE_ENCRYPT_INFO;
3541 pub const CMSG_KEY_AGREE_ENCRYPT_FREE_PARA_FLAG: DWORD = 0x00000001;
3542 pub const CMSG_KEY_AGREE_ENCRYPT_FREE_MATERIAL_FLAG: DWORD = 0x00000002;
3543 pub const CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_ALG_FLAG: DWORD = 0x00000004;
3544 pub const CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_PARA_FLAG: DWORD = 0x00000008;
3545 pub const CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_BITS_FLAG: DWORD = 0x00000010;
3546 pub const CMSG_KEY_AGREE_ENCRYPT_FREE_OBJID_FLAG: DWORD = 0x00000020;
3547 pub const CMSG_OID_EXPORT_KEY_AGREE_FUNC: &'static str = "CryptMsgDllExportKeyAgree";
3548 pub const CMSG_OID_CAPI1_EXPORT_KEY_AGREE_FUNC: &'static str = CMSG_OID_EXPORT_KEY_AGREE_FUNC;
3549 FN!{stdcall PFN_CMSG_EXPORT_KEY_AGREE(
3550     pContentEncryptInfo: PCMSG_CONTENT_ENCRYPT_INFO,
3551     pKeyAgreeEncodeInfo: PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO,
3552     pKeyAgreeEncryptInfo: PCMSG_KEY_AGREE_ENCRYPT_INFO,
3553     dwFlags: DWORD,
3554     pvReserved: *mut c_void,
3555 ) -> BOOL}
3556 pub const CMSG_OID_CNG_EXPORT_KEY_AGREE_FUNC: &'static str = "CryptMsgDllCNGExportKeyAgree";
3557 STRUCT!{struct CMSG_MAIL_LIST_ENCRYPT_INFO {
3558     cbSize: DWORD,
3559     dwRecipientIndex: DWORD,
3560     KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3561     EncryptedKey: CRYPT_DATA_BLOB,
3562     dwFlags: DWORD,
3563 }}
3564 pub type PCMSG_MAIL_LIST_ENCRYPT_INFO = *mut CMSG_MAIL_LIST_ENCRYPT_INFO;
3565 pub const CMSG_MAIL_LIST_ENCRYPT_FREE_PARA_FLAG: DWORD = 0x00000001;
3566 pub const CMSG_MAIL_LIST_ENCRYPT_FREE_OBJID_FLAG: DWORD = 0x00000002;
3567 pub const CMSG_OID_EXPORT_MAIL_LIST_FUNC: &'static str = "CryptMsgDllExportMailList";
3568 pub const CMSG_OID_CAPI1_EXPORT_MAIL_LIST_FUNC: &'static str = CMSG_OID_EXPORT_MAIL_LIST_FUNC;
3569 FN!{stdcall PFN_CMSG_EXPORT_MAIL_LIST(
3570     pContentEncryptInfo: PCMSG_CONTENT_ENCRYPT_INFO,
3571     pMailListEncodeInfo: PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO,
3572     pMailListEncryptInfo: PCMSG_MAIL_LIST_ENCRYPT_INFO,
3573     dwFlags: DWORD,
3574     pvReserved: *mut c_void,
3575 ) -> BOOL}
3576 pub const CMSG_OID_IMPORT_KEY_TRANS_FUNC: &'static str = "CryptMsgDllImportKeyTrans";
3577 pub const CMSG_OID_CAPI1_IMPORT_KEY_TRANS_FUNC: &'static str = CMSG_OID_IMPORT_KEY_TRANS_FUNC;
3578 FN!{stdcall PFN_CMSG_IMPORT_KEY_TRANS(
3579     pContentEncryptionAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
3580     pKeyTransDecryptPara: PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA,
3581     dwFlags: DWORD,
3582     pvReserved: *mut c_void,
3583     phContentEncryptKey: *mut HCRYPTKEY,
3584 ) -> BOOL}
3585 pub const CMSG_OID_IMPORT_KEY_AGREE_FUNC: &'static str = "CryptMsgDllImportKeyAgree";
3586 pub const CMSG_OID_CAPI1_IMPORT_KEY_AGREE_FUNC: &'static str = CMSG_OID_IMPORT_KEY_AGREE_FUNC;
3587 FN!{stdcall PFN_CMSG_IMPORT_KEY_AGREE(
3588     pContentEncryptionAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
3589     pKeyAgreeDecryptPara: PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA,
3590     dwFlags: DWORD,
3591     pvReserved: *mut c_void,
3592     phContentEncryptKey: *mut HCRYPTKEY,
3593 ) -> BOOL}
3594 pub const CMSG_OID_IMPORT_MAIL_LIST_FUNC: &'static str = "CryptMsgDllImportMailList";
3595 pub const CMSG_OID_CAPI1_IMPORT_MAIL_LIST_FUNC: &'static str = CMSG_OID_IMPORT_MAIL_LIST_FUNC;
3596 FN!{stdcall PFN_CMSG_IMPORT_MAIL_LIST(
3597     pContentEncryptionAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
3598     pMailListDecryptPara: PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA,
3599     dwFlags: DWORD,
3600     pvReserved: *mut c_void,
3601     phContentEncryptKey: *mut HCRYPTKEY,
3602 ) -> BOOL}
3603 STRUCT!{struct CMSG_CNG_CONTENT_DECRYPT_INFO {
3604     cbSize: DWORD,
3605     ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
3606     pfnAlloc: PFN_CMSG_ALLOC,
3607     pfnFree: PFN_CMSG_FREE,
3608     hNCryptKey: NCRYPT_KEY_HANDLE,
3609     pbContentEncryptKey: *mut BYTE,
3610     cbContentEncryptKey: DWORD,
3611     hCNGContentEncryptKey: BCRYPT_KEY_HANDLE,
3612     pbCNGContentEncryptKeyObject: *mut BYTE,
3613 }}
3614 pub type PCMSG_CNG_CONTENT_DECRYPT_INFO = *mut CMSG_CNG_CONTENT_DECRYPT_INFO;
3615 pub const CMSG_OID_CNG_IMPORT_KEY_TRANS_FUNC: &'static str = "CryptMsgDllCNGImportKeyTrans";
3616 FN!{stdcall PFN_CMSG_CNG_IMPORT_KEY_TRANS(
3617     pCNGContentDecryptInfo: PCMSG_CNG_CONTENT_DECRYPT_INFO,
3618     pKeyTransDecryptPara: PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA,
3619     dwFlags: DWORD,
3620     pvReserved: *mut c_void,
3621 ) -> BOOL}
3622 pub const CMSG_OID_CNG_IMPORT_KEY_AGREE_FUNC: &'static str = "CryptMsgDllCNGImportKeyAgree";
3623 FN!{stdcall PFN_CMSG_CNG_IMPORT_KEY_AGREE(
3624     pCNGContentDecryptInfo: PCMSG_CNG_CONTENT_DECRYPT_INFO,
3625     pKeyAgreeDecryptPara: PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA,
3626     dwFlags: DWORD,
3627     pvReserved: *mut c_void,
3628 ) -> BOOL}
3629 pub const CMSG_OID_CNG_IMPORT_CONTENT_ENCRYPT_KEY_FUNC: &'static str
3630     = "CryptMsgDllCNGImportContentEncryptKey";
3631 FN!{stdcall PFN_CMSG_CNG_IMPORT_CONTENT_ENCRYPT_KEY(
3632     pCNGContentDecryptInfo: PCMSG_CNG_CONTENT_DECRYPT_INFO,
3633     dwFlags: DWORD,
3634     pvReserved: *mut c_void,
3635 ) -> BOOL}
3636 pub type HCERTSTORE = *mut c_void;
3637 STRUCT!{struct CERT_CONTEXT {
3638     dwCertEncodingType: DWORD,
3639     pbCertEncoded: *mut BYTE,
3640     cbCertEncoded: DWORD,
3641     pCertInfo: PCERT_INFO,
3642     hCertStore: HCERTSTORE,
3643 }}
3644 pub type PCERT_CONTEXT = *mut CERT_CONTEXT;
3645 pub type PCCERT_CONTEXT = *const CERT_CONTEXT;
3646 STRUCT!{struct CRL_CONTEXT {
3647     dwCertEncodingType: DWORD,
3648     pbCrlEncoded: *mut BYTE,
3649     cbCrlEncoded: DWORD,
3650     pCrlInfo: PCRL_INFO,
3651     hCertStore: HCERTSTORE,
3652 }}
3653 pub type PCRL_CONTEXT = *mut CRL_CONTEXT;
3654 pub type PCCRL_CONTEXT = *const CRL_CONTEXT;
3655 STRUCT!{struct CTL_CONTEXT {
3656     dwMsgAndCertEncodingType: DWORD,
3657     pbCtlEncoded: *mut BYTE,
3658     cbCtlEncoded: DWORD,
3659     pCtlInfo: PCTL_INFO,
3660     hCertStore: HCERTSTORE,
3661     hCryptMsg: HCRYPTMSG,
3662     pbCtlContent: *mut BYTE,
3663     cbCtlContent: DWORD,
3664 }}
3665 pub type PCTL_CONTEXT = *mut CTL_CONTEXT;
3666 pub type PCCTL_CONTEXT = *const CTL_CONTEXT;
3667 pub const CERT_KEY_PROV_HANDLE_PROP_ID: DWORD = 1;
3668 pub const CERT_KEY_PROV_INFO_PROP_ID: DWORD = 2;
3669 pub const CERT_SHA1_HASH_PROP_ID: DWORD = 3;
3670 pub const CERT_MD5_HASH_PROP_ID: DWORD = 4;
3671 pub const CERT_HASH_PROP_ID: DWORD = CERT_SHA1_HASH_PROP_ID;
3672 pub const CERT_KEY_CONTEXT_PROP_ID: DWORD = 5;
3673 pub const CERT_KEY_SPEC_PROP_ID: DWORD = 6;
3674 pub const CERT_IE30_RESERVED_PROP_ID: DWORD = 7;
3675 pub const CERT_PUBKEY_HASH_RESERVED_PROP_ID: DWORD = 8;
3676 pub const CERT_ENHKEY_USAGE_PROP_ID: DWORD = 9;
3677 pub const CERT_CTL_USAGE_PROP_ID: DWORD = CERT_ENHKEY_USAGE_PROP_ID;
3678 pub const CERT_NEXT_UPDATE_LOCATION_PROP_ID: DWORD = 10;
3679 pub const CERT_FRIENDLY_NAME_PROP_ID: DWORD = 11;
3680 pub const CERT_PVK_FILE_PROP_ID: DWORD = 12;
3681 pub const CERT_DESCRIPTION_PROP_ID: DWORD = 13;
3682 pub const CERT_ACCESS_STATE_PROP_ID: DWORD = 14;
3683 pub const CERT_SIGNATURE_HASH_PROP_ID: DWORD = 15;
3684 pub const CERT_SMART_CARD_DATA_PROP_ID: DWORD = 16;
3685 pub const CERT_EFS_PROP_ID: DWORD = 17;
3686 pub const CERT_FORTEZZA_DATA_PROP_ID: DWORD = 18;
3687 pub const CERT_ARCHIVED_PROP_ID: DWORD = 19;
3688 pub const CERT_KEY_IDENTIFIER_PROP_ID: DWORD = 20;
3689 pub const CERT_AUTO_ENROLL_PROP_ID: DWORD = 21;
3690 pub const CERT_PUBKEY_ALG_PARA_PROP_ID: DWORD = 22;
3691 pub const CERT_CROSS_CERT_DIST_POINTS_PROP_ID: DWORD = 23;
3692 pub const CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID: DWORD = 24;
3693 pub const CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID: DWORD = 25;
3694 pub const CERT_ENROLLMENT_PROP_ID: DWORD = 26;
3695 pub const CERT_DATE_STAMP_PROP_ID: DWORD = 27;
3696 pub const CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID: DWORD = 28;
3697 pub const CERT_SUBJECT_NAME_MD5_HASH_PROP_ID: DWORD = 29;
3698 pub const CERT_EXTENDED_ERROR_INFO_PROP_ID: DWORD = 30;
3699 pub const CERT_RENEWAL_PROP_ID: DWORD = 64;
3700 pub const CERT_ARCHIVED_KEY_HASH_PROP_ID: DWORD = 65;
3701 pub const CERT_AUTO_ENROLL_RETRY_PROP_ID: DWORD = 66;
3702 pub const CERT_AIA_URL_RETRIEVED_PROP_ID: DWORD = 67;
3703 pub const CERT_AUTHORITY_INFO_ACCESS_PROP_ID: DWORD = 68;
3704 pub const CERT_BACKED_UP_PROP_ID: DWORD = 69;
3705 pub const CERT_OCSP_RESPONSE_PROP_ID: DWORD = 70;
3706 pub const CERT_REQUEST_ORIGINATOR_PROP_ID: DWORD = 71;
3707 pub const CERT_SOURCE_LOCATION_PROP_ID: DWORD = 72;
3708 pub const CERT_SOURCE_URL_PROP_ID: DWORD = 73;
3709 pub const CERT_NEW_KEY_PROP_ID: DWORD = 74;
3710 pub const CERT_OCSP_CACHE_PREFIX_PROP_ID: DWORD = 75;
3711 pub const CERT_SMART_CARD_ROOT_INFO_PROP_ID: DWORD = 76;
3712 pub const CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID: DWORD = 77;
3713 pub const CERT_NCRYPT_KEY_HANDLE_PROP_ID: DWORD = 78;
3714 pub const CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID: DWORD = 79;
3715 pub const CERT_SUBJECT_INFO_ACCESS_PROP_ID: DWORD = 80;
3716 pub const CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID: DWORD = 81;
3717 pub const CERT_CA_DISABLE_CRL_PROP_ID: DWORD = 82;
3718 pub const CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID: DWORD = 83;
3719 pub const CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID: DWORD = 84;
3720 pub const CERT_SUBJECT_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID: DWORD = 85;
3721 pub const CERT_SUBJECT_DISABLE_CRL_PROP_ID: DWORD = 86;
3722 pub const CERT_CEP_PROP_ID: DWORD = 87;
3723 pub const CERT_SIGN_HASH_CNG_ALG_PROP_ID: DWORD = 89;
3724 pub const CERT_SCARD_PIN_ID_PROP_ID: DWORD = 90;
3725 pub const CERT_SCARD_PIN_INFO_PROP_ID: DWORD = 91;
3726 pub const CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID: DWORD = 92;
3727 pub const CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID: DWORD = 93;
3728 pub const CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID: DWORD = 94;
3729 pub const CERT_ISSUER_CHAIN_SIGN_HASH_CNG_ALG_PROP_ID: DWORD = 95;
3730 pub const CERT_ISSUER_CHAIN_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID: DWORD = 96;
3731 pub const CERT_NO_EXPIRE_NOTIFICATION_PROP_ID: DWORD = 97;
3732 pub const CERT_AUTH_ROOT_SHA256_HASH_PROP_ID: DWORD = 98;
3733 pub const CERT_NCRYPT_KEY_HANDLE_TRANSFER_PROP_ID: DWORD = 99;
3734 pub const CERT_HCRYPTPROV_TRANSFER_PROP_ID: DWORD = 100;
3735 pub const CERT_SMART_CARD_READER_PROP_ID: DWORD = 101;
3736 pub const CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID: DWORD = 102;
3737 pub const CERT_KEY_REPAIR_ATTEMPTED_PROP_ID: DWORD = 103;
3738 pub const CERT_DISALLOWED_FILETIME_PROP_ID: DWORD = 104;
3739 pub const CERT_ROOT_PROGRAM_CHAIN_POLICIES_PROP_ID: DWORD = 105;
3740 pub const CERT_SMART_CARD_READER_NON_REMOVABLE_PROP_ID: DWORD = 106;
3741 pub const CERT_SHA256_HASH_PROP_ID: DWORD = 107;
3742 pub const CERT_SCEP_SERVER_CERTS_PROP_ID: DWORD = 108;
3743 pub const CERT_SCEP_RA_SIGNATURE_CERT_PROP_ID: DWORD = 109;
3744 pub const CERT_SCEP_RA_ENCRYPTION_CERT_PROP_ID: DWORD = 110;
3745 pub const CERT_SCEP_CA_CERT_PROP_ID: DWORD = 111;
3746 pub const CERT_SCEP_SIGNER_CERT_PROP_ID: DWORD = 112;
3747 pub const CERT_SCEP_NONCE_PROP_ID: DWORD = 113;
3748 pub const CERT_SCEP_ENCRYPT_HASH_CNG_ALG_PROP_ID: DWORD = 114;
3749 pub const CERT_SCEP_FLAGS_PROP_ID: DWORD = 115;
3750 pub const CERT_SCEP_GUID_PROP_ID: DWORD = 116;
3751 pub const CERT_SERIALIZABLE_KEY_CONTEXT_PROP_ID: DWORD = 117;
3752 pub const CERT_ISOLATED_KEY_PROP_ID: DWORD = 118;
3753 pub const CERT_SERIAL_CHAIN_PROP_ID: DWORD = 119;
3754 pub const CERT_KEY_CLASSIFICATION_PROP_ID: DWORD = 120;
3755 pub const CERT_OCSP_MUST_STAPLE_PROP_ID: DWORD = 121;
3756 pub const CERT_DISALLOWED_ENHKEY_USAGE_PROP_ID: DWORD = 122;
3757 pub const CERT_NONCOMPLIANT_ROOT_URL_PROP_ID: DWORD = 123;
3758 pub const CERT_PIN_SHA256_HASH_PROP_ID: DWORD = 124;
3759 pub const CERT_CLR_DELETE_KEY_PROP_ID: DWORD = 125;
3760 pub const CERT_NOT_BEFORE_FILETIME_PROP_ID: DWORD = 126;
3761 pub const CERT_NOT_BEFORE_ENHKEY_USAGE_PROP_ID: DWORD = 127;
3762 pub const CERT_FIRST_RESERVED_PROP_ID: DWORD = 128;
3763 pub const CERT_LAST_RESERVED_PROP_ID: DWORD = 0x00007FFF;
3764 pub const CERT_FIRST_USER_PROP_ID: DWORD = 0x00008000;
3765 pub const CERT_LAST_USER_PROP_ID: DWORD = 0x0000FFFF;
3766 ENUM!{enum CertKeyType {
3767     KeyTypeOther = 0,
3768     KeyTypeVirtualSmartCard = 1,
3769     KeyTypePhysicalSmartCard = 2,
3770     KeyTypePassport = 3,
3771     KeyTypePassportRemote = 4,
3772     KeyTypePassportSmartCard = 5,
3773     KeyTypeHardware = 6,
3774     KeyTypeSoftware = 7,
3775     KeyTypeSelfSigned = 8,
3776 }}
3777 #[inline]
IS_CERT_HASH_PROP_ID(X: DWORD) -> bool3778 pub fn IS_CERT_HASH_PROP_ID(X: DWORD) -> bool {
3779     CERT_SHA1_HASH_PROP_ID == X || CERT_MD5_HASH_PROP_ID == X || CERT_SHA256_HASH_PROP_ID == X
3780     || CERT_SIGNATURE_HASH_PROP_ID == X
3781 }
3782 #[inline]
IS_PUBKEY_HASH_PROP_ID(X: DWORD) -> bool3783 pub fn IS_PUBKEY_HASH_PROP_ID(X: DWORD) -> bool {
3784     CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID == X || CERT_PIN_SHA256_HASH_PROP_ID == X
3785     || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID == X
3786 }
3787 #[inline]
IS_CHAIN_HASH_PROP_ID(X: DWORD) -> bool3788 pub fn IS_CHAIN_HASH_PROP_ID(X: DWORD) -> bool {
3789     CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID == X || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID == X
3790     || CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID == X || CERT_SUBJECT_NAME_MD5_HASH_PROP_ID == X
3791 }
3792 #[inline]
IS_STRONG_SIGN_PROP_ID(X: DWORD) -> bool3793 pub fn IS_STRONG_SIGN_PROP_ID(X: DWORD) -> bool {
3794     CERT_SIGN_HASH_CNG_ALG_PROP_ID == X || CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID == X
3795     || CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID == X
3796 }
3797 pub const szOID_CERT_PROP_ID_PREFIX: &'static str = "1.3.6.1.4.1.311.10.11.";
3798 pub const szOID_CERT_KEY_IDENTIFIER_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.20";
3799 pub const szOID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID: &'static str
3800     = "1.3.6.1.4.1.311.10.11.28";
3801 pub const szOID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.29";
3802 pub const szOID_CERT_MD5_HASH_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.4";
3803 pub const szOID_CERT_SIGNATURE_HASH_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.15";
3804 pub const szOID_DISALLOWED_HASH: &'static str = szOID_CERT_SIGNATURE_HASH_PROP_ID;
3805 pub const szOID_CERT_DISALLOWED_FILETIME_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.104";
3806 pub const CERT_ACCESS_STATE_WRITE_PERSIST_FLAG: DWORD = 0x1;
3807 pub const CERT_ACCESS_STATE_SYSTEM_STORE_FLAG: DWORD = 0x2;
3808 pub const CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG: DWORD = 0x4;
3809 pub const CERT_ACCESS_STATE_GP_SYSTEM_STORE_FLAG: DWORD = 0x8;
3810 pub const CERT_ACCESS_STATE_SHARED_USER_FLAG: DWORD = 0x10;
3811 pub const szOID_ROOT_PROGRAM_AUTO_UPDATE_CA_REVOCATION: &'static str = "1.3.6.1.4.1.311.60.3.1";
3812 pub const szOID_ROOT_PROGRAM_AUTO_UPDATE_END_REVOCATION: &'static str = "1.3.6.1.4.1.311.60.3.2";
3813 pub const szOID_ROOT_PROGRAM_NO_OCSP_FAILOVER_TO_CRL: &'static str = "1.3.6.1.4.1.311.60.3.3";
3814 STRUCT!{struct CRYPT_KEY_PROV_PARAM {
3815     dwParam: DWORD,
3816     pbData: *mut BYTE,
3817     cbData: DWORD,
3818     dwFlags: DWORD,
3819 }}
3820 pub type PCRYPT_KEY_PROV_PARAM = *mut CRYPT_KEY_PROV_PARAM;
3821 STRUCT!{struct CRYPT_KEY_PROV_INFO {
3822     pwszContainerName: LPWSTR,
3823     pwszProvName: LPWSTR,
3824     dwProvType: DWORD,
3825     dwFlags: DWORD,
3826     cProvParam: DWORD,
3827     rgProvParam: PCRYPT_KEY_PROV_PARAM,
3828     dwKeySpec: DWORD,
3829 }}
3830 pub type PCRYPT_KEY_PROV_INFO = *mut CRYPT_KEY_PROV_INFO;
3831 pub const CERT_SET_KEY_PROV_HANDLE_PROP_ID: DWORD = 0x00000001;
3832 pub const CERT_SET_KEY_CONTEXT_PROP_ID: DWORD = 0x00000001;
3833 pub const CERT_NCRYPT_KEY_SPEC: DWORD = 0xFFFFFFFF;
3834 UNION!{union CERT_KEY_CONTEXT_u {
3835     [usize; 1],
3836     hCryptProv hCryptProv_mut: HCRYPTPROV,
3837     hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
3838 }}
3839 STRUCT!{struct CERT_KEY_CONTEXT {
3840     cbSize: DWORD,
3841     u: CERT_KEY_CONTEXT_u,
3842     dwKeySpec: DWORD,
3843 }}
3844 pub type PCERT_KEY_CONTEXT = *mut CERT_KEY_CONTEXT;
3845 STRUCT!{struct ROOT_INFO_LUID {
3846     LowPart: DWORD,
3847     HighPart: LONG,
3848 }}
3849 pub type PROOT_INFO_LUID = *mut ROOT_INFO_LUID;
3850 STRUCT!{struct CRYPT_SMART_CARD_ROOT_INFO {
3851     rgbCardID: [BYTE; 16],
3852     luid: ROOT_INFO_LUID,
3853 }}
3854 pub type PCRYPT_SMART_CARD_ROOT_INFO = *mut CRYPT_SMART_CARD_ROOT_INFO;
3855 pub const CERT_STORE_PROV_MSG: LPCSTR = 1 as LPCSTR;
3856 pub const CERT_STORE_PROV_MEMORY: LPCSTR = 2 as LPCSTR;
3857 pub const CERT_STORE_PROV_FILE: LPCSTR = 3 as LPCSTR;
3858 pub const CERT_STORE_PROV_REG: LPCSTR = 4 as LPCSTR;
3859 pub const CERT_STORE_PROV_PKCS7: LPCSTR = 5 as LPCSTR;
3860 pub const CERT_STORE_PROV_SERIALIZED: LPCSTR = 6 as LPCSTR;
3861 pub const CERT_STORE_PROV_FILENAME_A: LPCSTR = 7 as LPCSTR;
3862 pub const CERT_STORE_PROV_FILENAME_W: LPCSTR = 8 as LPCSTR;
3863 pub const CERT_STORE_PROV_FILENAME: LPCSTR = CERT_STORE_PROV_FILENAME_W;
3864 pub const CERT_STORE_PROV_SYSTEM_A: LPCSTR = 9 as LPCSTR;
3865 pub const CERT_STORE_PROV_SYSTEM_W: LPCSTR = 10 as LPCSTR;
3866 pub const CERT_STORE_PROV_SYSTEM: LPCSTR = CERT_STORE_PROV_SYSTEM_W;
3867 pub const CERT_STORE_PROV_COLLECTION: LPCSTR = 11 as LPCSTR;
3868 pub const CERT_STORE_PROV_SYSTEM_REGISTRY_A: LPCSTR = 12 as LPCSTR;
3869 pub const CERT_STORE_PROV_SYSTEM_REGISTRY_W: LPCSTR = 13 as LPCSTR;
3870 pub const CERT_STORE_PROV_SYSTEM_REGISTRY: LPCSTR = CERT_STORE_PROV_SYSTEM_REGISTRY_W;
3871 pub const CERT_STORE_PROV_PHYSICAL_W: LPCSTR = 14 as LPCSTR;
3872 pub const CERT_STORE_PROV_PHYSICAL: LPCSTR = CERT_STORE_PROV_PHYSICAL_W;
3873 pub const CERT_STORE_PROV_SMART_CARD_W: LPCSTR = 15 as LPCSTR;
3874 pub const CERT_STORE_PROV_SMART_CARD: LPCSTR = CERT_STORE_PROV_SMART_CARD_W;
3875 pub const CERT_STORE_PROV_LDAP_W: LPCSTR = 16 as LPCSTR;
3876 pub const CERT_STORE_PROV_LDAP: LPCSTR = CERT_STORE_PROV_LDAP_W;
3877 pub const CERT_STORE_PROV_PKCS12: LPCSTR = 17 as LPCSTR;
3878 pub const sz_CERT_STORE_PROV_MEMORY: &'static str = "Memory";
3879 pub const sz_CERT_STORE_PROV_FILENAME_W: &'static str = "File";
3880 pub const sz_CERT_STORE_PROV_FILENAME: &'static str = sz_CERT_STORE_PROV_FILENAME_W;
3881 pub const sz_CERT_STORE_PROV_SYSTEM_W: &'static str = "System";
3882 pub const sz_CERT_STORE_PROV_SYSTEM: &'static str = sz_CERT_STORE_PROV_SYSTEM_W;
3883 pub const sz_CERT_STORE_PROV_PKCS7: &'static str = "PKCS7";
3884 pub const sz_CERT_STORE_PROV_PKCS12: &'static str = "PKCS12";
3885 pub const sz_CERT_STORE_PROV_SERIALIZED: &'static str = "Serialized";
3886 pub const sz_CERT_STORE_PROV_COLLECTION: &'static str = "Collection";
3887 pub const sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W: &'static str = "SystemRegistry";
3888 pub const sz_CERT_STORE_PROV_SYSTEM_REGISTRY: &'static str = sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W;
3889 pub const sz_CERT_STORE_PROV_PHYSICAL_W: &'static str = "Physical";
3890 pub const sz_CERT_STORE_PROV_PHYSICAL: &'static str = sz_CERT_STORE_PROV_PHYSICAL_W;
3891 pub const sz_CERT_STORE_PROV_SMART_CARD_W: &'static str = "SmartCard";
3892 pub const sz_CERT_STORE_PROV_SMART_CARD: &'static str = sz_CERT_STORE_PROV_SMART_CARD_W;
3893 pub const sz_CERT_STORE_PROV_LDAP_W: &'static str = "Ldap";
3894 pub const sz_CERT_STORE_PROV_LDAP: &'static str = sz_CERT_STORE_PROV_LDAP_W;
3895 pub const CERT_STORE_SIGNATURE_FLAG: DWORD = 0x00000001;
3896 pub const CERT_STORE_TIME_VALIDITY_FLAG: DWORD = 0x00000002;
3897 pub const CERT_STORE_REVOCATION_FLAG: DWORD = 0x00000004;
3898 pub const CERT_STORE_NO_CRL_FLAG: DWORD = 0x00010000;
3899 pub const CERT_STORE_NO_ISSUER_FLAG: DWORD = 0x00020000;
3900 pub const CERT_STORE_BASE_CRL_FLAG: DWORD = 0x00000100;
3901 pub const CERT_STORE_DELTA_CRL_FLAG: DWORD = 0x00000200;
3902 pub const CERT_STORE_NO_CRYPT_RELEASE_FLAG: DWORD = 0x00000001;
3903 pub const CERT_STORE_SET_LOCALIZED_NAME_FLAG: DWORD = 0x00000002;
3904 pub const CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG: DWORD = 0x00000004;
3905 pub const CERT_STORE_DELETE_FLAG: DWORD = 0x00000010;
3906 pub const CERT_STORE_SHARE_STORE_FLAG: DWORD = 0x00000040;
3907 pub const CERT_STORE_SHARE_CONTEXT_FLAG: DWORD = 0x00000080;
3908 pub const CERT_STORE_MANIFOLD_FLAG: DWORD = 0x00000100;
3909 pub const CERT_STORE_ENUM_ARCHIVED_FLAG: DWORD = 0x00000200;
3910 pub const CERT_STORE_UPDATE_KEYID_FLAG: DWORD = 0x00000400;
3911 pub const CERT_STORE_BACKUP_RESTORE_FLAG: DWORD = 0x00000800;
3912 pub const CERT_STORE_READONLY_FLAG: DWORD = 0x00008000;
3913 pub const CERT_STORE_OPEN_EXISTING_FLAG: DWORD = 0x00004000;
3914 pub const CERT_STORE_CREATE_NEW_FLAG: DWORD = 0x00002000;
3915 pub const CERT_STORE_MAXIMUM_ALLOWED_FLAG: DWORD = 0x00001000;
3916 pub const CERT_SYSTEM_STORE_MASK: DWORD = 0xFFFF0000;
3917 pub const CERT_SYSTEM_STORE_RELOCATE_FLAG: DWORD = 0x80000000;
3918 UNION!{union CERT_SYSTEM_STORE_RELOCATE_PARA_u1 {
3919     [usize; 1],
3920     hKeyBase hKeyBase_mut: HKEY,
3921     pvBase pvBase_mut: *mut c_void,
3922 }}
3923 UNION!{union CERT_SYSTEM_STORE_RELOCATE_PARA_u2 {
3924     [usize; 1],
3925     pvSystemStore pvSystemStore__mut: *mut c_void,
3926     pszSystemStore pszSystemStore_mut: LPCSTR,
3927     pwszSystemStore pwszSystemStore_mut: LPCWSTR,
3928 }}
3929 STRUCT!{struct CERT_SYSTEM_STORE_RELOCATE_PARA {
3930     u1: CERT_SYSTEM_STORE_RELOCATE_PARA_u1,
3931     u2: CERT_SYSTEM_STORE_RELOCATE_PARA_u2,
3932 }}
3933 pub type PCERT_SYSTEM_STORE_RELOCATE_PARA = *mut CERT_SYSTEM_STORE_RELOCATE_PARA;
3934 pub const CERT_SYSTEM_STORE_UNPROTECTED_FLAG: DWORD = 0x40000000;
3935 pub const CERT_SYSTEM_STORE_LOCATION_MASK: DWORD = 0x00FF0000;
3936 pub const CERT_SYSTEM_STORE_LOCATION_SHIFT: DWORD = 16;
3937 pub const CERT_SYSTEM_STORE_CURRENT_USER_ID: DWORD = 1;
3938 pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_ID: DWORD = 2;
3939 pub const CERT_SYSTEM_STORE_CURRENT_SERVICE_ID: DWORD = 4;
3940 pub const CERT_SYSTEM_STORE_SERVICES_ID: DWORD = 5;
3941 pub const CERT_SYSTEM_STORE_USERS_ID: DWORD = 6;
3942 pub const CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID: DWORD = 7;
3943 pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID: DWORD = 8;
3944 pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID: DWORD = 9;
3945 pub const CERT_SYSTEM_STORE_CURRENT_USER: DWORD = CERT_SYSTEM_STORE_CURRENT_USER_ID
3946     << CERT_SYSTEM_STORE_LOCATION_SHIFT;
3947 pub const CERT_SYSTEM_STORE_LOCAL_MACHINE: DWORD = CERT_SYSTEM_STORE_LOCAL_MACHINE_ID
3948     << CERT_SYSTEM_STORE_LOCATION_SHIFT;
3949 pub const CERT_SYSTEM_STORE_CURRENT_SERVICE: DWORD = CERT_SYSTEM_STORE_CURRENT_SERVICE_ID
3950     << CERT_SYSTEM_STORE_LOCATION_SHIFT;
3951 pub const CERT_SYSTEM_STORE_SERVICES: DWORD = CERT_SYSTEM_STORE_SERVICES_ID
3952     << CERT_SYSTEM_STORE_LOCATION_SHIFT;
3953 pub const CERT_SYSTEM_STORE_USERS: DWORD = CERT_SYSTEM_STORE_USERS_ID
3954     << CERT_SYSTEM_STORE_LOCATION_SHIFT;
3955 pub const CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY: DWORD
3956     = CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT;
3957 pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY: DWORD
3958     = CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT;
3959 pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE: DWORD
3960     = CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT;
3961 pub const CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH: &'static str
3962     = "Software\\Policies\\Microsoft\\SystemCertificates";
3963 pub const CERT_EFSBLOB_REGPATH: &'static str
3964     = "Software\\Policies\\Microsoft\\SystemCertificates\\EFS";
3965 pub const CERT_EFSBLOB_VALUE_NAME: &'static str = "EFSBlob";
3966 pub const CERT_PROT_ROOT_FLAGS_REGPATH: &'static str
3967     = "Software\\Policies\\Microsoft\\SystemCertificates\\Root\\ProtectedRoots";
3968 pub const CERT_PROT_ROOT_FLAGS_VALUE_NAME: &'static str = "Flags";
3969 pub const CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG: DWORD = 0x1;
3970 pub const CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG: DWORD = 0x2;
3971 pub const CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG: DWORD = 0x4;
3972 pub const CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG: DWORD = 0x8;
3973 pub const CERT_PROT_ROOT_ONLY_LM_GPT_FLAG: DWORD = 0x8;
3974 pub const CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG: DWORD = 0x10;
3975 pub const CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG: DWORD = 0x20;
3976 pub const CERT_PROT_ROOT_DISABLE_PEER_TRUST: DWORD = 0x10000;
3977 pub const CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME: &'static str = "PeerUsages";
3978 pub const CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME_A: &'static str = "PeerUsages";
3979 pub const CERT_PROT_ROOT_PEER_USAGES_DEFAULT_A: &'static str
3980     = "1.3.6.1.5.5.7.3.2\01.3.6.1.5.5.7.3.4\01.3.6.1.4.1.311.10.3.4\0";
3981 pub const CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH: &'static str
3982     = "Software\\Policies\\Microsoft\\SystemCertificates\\TrustedPublisher\\Safer";
3983 pub const CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH: &'static str
3984     = "Software\\Microsoft\\SystemCertificates";
3985 pub const CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH: &'static str
3986     = "Software\\Microsoft\\SystemCertificates\\TrustedPublisher\\Safer";
3987 pub const CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME: &'static str = "AuthenticodeFlags";
3988 pub const CERT_TRUST_PUB_ALLOW_TRUST_MASK: DWORD = 0x00000003;
3989 pub const CERT_TRUST_PUB_ALLOW_END_USER_TRUST: DWORD = 0x00000000;
3990 pub const CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST: DWORD = 0x00000001;
3991 pub const CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST: DWORD = 0x00000002;
3992 pub const CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG: DWORD = 0x00000100;
3993 pub const CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG: DWORD = 0x00000200;
3994 pub const CERT_OCM_SUBCOMPONENTS_LOCAL_MACHINE_REGPATH: &'static str
3995     = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\OC Manager\\Subcomponents";
3996 pub const CERT_OCM_SUBCOMPONENTS_ROOT_AUTO_UPDATE_VALUE_NAME: &'static str = "RootAutoUpdate";
3997 pub const CERT_DISABLE_ROOT_AUTO_UPDATE_REGPATH: &'static str
3998     = "Software\\Policies\\Microsoft\\SystemCertificates\\AuthRoot";
3999 pub const CERT_DISABLE_ROOT_AUTO_UPDATE_VALUE_NAME: &'static str = "DisableRootAutoUpdate";
4000 pub const CERT_ENABLE_DISALLOWED_CERT_AUTO_UPDATE_VALUE_NAME: &'static str
4001     = "EnableDisallowedCertAutoUpdate";
4002 pub const CERT_DISABLE_PIN_RULES_AUTO_UPDATE_VALUE_NAME: &'static str
4003     = "DisablePinRulesAutoUpdate";
4004 pub const CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH: &'static str
4005     = "Software\\Microsoft\\SystemCertificates\\AuthRoot\\AutoUpdate";
4006 pub const CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME: &'static str = "RootDirUrl";
4007 pub const CERT_AUTO_UPDATE_SYNC_FROM_DIR_URL_VALUE_NAME: &'static str = "SyncFromDirUrl";
4008 pub const CERT_AUTH_ROOT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH: &'static str
4009     = CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH;
4010 pub const CERT_AUTH_ROOT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME: &'static str
4011     = CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME;
4012 pub const CERT_AUTH_ROOT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME: &'static str = "SyncDeltaTime";
4013 pub const CERT_AUTH_ROOT_AUTO_UPDATE_FLAGS_VALUE_NAME: &'static str = "Flags";
4014 pub const CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_UNTRUSTED_ROOT_LOGGING_FLAG: DWORD = 0x1;
4015 pub const CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_PARTIAL_CHAIN_LOGGING_FLAG: DWORD = 0x2;
4016 pub const CERT_AUTO_UPDATE_DISABLE_RANDOM_QUERY_STRING_FLAG: DWORD = 0x4;
4017 pub const CERT_AUTH_ROOT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME: &'static str = "LastSyncTime";
4018 pub const CERT_AUTH_ROOT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME: &'static str = "EncodedCt";
4019 pub const CERT_AUTH_ROOT_CTL_FILENAME: &'static str = "authroot.st";
4020 pub const CERT_AUTH_ROOT_CTL_FILENAME_A: &'static str = "authroot.st";
4021 pub const CERT_AUTH_ROOT_CAB_FILENAME: &'static str = "authrootstl.cab";
4022 pub const CERT_AUTH_ROOT_SEQ_FILENAME: &'static str = "authrootseq.txt";
4023 pub const CERT_AUTH_ROOT_CERT_EXT: &'static str = ".crt";
4024 pub const CERT_DISALLOWED_CERT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME: &'static str
4025     = "DisallowedCertSyncDeltaTime";
4026 pub const CERT_DISALLOWED_CERT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME: &'static str
4027     = "DisallowedCertLastSyncTime";
4028 pub const CERT_DISALLOWED_CERT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME: &'static str
4029     = "DisallowedCertEncodedCt";
4030 pub const CERT_DISALLOWED_CERT_CTL_FILENAME: &'static str = "disallowedcert.st";
4031 pub const CERT_DISALLOWED_CERT_CTL_FILENAME_A: &'static str = "disallowedcert.st";
4032 pub const CERT_DISALLOWED_CERT_CAB_FILENAME: &'static str = "disallowedcertstl.cab";
4033 pub const CERT_DISALLOWED_CERT_AUTO_UPDATE_LIST_IDENTIFIER: &'static str
4034     = "DisallowedCert_AutoUpdate_1";
4035 pub const CERT_PIN_RULES_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME: &'static str
4036     = "PinRulesSyncDeltaTime";
4037 pub const CERT_PIN_RULES_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME: &'static str
4038     = "PinRulesLastSyncTime";
4039 pub const CERT_PIN_RULES_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME: &'static str = "PinRulesEncodedCt";
4040 pub const CERT_PIN_RULES_CTL_FILENAME: &'static str = "pinrules.st";
4041 pub const CERT_PIN_RULES_CTL_FILENAME_A: &'static str = "pinrules.st";
4042 pub const CERT_PIN_RULES_CAB_FILENAME: &'static str = "pinrulesstl.cab";
4043 pub const CERT_PIN_RULES_AUTO_UPDATE_LIST_IDENTIFIER: &'static str = "PinRules_AutoUpdate_1";
4044 pub const CERT_REGISTRY_STORE_REMOTE_FLAG: DWORD = 0x10000;
4045 pub const CERT_REGISTRY_STORE_SERIALIZED_FLAG: DWORD = 0x20000;
4046 pub const CERT_REGISTRY_STORE_CLIENT_GPT_FLAG: DWORD = 0x80000000;
4047 pub const CERT_REGISTRY_STORE_LM_GPT_FLAG: DWORD = 0x01000000;
4048 STRUCT!{struct CERT_REGISTRY_STORE_CLIENT_GPT_PARA {
4049     hKeyBase: HKEY,
4050     pwszRegPath: LPWSTR,
4051 }}
4052 pub type PCERT_REGISTRY_STORE_CLIENT_GPT_PARA = *mut CERT_REGISTRY_STORE_CLIENT_GPT_PARA;
4053 pub const CERT_REGISTRY_STORE_ROAMING_FLAG: DWORD = 0x40000;
4054 STRUCT!{struct CERT_REGISTRY_STORE_ROAMING_PARA {
4055     hKeyBase: HKEY,
4056     pwszStoreDirectory: LPWSTR,
4057 }}
4058 pub type PCERT_REGISTRY_STORE_ROAMING_PARA = *mut CERT_REGISTRY_STORE_ROAMING_PARA;
4059 pub const CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG: DWORD = 0x80000;
4060 pub const CERT_REGISTRY_STORE_EXTERNAL_FLAG: DWORD = 0x100000;
4061 pub const CERT_IE_DIRTY_FLAGS_REGPATH: &'static str
4062     = "Software\\Microsoft\\Cryptography\\IEDirtyFlags";
4063 pub const CERT_FILE_STORE_COMMIT_ENABLE_FLAG: DWORD = 0x10000;
4064 pub const CERT_LDAP_STORE_SIGN_FLAG: DWORD = 0x10000;
4065 pub const CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG: DWORD = 0x20000;
4066 pub const CERT_LDAP_STORE_OPENED_FLAG: DWORD = 0x40000;
4067 STRUCT!{struct CERT_LDAP_STORE_OPENED_PARA {
4068     pvLdapSessionHandle: *mut c_void,
4069     pwszLdapUrl: LPCWSTR,
4070 }}
4071 pub type PCERT_LDAP_STORE_OPENED_PARA = *mut CERT_LDAP_STORE_OPENED_PARA;
4072 pub const CERT_LDAP_STORE_UNBIND_FLAG: DWORD = 0x80000;
4073 extern "system" {
CertOpenStore( lpszStoreProvider: LPCSTR, dwEncodingType: DWORD, hCryptProv: HCRYPTPROV_LEGACY, dwFlags: DWORD, pvPara: *const c_void, ) -> HCERTSTORE4074     pub fn CertOpenStore(
4075         lpszStoreProvider: LPCSTR,
4076         dwEncodingType: DWORD,
4077         hCryptProv: HCRYPTPROV_LEGACY,
4078         dwFlags: DWORD,
4079         pvPara: *const c_void,
4080     ) -> HCERTSTORE;
4081 }
4082 pub type HCERTSTOREPROV = *mut c_void;
4083 pub const CRYPT_OID_OPEN_STORE_PROV_FUNC: &'static str = "CertDllOpenStoreProv";
4084 STRUCT!{struct CERT_STORE_PROV_INFO {
4085     cbSize: DWORD,
4086     cStoreProvFunc: DWORD,
4087     rgpvStoreProvFunc: *mut *mut c_void,
4088     hStoreProv: HCERTSTOREPROV,
4089     dwStoreProvFlags: DWORD,
4090     hStoreProvFuncAddr2: HCRYPTOIDFUNCADDR,
4091 }}
4092 pub type PCERT_STORE_PROV_INFO = *mut CERT_STORE_PROV_INFO;
4093 FN!{stdcall PFN_CERT_DLL_OPEN_STORE_PROV_FUNC(
4094     lpszStoreProvider: LPCSTR,
4095     dwEncodingType: DWORD,
4096     hCryptProv: HCRYPTPROV_LEGACY,
4097     dwFlags: DWORD,
4098     pvPara: *const c_void,
4099     hCertStore: HCERTSTORE,
4100     pStoreProvInfo: PCERT_STORE_PROV_INFO,
4101 ) -> BOOL}
4102 pub const CERT_STORE_PROV_EXTERNAL_FLAG: DWORD = 0x1;
4103 pub const CERT_STORE_PROV_DELETED_FLAG: DWORD = 0x2;
4104 pub const CERT_STORE_PROV_NO_PERSIST_FLAG: DWORD = 0x4;
4105 pub const CERT_STORE_PROV_SYSTEM_STORE_FLAG: DWORD = 0x8;
4106 pub const CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG: DWORD = 0x10;
4107 pub const CERT_STORE_PROV_GP_SYSTEM_STORE_FLAG: DWORD = 0x20;
4108 pub const CERT_STORE_PROV_SHARED_USER_FLAG: DWORD = 0x40;
4109 pub const CERT_STORE_PROV_CLOSE_FUNC: DWORD = 0;
4110 pub const CERT_STORE_PROV_READ_CERT_FUNC: DWORD = 1;
4111 pub const CERT_STORE_PROV_WRITE_CERT_FUNC: DWORD = 2;
4112 pub const CERT_STORE_PROV_DELETE_CERT_FUNC: DWORD = 3;
4113 pub const CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC: DWORD = 4;
4114 pub const CERT_STORE_PROV_READ_CRL_FUNC: DWORD = 5;
4115 pub const CERT_STORE_PROV_WRITE_CRL_FUNC: DWORD = 6;
4116 pub const CERT_STORE_PROV_DELETE_CRL_FUNC: DWORD = 7;
4117 pub const CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC: DWORD = 8;
4118 pub const CERT_STORE_PROV_READ_CTL_FUNC: DWORD = 9;
4119 pub const CERT_STORE_PROV_WRITE_CTL_FUNC: DWORD = 10;
4120 pub const CERT_STORE_PROV_DELETE_CTL_FUNC: DWORD = 11;
4121 pub const CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC: DWORD = 12;
4122 pub const CERT_STORE_PROV_CONTROL_FUNC: DWORD = 13;
4123 pub const CERT_STORE_PROV_FIND_CERT_FUNC: DWORD = 14;
4124 pub const CERT_STORE_PROV_FREE_FIND_CERT_FUNC: DWORD = 15;
4125 pub const CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC: DWORD = 16;
4126 pub const CERT_STORE_PROV_FIND_CRL_FUNC: DWORD = 17;
4127 pub const CERT_STORE_PROV_FREE_FIND_CRL_FUNC: DWORD = 18;
4128 pub const CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC: DWORD = 19;
4129 pub const CERT_STORE_PROV_FIND_CTL_FUNC: DWORD = 20;
4130 pub const CERT_STORE_PROV_FREE_FIND_CTL_FUNC: DWORD = 21;
4131 pub const CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC: DWORD = 22;
4132 FN!{stdcall PFN_CERT_STORE_PROV_CLOSE(
4133     hStoreProv: HCERTSTOREPROV,
4134     dwFlags: DWORD,
4135 ) -> ()}
4136 FN!{stdcall PFN_CERT_STORE_PROV_READ_CERT(
4137     hStoreProv: HCERTSTOREPROV,
4138     pStoreCertContext: PCCERT_CONTEXT,
4139     dwFlags: DWORD,
4140     ppProvCertContext: *mut PCCERT_CONTEXT,
4141 ) -> BOOL}
4142 pub const CERT_STORE_PROV_WRITE_ADD_FLAG: DWORD = 0x1;
4143 FN!{stdcall PFN_CERT_STORE_PROV_WRITE_CERT(
4144     hStoreProv: HCERTSTOREPROV,
4145     pCertContext: PCCERT_CONTEXT,
4146     dwFlags: DWORD,
4147 ) -> BOOL}
4148 FN!{stdcall PFN_CERT_STORE_PROV_DELETE_CERT(
4149     hStoreProv: HCERTSTOREPROV,
4150     pCertContext: PCCERT_CONTEXT,
4151     dwFlags: DWORD,
4152 ) -> BOOL}
4153 FN!{stdcall PFN_CERT_STORE_PROV_SET_CERT_PROPERTY(
4154     hStoreProv: HCERTSTOREPROV,
4155     pCertContext: PCCERT_CONTEXT,
4156     dwPropId: DWORD,
4157     dwFlags: DWORD,
4158     pvData: *const c_void,
4159 ) -> BOOL}
4160 FN!{stdcall PFN_CERT_STORE_PROV_READ_CRL(
4161     hStoreProv: HCERTSTOREPROV,
4162     pStoreCrlContext: PCCRL_CONTEXT,
4163     dwFlags: DWORD,
4164     ppProvCrlContext: *mut PCCRL_CONTEXT,
4165 ) -> BOOL}
4166 FN!{stdcall PFN_CERT_STORE_PROV_WRITE_CRL(
4167     hStoreProv: HCERTSTOREPROV,
4168     pCrlContext: PCCRL_CONTEXT,
4169     dwFlags: DWORD,
4170 ) -> BOOL}
4171 FN!{stdcall PFN_CERT_STORE_PROV_DELETE_CRL(
4172     hStoreProv: HCERTSTOREPROV,
4173     pCrlContext: PCCRL_CONTEXT,
4174     dwFlags: DWORD,
4175 ) -> BOOL}
4176 FN!{stdcall PFN_CERT_STORE_PROV_SET_CRL_PROPERTY(
4177     hStoreProv: HCERTSTOREPROV,
4178     pCrlContext: PCCRL_CONTEXT,
4179     dwPropId: DWORD,
4180     dwFlags: DWORD,
4181     pvData: *const c_void,
4182 ) -> BOOL}
4183 FN!{stdcall PFN_CERT_STORE_PROV_READ_CTL(
4184     hStoreProv: HCERTSTOREPROV,
4185     pStoreCtlContext: PCCTL_CONTEXT,
4186     dwFlags: DWORD,
4187     ppProvCtlContext: *mut PCCTL_CONTEXT,
4188 ) -> BOOL}
4189 FN!{stdcall PFN_CERT_STORE_PROV_WRITE_CTL(
4190     hStoreProv: HCERTSTOREPROV,
4191     pCtlContext: PCCTL_CONTEXT,
4192     dwFlags: DWORD,
4193 ) -> BOOL}
4194 FN!{stdcall PFN_CERT_STORE_PROV_DELETE_CTL(
4195     hStoreProv: HCERTSTOREPROV,
4196     pCtlContext: PCCTL_CONTEXT,
4197     dwFlags: DWORD,
4198 ) -> BOOL}
4199 FN!{stdcall PFN_CERT_STORE_PROV_SET_CTL_PROPERTY(
4200     hStoreProv: HCERTSTOREPROV,
4201     pCtlContext: PCCTL_CONTEXT,
4202     dwPropId: DWORD,
4203     dwFlags: DWORD,
4204     pvData: *const c_void,
4205 ) -> BOOL}
4206 FN!{stdcall PFN_CERT_STORE_PROV_CONTROL(
4207     hStoreProv: HCERTSTOREPROV,
4208     dwFlags: DWORD,
4209     dwCtrlType: DWORD,
4210     pvCtrlPara: *const c_void,
4211 ) -> BOOL}
4212 STRUCT!{struct CERT_STORE_PROV_FIND_INFO {
4213     cbSize: DWORD,
4214     dwMsgAndCertEncodingType: DWORD,
4215     dwFindFlags: DWORD,
4216     dwFindType: DWORD,
4217     pvFindPara: *const c_void,
4218 }}
4219 pub type PCERT_STORE_PROV_FIND_INFO = *mut CERT_STORE_PROV_FIND_INFO;
4220 pub type CCERT_STORE_PROV_FIND_INFO = CERT_STORE_PROV_FIND_INFO;
4221 pub type PCCERT_STORE_PROV_FIND_INFO = *const CERT_STORE_PROV_FIND_INFO;
4222 FN!{stdcall PFN_CERT_STORE_PROV_FIND_CERT(
4223     hStoreProv: HCERTSTOREPROV,
4224     pFindInfo: PCCERT_STORE_PROV_FIND_INFO,
4225     pPrevCertContext: PCCERT_CONTEXT,
4226     dwFlags: DWORD,
4227     ppvStoreProvFindInfo: *mut *mut c_void,
4228     ppProvCertContext: *mut PCCERT_CONTEXT,
4229 ) -> BOOL}
4230 FN!{stdcall PFN_CERT_STORE_PROV_FREE_FIND_CERT(
4231     hStoreProv: HCERTSTOREPROV,
4232     pCertContext: PCCERT_CONTEXT,
4233     pvStoreProvFindInfo: *mut c_void,
4234     dwFlags: DWORD,
4235 ) -> BOOL}
4236 FN!{stdcall PFN_CERT_STORE_PROV_GET_CERT_PROPERTY(
4237     hStoreProv: HCERTSTOREPROV,
4238     pCertContext: PCCERT_CONTEXT,
4239     dwPropId: DWORD,
4240     dwFlags: DWORD,
4241     pvData: *mut c_void,
4242     pcbData: *mut DWORD,
4243 ) -> BOOL}
4244 FN!{stdcall PFN_CERT_STORE_PROV_FIND_CRL(
4245     hStoreProv: HCERTSTOREPROV,
4246     pFindInfo: PCCERT_STORE_PROV_FIND_INFO,
4247     pPrevCrlContext: PCCRL_CONTEXT,
4248     dwFlags: DWORD,
4249     ppvStoreProvFindInfo: *mut *mut c_void,
4250     ppProvCrlContext: *mut PCCRL_CONTEXT,
4251 ) -> BOOL}
4252 FN!{stdcall PFN_CERT_STORE_PROV_FREE_FIND_CRL(
4253     hStoreProv: HCERTSTOREPROV,
4254     pCrlContext: PCCRL_CONTEXT,
4255     pvStoreProvFindInfo: *mut c_void,
4256     dwFlags: DWORD,
4257 ) -> BOOL}
4258 FN!{stdcall PFN_CERT_STORE_PROV_GET_CRL_PROPERTY(
4259     hStoreProv: HCERTSTOREPROV,
4260     pCrlContext: PCCRL_CONTEXT,
4261     dwPropId: DWORD,
4262     dwFlags: DWORD,
4263     pvData: *mut c_void,
4264     pcbData: *mut DWORD,
4265 ) -> BOOL}
4266 FN!{stdcall PFN_CERT_STORE_PROV_FIND_CTL(
4267     hStoreProv: HCERTSTOREPROV,
4268     pFindInfo: PCCERT_STORE_PROV_FIND_INFO,
4269     pPrevCtlContext: PCCTL_CONTEXT,
4270     dwFlags: DWORD,
4271     ppvStoreProvFindInfo: *mut *mut c_void,
4272     ppProvCtlContext: *mut PCCTL_CONTEXT,
4273 ) -> BOOL}
4274 FN!{stdcall PFN_CERT_STORE_PROV_FREE_FIND_CTL(
4275     hStoreProv: HCERTSTOREPROV,
4276     pCtlContext: PCCTL_CONTEXT,
4277     pvStoreProvFindInfo: *mut c_void,
4278     dwFlags: DWORD,
4279 ) -> BOOL}
4280 FN!{stdcall PFN_CERT_STORE_PROV_GET_CTL_PROPERTY(
4281     hStoreProv: HCERTSTOREPROV,
4282     pCtlContext: PCCTL_CONTEXT,
4283     dwPropId: DWORD,
4284     dwFlags: DWORD,
4285     pvData: *mut c_void,
4286     pcbData: *mut DWORD,
4287 ) -> BOOL}
4288 extern "system" {
CertDuplicateStore( hCertStore: HCERTSTORE, ) -> HCERTSTORE4289     pub fn CertDuplicateStore(
4290         hCertStore: HCERTSTORE,
4291     ) -> HCERTSTORE;
4292 }
4293 pub const CERT_STORE_SAVE_AS_STORE: DWORD = 1;
4294 pub const CERT_STORE_SAVE_AS_PKCS7: DWORD = 2;
4295 pub const CERT_STORE_SAVE_AS_PKCS12: DWORD = 3;
4296 pub const CERT_STORE_SAVE_TO_FILE: DWORD = 1;
4297 pub const CERT_STORE_SAVE_TO_MEMORY: DWORD = 2;
4298 pub const CERT_STORE_SAVE_TO_FILENAME_A: DWORD = 3;
4299 pub const CERT_STORE_SAVE_TO_FILENAME_W: DWORD = 4;
4300 pub const CERT_STORE_SAVE_TO_FILENAME: DWORD = CERT_STORE_SAVE_TO_FILENAME_W;
4301 extern "system" {
CertSaveStore( hCertStore: HCERTSTORE, dwEncodingType: DWORD, dwSaveAs: DWORD, dwSaveTo: DWORD, pvSaveToPara: *mut c_void, dwFlags: DWORD, ) -> BOOL4302     pub fn CertSaveStore(
4303         hCertStore: HCERTSTORE,
4304         dwEncodingType: DWORD,
4305         dwSaveAs: DWORD,
4306         dwSaveTo: DWORD,
4307         pvSaveToPara: *mut c_void,
4308         dwFlags: DWORD,
4309     ) -> BOOL;
4310 }
4311 pub const CERT_CLOSE_STORE_FORCE_FLAG: DWORD = 0x00000001;
4312 pub const CERT_CLOSE_STORE_CHECK_FLAG: DWORD = 0x00000002;
4313 extern "system" {
CertCloseStore( hCertStore: HCERTSTORE, dwFlags: DWORD, ) -> BOOL4314     pub fn CertCloseStore(
4315         hCertStore: HCERTSTORE,
4316         dwFlags: DWORD,
4317     ) -> BOOL;
CertGetSubjectCertificateFromStore( hCertStore: HCERTSTORE, dwCertEncodingType: DWORD, pCertId: PCERT_INFO, ) -> PCCERT_CONTEXT4318     pub fn CertGetSubjectCertificateFromStore(
4319         hCertStore: HCERTSTORE,
4320         dwCertEncodingType: DWORD,
4321         pCertId: PCERT_INFO,
4322     ) -> PCCERT_CONTEXT;
CertEnumCertificatesInStore( hCertStore: HCERTSTORE, pPrevCertContext: PCCERT_CONTEXT, ) -> PCCERT_CONTEXT4323     pub fn CertEnumCertificatesInStore(
4324         hCertStore: HCERTSTORE,
4325         pPrevCertContext: PCCERT_CONTEXT,
4326     ) -> PCCERT_CONTEXT;
CertFindCertificateInStore( hCertStore: HCERTSTORE, dwCertEncodingType: DWORD, dwFindFlags: DWORD, dwFindType: DWORD, pvFindPara: *const c_void, pPrevCertContext: PCCERT_CONTEXT, ) -> PCCERT_CONTEXT4327     pub fn CertFindCertificateInStore(
4328         hCertStore: HCERTSTORE,
4329         dwCertEncodingType: DWORD,
4330         dwFindFlags: DWORD,
4331         dwFindType: DWORD,
4332         pvFindPara: *const c_void,
4333         pPrevCertContext: PCCERT_CONTEXT,
4334     ) -> PCCERT_CONTEXT;
4335 }
4336 pub const CERT_COMPARE_MASK: DWORD = 0xFFFF;
4337 pub const CERT_COMPARE_SHIFT: DWORD = 16;
4338 pub const CERT_COMPARE_ANY: DWORD = 0;
4339 pub const CERT_COMPARE_SHA1_HASH: DWORD = 1;
4340 pub const CERT_COMPARE_NAME: DWORD = 2;
4341 pub const CERT_COMPARE_ATTR: DWORD = 3;
4342 pub const CERT_COMPARE_MD5_HASH: DWORD = 4;
4343 pub const CERT_COMPARE_PROPERTY: DWORD = 5;
4344 pub const CERT_COMPARE_PUBLIC_KEY: DWORD = 6;
4345 pub const CERT_COMPARE_HASH: DWORD = CERT_COMPARE_SHA1_HASH;
4346 pub const CERT_COMPARE_NAME_STR_A: DWORD = 7;
4347 pub const CERT_COMPARE_NAME_STR_W: DWORD = 8;
4348 pub const CERT_COMPARE_KEY_SPEC: DWORD = 9;
4349 pub const CERT_COMPARE_ENHKEY_USAGE: DWORD = 10;
4350 pub const CERT_COMPARE_CTL_USAGE: DWORD = CERT_COMPARE_ENHKEY_USAGE;
4351 pub const CERT_COMPARE_SUBJECT_CERT: DWORD = 11;
4352 pub const CERT_COMPARE_ISSUER_OF: DWORD = 12;
4353 pub const CERT_COMPARE_EXISTING: DWORD = 13;
4354 pub const CERT_COMPARE_SIGNATURE_HASH: DWORD = 14;
4355 pub const CERT_COMPARE_KEY_IDENTIFIER: DWORD = 15;
4356 pub const CERT_COMPARE_CERT_ID: DWORD = 16;
4357 pub const CERT_COMPARE_CROSS_CERT_DIST_POINTS: DWORD = 17;
4358 pub const CERT_COMPARE_PUBKEY_MD5_HASH: DWORD = 18;
4359 pub const CERT_COMPARE_SUBJECT_INFO_ACCESS: DWORD = 19;
4360 pub const CERT_COMPARE_HASH_STR: DWORD = 20;
4361 pub const CERT_COMPARE_HAS_PRIVATE_KEY: DWORD = 21;
4362 pub const CERT_FIND_ANY: DWORD = CERT_COMPARE_ANY << CERT_COMPARE_SHIFT;
4363 pub const CERT_FIND_SHA1_HASH: DWORD = CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT;
4364 pub const CERT_FIND_MD5_HASH: DWORD = CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT;
4365 pub const CERT_FIND_SIGNATURE_HASH: DWORD = CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT;
4366 pub const CERT_FIND_KEY_IDENTIFIER: DWORD = CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT;
4367 pub const CERT_FIND_HASH: DWORD = CERT_FIND_SHA1_HASH;
4368 pub const CERT_FIND_PROPERTY: DWORD = CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT;
4369 pub const CERT_FIND_PUBLIC_KEY: DWORD = CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT;
4370 pub const CERT_FIND_SUBJECT_NAME: DWORD = (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT)
4371     | CERT_INFO_SUBJECT_FLAG;
4372 pub const CERT_FIND_SUBJECT_ATTR: DWORD = (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT)
4373     | CERT_INFO_SUBJECT_FLAG;
4374 pub const CERT_FIND_ISSUER_NAME: DWORD = (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT)
4375     | CERT_INFO_ISSUER_FLAG;
4376 pub const CERT_FIND_ISSUER_ATTR: DWORD = (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT)
4377     | CERT_INFO_ISSUER_FLAG;
4378 pub const CERT_FIND_SUBJECT_STR_A: DWORD = (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT)
4379     | CERT_INFO_SUBJECT_FLAG;
4380 pub const CERT_FIND_SUBJECT_STR_W: DWORD = (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT)
4381     | CERT_INFO_SUBJECT_FLAG;
4382 pub const CERT_FIND_SUBJECT_STR: DWORD = CERT_FIND_SUBJECT_STR_W;
4383 pub const CERT_FIND_ISSUER_STR_A: DWORD = (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT)
4384     | CERT_INFO_ISSUER_FLAG;
4385 pub const CERT_FIND_ISSUER_STR_W: DWORD = (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT)
4386     | CERT_INFO_ISSUER_FLAG;
4387 pub const CERT_FIND_ISSUER_STR: DWORD = CERT_FIND_ISSUER_STR_W;
4388 pub const CERT_FIND_KEY_SPEC: DWORD = CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT;
4389 pub const CERT_FIND_ENHKEY_USAGE: DWORD = CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT;
4390 pub const CERT_FIND_CTL_USAGE: DWORD = CERT_FIND_ENHKEY_USAGE;
4391 pub const CERT_FIND_SUBJECT_CERT: DWORD = CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT;
4392 pub const CERT_FIND_ISSUER_OF: DWORD = CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT;
4393 pub const CERT_FIND_EXISTING: DWORD = CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT;
4394 pub const CERT_FIND_CERT_ID: DWORD = CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT;
4395 pub const CERT_FIND_CROSS_CERT_DIST_POINTS: DWORD = CERT_COMPARE_CROSS_CERT_DIST_POINTS
4396     << CERT_COMPARE_SHIFT;
4397 pub const CERT_FIND_PUBKEY_MD5_HASH: DWORD = CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT;
4398 pub const CERT_FIND_SUBJECT_INFO_ACCESS: DWORD = CERT_COMPARE_SUBJECT_INFO_ACCESS
4399     << CERT_COMPARE_SHIFT;
4400 pub const CERT_FIND_HASH_STR: DWORD = CERT_COMPARE_HASH_STR << CERT_COMPARE_SHIFT;
4401 pub const CERT_FIND_HAS_PRIVATE_KEY: DWORD = CERT_COMPARE_HAS_PRIVATE_KEY << CERT_COMPARE_SHIFT;
4402 pub const CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG: DWORD = 0x1;
4403 pub const CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG: DWORD = 0x2;
4404 pub const CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG: DWORD = 0x4;
4405 pub const CERT_FIND_NO_ENHKEY_USAGE_FLAG: DWORD = 0x8;
4406 pub const CERT_FIND_OR_ENHKEY_USAGE_FLAG: DWORD = 0x10;
4407 pub const CERT_FIND_VALID_ENHKEY_USAGE_FLAG: DWORD = 0x20;
4408 pub const CERT_FIND_OPTIONAL_CTL_USAGE_FLAG: DWORD = CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG;
4409 pub const CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG: DWORD = CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG;
4410 pub const CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG: DWORD = CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG;
4411 pub const CERT_FIND_NO_CTL_USAGE_FLAG: DWORD = CERT_FIND_NO_ENHKEY_USAGE_FLAG;
4412 pub const CERT_FIND_OR_CTL_USAGE_FLAG: DWORD = CERT_FIND_OR_ENHKEY_USAGE_FLAG;
4413 pub const CERT_FIND_VALID_CTL_USAGE_FLAG: DWORD = CERT_FIND_VALID_ENHKEY_USAGE_FLAG;
4414 extern "system" {
CertGetIssuerCertificateFromStore( hCertStore: HCERTSTORE, pSubjectContext: PCCERT_CONTEXT, pPrevIssuerContext: PCCERT_CONTEXT, pdwFlags: *mut DWORD, ) -> PCCERT_CONTEXT4415     pub fn CertGetIssuerCertificateFromStore(
4416         hCertStore: HCERTSTORE,
4417         pSubjectContext: PCCERT_CONTEXT,
4418         pPrevIssuerContext: PCCERT_CONTEXT,
4419         pdwFlags: *mut DWORD,
4420     ) -> PCCERT_CONTEXT;
CertVerifySubjectCertificateContext( pSubject: PCCERT_CONTEXT, pIssuer: PCCERT_CONTEXT, pdwFlags: *mut DWORD, ) -> BOOL4421     pub fn CertVerifySubjectCertificateContext(
4422         pSubject: PCCERT_CONTEXT,
4423         pIssuer: PCCERT_CONTEXT,
4424         pdwFlags: *mut DWORD,
4425     ) -> BOOL;
CertDuplicateCertificateContext( pCertContext: PCCERT_CONTEXT, ) -> PCCERT_CONTEXT4426     pub fn CertDuplicateCertificateContext(
4427         pCertContext: PCCERT_CONTEXT,
4428     ) -> PCCERT_CONTEXT;
CertCreateCertificateContext( dwCertEncodingType: DWORD, pbCertEncoded: *const BYTE, cbCertEncoded: DWORD, ) -> PCCERT_CONTEXT4429     pub fn CertCreateCertificateContext(
4430         dwCertEncodingType: DWORD,
4431         pbCertEncoded: *const BYTE,
4432         cbCertEncoded: DWORD,
4433     ) -> PCCERT_CONTEXT;
CertFreeCertificateContext( pCertContext: PCCERT_CONTEXT, ) -> BOOL4434     pub fn CertFreeCertificateContext(
4435         pCertContext: PCCERT_CONTEXT,
4436     ) -> BOOL;
CertSetCertificateContextProperty( pCertContext: PCCERT_CONTEXT, dwPropId: DWORD, dwFlags: DWORD, pvData: *const c_void, ) -> BOOL4437     pub fn CertSetCertificateContextProperty(
4438         pCertContext: PCCERT_CONTEXT,
4439         dwPropId: DWORD,
4440         dwFlags: DWORD,
4441         pvData: *const c_void,
4442     ) -> BOOL;
4443 }
4444 pub const CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG: DWORD = 0x80000000;
4445 pub const CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG: DWORD = 0x40000000;
4446 extern "system" {
CertGetCertificateContextProperty( pCertContext: PCCERT_CONTEXT, dwPropId: DWORD, pvData: *mut c_void, pcbData: *mut DWORD, ) -> BOOL4447     pub fn CertGetCertificateContextProperty(
4448         pCertContext: PCCERT_CONTEXT,
4449         dwPropId: DWORD,
4450         pvData: *mut c_void,
4451         pcbData: *mut DWORD,
4452     ) -> BOOL;
CertEnumCertificateContextProperties( pCertContext: PCCERT_CONTEXT, dwPropId: DWORD, ) -> DWORD4453     pub fn CertEnumCertificateContextProperties(
4454         pCertContext: PCCERT_CONTEXT,
4455         dwPropId: DWORD,
4456     ) -> DWORD;
CertCreateCTLEntryFromCertificateContextProperties( pCertContext: PCCERT_CONTEXT, cOptAttr: DWORD, rgOptAttr: PCRYPT_ATTRIBUTE, dwFlags: DWORD, pvReserved: *mut c_void, pCtlEntry: PCTL_ENTRY, pcbCtlEntry: *mut DWORD, ) -> BOOL4457     pub fn CertCreateCTLEntryFromCertificateContextProperties(
4458         pCertContext: PCCERT_CONTEXT,
4459         cOptAttr: DWORD,
4460         rgOptAttr: PCRYPT_ATTRIBUTE,
4461         dwFlags: DWORD,
4462         pvReserved: *mut c_void,
4463         pCtlEntry: PCTL_ENTRY,
4464         pcbCtlEntry: *mut DWORD,
4465     ) -> BOOL;
CertSetCertificateContextPropertiesFromCTLEntry( pCertContext: PCCERT_CONTEXT, pCtlEntry: PCTL_ENTRY, dwFlags: DWORD, ) -> BOOL4466     pub fn CertSetCertificateContextPropertiesFromCTLEntry(
4467         pCertContext: PCCERT_CONTEXT,
4468         pCtlEntry: PCTL_ENTRY,
4469         dwFlags: DWORD,
4470     ) -> BOOL;
CertGetCRLFromStore( hCertStore: HCERTSTORE, pIssuerContext: PCCERT_CONTEXT, pPrevCrlContext: PCCRL_CONTEXT, pdwFlags: *mut DWORD, ) -> PCCRL_CONTEXT4471     pub fn CertGetCRLFromStore(
4472         hCertStore: HCERTSTORE,
4473         pIssuerContext: PCCERT_CONTEXT,
4474         pPrevCrlContext: PCCRL_CONTEXT,
4475         pdwFlags: *mut DWORD,
4476     ) -> PCCRL_CONTEXT;
CertEnumCRLsInStore( hCertStore: HCERTSTORE, pPrevCrlContext: PCCRL_CONTEXT, ) -> PCCRL_CONTEXT4477     pub fn CertEnumCRLsInStore(
4478         hCertStore: HCERTSTORE,
4479         pPrevCrlContext: PCCRL_CONTEXT,
4480     ) -> PCCRL_CONTEXT;
CertFindCRLInStore( hCertStore: HCERTSTORE, dwCertEncodingType: DWORD, dwFindFlags: DWORD, dwFindType: DWORD, pvFindPara: *const c_void, pPrevCrlContext: PCCRL_CONTEXT, ) -> PCCRL_CONTEXT4481     pub fn CertFindCRLInStore(
4482         hCertStore: HCERTSTORE,
4483         dwCertEncodingType: DWORD,
4484         dwFindFlags: DWORD,
4485         dwFindType: DWORD,
4486         pvFindPara: *const c_void,
4487         pPrevCrlContext: PCCRL_CONTEXT,
4488     ) -> PCCRL_CONTEXT;
4489 }
4490 pub const CRL_FIND_ANY: DWORD = 0;
4491 pub const CRL_FIND_ISSUED_BY: DWORD = 1;
4492 pub const CRL_FIND_EXISTING: DWORD = 2;
4493 pub const CRL_FIND_ISSUED_FOR: DWORD = 3;
4494 pub const CRL_FIND_ISSUED_BY_AKI_FLAG: DWORD = 0x1;
4495 pub const CRL_FIND_ISSUED_BY_SIGNATURE_FLAG: DWORD = 0x2;
4496 pub const CRL_FIND_ISSUED_BY_DELTA_FLAG: DWORD = 0x4;
4497 pub const CRL_FIND_ISSUED_BY_BASE_FLAG: DWORD = 0x8;
4498 STRUCT!{struct CRL_FIND_ISSUED_FOR_PARA {
4499     pSubjectCert: PCCERT_CONTEXT,
4500     pIssuerCert: PCCERT_CONTEXT,
4501 }}
4502 pub type PCRL_FIND_ISSUED_FOR_PARA = *mut CRL_FIND_ISSUED_FOR_PARA;
4503 pub const CRL_FIND_ISSUED_FOR_SET_STRONG_PROPERTIES_FLAG: DWORD = 0x10;
4504 extern "system" {
CertDuplicateCRLContext( pCrlContext: PCCRL_CONTEXT, ) -> PCCRL_CONTEXT4505     pub fn CertDuplicateCRLContext(
4506         pCrlContext: PCCRL_CONTEXT,
4507     ) -> PCCRL_CONTEXT;
CertCreateCRLContext( dwCertEncodingType: DWORD, pbCrlEncoded: *const BYTE, cbCrlEncoded: DWORD, ) -> PCCRL_CONTEXT4508     pub fn CertCreateCRLContext(
4509         dwCertEncodingType: DWORD,
4510         pbCrlEncoded: *const BYTE,
4511         cbCrlEncoded: DWORD,
4512     ) -> PCCRL_CONTEXT;
CertFreeCRLContext( pCrlContext: PCCRL_CONTEXT, ) -> BOOL4513     pub fn CertFreeCRLContext(
4514         pCrlContext: PCCRL_CONTEXT,
4515     ) -> BOOL;
CertSetCRLContextProperty( pCrlContext: PCCRL_CONTEXT, dwPropId: DWORD, dwFlags: DWORD, pvData: *const c_void, ) -> BOOL4516     pub fn CertSetCRLContextProperty(
4517         pCrlContext: PCCRL_CONTEXT,
4518         dwPropId: DWORD,
4519         dwFlags: DWORD,
4520         pvData: *const c_void,
4521     ) -> BOOL;
CertGetCRLContextProperty( pCrlContext: PCCRL_CONTEXT, dwPropId: DWORD, pvData: *mut c_void, pcbData: *mut DWORD, ) -> BOOL4522     pub fn CertGetCRLContextProperty(
4523         pCrlContext: PCCRL_CONTEXT,
4524         dwPropId: DWORD,
4525         pvData: *mut c_void,
4526         pcbData: *mut DWORD,
4527     ) -> BOOL;
CertEnumCRLContextProperties( pCrlContext: PCCRL_CONTEXT, dwPropId: DWORD, ) -> DWORD4528     pub fn CertEnumCRLContextProperties(
4529         pCrlContext: PCCRL_CONTEXT,
4530         dwPropId: DWORD,
4531     ) -> DWORD;
CertFindCertificateInCRL( pCert: PCCERT_CONTEXT, pCrlContext: PCCRL_CONTEXT, dwFlags: DWORD, pvReserved: *mut c_void, ppCrlEntry: *mut PCRL_ENTRY, ) -> BOOL4532     pub fn CertFindCertificateInCRL(
4533         pCert: PCCERT_CONTEXT,
4534         pCrlContext: PCCRL_CONTEXT,
4535         dwFlags: DWORD,
4536         pvReserved: *mut c_void,
4537         ppCrlEntry: *mut PCRL_ENTRY,
4538     ) -> BOOL;
CertIsValidCRLForCertificate( pCert: PCCERT_CONTEXT, pCrl: PCCRL_CONTEXT, dwFlags: DWORD, pvReserved: *mut c_void, ) -> BOOL4539     pub fn CertIsValidCRLForCertificate(
4540         pCert: PCCERT_CONTEXT,
4541         pCrl: PCCRL_CONTEXT,
4542         dwFlags: DWORD,
4543         pvReserved: *mut c_void,
4544     ) -> BOOL;
4545 }
4546 pub const CERT_STORE_ADD_NEW: DWORD = 1;
4547 pub const CERT_STORE_ADD_USE_EXISTING: DWORD = 2;
4548 pub const CERT_STORE_ADD_REPLACE_EXISTING: DWORD = 3;
4549 pub const CERT_STORE_ADD_ALWAYS: DWORD = 4;
4550 pub const CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES: DWORD = 5;
4551 pub const CERT_STORE_ADD_NEWER: DWORD = 6;
4552 pub const CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES: DWORD = 7;
4553 extern "system" {
CertAddEncodedCertificateToStore( hCertStore: HCERTSTORE, dwCertEncodingType: DWORD, pbCertEncoded: *const BYTE, cbCertEncoded: DWORD, dwAddDisposition: DWORD, ppCertContext: *mut PCCERT_CONTEXT, ) -> BOOL4554     pub fn CertAddEncodedCertificateToStore(
4555         hCertStore: HCERTSTORE,
4556         dwCertEncodingType: DWORD,
4557         pbCertEncoded: *const BYTE,
4558         cbCertEncoded: DWORD,
4559         dwAddDisposition: DWORD,
4560         ppCertContext: *mut PCCERT_CONTEXT,
4561     ) -> BOOL;
CertAddCertificateContextToStore( hCertStore: HCERTSTORE, pCertContext: PCCERT_CONTEXT, dwAddDisposition: DWORD, ppStoreContext: *mut PCCERT_CONTEXT, ) -> BOOL4562     pub fn CertAddCertificateContextToStore(
4563         hCertStore: HCERTSTORE,
4564         pCertContext: PCCERT_CONTEXT,
4565         dwAddDisposition: DWORD,
4566         ppStoreContext: *mut PCCERT_CONTEXT,
4567     ) -> BOOL;
4568 }
4569 pub const CERT_STORE_CERTIFICATE_CONTEXT: DWORD = 1;
4570 pub const CERT_STORE_CRL_CONTEXT: DWORD = 2;
4571 pub const CERT_STORE_CTL_CONTEXT: DWORD = 3;
4572 pub const CERT_STORE_ALL_CONTEXT_FLAG: DWORD = !0;
4573 pub const CERT_STORE_CERTIFICATE_CONTEXT_FLAG: DWORD = 1 << CERT_STORE_CERTIFICATE_CONTEXT;
4574 pub const CERT_STORE_CRL_CONTEXT_FLAG: DWORD = 1 << CERT_STORE_CRL_CONTEXT;
4575 pub const CERT_STORE_CTL_CONTEXT_FLAG: DWORD = 1 << CERT_STORE_CTL_CONTEXT;
4576 extern "system" {
CertAddSerializedElementToStore( hCertStore: HCERTSTORE, pbElement: *const BYTE, cbElement: DWORD, dwAddDisposition: DWORD, dwFlags: DWORD, dwContextTypeFlags: DWORD, pdwContextType: *mut DWORD, ppvContext: *mut *const c_void, ) -> BOOL4577     pub fn CertAddSerializedElementToStore(
4578         hCertStore: HCERTSTORE,
4579         pbElement: *const BYTE,
4580         cbElement: DWORD,
4581         dwAddDisposition: DWORD,
4582         dwFlags: DWORD,
4583         dwContextTypeFlags: DWORD,
4584         pdwContextType: *mut DWORD,
4585         ppvContext: *mut *const c_void,
4586     ) -> BOOL;
CertDeleteCertificateFromStore( pCertContext: PCCERT_CONTEXT, ) -> BOOL4587     pub fn CertDeleteCertificateFromStore(
4588         pCertContext: PCCERT_CONTEXT,
4589     ) -> BOOL;
CertAddEncodedCRLToStore( hCertStore: HCERTSTORE, dwCertEncodingType: DWORD, pbCrlEncoded: *const BYTE, cbCrlEncoded: DWORD, dwAddDisposition: DWORD, ppCrlContext: *mut PCCRL_CONTEXT, ) -> BOOL4590     pub fn CertAddEncodedCRLToStore(
4591         hCertStore: HCERTSTORE,
4592         dwCertEncodingType: DWORD,
4593         pbCrlEncoded: *const BYTE,
4594         cbCrlEncoded: DWORD,
4595         dwAddDisposition: DWORD,
4596         ppCrlContext: *mut PCCRL_CONTEXT,
4597     ) -> BOOL;
CertAddCRLContextToStore( hCertStore: HCERTSTORE, pCrlContext: PCCRL_CONTEXT, dwAddDisposition: DWORD, ppStoreContext: *mut PCCRL_CONTEXT, ) -> BOOL4598     pub fn CertAddCRLContextToStore(
4599         hCertStore: HCERTSTORE,
4600         pCrlContext: PCCRL_CONTEXT,
4601         dwAddDisposition: DWORD,
4602         ppStoreContext: *mut PCCRL_CONTEXT,
4603     ) -> BOOL;
CertDeleteCRLFromStore( pCrlContext: PCCRL_CONTEXT, ) -> BOOL4604     pub fn CertDeleteCRLFromStore(
4605         pCrlContext: PCCRL_CONTEXT,
4606     ) -> BOOL;
CertSerializeCertificateStoreElement( pCertContext: PCCERT_CONTEXT, dwFlags: DWORD, pbElement: *mut BYTE, pcbElement: *mut DWORD, ) -> BOOL4607     pub fn CertSerializeCertificateStoreElement(
4608         pCertContext: PCCERT_CONTEXT,
4609         dwFlags: DWORD,
4610         pbElement: *mut BYTE,
4611         pcbElement: *mut DWORD,
4612     ) -> BOOL;
CertSerializeCRLStoreElement( pCrlContext: PCCRL_CONTEXT, dwFlags: DWORD, pbElement: *mut BYTE, pcbElement: *mut DWORD, ) -> BOOL4613     pub fn CertSerializeCRLStoreElement(
4614         pCrlContext: PCCRL_CONTEXT,
4615         dwFlags: DWORD,
4616         pbElement: *mut BYTE,
4617         pcbElement: *mut DWORD,
4618     ) -> BOOL;
CertDuplicateCTLContext( pCtlContext: PCCTL_CONTEXT, ) -> PCCTL_CONTEXT4619     pub fn CertDuplicateCTLContext(
4620         pCtlContext: PCCTL_CONTEXT,
4621     ) -> PCCTL_CONTEXT;
CertCreateCTLContext( dwMsgAndCertEncodingType: DWORD, pbCtlEncoded: *const BYTE, cbCtlEncoded: DWORD, ) -> PCCTL_CONTEXT4622     pub fn CertCreateCTLContext(
4623         dwMsgAndCertEncodingType: DWORD,
4624         pbCtlEncoded: *const BYTE,
4625         cbCtlEncoded: DWORD,
4626     ) -> PCCTL_CONTEXT;
CertFreeCTLContext( pCtlContext: PCCTL_CONTEXT, ) -> BOOL4627     pub fn CertFreeCTLContext(
4628         pCtlContext: PCCTL_CONTEXT,
4629     ) -> BOOL;
CertSetCTLContextProperty( pCtlContext: PCCTL_CONTEXT, dwPropId: DWORD, dwFlags: DWORD, pvData: *const c_void, ) -> BOOL4630     pub fn CertSetCTLContextProperty(
4631         pCtlContext: PCCTL_CONTEXT,
4632         dwPropId: DWORD,
4633         dwFlags: DWORD,
4634         pvData: *const c_void,
4635     ) -> BOOL;
CertGetCTLContextProperty( pCtlContext: PCCTL_CONTEXT, dwPropId: DWORD, pvData: *mut c_void, pcbData: *mut DWORD, ) -> BOOL4636     pub fn CertGetCTLContextProperty(
4637         pCtlContext: PCCTL_CONTEXT,
4638         dwPropId: DWORD,
4639         pvData: *mut c_void,
4640         pcbData: *mut DWORD,
4641     ) -> BOOL;
CertEnumCTLContextProperties( pCtlContext: PCCTL_CONTEXT, dwPropId: DWORD, ) -> DWORD4642     pub fn CertEnumCTLContextProperties(
4643         pCtlContext: PCCTL_CONTEXT,
4644         dwPropId: DWORD,
4645     ) -> DWORD;
CertEnumCTLsInStore( hCertStore: HCERTSTORE, pPrevCtlContext: PCCTL_CONTEXT, ) -> PCCTL_CONTEXT4646     pub fn CertEnumCTLsInStore(
4647         hCertStore: HCERTSTORE,
4648         pPrevCtlContext: PCCTL_CONTEXT,
4649     ) -> PCCTL_CONTEXT;
CertFindSubjectInCTL( dwEncodingType: DWORD, dwSubjectType: DWORD, pvSubject: *mut c_void, pCtlContext: PCCTL_CONTEXT, dwFlags: DWORD, ) -> PCTL_ENTRY4650     pub fn CertFindSubjectInCTL(
4651         dwEncodingType: DWORD,
4652         dwSubjectType: DWORD,
4653         pvSubject: *mut c_void,
4654         pCtlContext: PCCTL_CONTEXT,
4655         dwFlags: DWORD,
4656     ) -> PCTL_ENTRY;
4657 }
4658 pub const CTL_ANY_SUBJECT_TYPE: DWORD = 1;
4659 pub const CTL_CERT_SUBJECT_TYPE: DWORD = 2;
4660 STRUCT!{struct CTL_ANY_SUBJECT_INFO {
4661     SubjectAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
4662     SubjectIdentifier: CRYPT_DATA_BLOB,
4663 }}
4664 pub type PCTL_ANY_SUBJECT_INFO = *mut CTL_ANY_SUBJECT_INFO;
4665 extern "system" {
CertFindCTLInStore( hCertStore: HCERTSTORE, dwMsgAndCertEncodingType: DWORD, dwFindFlags: DWORD, dwFindType: DWORD, pvFindPara: *const c_void, pPrevCtlContext: PCCTL_CONTEXT, ) -> PCCTL_CONTEXT4666     pub fn CertFindCTLInStore(
4667         hCertStore: HCERTSTORE,
4668         dwMsgAndCertEncodingType: DWORD,
4669         dwFindFlags: DWORD,
4670         dwFindType: DWORD,
4671         pvFindPara: *const c_void,
4672         pPrevCtlContext: PCCTL_CONTEXT,
4673     ) -> PCCTL_CONTEXT;
4674 }
4675 pub const CTL_FIND_ANY: DWORD = 0;
4676 pub const CTL_FIND_SHA1_HASH: DWORD = 1;
4677 pub const CTL_FIND_MD5_HASH: DWORD = 2;
4678 pub const CTL_FIND_USAGE: DWORD = 3;
4679 pub const CTL_FIND_SUBJECT: DWORD = 4;
4680 pub const CTL_FIND_EXISTING: DWORD = 5;
4681 STRUCT!{struct CTL_FIND_USAGE_PARA {
4682     cbSize: DWORD,
4683     SubjectUsage: CTL_USAGE,
4684     ListIdentifier: CRYPT_DATA_BLOB,
4685     pSigner: PCERT_INFO,
4686 }}
4687 pub type PCTL_FIND_USAGE_PARA = *mut CTL_FIND_USAGE_PARA;
4688 pub const CTL_FIND_NO_LIST_ID_CBDATA: DWORD = 0xFFFFFFFF;
4689 pub const CTL_FIND_NO_SIGNER_PTR: PCERT_INFO = -1isize as PCERT_INFO;
4690 pub const CTL_FIND_SAME_USAGE_FLAG: DWORD = 0x1;
4691 STRUCT!{struct CTL_FIND_SUBJECT_PARA {
4692     cbSize: DWORD,
4693     pUsagePara: PCTL_FIND_USAGE_PARA,
4694     dwSubjectType: DWORD,
4695     pvSubject: *mut c_void,
4696 }}
4697 pub type PCTL_FIND_SUBJECT_PARA = *mut CTL_FIND_SUBJECT_PARA;
4698 extern "system" {
CertAddEncodedCTLToStore( hCertStore: HCERTSTORE, dwMsgAndCertEncodingType: DWORD, pbCtlEncoded: *const BYTE, cbCtlEncoded: DWORD, dwAddDisposition: DWORD, ppCtlContext: *mut PCCTL_CONTEXT, ) -> BOOL4699     pub fn CertAddEncodedCTLToStore(
4700         hCertStore: HCERTSTORE,
4701         dwMsgAndCertEncodingType: DWORD,
4702         pbCtlEncoded: *const BYTE,
4703         cbCtlEncoded: DWORD,
4704         dwAddDisposition: DWORD,
4705         ppCtlContext: *mut PCCTL_CONTEXT,
4706     ) -> BOOL;
CertAddCTLContextToStore( hCertStore: HCERTSTORE, pCtlContext: PCCTL_CONTEXT, dwAddDisposition: DWORD, ppStoreContext: *mut PCCTL_CONTEXT, ) -> BOOL4707     pub fn CertAddCTLContextToStore(
4708         hCertStore: HCERTSTORE,
4709         pCtlContext: PCCTL_CONTEXT,
4710         dwAddDisposition: DWORD,
4711         ppStoreContext: *mut PCCTL_CONTEXT,
4712     ) -> BOOL;
CertSerializeCTLStoreElement( pCtlContext: PCCTL_CONTEXT, dwFlags: DWORD, pbElement: *mut BYTE, pcbElement: *mut DWORD, ) -> BOOL4713     pub fn CertSerializeCTLStoreElement(
4714         pCtlContext: PCCTL_CONTEXT,
4715         dwFlags: DWORD,
4716         pbElement: *mut BYTE,
4717         pcbElement: *mut DWORD,
4718     ) -> BOOL;
CertDeleteCTLFromStore( pCtlContext: PCCTL_CONTEXT, ) -> BOOL4719     pub fn CertDeleteCTLFromStore(
4720         pCtlContext: PCCTL_CONTEXT,
4721     ) -> BOOL;
CertAddCertificateLinkToStore( hCertStore: HCERTSTORE, pCertContext: PCCERT_CONTEXT, dwAddDisposition: DWORD, ppStoreContext: *mut PCCERT_CONTEXT, ) -> BOOL4722     pub fn CertAddCertificateLinkToStore(
4723         hCertStore: HCERTSTORE,
4724         pCertContext: PCCERT_CONTEXT,
4725         dwAddDisposition: DWORD,
4726         ppStoreContext: *mut PCCERT_CONTEXT,
4727     ) -> BOOL;
CertAddCRLLinkToStore( hCertStore: HCERTSTORE, pCrlContext: PCCRL_CONTEXT, dwAddDisposition: DWORD, ppStoreContext: *mut PCCRL_CONTEXT, ) -> BOOL4728     pub fn CertAddCRLLinkToStore(
4729         hCertStore: HCERTSTORE,
4730         pCrlContext: PCCRL_CONTEXT,
4731         dwAddDisposition: DWORD,
4732         ppStoreContext: *mut PCCRL_CONTEXT,
4733     ) -> BOOL;
CertAddCTLLinkToStore( hCertStore: HCERTSTORE, pCtlContext: PCCTL_CONTEXT, dwAddDisposition: DWORD, ppStoreContext: *mut PCCTL_CONTEXT, ) -> BOOL4734     pub fn CertAddCTLLinkToStore(
4735         hCertStore: HCERTSTORE,
4736         pCtlContext: PCCTL_CONTEXT,
4737         dwAddDisposition: DWORD,
4738         ppStoreContext: *mut PCCTL_CONTEXT,
4739     ) -> BOOL;
CertAddStoreToCollection( hCollectionStore: HCERTSTORE, hSiblingStore: HCERTSTORE, dwUpdateFlags: DWORD, dwPriority: DWORD, ) -> BOOL4740     pub fn CertAddStoreToCollection(
4741         hCollectionStore: HCERTSTORE,
4742         hSiblingStore: HCERTSTORE,
4743         dwUpdateFlags: DWORD,
4744         dwPriority: DWORD,
4745     ) -> BOOL;
CertRemoveStoreFromCollection( hCollectionStore: HCERTSTORE, hSiblingStore: HCERTSTORE, )4746     pub fn CertRemoveStoreFromCollection(
4747         hCollectionStore: HCERTSTORE,
4748         hSiblingStore: HCERTSTORE,
4749     );
CertControlStore( hCertStore: HCERTSTORE, dwFlags: DWORD, dwCtrlType: DWORD, pvCtrlPara: *const c_void, ) -> BOOL4750     pub fn CertControlStore(
4751         hCertStore: HCERTSTORE,
4752         dwFlags: DWORD,
4753         dwCtrlType: DWORD,
4754         pvCtrlPara: *const c_void,
4755     ) -> BOOL;
4756 }
4757 pub const CERT_STORE_CTRL_RESYNC: DWORD = 1;
4758 pub const CERT_STORE_CTRL_NOTIFY_CHANGE: DWORD = 2;
4759 pub const CERT_STORE_CTRL_COMMIT: DWORD = 3;
4760 pub const CERT_STORE_CTRL_AUTO_RESYNC: DWORD = 4;
4761 pub const CERT_STORE_CTRL_CANCEL_NOTIFY: DWORD = 5;
4762 pub const CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG: DWORD = 0x1;
4763 pub const CERT_STORE_CTRL_COMMIT_FORCE_FLAG: DWORD = 0x1;
4764 pub const CERT_STORE_CTRL_COMMIT_CLEAR_FLAG: DWORD = 0x2;
4765 pub const CERT_STORE_LOCALIZED_NAME_PROP_ID: DWORD = 0x1000;
4766 extern "system" {
CertSetStoreProperty( hCertStore: HCERTSTORE, dwPropId: DWORD, dwFlags: DWORD, pvData: *const c_void, ) -> BOOL4767     pub fn CertSetStoreProperty(
4768         hCertStore: HCERTSTORE,
4769         dwPropId: DWORD,
4770         dwFlags: DWORD,
4771         pvData: *const c_void,
4772     ) -> BOOL;
CertGetStoreProperty( hCertStore: HCERTSTORE, dwPropId: DWORD, pvData: *mut c_void, pcbData: *mut DWORD, ) -> BOOL4773     pub fn CertGetStoreProperty(
4774         hCertStore: HCERTSTORE,
4775         dwPropId: DWORD,
4776         pvData: *mut c_void,
4777         pcbData: *mut DWORD,
4778     ) -> BOOL;
4779 }
4780 FN!{stdcall PFN_CERT_CREATE_CONTEXT_SORT_FUNC(
4781     cbTotalEncoded: DWORD,
4782     cbRemainEncoded: DWORD,
4783     cEntry: DWORD,
4784     pvSort: *mut c_void,
4785 ) -> BOOL}
4786 STRUCT!{struct CERT_CREATE_CONTEXT_PARA {
4787     cbSize: DWORD,
4788     pfnFree: PFN_CRYPT_FREE,
4789     pvFree: *mut c_void,
4790     pfnSort: PFN_CERT_CREATE_CONTEXT_SORT_FUNC,
4791     pvSort: *mut c_void,
4792 }}
4793 pub type PCERT_CREATE_CONTEXT_PARA = *mut CERT_CREATE_CONTEXT_PARA;
4794 extern "system" {
CertCreateContext( dwContextType: DWORD, dwEncodingType: DWORD, pbEncoded: *const BYTE, cbEncoded: DWORD, dwFlags: DWORD, pCreatePara: PCERT_CREATE_CONTEXT_PARA, ) -> *const c_void4795     pub fn CertCreateContext(
4796         dwContextType: DWORD,
4797         dwEncodingType: DWORD,
4798         pbEncoded: *const BYTE,
4799         cbEncoded: DWORD,
4800         dwFlags: DWORD,
4801         pCreatePara: PCERT_CREATE_CONTEXT_PARA,
4802     ) -> *const c_void;
4803 }
4804 pub const CERT_CREATE_CONTEXT_NOCOPY_FLAG: DWORD = 0x1;
4805 pub const CERT_CREATE_CONTEXT_SORTED_FLAG: DWORD = 0x2;
4806 pub const CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG: DWORD = 0x4;
4807 pub const CERT_CREATE_CONTEXT_NO_ENTRY_FLAG: DWORD = 0x8;
4808 STRUCT!{struct CERT_SYSTEM_STORE_INFO {
4809     cbSize: DWORD,
4810 }}
4811 pub type PCERT_SYSTEM_STORE_INFO = *mut CERT_SYSTEM_STORE_INFO;
4812 STRUCT!{struct CERT_PHYSICAL_STORE_INFO {
4813     cbSize: DWORD,
4814     pszOpenStoreProvider: LPSTR,
4815     dwOpenEncodingType: DWORD,
4816     dwOpenFlags: DWORD,
4817     OpenParameters: CRYPT_DATA_BLOB,
4818     dwFlags: DWORD,
4819     dwPriority: DWORD,
4820 }}
4821 pub type PCERT_PHYSICAL_STORE_INFO = *mut CERT_PHYSICAL_STORE_INFO;
4822 pub const CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG: DWORD = 0x1;
4823 pub const CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG: DWORD = 0x2;
4824 pub const CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG: DWORD = 0x4;
4825 pub const CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG: DWORD = 0x8;
4826 extern "system" {
CertRegisterSystemStore( pvSystemStore: *const c_void, dwFlags: DWORD, pStoreInfo: PCERT_SYSTEM_STORE_INFO, pvReserved: *mut c_void, ) -> BOOL4827     pub fn CertRegisterSystemStore(
4828         pvSystemStore: *const c_void,
4829         dwFlags: DWORD,
4830         pStoreInfo: PCERT_SYSTEM_STORE_INFO,
4831         pvReserved: *mut c_void,
4832     ) -> BOOL;
CertRegisterPhysicalStore( pvSystemStore: *const c_void, dwFlags: DWORD, pwszStoreName: LPCWSTR, pStoreInfo: PCERT_PHYSICAL_STORE_INFO, pvReserved: *mut c_void, ) -> BOOL4833     pub fn CertRegisterPhysicalStore(
4834         pvSystemStore: *const c_void,
4835         dwFlags: DWORD,
4836         pwszStoreName: LPCWSTR,
4837         pStoreInfo: PCERT_PHYSICAL_STORE_INFO,
4838         pvReserved: *mut c_void,
4839     ) -> BOOL;
CertUnregisterSystemStore( pvSystemStore: *const c_void, dwFlags: DWORD, ) -> BOOL4840     pub fn CertUnregisterSystemStore(
4841         pvSystemStore: *const c_void,
4842         dwFlags: DWORD,
4843     ) -> BOOL;
CertUnregisterPhysicalStore( pvSystemStore: *const c_void, dwFlags: DWORD, pwszStoreName: LPCWSTR, ) -> BOOL4844     pub fn CertUnregisterPhysicalStore(
4845         pvSystemStore: *const c_void,
4846         dwFlags: DWORD,
4847         pwszStoreName: LPCWSTR,
4848     ) -> BOOL;
4849 }
4850 FN!{stdcall PFN_CERT_ENUM_SYSTEM_STORE_LOCATION(
4851     pwszStoreLocation: LPCWSTR,
4852     dwFlags: DWORD,
4853     pvReserved: *mut c_void,
4854     pvArg: *mut c_void,
4855 ) -> BOOL}
4856 FN!{stdcall PFN_CERT_ENUM_SYSTEM_STORE(
4857     pvSystemStore: *const c_void,
4858     dwFlags: DWORD,
4859     pStoreInfo: PCERT_SYSTEM_STORE_INFO,
4860     pvReserved: *mut c_void,
4861     pvArg: *mut c_void,
4862 ) -> BOOL}
4863 FN!{stdcall PFN_CERT_ENUM_PHYSICAL_STORE(
4864     pvSystemStore: *const c_void,
4865     dwFlags: DWORD,
4866     pwszStoreName: LPCWSTR,
4867     pStoreInfo: PCERT_PHYSICAL_STORE_INFO,
4868     pvReserved: *mut c_void,
4869     pvArg: *mut c_void,
4870 ) -> BOOL}
4871 pub const CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG: DWORD = 0x1;
4872 pub const CERT_PHYSICAL_STORE_DEFAULT_NAME: &'static str = ".Default";
4873 pub const CERT_PHYSICAL_STORE_GROUP_POLICY_NAME: &'static str = ".GroupPolicy";
4874 pub const CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME: &'static str = ".LocalMachine";
4875 pub const CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME: &'static str = ".UserCertificate";
4876 pub const CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME: &'static str
4877     = ".LocalMachineGroupPolicy";
4878 pub const CERT_PHYSICAL_STORE_ENTERPRISE_NAME: &'static str = ".Enterprise";
4879 pub const CERT_PHYSICAL_STORE_AUTH_ROOT_NAME: &'static str = ".AuthRoot";
4880 pub const CERT_PHYSICAL_STORE_SMART_CARD_NAME: &'static str = ".SmartCard";
4881 extern "system" {
CertEnumSystemStoreLocation( dwFlags: DWORD, pvArg: *mut c_void, pfnEnum: PFN_CERT_ENUM_SYSTEM_STORE_LOCATION, ) -> BOOL4882     pub fn CertEnumSystemStoreLocation(
4883         dwFlags: DWORD,
4884         pvArg: *mut c_void,
4885         pfnEnum: PFN_CERT_ENUM_SYSTEM_STORE_LOCATION,
4886     ) -> BOOL;
CertEnumSystemStore( dwFlags: DWORD, pvSystemStoreLocationPara: *mut c_void, pvArg: *mut c_void, pfnEnum: PFN_CERT_ENUM_SYSTEM_STORE, ) -> BOOL4887     pub fn CertEnumSystemStore(
4888         dwFlags: DWORD,
4889         pvSystemStoreLocationPara: *mut c_void,
4890         pvArg: *mut c_void,
4891         pfnEnum: PFN_CERT_ENUM_SYSTEM_STORE,
4892     ) -> BOOL;
CertEnumPhysicalStore( pvSystemStore: *const c_void, dwFlags: DWORD, pvArg: *mut c_void, pfnEnum: PFN_CERT_ENUM_PHYSICAL_STORE, ) -> BOOL4893     pub fn CertEnumPhysicalStore(
4894         pvSystemStore: *const c_void,
4895         dwFlags: DWORD,
4896         pvArg: *mut c_void,
4897         pfnEnum: PFN_CERT_ENUM_PHYSICAL_STORE,
4898     ) -> BOOL;
4899 }
4900 pub const CRYPT_OID_OPEN_SYSTEM_STORE_PROV_FUNC: &'static str = "CertDllOpenSystemStoreProv";
4901 pub const CRYPT_OID_REGISTER_SYSTEM_STORE_FUNC: &'static str = "CertDllRegisterSystemStore";
4902 pub const CRYPT_OID_UNREGISTER_SYSTEM_STORE_FUNC: &'static str = "CertDllUnregisterSystemStore";
4903 pub const CRYPT_OID_ENUM_SYSTEM_STORE_FUNC: &'static str = "CertDllEnumSystemStore";
4904 pub const CRYPT_OID_REGISTER_PHYSICAL_STORE_FUNC: &'static str = "CertDllRegisterPhysicalStore";
4905 pub const CRYPT_OID_UNREGISTER_PHYSICAL_STORE_FUNC: &'static str
4906     = "CertDllUnregisterPhysicalStore";
4907 pub const CRYPT_OID_ENUM_PHYSICAL_STORE_FUNC: &'static str = "CertDllEnumPhysicalStore";
4908 pub const CRYPT_OID_SYSTEM_STORE_LOCATION_VALUE_NAME: &'static str = "SystemStoreLocation";
4909 extern "system" {
CertGetEnhancedKeyUsage( pCertContext: PCCERT_CONTEXT, dwFlags: DWORD, pUsage: PCERT_ENHKEY_USAGE, pcbUsage: *mut DWORD, ) -> BOOL4910     pub fn CertGetEnhancedKeyUsage(
4911         pCertContext: PCCERT_CONTEXT,
4912         dwFlags: DWORD,
4913         pUsage: PCERT_ENHKEY_USAGE,
4914         pcbUsage: *mut DWORD,
4915     ) -> BOOL;
CertSetEnhancedKeyUsage( pCertContext: PCCERT_CONTEXT, pUsage: PCERT_ENHKEY_USAGE, ) -> BOOL4916     pub fn CertSetEnhancedKeyUsage(
4917         pCertContext: PCCERT_CONTEXT,
4918         pUsage: PCERT_ENHKEY_USAGE,
4919     ) -> BOOL;
CertAddEnhancedKeyUsageIdentifier( pCertContext: PCCERT_CONTEXT, pszUsageIdentifier: LPCSTR, ) -> BOOL4920     pub fn CertAddEnhancedKeyUsageIdentifier(
4921         pCertContext: PCCERT_CONTEXT,
4922         pszUsageIdentifier: LPCSTR,
4923     ) -> BOOL;
CertRemoveEnhancedKeyUsageIdentifier( pCertContext: PCCERT_CONTEXT, pszUsageIdentifier: LPCSTR, ) -> BOOL4924     pub fn CertRemoveEnhancedKeyUsageIdentifier(
4925         pCertContext: PCCERT_CONTEXT,
4926         pszUsageIdentifier: LPCSTR,
4927     ) -> BOOL;
CertGetValidUsages( cCerts: DWORD, rghCerts: *mut PCCERT_CONTEXT, cNumOIDs: *mut c_int, rghOIDs: *mut LPSTR, pcbOIDs: *mut DWORD, ) -> BOOL4928     pub fn CertGetValidUsages(
4929         cCerts: DWORD,
4930         rghCerts: *mut PCCERT_CONTEXT,
4931         cNumOIDs: *mut c_int,
4932         rghOIDs: *mut LPSTR,
4933         pcbOIDs: *mut DWORD,
4934     ) -> BOOL;
CryptMsgGetAndVerifySigner( hCryptMsg: HCRYPTMSG, cSignerStore: DWORD, rghSignerStore: *mut HCERTSTORE, dwFlags: DWORD, ppSigner: *mut PCCERT_CONTEXT, pdwSignerIndex: *mut DWORD, ) -> BOOL4935     pub fn CryptMsgGetAndVerifySigner(
4936         hCryptMsg: HCRYPTMSG,
4937         cSignerStore: DWORD,
4938         rghSignerStore: *mut HCERTSTORE,
4939         dwFlags: DWORD,
4940         ppSigner: *mut PCCERT_CONTEXT,
4941         pdwSignerIndex: *mut DWORD,
4942     ) -> BOOL;
4943 }
4944 pub const CMSG_TRUSTED_SIGNER_FLAG: DWORD = 0x1;
4945 pub const CMSG_SIGNER_ONLY_FLAG: DWORD = 0x2;
4946 pub const CMSG_USE_SIGNER_INDEX_FLAG: DWORD = 0x4;
4947 extern "system" {
CryptMsgSignCTL( dwMsgEncodingType: DWORD, pbCtlContent: *mut BYTE, cbCtlContent: DWORD, pSignInfo: PCMSG_SIGNED_ENCODE_INFO, dwFlags: DWORD, pbEncoded: *mut BYTE, pcbEncoded: *mut DWORD, ) -> BOOL4948     pub fn CryptMsgSignCTL(
4949         dwMsgEncodingType: DWORD,
4950         pbCtlContent: *mut BYTE,
4951         cbCtlContent: DWORD,
4952         pSignInfo: PCMSG_SIGNED_ENCODE_INFO,
4953         dwFlags: DWORD,
4954         pbEncoded: *mut BYTE,
4955         pcbEncoded: *mut DWORD,
4956     ) -> BOOL;
CryptMsgEncodeAndSignCTL( dwMsgEncodingType: DWORD, pCtlInfo: PCTL_INFO, pSignInfo: PCMSG_SIGNED_ENCODE_INFO, dwFlags: DWORD, pbEncoded: *mut BYTE, pcbEncoded: *mut DWORD, ) -> BOOL4957     pub fn CryptMsgEncodeAndSignCTL(
4958         dwMsgEncodingType: DWORD,
4959         pCtlInfo: PCTL_INFO,
4960         pSignInfo: PCMSG_SIGNED_ENCODE_INFO,
4961         dwFlags: DWORD,
4962         pbEncoded: *mut BYTE,
4963         pcbEncoded: *mut DWORD,
4964     ) -> BOOL;
4965 }
4966 pub const CMSG_ENCODE_SORTED_CTL_FLAG: DWORD = 0x1;
4967 pub const CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG: DWORD = 0x2;
4968 extern "system" {
CertFindSubjectInSortedCTL( pSubjectIdentifier: PCRYPT_DATA_BLOB, pCtlContext: PCCTL_CONTEXT, dwFlags: DWORD, pvReserved: *mut c_void, pEncodedAttributes: PCRYPT_DER_BLOB, ) -> BOOL4969     pub fn CertFindSubjectInSortedCTL(
4970         pSubjectIdentifier: PCRYPT_DATA_BLOB,
4971         pCtlContext: PCCTL_CONTEXT,
4972         dwFlags: DWORD,
4973         pvReserved: *mut c_void,
4974         pEncodedAttributes: PCRYPT_DER_BLOB,
4975     ) -> BOOL;
CertEnumSubjectInSortedCTL( pCtlContext: PCCTL_CONTEXT, ppvNextSubject: *mut *mut c_void, pSubjectIdentifier: PCRYPT_DER_BLOB, pEncodedAttributes: PCRYPT_DER_BLOB, ) -> BOOL4976     pub fn CertEnumSubjectInSortedCTL(
4977         pCtlContext: PCCTL_CONTEXT,
4978         ppvNextSubject: *mut *mut c_void,
4979         pSubjectIdentifier: PCRYPT_DER_BLOB,
4980         pEncodedAttributes: PCRYPT_DER_BLOB,
4981     ) -> BOOL;
4982 }
4983 STRUCT!{struct CTL_VERIFY_USAGE_PARA {
4984     cbSize: DWORD,
4985     ListIdentifier: CRYPT_DATA_BLOB,
4986     cCtlStore: DWORD,
4987     rghCtlStore: *mut HCERTSTORE,
4988     cSignerStore: DWORD,
4989     rghSignerStore: *mut HCERTSTORE,
4990 }}
4991 pub type PCTL_VERIFY_USAGE_PARA = *mut CTL_VERIFY_USAGE_PARA;
4992 STRUCT!{struct CTL_VERIFY_USAGE_STATUS {
4993     cbSize: DWORD,
4994     dwError: DWORD,
4995     dwFlags: DWORD,
4996     ppCtl: *mut PCCTL_CONTEXT,
4997     dwCtlEntryIndex: DWORD,
4998     ppSigner: *mut PCCERT_CONTEXT,
4999     dwSignerIndex: DWORD,
5000 }}
5001 pub type PCTL_VERIFY_USAGE_STATUS = *mut CTL_VERIFY_USAGE_STATUS;
5002 pub const CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG: DWORD = 0x1;
5003 pub const CERT_VERIFY_TRUSTED_SIGNERS_FLAG: DWORD = 0x2;
5004 pub const CERT_VERIFY_NO_TIME_CHECK_FLAG: DWORD = 0x4;
5005 pub const CERT_VERIFY_ALLOW_MORE_USAGE_FLAG: DWORD = 0x8;
5006 pub const CERT_VERIFY_UPDATED_CTL_FLAG: DWORD = 0x1;
5007 extern "system" {
CertVerifyCTLUsage( dwEncodingType: DWORD, dwSubjectType: DWORD, pvSubject: *mut c_void, pSubjectUsage: PCTL_USAGE, dwFlags: DWORD, pVerifyUsagePara: PCTL_VERIFY_USAGE_PARA, pVerifyUsageStatus: PCTL_VERIFY_USAGE_STATUS, ) -> BOOL5008     pub fn CertVerifyCTLUsage(
5009         dwEncodingType: DWORD,
5010         dwSubjectType: DWORD,
5011         pvSubject: *mut c_void,
5012         pSubjectUsage: PCTL_USAGE,
5013         dwFlags: DWORD,
5014         pVerifyUsagePara: PCTL_VERIFY_USAGE_PARA,
5015         pVerifyUsageStatus: PCTL_VERIFY_USAGE_STATUS,
5016     ) -> BOOL;
5017 }
5018 STRUCT!{struct CERT_REVOCATION_CRL_INFO {
5019     cbSize: DWORD,
5020     pBaseCrlContext: PCCRL_CONTEXT,
5021     pDeltaCrlContext: PCCRL_CONTEXT,
5022     pCrlEntry: PCRL_ENTRY,
5023     fDeltaCrlEntry: BOOL,
5024 }}
5025 pub type PCERT_REVOCATION_CRL_INFO = *mut CERT_REVOCATION_CRL_INFO;
5026 pub type PCERT_REVOCATION_CHAIN_PARA = *mut CERT_REVOCATION_CHAIN_PARA;
5027 STRUCT!{struct CERT_REVOCATION_PARA {
5028     cbSize: DWORD,
5029     pIssuerCert: PCCERT_CONTEXT,
5030     cCertStore: DWORD,
5031     rgCertStore: *mut HCERTSTORE,
5032     hCrlStore: HCERTSTORE,
5033     pftTimeToUse: LPFILETIME,
5034     dwUrlRetrievalTimeout: DWORD,
5035     fCheckFreshnessTime: BOOL,
5036     dwFreshnessTime: DWORD,
5037     pftCurrentTime: LPFILETIME,
5038     pCrlInfo: PCERT_REVOCATION_CRL_INFO,
5039     pftCacheResync: LPFILETIME,
5040     pChainPara: PCERT_REVOCATION_CHAIN_PARA,
5041 }}
5042 pub type PCERT_REVOCATION_PARA = *mut CERT_REVOCATION_PARA;
5043 STRUCT!{struct CERT_REVOCATION_STATUS {
5044     cbSize: DWORD,
5045     dwIndex: DWORD,
5046     dwError: DWORD,
5047     dwReason: DWORD,
5048     fHasFreshnessTime: BOOL,
5049     dwFreshnessTime: DWORD,
5050 }}
5051 pub type PCERT_REVOCATION_STATUS = *mut CERT_REVOCATION_STATUS;
5052 extern "system" {
CertVerifyRevocation( dwEncodingType: DWORD, dwRevType: DWORD, cContext: DWORD, rgpvContext: *mut PVOID, dwFlags: DWORD, pRevPara: PCERT_REVOCATION_PARA, pRevStatus: PCERT_REVOCATION_STATUS, ) -> BOOL5053     pub fn CertVerifyRevocation(
5054         dwEncodingType: DWORD,
5055         dwRevType: DWORD,
5056         cContext: DWORD,
5057         rgpvContext: *mut PVOID,
5058         dwFlags: DWORD,
5059         pRevPara: PCERT_REVOCATION_PARA,
5060         pRevStatus: PCERT_REVOCATION_STATUS,
5061     ) -> BOOL;
5062 }
5063 pub const CERT_CONTEXT_REVOCATION_TYPE: DWORD = 1;
5064 pub const CERT_VERIFY_REV_CHAIN_FLAG: DWORD = 0x00000001;
5065 pub const CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION: DWORD = 0x00000002;
5066 pub const CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG: DWORD = 0x00000004;
5067 pub const CERT_VERIFY_REV_SERVER_OCSP_FLAG: DWORD = 0x00000008;
5068 pub const CERT_VERIFY_REV_NO_OCSP_FAILOVER_TO_CRL_FLAG: DWORD = 0x00000010;
5069 extern "system" {
CertCompareIntegerBlob( pInt1: PCRYPT_INTEGER_BLOB, pInt2: PCRYPT_INTEGER_BLOB, ) -> BOOL5070     pub fn CertCompareIntegerBlob(
5071         pInt1: PCRYPT_INTEGER_BLOB,
5072         pInt2: PCRYPT_INTEGER_BLOB,
5073     ) -> BOOL;
CertCompareCertificate( dwCertEncodingType: DWORD, pCertId1: PCERT_INFO, pCertId2: PCERT_INFO, ) -> BOOL5074     pub fn CertCompareCertificate(
5075         dwCertEncodingType: DWORD,
5076         pCertId1: PCERT_INFO,
5077         pCertId2: PCERT_INFO,
5078     ) -> BOOL;
CertCompareCertificateName( dwCertEncodingType: DWORD, pCertName1: PCERT_NAME_BLOB, pCertName2: PCERT_NAME_BLOB, ) -> BOOL5079     pub fn CertCompareCertificateName(
5080         dwCertEncodingType: DWORD,
5081         pCertName1: PCERT_NAME_BLOB,
5082         pCertName2: PCERT_NAME_BLOB,
5083     ) -> BOOL;
CertIsRDNAttrsInCertificateName( dwCertEncodingType: DWORD, dwFlags: DWORD, pCertName: PCERT_NAME_BLOB, pRDN: PCERT_RDN, ) -> BOOL5084     pub fn CertIsRDNAttrsInCertificateName(
5085         dwCertEncodingType: DWORD,
5086         dwFlags: DWORD,
5087         pCertName: PCERT_NAME_BLOB,
5088         pRDN: PCERT_RDN,
5089     ) -> BOOL;
CertComparePublicKeyInfo( dwCertEncodingType: DWORD, pPublicKey1: PCERT_PUBLIC_KEY_INFO, pPublicKey2: PCERT_PUBLIC_KEY_INFO, ) -> BOOL5090     pub fn CertComparePublicKeyInfo(
5091         dwCertEncodingType: DWORD,
5092         pPublicKey1: PCERT_PUBLIC_KEY_INFO,
5093         pPublicKey2: PCERT_PUBLIC_KEY_INFO,
5094     ) -> BOOL;
CertGetPublicKeyLength( dwCertEncodingType: DWORD, pPublicKey: PCERT_PUBLIC_KEY_INFO, ) -> DWORD5095     pub fn CertGetPublicKeyLength(
5096         dwCertEncodingType: DWORD,
5097         pPublicKey: PCERT_PUBLIC_KEY_INFO,
5098     ) -> DWORD;
CryptVerifyCertificateSignature( hCryptProv: HCRYPTPROV_LEGACY, dwCertEncodingType: DWORD, pbEncoded: *const BYTE, cbEncoded: DWORD, pPublicKey: PCERT_PUBLIC_KEY_INFO, ) -> BOOL5099     pub fn CryptVerifyCertificateSignature(
5100         hCryptProv: HCRYPTPROV_LEGACY,
5101         dwCertEncodingType: DWORD,
5102         pbEncoded: *const BYTE,
5103         cbEncoded: DWORD,
5104         pPublicKey: PCERT_PUBLIC_KEY_INFO,
5105     ) -> BOOL;
CryptVerifyCertificateSignatureEx( hCryptProv: HCRYPTPROV_LEGACY, dwCertEncodingType: DWORD, dwSubjectType: DWORD, pvSubject: *mut c_void, dwIssuerType: DWORD, pvIssuer: *mut c_void, dwFlags: DWORD, pvExtra: *mut c_void, ) -> BOOL5106     pub fn CryptVerifyCertificateSignatureEx(
5107         hCryptProv: HCRYPTPROV_LEGACY,
5108         dwCertEncodingType: DWORD,
5109         dwSubjectType: DWORD,
5110         pvSubject: *mut c_void,
5111         dwIssuerType: DWORD,
5112         pvIssuer: *mut c_void,
5113         dwFlags: DWORD,
5114         pvExtra: *mut c_void,
5115     ) -> BOOL;
5116 }
5117 pub const CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB: DWORD = 1;
5118 pub const CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT: DWORD = 2;
5119 pub const CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL: DWORD = 3;
5120 pub const CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE: DWORD = 4;
5121 pub const CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY: DWORD = 1;
5122 pub const CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT: DWORD = 2;
5123 pub const CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN: DWORD = 3;
5124 pub const CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL: DWORD = 4;
5125 pub const CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG: DWORD = 0x00000001;
5126 pub const CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG: DWORD = 0x00000002;
5127 pub const CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG: DWORD = 0x00000004;
5128 STRUCT!{struct CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO {
5129     CertSignHashCNGAlgPropData: CRYPT_DATA_BLOB,
5130     CertIssuerPubKeyBitLengthPropData: CRYPT_DATA_BLOB,
5131 }}
5132 pub type PCRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO
5133     = *mut CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO;
5134 STRUCT!{struct CRYPT_VERIFY_CERT_SIGN_WEAK_HASH_INFO {
5135     cCNGHashAlgid: DWORD,
5136     rgpwszCNGHashAlgid: *mut PCWSTR,
5137     dwWeakIndex: DWORD,
5138 }}
5139 pub type PCRYPT_VERIFY_CERT_SIGN_WEAK_HASH_INFO = *mut CRYPT_VERIFY_CERT_SIGN_WEAK_HASH_INFO;
5140 extern "system" {
CertIsStrongHashToSign( pStrongSignPara: PCCERT_STRONG_SIGN_PARA, pwszCNGHashAlgid: LPCWSTR, pSigningCert: PCCERT_CONTEXT, ) -> BOOL5141     pub fn CertIsStrongHashToSign(
5142         pStrongSignPara: PCCERT_STRONG_SIGN_PARA,
5143         pwszCNGHashAlgid: LPCWSTR,
5144         pSigningCert: PCCERT_CONTEXT,
5145     ) -> BOOL;
CryptHashToBeSigned( hCryptProv: HCRYPTPROV_LEGACY, dwCertEncodingType: DWORD, pbEncoded: *const BYTE, cbEncoded: DWORD, pbComputedHash: *mut BYTE, pcbComputedHash: *mut DWORD, ) -> BOOL5146     pub fn CryptHashToBeSigned(
5147         hCryptProv: HCRYPTPROV_LEGACY,
5148         dwCertEncodingType: DWORD,
5149         pbEncoded: *const BYTE,
5150         cbEncoded: DWORD,
5151         pbComputedHash: *mut BYTE,
5152         pcbComputedHash: *mut DWORD,
5153     ) -> BOOL;
CryptHashCertificate( hCryptProv: HCRYPTPROV_LEGACY, Algid: ALG_ID, dwFlags: DWORD, pbEncoded: *const BYTE, cbEncoded: DWORD, pbComputedHash: *mut BYTE, pcbComputedHash: *mut DWORD, ) -> BOOL5154     pub fn CryptHashCertificate(
5155         hCryptProv: HCRYPTPROV_LEGACY,
5156         Algid: ALG_ID,
5157         dwFlags: DWORD,
5158         pbEncoded: *const BYTE,
5159         cbEncoded: DWORD,
5160         pbComputedHash: *mut BYTE,
5161         pcbComputedHash: *mut DWORD,
5162     ) -> BOOL;
CryptHashCertificate2( pwszCNGHashAlgid: LPCWSTR, dwFlags: DWORD, pvReserved: *mut c_void, pbEncoded: *const BYTE, cbEncoded: DWORD, pbComputedHash: *mut BYTE, pcbComputedHash: *mut DWORD, ) -> BOOL5163     pub fn CryptHashCertificate2(
5164         pwszCNGHashAlgid: LPCWSTR,
5165         dwFlags: DWORD,
5166         pvReserved: *mut c_void,
5167         pbEncoded: *const BYTE,
5168         cbEncoded: DWORD,
5169         pbComputedHash: *mut BYTE,
5170         pcbComputedHash: *mut DWORD,
5171     ) -> BOOL;
CryptSignCertificate( hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, dwKeySpec: DWORD, dwCertEncodingType: DWORD, pbEncodedToBeSigned: *const BYTE, cbEncodedToBeSigned: DWORD, pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER, pvHashAuxInfo: *const c_void, pbSignature: *mut BYTE, pcbSignature: *mut DWORD, ) -> BOOL5172     pub fn CryptSignCertificate(
5173         hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
5174         dwKeySpec: DWORD,
5175         dwCertEncodingType: DWORD,
5176         pbEncodedToBeSigned: *const BYTE,
5177         cbEncodedToBeSigned: DWORD,
5178         pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
5179         pvHashAuxInfo: *const c_void,
5180         pbSignature: *mut BYTE,
5181         pcbSignature: *mut DWORD,
5182     ) -> BOOL;
CryptSignAndEncodeCertificate( hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, dwKeySpec: DWORD, dwCertEncodingType: DWORD, lpszStructType: LPCSTR, pvStructInfo: *const c_void, pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER, pvHashAuxInfo: *const c_void, pbEncoded: *mut BYTE, pcbEncoded: *mut DWORD, ) -> BOOL5183     pub fn CryptSignAndEncodeCertificate(
5184         hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
5185         dwKeySpec: DWORD,
5186         dwCertEncodingType: DWORD,
5187         lpszStructType: LPCSTR,
5188         pvStructInfo: *const c_void,
5189         pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
5190         pvHashAuxInfo: *const c_void,
5191         pbEncoded: *mut BYTE,
5192         pcbEncoded: *mut DWORD,
5193     ) -> BOOL;
5194 }
5195 pub const CRYPT_OID_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC: &'static str
5196     = "CryptDllExtractEncodedSignatureParameters";
5197 FN!{stdcall PFN_CRYPT_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC(
5198     dwCertEncodingType: DWORD,
5199     pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
5200     ppvDecodedSignPara: *mut *mut c_void,
5201     ppwszCNGHashAlgid: LPWSTR,
5202 ) -> BOOL}
5203 pub const CRYPT_OID_SIGN_AND_ENCODE_HASH_FUNC: &'static str = "CryptDllSignAndEncodeHash";
5204 FN!{stdcall PFN_CRYPT_SIGN_AND_ENCODE_HASH_FUNC(
5205     hKey: NCRYPT_KEY_HANDLE,
5206     dwCertEncodingType: DWORD,
5207     pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
5208     pvDecodedSignPara: *mut c_void,
5209     pwszCNGPubKeyAlgid: LPCWSTR,
5210     pwszCNGHashAlgid: LPCWSTR,
5211     pbComputedHash: *mut BYTE,
5212     cbComputedHash: DWORD,
5213     pbSignature: *mut BYTE,
5214     pcbSignature: *mut DWORD,
5215 ) -> BOOL}
5216 pub const CRYPT_OID_VERIFY_ENCODED_SIGNATURE_FUNC: &'static str = "CryptDllVerifyEncodedSignature";
5217 FN!{stdcall PFN_CRYPT_VERIFY_ENCODED_SIGNATURE_FUNC(
5218     dwCertEncodingType: DWORD,
5219     pPubKeyInfo: PCERT_PUBLIC_KEY_INFO,
5220     pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
5221     pvDecodedSignPara: *mut c_void,
5222     pwszCNGPubKeyAlgid: LPCWSTR,
5223     pwszCNGHashAlgid: LPCWSTR,
5224     pbComputedHash: *mut BYTE,
5225     cbComputedHash: DWORD,
5226     pbSignature: *mut BYTE,
5227     cbSignature: DWORD,
5228 ) -> BOOL}
5229 extern "system" {
CertVerifyTimeValidity( pTimeToVerify: LPFILETIME, pCertInfo: PCERT_INFO, ) -> LONG5230     pub fn CertVerifyTimeValidity(
5231         pTimeToVerify: LPFILETIME,
5232         pCertInfo: PCERT_INFO,
5233     ) -> LONG;
CertVerifyCRLTimeValidity( pTimeToVerify: LPFILETIME, pCrlInfo: PCRL_INFO, ) -> LONG5234     pub fn CertVerifyCRLTimeValidity(
5235         pTimeToVerify: LPFILETIME,
5236         pCrlInfo: PCRL_INFO,
5237     ) -> LONG;
CertVerifyValidityNesting( pSubjectInfo: PCERT_INFO, pIssuerInfo: PCERT_INFO, ) -> BOOL5238     pub fn CertVerifyValidityNesting(
5239         pSubjectInfo: PCERT_INFO,
5240         pIssuerInfo: PCERT_INFO,
5241     ) -> BOOL;
CertVerifyCRLRevocation( dwCertEncodingType: DWORD, pCertId: PCERT_INFO, cCrlInfo: DWORD, rgpCrlInfo: *mut PCRL_INFO, ) -> BOOL5242     pub fn CertVerifyCRLRevocation(
5243         dwCertEncodingType: DWORD,
5244         pCertId: PCERT_INFO,
5245         cCrlInfo: DWORD,
5246         rgpCrlInfo: *mut PCRL_INFO,
5247     ) -> BOOL;
CertAlgIdToOID( dwAlgId: DWORD, ) -> LPCSTR5248     pub fn CertAlgIdToOID(
5249         dwAlgId: DWORD,
5250     ) -> LPCSTR;
CertOIDToAlgId( pszObjId: LPCSTR, ) -> DWORD5251     pub fn CertOIDToAlgId(
5252         pszObjId: LPCSTR,
5253     ) -> DWORD;
CertFindExtension( pszObjId: LPCSTR, cExtensions: DWORD, rgExtensions: *mut CERT_EXTENSION, ) -> PCERT_EXTENSION5254     pub fn CertFindExtension(
5255         pszObjId: LPCSTR,
5256         cExtensions: DWORD,
5257         rgExtensions: *mut CERT_EXTENSION,
5258     ) -> PCERT_EXTENSION;
CertFindAttribute( pszObjId: LPCSTR, cAttr: DWORD, rgAttr: *mut CRYPT_ATTRIBUTE, ) -> PCRYPT_ATTRIBUTE5259     pub fn CertFindAttribute(
5260         pszObjId: LPCSTR,
5261         cAttr: DWORD,
5262         rgAttr: *mut CRYPT_ATTRIBUTE,
5263     ) -> PCRYPT_ATTRIBUTE;
CertFindRDNAttr( pszObjId: LPCSTR, pName: PCERT_NAME_INFO, ) -> PCERT_RDN_ATTR5264     pub fn CertFindRDNAttr(
5265         pszObjId: LPCSTR,
5266         pName: PCERT_NAME_INFO,
5267     ) -> PCERT_RDN_ATTR;
CertGetIntendedKeyUsage( dwCertEncodingType: DWORD, pCertInfo: PCERT_INFO, pbKeyUsage: *mut BYTE, cbKeyUsage: DWORD, ) -> BOOL5268     pub fn CertGetIntendedKeyUsage(
5269         dwCertEncodingType: DWORD,
5270         pCertInfo: PCERT_INFO,
5271         pbKeyUsage: *mut BYTE,
5272         cbKeyUsage: DWORD,
5273     ) -> BOOL;
5274 }
5275 pub type HCRYPTDEFAULTCONTEXT = *mut c_void;
5276 extern "system" {
CryptInstallDefaultContext( hCryptProv: HCRYPTPROV, dwDefaultType: DWORD, pvDefaultPara: *const c_void, dwFlags: DWORD, pvReserved: *mut c_void, phDefaultContext: *mut HCRYPTDEFAULTCONTEXT, ) -> BOOL5277     pub fn CryptInstallDefaultContext(
5278         hCryptProv: HCRYPTPROV,
5279         dwDefaultType: DWORD,
5280         pvDefaultPara: *const c_void,
5281         dwFlags: DWORD,
5282         pvReserved: *mut c_void,
5283         phDefaultContext: *mut HCRYPTDEFAULTCONTEXT,
5284     ) -> BOOL;
5285 }
5286 pub const CRYPT_DEFAULT_CONTEXT_AUTO_RELEASE_FLAG: DWORD = 0x00000001;
5287 pub const CRYPT_DEFAULT_CONTEXT_PROCESS_FLAG: DWORD = 0x00000002;
5288 pub const CRYPT_DEFAULT_CONTEXT_CERT_SIGN_OID: DWORD = 1;
5289 pub const CRYPT_DEFAULT_CONTEXT_MULTI_CERT_SIGN_OID: DWORD = 2;
5290 STRUCT!{struct CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA {
5291     cOID: DWORD,
5292     rgpszOID: *mut LPSTR,
5293 }}
5294 pub type PCRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA = *mut CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA;
5295 extern "system" {
CryptUninstallDefaultContext( hDefaultContext: HCRYPTDEFAULTCONTEXT, dwFlags: DWORD, pvReserved: *mut c_void, ) -> BOOL5296     pub fn CryptUninstallDefaultContext(
5297         hDefaultContext: HCRYPTDEFAULTCONTEXT,
5298         dwFlags: DWORD,
5299         pvReserved: *mut c_void,
5300     ) -> BOOL;
CryptExportPublicKeyInfo( hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, dwKeySpec: DWORD, dwCertEncodingType: DWORD, pInfo: PCERT_PUBLIC_KEY_INFO, pcbInfo: *mut DWORD, ) -> BOOL5301     pub fn CryptExportPublicKeyInfo(
5302         hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
5303         dwKeySpec: DWORD,
5304         dwCertEncodingType: DWORD,
5305         pInfo: PCERT_PUBLIC_KEY_INFO,
5306         pcbInfo: *mut DWORD,
5307     ) -> BOOL;
CryptExportPublicKeyInfoEx( hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, dwKeySpec: DWORD, dwCertEncodingType: DWORD, pszPublicKeyObjId: LPSTR, dwFlags: DWORD, pvAuxInfo: *mut c_void, pInfo: PCERT_PUBLIC_KEY_INFO, pcbInfo: *mut DWORD, ) -> BOOL5308     pub fn CryptExportPublicKeyInfoEx(
5309         hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
5310         dwKeySpec: DWORD,
5311         dwCertEncodingType: DWORD,
5312         pszPublicKeyObjId: LPSTR,
5313         dwFlags: DWORD,
5314         pvAuxInfo: *mut c_void,
5315         pInfo: PCERT_PUBLIC_KEY_INFO,
5316         pcbInfo: *mut DWORD,
5317     ) -> BOOL;
5318 }
5319 pub const CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC: &'static str = "CryptDllExportPublicKeyInfoEx";
5320 pub const CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC: &'static str
5321     = "CryptDllExportPublicKeyInfoEx2";
5322 FN!{stdcall PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC(
5323     hNCryptKey: NCRYPT_KEY_HANDLE,
5324     dwCertEncodingType: DWORD,
5325     pszPublicKeyObjId: LPSTR,
5326     dwFlags: DWORD,
5327     pvAuxInfo: *mut c_void,
5328     pInfo: PCERT_PUBLIC_KEY_INFO,
5329     pcbInfo: *mut DWORD,
5330 ) -> BOOL}
5331 extern "system" {
CryptExportPublicKeyInfoFromBCryptKeyHandle( hBCryptKey: BCRYPT_KEY_HANDLE, dwCertEncodingType: DWORD, pszPublicKeyObjId: LPSTR, dwFlags: DWORD, pvAuxInfo: *mut c_void, pInfo: PCERT_PUBLIC_KEY_INFO, pcbInfo: *mut DWORD, ) -> BOOL5332     pub fn CryptExportPublicKeyInfoFromBCryptKeyHandle(
5333         hBCryptKey: BCRYPT_KEY_HANDLE,
5334         dwCertEncodingType: DWORD,
5335         pszPublicKeyObjId: LPSTR,
5336         dwFlags: DWORD,
5337         pvAuxInfo: *mut c_void,
5338         pInfo: PCERT_PUBLIC_KEY_INFO,
5339         pcbInfo: *mut DWORD,
5340     ) -> BOOL;
5341 }
5342 pub const CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC: &'static str
5343     = "CryptDllExportPublicKeyInfoFromBCryptKeyHandle";
5344 FN!{stdcall PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC(
5345     hBCryptKey: BCRYPT_KEY_HANDLE,
5346     dwCertEncodingType: DWORD,
5347     pszPublicKeyObjId: LPSTR,
5348     dwFlags: DWORD,
5349     pvAuxInfo: *mut c_void,
5350     pInfo: PCERT_PUBLIC_KEY_INFO,
5351     pcbInfo: *mut DWORD,
5352 ) -> BOOL}
5353 extern "system" {
CryptImportPublicKeyInfo( hCryptProv: HCRYPTPROV, dwCertEncodingType: DWORD, pInfo: PCERT_PUBLIC_KEY_INFO, phKey: *mut HCRYPTKEY, ) -> BOOL5354     pub fn CryptImportPublicKeyInfo(
5355         hCryptProv: HCRYPTPROV,
5356         dwCertEncodingType: DWORD,
5357         pInfo: PCERT_PUBLIC_KEY_INFO,
5358         phKey: *mut HCRYPTKEY,
5359     ) -> BOOL;
5360 }
5361 pub const CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC: &'static str = "CryptDllImportPublicKeyInfoEx";
5362 extern "system" {
CryptImportPublicKeyInfoEx( hCryptProv: HCRYPTPROV, dwCertEncodingType: DWORD, pInfo: PCERT_PUBLIC_KEY_INFO, aiKeyAlg: ALG_ID, dwFlags: DWORD, pvAuxInfo: *mut c_void, phKey: *mut HCRYPTKEY, ) -> BOOL5363     pub fn CryptImportPublicKeyInfoEx(
5364         hCryptProv: HCRYPTPROV,
5365         dwCertEncodingType: DWORD,
5366         pInfo: PCERT_PUBLIC_KEY_INFO,
5367         aiKeyAlg: ALG_ID,
5368         dwFlags: DWORD,
5369         pvAuxInfo: *mut c_void,
5370         phKey: *mut HCRYPTKEY,
5371     ) -> BOOL;
CryptImportPublicKeyInfoEx2( dwCertEncodingType: DWORD, pInfo: PCERT_PUBLIC_KEY_INFO, dwFlags: DWORD, pvAuxInfo: *mut c_void, phKey: *mut BCRYPT_KEY_HANDLE, ) -> BOOL5372     pub fn CryptImportPublicKeyInfoEx2(
5373         dwCertEncodingType: DWORD,
5374         pInfo: PCERT_PUBLIC_KEY_INFO,
5375         dwFlags: DWORD,
5376         pvAuxInfo: *mut c_void,
5377         phKey: *mut BCRYPT_KEY_HANDLE,
5378     ) -> BOOL;
5379 }
5380 pub const CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC: &'static str
5381     = "CryptDllImportPublicKeyInfoEx2";
5382 FN!{stdcall PFN_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC(
5383     dwCertEncodingType: DWORD,
5384     pInfo: PCERT_PUBLIC_KEY_INFO,
5385     dwFlags: DWORD,
5386     pvAuxInfo: *mut c_void,
5387     phKey: *mut BCRYPT_KEY_HANDLE,
5388 ) -> BOOL}
5389 extern "system" {
CryptAcquireCertificatePrivateKey( pCert: PCCERT_CONTEXT, dwFlags: DWORD, pvParameters: *mut c_void, phCryptProvOrNCryptKey: *mut HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, pdwKeySpec: *mut DWORD, pfCallerFreeProvOrNCryptKey: *mut BOOL, ) -> BOOL5390     pub fn CryptAcquireCertificatePrivateKey(
5391         pCert: PCCERT_CONTEXT,
5392         dwFlags: DWORD,
5393         pvParameters: *mut c_void,
5394         phCryptProvOrNCryptKey: *mut HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
5395         pdwKeySpec: *mut DWORD,
5396         pfCallerFreeProvOrNCryptKey: *mut BOOL,
5397     ) -> BOOL;
5398 }
5399 pub const CRYPT_ACQUIRE_CACHE_FLAG: DWORD = 0x00000001;
5400 pub const CRYPT_ACQUIRE_USE_PROV_INFO_FLAG: DWORD = 0x00000002;
5401 pub const CRYPT_ACQUIRE_COMPARE_KEY_FLAG: DWORD = 0x00000004;
5402 pub const CRYPT_ACQUIRE_NO_HEALING: DWORD = 0x00000008;
5403 pub const CRYPT_ACQUIRE_SILENT_FLAG: DWORD = 0x00000040;
5404 pub const CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG: DWORD = 0x00000080;
5405 pub const CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK: DWORD = 0x00070000;
5406 pub const CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG: DWORD = 0x00010000;
5407 pub const CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG: DWORD = 0x00020000;
5408 pub const CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG: DWORD = 0x00040000;
5409 extern "system" {
CryptFindCertificateKeyProvInfo( pCert: PCCERT_CONTEXT, dwFlags: DWORD, pvReserved: *mut c_void, ) -> BOOL5410     pub fn CryptFindCertificateKeyProvInfo(
5411         pCert: PCCERT_CONTEXT,
5412         dwFlags: DWORD,
5413         pvReserved: *mut c_void,
5414     ) -> BOOL;
5415 }
5416 pub const CRYPT_FIND_USER_KEYSET_FLAG: DWORD = 0x00000001;
5417 pub const CRYPT_FIND_MACHINE_KEYSET_FLAG: DWORD = 0x00000002;
5418 pub const CRYPT_FIND_SILENT_KEYSET_FLAG: DWORD = 0x00000040;
5419 FN!{stdcall PFN_IMPORT_PRIV_KEY_FUNC(
5420     hCryptProv: HCRYPTPROV,
5421     pPrivateKeyInfo: *mut CRYPT_PRIVATE_KEY_INFO,
5422     dwFlags: DWORD,
5423     pvAuxInfo: *mut c_void,
5424 ) -> BOOL}
5425 pub const CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC: &'static str = "CryptDllImportPrivateKeyInfoEx";
5426 extern "system" {
CryptImportPKCS8( sPrivateKeyAndParams: CRYPT_PKCS8_IMPORT_PARAMS, dwFlags: DWORD, phCryptProv: *mut HCRYPTPROV, pvAuxInfo: *mut c_void, ) -> BOOL5427     pub fn CryptImportPKCS8(
5428         sPrivateKeyAndParams: CRYPT_PKCS8_IMPORT_PARAMS,
5429         dwFlags: DWORD,
5430         phCryptProv: *mut HCRYPTPROV,
5431         pvAuxInfo: *mut c_void,
5432     ) -> BOOL;
5433 }
5434 FN!{stdcall PFN_EXPORT_PRIV_KEY_FUNC(
5435     hCryptProv: HCRYPTPROV,
5436     dwKeySpec: DWORD,
5437     pszPrivateKeyObjId: LPSTR,
5438     dwFlags: DWORD,
5439     pvAuxInfo: *mut c_void,
5440     pPrivateKeyInfo: *mut CRYPT_PRIVATE_KEY_INFO,
5441     pcbPrivateKeyInfo: *mut DWORD,
5442 ) -> BOOL}
5443 pub const CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC: &'static str = "CryptDllExportPrivateKeyInfoEx";
5444 pub const CRYPT_DELETE_KEYSET: DWORD = CRYPT_DELETEKEYSET;
5445 extern "system" {
CryptExportPKCS8( hCryptProv: HCRYPTPROV, dwKeySpec: DWORD, pszPrivateKeyObjId: LPSTR, dwFlags: DWORD, pvAuxInfo: *mut c_void, pbPrivateKeyBlob: *mut BYTE, pcbPrivateKeyBlob: *mut DWORD, ) -> BOOL5446     pub fn CryptExportPKCS8(
5447         hCryptProv: HCRYPTPROV,
5448         dwKeySpec: DWORD,
5449         pszPrivateKeyObjId: LPSTR,
5450         dwFlags: DWORD,
5451         pvAuxInfo: *mut c_void,
5452         pbPrivateKeyBlob: *mut BYTE,
5453         pcbPrivateKeyBlob: *mut DWORD,
5454     ) -> BOOL;
CryptExportPKCS8Ex( psExportParams: CRYPT_PKCS8_EXPORT_PARAMS, dwKeySpec: DWORD, pvAuxInfo: *mut c_void, pbPrivateKeyBlob: *mut BYTE, pcbPrivateKeyBlob: *mut DWORD, ) -> BOOL5455     pub fn CryptExportPKCS8Ex(
5456         psExportParams: CRYPT_PKCS8_EXPORT_PARAMS,
5457         dwKeySpec: DWORD,
5458         pvAuxInfo: *mut c_void,
5459         pbPrivateKeyBlob: *mut BYTE,
5460         pcbPrivateKeyBlob: *mut DWORD,
5461     ) -> BOOL;
CryptHashPublicKeyInfo( hCryptProv: HCRYPTPROV_LEGACY, Algid: ALG_ID, dwFlags: DWORD, dwCertEncodingType: DWORD, pInfo: PCERT_PUBLIC_KEY_INFO, pbComputedHash: *mut BYTE, pcbComputedHash: *mut DWORD, ) -> BOOL5462     pub fn CryptHashPublicKeyInfo(
5463         hCryptProv: HCRYPTPROV_LEGACY,
5464         Algid: ALG_ID,
5465         dwFlags: DWORD,
5466         dwCertEncodingType: DWORD,
5467         pInfo: PCERT_PUBLIC_KEY_INFO,
5468         pbComputedHash: *mut BYTE,
5469         pcbComputedHash: *mut DWORD,
5470     ) -> BOOL;
CertRDNValueToStrA( dwValueType: DWORD, pValue: PCERT_RDN_VALUE_BLOB, psz: LPSTR, csz: DWORD, ) -> DWORD5471     pub fn CertRDNValueToStrA(
5472         dwValueType: DWORD,
5473         pValue: PCERT_RDN_VALUE_BLOB,
5474         psz: LPSTR,
5475         csz: DWORD,
5476     ) -> DWORD;
CertRDNValueToStrW( dwValueType: DWORD, pValue: PCERT_RDN_VALUE_BLOB, psz: LPWSTR, csz: DWORD, ) -> DWORD5477     pub fn CertRDNValueToStrW(
5478         dwValueType: DWORD,
5479         pValue: PCERT_RDN_VALUE_BLOB,
5480         psz: LPWSTR,
5481         csz: DWORD,
5482     ) -> DWORD;
CertNameToStrA( dwCertEncodingType: DWORD, pName: PCERT_NAME_BLOB, dwStrType: DWORD, psz: LPSTR, csz: DWORD, ) -> DWORD5483     pub fn CertNameToStrA(
5484         dwCertEncodingType: DWORD,
5485         pName: PCERT_NAME_BLOB,
5486         dwStrType: DWORD,
5487         psz: LPSTR,
5488         csz: DWORD,
5489     ) -> DWORD;
CertNameToStrW( dwCertEncodingType: DWORD, pName: PCERT_NAME_BLOB, dwStrType: DWORD, psz: LPWSTR, csz: DWORD, ) -> DWORD5490     pub fn CertNameToStrW(
5491         dwCertEncodingType: DWORD,
5492         pName: PCERT_NAME_BLOB,
5493         dwStrType: DWORD,
5494         psz: LPWSTR,
5495         csz: DWORD,
5496     ) -> DWORD;
5497 }
5498 pub const CERT_SIMPLE_NAME_STR: DWORD = 1;
5499 pub const CERT_OID_NAME_STR: DWORD = 2;
5500 pub const CERT_X500_NAME_STR: DWORD = 3;
5501 pub const CERT_XML_NAME_STR: DWORD = 4;
5502 pub const CERT_NAME_STR_SEMICOLON_FLAG: DWORD = 0x40000000;
5503 pub const CERT_NAME_STR_NO_PLUS_FLAG: DWORD = 0x20000000;
5504 pub const CERT_NAME_STR_NO_QUOTING_FLAG: DWORD = 0x10000000;
5505 pub const CERT_NAME_STR_CRLF_FLAG: DWORD = 0x08000000;
5506 pub const CERT_NAME_STR_COMMA_FLAG: DWORD = 0x04000000;
5507 pub const CERT_NAME_STR_REVERSE_FLAG: DWORD = 0x02000000;
5508 pub const CERT_NAME_STR_FORWARD_FLAG: DWORD = 0x01000000;
5509 pub const CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG: DWORD = 0x00010000;
5510 pub const CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG: DWORD = 0x00020000;
5511 pub const CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG: DWORD = 0x00040000;
5512 pub const CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG: DWORD = 0x00080000;
5513 pub const CERT_NAME_STR_DISABLE_UTF8_DIR_STR_FLAG: DWORD = 0x00100000;
5514 pub const CERT_NAME_STR_ENABLE_PUNYCODE_FLAG: DWORD = 0x00200000;
5515 extern "system" {
CertStrToNameA( dwCertEncodingType: DWORD, pszX500: LPCSTR, dwStrType: DWORD, pvReserved: *mut c_void, pbEncoded: *mut BYTE, pcbEncoded: *mut DWORD, ppszError: *mut LPCSTR, ) -> BOOL5516     pub fn CertStrToNameA(
5517         dwCertEncodingType: DWORD,
5518         pszX500: LPCSTR,
5519         dwStrType: DWORD,
5520         pvReserved: *mut c_void,
5521         pbEncoded: *mut BYTE,
5522         pcbEncoded: *mut DWORD,
5523         ppszError: *mut LPCSTR,
5524     ) -> BOOL;
CertStrToNameW( dwCertEncodingType: DWORD, pszX500: LPCWSTR, dwStrType: DWORD, pvReserved: *mut c_void, pbEncoded: *mut BYTE, pcbEncoded: *mut DWORD, ppszError: *mut LPCWSTR, ) -> BOOL5525     pub fn CertStrToNameW(
5526         dwCertEncodingType: DWORD,
5527         pszX500: LPCWSTR,
5528         dwStrType: DWORD,
5529         pvReserved: *mut c_void,
5530         pbEncoded: *mut BYTE,
5531         pcbEncoded: *mut DWORD,
5532         ppszError: *mut LPCWSTR,
5533     ) -> BOOL;
CertGetNameStringA( pCertContext: PCCERT_CONTEXT, dwType: DWORD, dwFlags: DWORD, pvTypePara: *mut c_void, pszNameString: LPSTR, cchNameString: DWORD, ) -> DWORD5534     pub fn CertGetNameStringA(
5535         pCertContext: PCCERT_CONTEXT,
5536         dwType: DWORD,
5537         dwFlags: DWORD,
5538         pvTypePara: *mut c_void,
5539         pszNameString: LPSTR,
5540         cchNameString: DWORD,
5541     ) -> DWORD;
CertGetNameStringW( pCertContext: PCCERT_CONTEXT, dwType: DWORD, dwFlags: DWORD, pvTypePara: *mut c_void, pszNameString: LPWSTR, cchNameString: DWORD, ) -> DWORD5542     pub fn CertGetNameStringW(
5543         pCertContext: PCCERT_CONTEXT,
5544         dwType: DWORD,
5545         dwFlags: DWORD,
5546         pvTypePara: *mut c_void,
5547         pszNameString: LPWSTR,
5548         cchNameString: DWORD,
5549     ) -> DWORD;
5550 }
5551 pub const CERT_NAME_EMAIL_TYPE: DWORD = 1;
5552 pub const CERT_NAME_RDN_TYPE: DWORD = 2;
5553 pub const CERT_NAME_ATTR_TYPE: DWORD = 3;
5554 pub const CERT_NAME_SIMPLE_DISPLAY_TYPE: DWORD = 4;
5555 pub const CERT_NAME_FRIENDLY_DISPLAY_TYPE: DWORD = 5;
5556 pub const CERT_NAME_DNS_TYPE: DWORD = 6;
5557 pub const CERT_NAME_URL_TYPE: DWORD = 7;
5558 pub const CERT_NAME_UPN_TYPE: DWORD = 8;
5559 pub const CERT_NAME_ISSUER_FLAG: DWORD = 0x1;
5560 pub const CERT_NAME_DISABLE_IE4_UTF8_FLAG: DWORD = 0x00010000;
5561 pub const CERT_NAME_SEARCH_ALL_NAMES_FLAG: DWORD = 0x2;
5562 FN!{stdcall PFN_CRYPT_GET_SIGNER_CERTIFICATE(
5563     pvGetArg: *mut c_void,
5564     dwCertEncodingType: DWORD,
5565     pSignerId: PCERT_INFO,
5566     hMsgCertStore: HCERTSTORE,
5567 ) -> PCCERT_CONTEXT}
5568 STRUCT!{struct CRYPT_SIGN_MESSAGE_PARA {
5569     cbSize: DWORD,
5570     dwMsgEncodingType: DWORD,
5571     pSigningCert: PCCERT_CONTEXT,
5572     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
5573     pvHashAuxInfo: *mut c_void,
5574     cMsgCert: DWORD,
5575     rgpMsgCert: *mut PCCERT_CONTEXT,
5576     cMsgCrl: DWORD,
5577     rgpMsgCrl: *mut PCCRL_CONTEXT,
5578     cAuthAttr: DWORD,
5579     rgAuthAttr: PCRYPT_ATTRIBUTE,
5580     cUnauthAttr: DWORD,
5581     rgUnauthAttr: PCRYPT_ATTRIBUTE,
5582     dwFlags: DWORD,
5583     dwInnerContentType: DWORD,
5584     HashEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
5585     pvHashEncryptionAuxInfo: *mut c_void,
5586 }}
5587 pub type PCRYPT_SIGN_MESSAGE_PARA = *mut CRYPT_SIGN_MESSAGE_PARA;
5588 pub const CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG: DWORD = 0x00000001;
5589 pub const CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG: DWORD = 0x00000002;
5590 pub const CRYPT_MESSAGE_KEYID_SIGNER_FLAG: DWORD = 0x00000004;
5591 pub const CRYPT_MESSAGE_SILENT_KEYSET_FLAG: DWORD = 0x00000040;
5592 STRUCT!{struct CRYPT_VERIFY_MESSAGE_PARA {
5593     cbSize: DWORD,
5594     dwMsgAndCertEncodingType: DWORD,
5595     hCryptProv: HCRYPTPROV_LEGACY,
5596     pfnGetSignerCertificate: PFN_CRYPT_GET_SIGNER_CERTIFICATE,
5597     pvGetArg: *mut c_void,
5598     pStrongSignPara: PCCERT_STRONG_SIGN_PARA,
5599 }}
5600 pub type PCRYPT_VERIFY_MESSAGE_PARA = *mut CRYPT_VERIFY_MESSAGE_PARA;
5601 STRUCT!{struct CRYPT_ENCRYPT_MESSAGE_PARA {
5602     cbSize: DWORD,
5603     dwMsgEncodingType: DWORD,
5604     hCryptProv: HCRYPTPROV_LEGACY,
5605     ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
5606     pvEncryptionAuxInfo: *mut c_void,
5607     dwFlags: DWORD,
5608     dwInnerContentType: DWORD,
5609 }}
5610 pub type PCRYPT_ENCRYPT_MESSAGE_PARA = *mut CRYPT_DECRYPT_MESSAGE_PARA;
5611 pub const CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG: DWORD = 0x4;
5612 STRUCT!{struct CRYPT_DECRYPT_MESSAGE_PARA {
5613     cbSize: DWORD,
5614     dwMsgAndCertEncodingType: DWORD,
5615     cCertStore: DWORD,
5616     rghCertStore: *mut HCERTSTORE,
5617     dwFlags: DWORD,
5618 }}
5619 pub type PCRYPT_DECRYPT_MESSAGE_PARA = *mut CRYPT_DECRYPT_MESSAGE_PARA;
5620 STRUCT!{struct CRYPT_HASH_MESSAGE_PARA {
5621     cbSize: DWORD,
5622     dwMsgEncodingType: DWORD,
5623     hCryptProv: HCRYPTPROV_LEGACY,
5624     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
5625     pvHashAuxInfo: *mut c_void,
5626 }}
5627 pub type PCRYPT_HASH_MESSAGE_PARA = *mut CRYPT_HASH_MESSAGE_PARA;
5628 UNION!{union CRYPT_KEY_SIGN_MESSAGE_PARA_u {
5629     [usize; 1],
5630     hCryptProv hCryptProv_mut: HCRYPTPROV,
5631     hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
5632 }}
5633 STRUCT!{struct CRYPT_KEY_SIGN_MESSAGE_PARA {
5634     cbSize: DWORD,
5635     dwMsgAndCertEncodingType: DWORD,
5636     u: CRYPT_KEY_SIGN_MESSAGE_PARA_u,
5637     dwKeySpec: DWORD,
5638     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
5639     pvHashAuxInfo: *mut c_void,
5640     PubKeyAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
5641 }}
5642 pub type PCRYPT_KEY_SIGN_MESSAGE_PARA = *mut CRYPT_KEY_SIGN_MESSAGE_PARA;
5643 STRUCT!{struct CRYPT_KEY_VERIFY_MESSAGE_PARA {
5644     cbSize: DWORD,
5645     dwMsgEncodingType: DWORD,
5646     hCryptProv: HCRYPTPROV_LEGACY,
5647 }}
5648 pub type PCRYPT_KEY_VERIFY_MESSAGE_PARA = *mut CRYPT_KEY_VERIFY_MESSAGE_PARA;
5649 extern "system" {
CryptSignMessage( pSignPara: PCRYPT_SIGN_MESSAGE_PARA, fDetachedSignature: BOOL, cToBeSigned: DWORD, rgpbToBeSigned: *mut *const BYTE, rgcbToBeSigned: *mut DWORD, pbSignedBlob: *mut BYTE, pcbSignedBlob: *mut DWORD, ) -> BOOL5650     pub fn CryptSignMessage(
5651         pSignPara: PCRYPT_SIGN_MESSAGE_PARA,
5652         fDetachedSignature: BOOL,
5653         cToBeSigned: DWORD,
5654         rgpbToBeSigned: *mut *const BYTE,
5655         rgcbToBeSigned: *mut DWORD,
5656         pbSignedBlob: *mut BYTE,
5657         pcbSignedBlob: *mut DWORD,
5658     ) -> BOOL;
CryptVerifyMessageSignature( pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA, dwSignerIndex: DWORD, pbSignedBlob: *const BYTE, cbSignedBlob: DWORD, pbDecoded: *mut BYTE, pcbDecoded: *mut DWORD, ppSignerCert: *mut PCCERT_CONTEXT, ) -> BOOL5659     pub fn CryptVerifyMessageSignature(
5660         pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA,
5661         dwSignerIndex: DWORD,
5662         pbSignedBlob: *const BYTE,
5663         cbSignedBlob: DWORD,
5664         pbDecoded: *mut BYTE,
5665         pcbDecoded: *mut DWORD,
5666         ppSignerCert: *mut PCCERT_CONTEXT,
5667     ) -> BOOL;
CryptGetMessageSignerCount( dwMsgEncodingType: DWORD, pbSignedBlob: *const BYTE, cbSignedBlob: DWORD, ) -> LONG5668     pub fn CryptGetMessageSignerCount(
5669         dwMsgEncodingType: DWORD,
5670         pbSignedBlob: *const BYTE,
5671         cbSignedBlob: DWORD,
5672     ) -> LONG;
CryptGetMessageCertificates( dwMsgAndCertEncodingType: DWORD, hCryptProv: HCRYPTPROV_LEGACY, dwFlags: DWORD, pbSignedBlob: *const BYTE, cbSignedBlob: DWORD, ) -> HCERTSTORE5673     pub fn CryptGetMessageCertificates(
5674         dwMsgAndCertEncodingType: DWORD,
5675         hCryptProv: HCRYPTPROV_LEGACY,
5676         dwFlags: DWORD,
5677         pbSignedBlob: *const BYTE,
5678         cbSignedBlob: DWORD,
5679     ) -> HCERTSTORE;
CryptVerifyDetachedMessageSignature( pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA, dwSignerIndex: DWORD, pbDetachedSignBlob: *const BYTE, cbDetachedSignBlob: DWORD, cToBeSigned: DWORD, rgpbToBeSigned: *mut *const BYTE, rgcbToBeSigned: *mut DWORD, ppSignerCert: *mut PCCERT_CONTEXT, ) -> BOOL5680     pub fn CryptVerifyDetachedMessageSignature(
5681         pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA,
5682         dwSignerIndex: DWORD,
5683         pbDetachedSignBlob: *const BYTE,
5684         cbDetachedSignBlob: DWORD,
5685         cToBeSigned: DWORD,
5686         rgpbToBeSigned: *mut *const BYTE,
5687         rgcbToBeSigned: *mut DWORD,
5688         ppSignerCert: *mut PCCERT_CONTEXT,
5689     ) -> BOOL;
CryptEncryptMessage( pEncryptPara: PCRYPT_ENCRYPT_MESSAGE_PARA, cRecipientCert: DWORD, rgpRecipientCert: *mut PCCERT_CONTEXT, pbToBeEncrypted: *const BYTE, cbToBeEncrypted: DWORD, pbEncryptedBlob: *mut BYTE, pcbEncryptedBlob: *mut DWORD, ) -> BOOL5690     pub fn CryptEncryptMessage(
5691         pEncryptPara: PCRYPT_ENCRYPT_MESSAGE_PARA,
5692         cRecipientCert: DWORD,
5693         rgpRecipientCert: *mut PCCERT_CONTEXT,
5694         pbToBeEncrypted: *const BYTE,
5695         cbToBeEncrypted: DWORD,
5696         pbEncryptedBlob: *mut BYTE,
5697         pcbEncryptedBlob: *mut DWORD,
5698     ) -> BOOL;
CryptDecryptMessage( pDecryptPara: PCRYPT_DECRYPT_MESSAGE_PARA, pbEncryptedBlob: *const BYTE, cbEncryptedBlob: DWORD, pbDecrypted: *mut BYTE, pcbDecrypted: *mut DWORD, ppXchgCert: *mut PCCERT_CONTEXT, ) -> BOOL5699     pub fn CryptDecryptMessage(
5700         pDecryptPara: PCRYPT_DECRYPT_MESSAGE_PARA,
5701         pbEncryptedBlob: *const BYTE,
5702         cbEncryptedBlob: DWORD,
5703         pbDecrypted: *mut BYTE,
5704         pcbDecrypted: *mut DWORD,
5705         ppXchgCert: *mut PCCERT_CONTEXT,
5706     ) -> BOOL;
CryptSignAndEncryptMessage( pSignPara: PCRYPT_SIGN_MESSAGE_PARA, pEncryptPara: PCRYPT_ENCRYPT_MESSAGE_PARA, cRecipientCert: DWORD, rgpRecipientCert: *mut PCCERT_CONTEXT, pbToBeSignedAndEncrypted: *const BYTE, cbToBeSignedAndEncrypted: DWORD, pbSignedAndEncryptedBlob: *mut BYTE, pcbSignedAndEncryptedBlob: *mut DWORD, ) -> BOOL5707     pub fn CryptSignAndEncryptMessage(
5708         pSignPara: PCRYPT_SIGN_MESSAGE_PARA,
5709         pEncryptPara: PCRYPT_ENCRYPT_MESSAGE_PARA,
5710         cRecipientCert: DWORD,
5711         rgpRecipientCert: *mut PCCERT_CONTEXT,
5712         pbToBeSignedAndEncrypted: *const BYTE,
5713         cbToBeSignedAndEncrypted: DWORD,
5714         pbSignedAndEncryptedBlob: *mut BYTE,
5715         pcbSignedAndEncryptedBlob: *mut DWORD,
5716     ) -> BOOL;
CryptDecryptAndVerifyMessageSignature( pDecryptPara: PCRYPT_DECRYPT_MESSAGE_PARA, pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA, dwSignerIndex: DWORD, pbEncryptedBlob: *const BYTE, cbEncryptedBlob: DWORD, pbDecrypted: *mut BYTE, pcbDecrypted: *mut DWORD, ppXchgCert: *mut PCCERT_CONTEXT, ppSignerCert: *mut PCCERT_CONTEXT, ) -> BOOL5717     pub fn CryptDecryptAndVerifyMessageSignature(
5718         pDecryptPara: PCRYPT_DECRYPT_MESSAGE_PARA,
5719         pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA,
5720         dwSignerIndex: DWORD,
5721         pbEncryptedBlob: *const BYTE,
5722         cbEncryptedBlob: DWORD,
5723         pbDecrypted: *mut BYTE,
5724         pcbDecrypted: *mut DWORD,
5725         ppXchgCert: *mut PCCERT_CONTEXT,
5726         ppSignerCert: *mut PCCERT_CONTEXT,
5727     ) -> BOOL;
CryptDecodeMessage( dwMsgTypeFlags: DWORD, pDecryptPara: PCRYPT_DECRYPT_MESSAGE_PARA, pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA, dwSignerIndex: DWORD, pbEncodedBlob: *const BYTE, cbEncodedBlob: DWORD, dwPrevInnerContentType: DWORD, pdwMsgType: *mut DWORD, pdwInnerContentType: *mut DWORD, pbDecoded: *mut BYTE, pcbDecoded: *mut DWORD, ppXchgCert: *mut PCCERT_CONTEXT, ppSignerCert: *mut PCCERT_CONTEXT, ) -> BOOL5728     pub fn CryptDecodeMessage(
5729         dwMsgTypeFlags: DWORD,
5730         pDecryptPara: PCRYPT_DECRYPT_MESSAGE_PARA,
5731         pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA,
5732         dwSignerIndex: DWORD,
5733         pbEncodedBlob: *const BYTE,
5734         cbEncodedBlob: DWORD,
5735         dwPrevInnerContentType: DWORD,
5736         pdwMsgType: *mut DWORD,
5737         pdwInnerContentType: *mut DWORD,
5738         pbDecoded: *mut BYTE,
5739         pcbDecoded: *mut DWORD,
5740         ppXchgCert: *mut PCCERT_CONTEXT,
5741         ppSignerCert: *mut PCCERT_CONTEXT,
5742     ) -> BOOL;
CryptHashMessage( pHashPara: PCRYPT_HASH_MESSAGE_PARA, fDetachedHash: BOOL, cToBeHashed: DWORD, rgpbToBeHashed: *mut *const BYTE, rgcbToBeHashed: *mut DWORD, pbHashedBlob: *mut BYTE, pcbHashedBlob: *mut DWORD, pbComputedHash: *mut BYTE, pcbComputedHash: *mut DWORD, ) -> BOOL5743     pub fn CryptHashMessage(
5744         pHashPara: PCRYPT_HASH_MESSAGE_PARA,
5745         fDetachedHash: BOOL,
5746         cToBeHashed: DWORD,
5747         rgpbToBeHashed: *mut *const BYTE,
5748         rgcbToBeHashed: *mut DWORD,
5749         pbHashedBlob: *mut BYTE,
5750         pcbHashedBlob: *mut DWORD,
5751         pbComputedHash: *mut BYTE,
5752         pcbComputedHash: *mut DWORD,
5753     ) -> BOOL;
CryptVerifyMessageHash( pHashPara: PCRYPT_HASH_MESSAGE_PARA, pbHashedBlob: *mut BYTE, cbHashedBlob: DWORD, pbToBeHashed: *mut BYTE, pcbToBeHashed: *mut DWORD, pbComputedHash: *mut BYTE, pcbComputedHash: *mut DWORD, ) -> BOOL5754     pub fn CryptVerifyMessageHash(
5755         pHashPara: PCRYPT_HASH_MESSAGE_PARA,
5756         pbHashedBlob: *mut BYTE,
5757         cbHashedBlob: DWORD,
5758         pbToBeHashed: *mut BYTE,
5759         pcbToBeHashed: *mut DWORD,
5760         pbComputedHash: *mut BYTE,
5761         pcbComputedHash: *mut DWORD,
5762     ) -> BOOL;
CryptVerifyDetachedMessageHash( pHashPara: PCRYPT_HASH_MESSAGE_PARA, pbDetachedHashBlob: *mut BYTE, cbDetachedHashBlob: DWORD, cToBeHashed: DWORD, rgpbToBeHashed: *mut *const BYTE, rgcbToBeHashed: *mut DWORD, pbComputedHash: *mut BYTE, pcbComputedHash: *mut DWORD, ) -> BOOL5763     pub fn CryptVerifyDetachedMessageHash(
5764         pHashPara: PCRYPT_HASH_MESSAGE_PARA,
5765         pbDetachedHashBlob: *mut BYTE,
5766         cbDetachedHashBlob: DWORD,
5767         cToBeHashed: DWORD,
5768         rgpbToBeHashed: *mut *const BYTE,
5769         rgcbToBeHashed: *mut DWORD,
5770         pbComputedHash: *mut BYTE,
5771         pcbComputedHash: *mut DWORD,
5772     ) -> BOOL;
CryptSignMessageWithKey( pSignPara: PCRYPT_KEY_SIGN_MESSAGE_PARA, pbToBeSigned: *const BYTE, cbToBeSigned: DWORD, pbSignedBlob: *mut BYTE, pcbSignedBlob: *mut DWORD, ) -> BOOL5773     pub fn CryptSignMessageWithKey(
5774         pSignPara: PCRYPT_KEY_SIGN_MESSAGE_PARA,
5775         pbToBeSigned: *const BYTE,
5776         cbToBeSigned: DWORD,
5777         pbSignedBlob: *mut BYTE,
5778         pcbSignedBlob: *mut DWORD,
5779     ) -> BOOL;
CryptVerifyMessageSignatureWithKey( pVerifyPara: PCRYPT_KEY_VERIFY_MESSAGE_PARA, pPublicKeyInfo: PCERT_PUBLIC_KEY_INFO, pbSignedBlob: *const BYTE, cbSignedBlob: DWORD, pbDecoded: *mut BYTE, pcbDecoded: *mut DWORD, ) -> BOOL5780     pub fn CryptVerifyMessageSignatureWithKey(
5781         pVerifyPara: PCRYPT_KEY_VERIFY_MESSAGE_PARA,
5782         pPublicKeyInfo: PCERT_PUBLIC_KEY_INFO,
5783         pbSignedBlob: *const BYTE,
5784         cbSignedBlob: DWORD,
5785         pbDecoded: *mut BYTE,
5786         pcbDecoded: *mut DWORD,
5787     ) -> BOOL;
CertOpenSystemStoreA( hProv: HCRYPTPROV_LEGACY, szSubsystemProtocol: LPCSTR, ) -> HCERTSTORE5788     pub fn CertOpenSystemStoreA(
5789         hProv: HCRYPTPROV_LEGACY,
5790         szSubsystemProtocol: LPCSTR,
5791     ) -> HCERTSTORE;
CertOpenSystemStoreW( hProv: HCRYPTPROV_LEGACY, szSubsystemProtocol: LPCWSTR, ) -> HCERTSTORE5792     pub fn CertOpenSystemStoreW(
5793         hProv: HCRYPTPROV_LEGACY,
5794         szSubsystemProtocol: LPCWSTR,
5795     ) -> HCERTSTORE;
CertAddEncodedCertificateToSystemStoreA( szCertStoreName: LPCSTR, pbCertEncoded: *const BYTE, cbCertEncoded: DWORD, ) -> BOOL5796     pub fn CertAddEncodedCertificateToSystemStoreA(
5797         szCertStoreName: LPCSTR,
5798         pbCertEncoded: *const BYTE,
5799         cbCertEncoded: DWORD,
5800     ) -> BOOL;
CertAddEncodedCertificateToSystemStoreW( szCertStoreName: LPCWSTR, pbCertEncoded: *const BYTE, cbCertEncoded: DWORD, ) -> BOOL5801     pub fn CertAddEncodedCertificateToSystemStoreW(
5802         szCertStoreName: LPCWSTR,
5803         pbCertEncoded: *const BYTE,
5804         cbCertEncoded: DWORD,
5805     ) -> BOOL;
5806 }
5807 STRUCT!{struct CERT_CHAIN {
5808     cCerts: DWORD,
5809     certs: PCERT_BLOB,
5810     keyLocatorInfo: CRYPT_KEY_PROV_INFO,
5811 }}
5812 pub type PCERT_CHAIN = *mut CERT_CHAIN;
5813 extern "system" {
FindCertsByIssuer( pCertChains: PCERT_CHAIN, pcbCertChains: *mut DWORD, pcCertChains: *mut DWORD, pbEncodedIssuerName: *mut BYTE, cbEncodedIssuerName: DWORD, pwszPurpose: LPCWSTR, dwKeySpec: DWORD, ) -> HRESULT5814     pub fn FindCertsByIssuer(
5815         pCertChains: PCERT_CHAIN,
5816         pcbCertChains: *mut DWORD,
5817         pcCertChains: *mut DWORD,
5818         pbEncodedIssuerName: *mut BYTE,
5819         cbEncodedIssuerName: DWORD,
5820         pwszPurpose: LPCWSTR,
5821         dwKeySpec: DWORD,
5822     ) -> HRESULT;
CryptQueryObject( dwObjectType: DWORD, pvObject: *const c_void, dwExpectedContentTypeFlags: DWORD, dwExpectedFormatTypeFlags: DWORD, dwFlags: DWORD, pdwMsgAndCertEncodingType: *mut DWORD, pdwContentType: *mut DWORD, pdwFormatType: *mut DWORD, phCertStore: *mut HCERTSTORE, phMsg: *mut HCRYPTMSG, ppvContext: *mut *const c_void, ) -> BOOL5823     pub fn CryptQueryObject(
5824         dwObjectType: DWORD,
5825         pvObject: *const c_void,
5826         dwExpectedContentTypeFlags: DWORD,
5827         dwExpectedFormatTypeFlags: DWORD,
5828         dwFlags: DWORD,
5829         pdwMsgAndCertEncodingType: *mut DWORD,
5830         pdwContentType: *mut DWORD,
5831         pdwFormatType: *mut DWORD,
5832         phCertStore: *mut HCERTSTORE,
5833         phMsg: *mut HCRYPTMSG,
5834         ppvContext: *mut *const c_void,
5835     ) -> BOOL;
5836 }
5837 pub const CERT_QUERY_OBJECT_FILE: DWORD = 0x00000001;
5838 pub const CERT_QUERY_OBJECT_BLOB: DWORD = 0x00000002;
5839 pub const CERT_QUERY_CONTENT_CERT: DWORD = 1;
5840 pub const CERT_QUERY_CONTENT_CTL: DWORD = 2;
5841 pub const CERT_QUERY_CONTENT_CRL: DWORD = 3;
5842 pub const CERT_QUERY_CONTENT_SERIALIZED_STORE: DWORD = 4;
5843 pub const CERT_QUERY_CONTENT_SERIALIZED_CERT: DWORD = 5;
5844 pub const CERT_QUERY_CONTENT_SERIALIZED_CTL: DWORD = 6;
5845 pub const CERT_QUERY_CONTENT_SERIALIZED_CRL: DWORD = 7;
5846 pub const CERT_QUERY_CONTENT_PKCS7_SIGNED: DWORD = 8;
5847 pub const CERT_QUERY_CONTENT_PKCS7_UNSIGNED: DWORD = 9;
5848 pub const CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED: DWORD = 10;
5849 pub const CERT_QUERY_CONTENT_PKCS10: DWORD = 11;
5850 pub const CERT_QUERY_CONTENT_PFX: DWORD = 12;
5851 pub const CERT_QUERY_CONTENT_CERT_PAIR: DWORD = 13;
5852 pub const CERT_QUERY_CONTENT_PFX_AND_LOAD: DWORD = 14;
5853 pub const CERT_QUERY_CONTENT_FLAG_CERT: DWORD = 1 << CERT_QUERY_CONTENT_CERT;
5854 pub const CERT_QUERY_CONTENT_FLAG_CTL: DWORD = 1 << CERT_QUERY_CONTENT_CTL;
5855 pub const CERT_QUERY_CONTENT_FLAG_CRL: DWORD = 1 << CERT_QUERY_CONTENT_CRL;
5856 pub const CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE: DWORD
5857     = 1<< CERT_QUERY_CONTENT_SERIALIZED_STORE;
5858 pub const CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT: DWORD = 1 << CERT_QUERY_CONTENT_SERIALIZED_CERT;
5859 pub const CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL: DWORD = 1 << CERT_QUERY_CONTENT_SERIALIZED_CTL;
5860 pub const CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL: DWORD = 1 << CERT_QUERY_CONTENT_SERIALIZED_CRL;
5861 pub const CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED: DWORD = 1 << CERT_QUERY_CONTENT_PKCS7_SIGNED;
5862 pub const CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED: DWORD = 1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED;
5863 pub const CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED: DWORD
5864     = 1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED;
5865 pub const CERT_QUERY_CONTENT_FLAG_PKCS10: DWORD = 1 << CERT_QUERY_CONTENT_PKCS10;
5866 pub const CERT_QUERY_CONTENT_FLAG_PFX: DWORD = 1 << CERT_QUERY_CONTENT_PFX;
5867 pub const CERT_QUERY_CONTENT_FLAG_CERT_PAIR: DWORD = 1 << CERT_QUERY_CONTENT_CERT_PAIR;
5868 pub const CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD: DWORD = 1 << CERT_QUERY_CONTENT_PFX_AND_LOAD;
5869 pub const CERT_QUERY_CONTENT_FLAG_ALL: DWORD = CERT_QUERY_CONTENT_FLAG_CERT
5870     | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL
5871     | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
5872     | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
5873     | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED
5874     | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10
5875     | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR;
5876 pub const CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT: DWORD = CERT_QUERY_CONTENT_FLAG_CERT
5877     | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
5878     | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED;
5879 pub const CERT_QUERY_FORMAT_BINARY: DWORD = 1;
5880 pub const CERT_QUERY_FORMAT_BASE64_ENCODED: DWORD = 2;
5881 pub const CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED: DWORD = 3;
5882 pub const CERT_QUERY_FORMAT_FLAG_BINARY: DWORD = 1 << CERT_QUERY_FORMAT_BINARY;
5883 pub const CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED: DWORD = 1 << CERT_QUERY_FORMAT_BASE64_ENCODED;
5884 pub const CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED: DWORD
5885     = 1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED;
5886 pub const CERT_QUERY_FORMAT_FLAG_ALL: DWORD = CERT_QUERY_FORMAT_FLAG_BINARY
5887     | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED;
5888 extern "system" {
CryptMemAlloc( cbSize: ULONG, ) -> LPVOID5889     pub fn CryptMemAlloc(
5890         cbSize: ULONG,
5891     ) -> LPVOID;
CryptMemRealloc( pv: LPVOID, cbSize: ULONG, ) -> LPVOID5892     pub fn CryptMemRealloc(
5893         pv: LPVOID,
5894         cbSize: ULONG,
5895     ) -> LPVOID;
CryptMemFree( pv: LPVOID, )5896     pub fn CryptMemFree(
5897         pv: LPVOID,
5898     );
5899 }
5900 pub type HCRYPTASYNC = HANDLE;
5901 pub type PHCRYPTASYNC = *mut HANDLE;
5902 FN!{stdcall PFN_CRYPT_ASYNC_PARAM_FREE_FUNC(
5903     pszParamOid: LPSTR,
5904     pvParam: LPVOID,
5905 ) -> ()}
5906 extern "system" {
CryptCreateAsyncHandle( dwFlags: DWORD, phAsync: PHCRYPTASYNC, ) -> BOOL5907     pub fn CryptCreateAsyncHandle(
5908         dwFlags: DWORD,
5909         phAsync: PHCRYPTASYNC,
5910     ) -> BOOL;
CryptSetAsyncParam( hAsync: HCRYPTASYNC, pszParamOid: LPSTR, pvParam: LPVOID, pfnFree: PFN_CRYPT_ASYNC_PARAM_FREE_FUNC, ) -> BOOL5911     pub fn CryptSetAsyncParam(
5912         hAsync: HCRYPTASYNC,
5913         pszParamOid: LPSTR,
5914         pvParam: LPVOID,
5915         pfnFree: PFN_CRYPT_ASYNC_PARAM_FREE_FUNC,
5916     ) -> BOOL;
CryptGetAsyncParam( hAsync: HCRYPTASYNC, pszParamOid: LPSTR, ppvParam: *mut LPVOID, ppfnFree: *mut PFN_CRYPT_ASYNC_PARAM_FREE_FUNC, ) -> BOOL5917     pub fn CryptGetAsyncParam(
5918         hAsync: HCRYPTASYNC,
5919         pszParamOid: LPSTR,
5920         ppvParam: *mut LPVOID,
5921         ppfnFree: *mut PFN_CRYPT_ASYNC_PARAM_FREE_FUNC,
5922     ) -> BOOL;
CryptCloseAsyncHandle( hAsync: HCRYPTASYNC, ) -> BOOL5923     pub fn CryptCloseAsyncHandle(
5924         hAsync: HCRYPTASYNC,
5925     ) -> BOOL;
5926 }
5927 STRUCT!{struct CRYPT_BLOB_ARRAY {
5928     cBlob: DWORD,
5929     rgBlob: PCRYPT_DATA_BLOB,
5930 }}
5931 pub type PCRYPT_BLOB_ARRAY = *mut CRYPT_BLOB_ARRAY;
5932 STRUCT!{struct CRYPT_CREDENTIALS {
5933     cbSize: DWORD,
5934     pszCredentialsOid: LPCSTR,
5935     pvCredentials: LPVOID,
5936 }}
5937 pub type PCRYPT_CREDENTIALS = *mut CRYPT_CREDENTIALS;
5938 pub const CREDENTIAL_OID_PASSWORD_CREDENTIALS_A: LPCSTR = 1 as LPCSTR;
5939 pub const CREDENTIAL_OID_PASSWORD_CREDENTIALS_W: LPCSTR = 2 as LPCSTR;
5940 STRUCT!{struct CRYPT_PASSWORD_CREDENTIALSA {
5941     cbSize: DWORD,
5942     pszUsername: LPSTR,
5943     pszPassword: LPSTR,
5944 }}
5945 pub type PCRYPT_PASSWORD_CREDENTIALSA = *mut CRYPT_PASSWORD_CREDENTIALSA;
5946 STRUCT!{struct CRYPT_PASSWORD_CREDENTIALSW {
5947     cbSize: DWORD,
5948     pszUsername: LPWSTR,
5949     pszPassword: LPWSTR,
5950 }}
5951 pub type PCRYPT_PASSWORD_CREDENTIALSW = *mut CRYPT_PASSWORD_CREDENTIALSW;
5952 pub const SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC: &'static str = "SchemeDllRetrieveEncodedObject";
5953 pub const SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC: &'static str
5954     = "SchemeDllRetrieveEncodedObjectW";
5955 FN!{stdcall PFN_FREE_ENCODED_OBJECT_FUNC(
5956     pszObjectOid: LPCSTR,
5957     pObject: PCRYPT_BLOB_ARRAY,
5958     pvFreeContext: LPVOID,
5959 ) -> ()}
5960 pub const CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC: &'static str = "ContextDllCreateObjectContext";
5961 pub const CONTEXT_OID_CERTIFICATE: LPCSTR = 1 as LPCSTR;
5962 pub const CONTEXT_OID_CRL: LPCSTR = 2 as LPCSTR;
5963 pub const CONTEXT_OID_CTL: LPCSTR = 3 as LPCSTR;
5964 pub const CONTEXT_OID_PKCS7: LPCSTR = 4 as LPCSTR;
5965 pub const CONTEXT_OID_CAPI2_ANY: LPCSTR = 5 as LPCSTR;
5966 pub const CONTEXT_OID_OCSP_RESP: LPCSTR = 6 as LPCSTR;
5967 pub const CRYPT_RETRIEVE_MULTIPLE_OBJECTS: DWORD = 0x00000001;
5968 pub const CRYPT_CACHE_ONLY_RETRIEVAL: DWORD = 0x00000002;
5969 pub const CRYPT_WIRE_ONLY_RETRIEVAL: DWORD = 0x00000004;
5970 pub const CRYPT_DONT_CACHE_RESULT: DWORD = 0x00000008;
5971 pub const CRYPT_ASYNC_RETRIEVAL: DWORD = 0x00000010;
5972 pub const CRYPT_STICKY_CACHE_RETRIEVAL: DWORD = 0x00001000;
5973 pub const CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL: DWORD = 0x00002000;
5974 pub const CRYPT_OFFLINE_CHECK_RETRIEVAL: DWORD = 0x00004000;
5975 pub const CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE: DWORD = 0x00008000;
5976 pub const CRYPT_LDAP_SIGN_RETRIEVAL: DWORD = 0x00010000;
5977 pub const CRYPT_NO_AUTH_RETRIEVAL: DWORD = 0x00020000;
5978 pub const CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL: DWORD = 0x00040000;
5979 pub const CRYPT_AIA_RETRIEVAL: DWORD = 0x00080000;
5980 pub const CRYPT_HTTP_POST_RETRIEVAL: DWORD = 0x00100000;
5981 pub const CRYPT_PROXY_CACHE_RETRIEVAL: DWORD = 0x00200000;
5982 pub const CRYPT_NOT_MODIFIED_RETRIEVAL: DWORD = 0x00400000;
5983 pub const CRYPT_ENABLE_SSL_REVOCATION_RETRIEVAL: DWORD = 0x00800000;
5984 pub const CRYPT_RANDOM_QUERY_STRING_RETRIEVAL: DWORD = 0x04000000;
5985 pub const CRYPT_ENABLE_FILE_RETRIEVAL: DWORD = 0x08000000;
5986 pub const CRYPT_CREATE_NEW_FLUSH_ENTRY: DWORD = 0x10000000;
5987 pub const CRYPT_VERIFY_CONTEXT_SIGNATURE: DWORD = 0x00000020;
5988 pub const CRYPT_VERIFY_DATA_HASH: DWORD = 0x00000040;
5989 pub const CRYPT_KEEP_TIME_VALID: DWORD = 0x00000080;
5990 pub const CRYPT_DONT_VERIFY_SIGNATURE: DWORD = 0x00000100;
5991 pub const CRYPT_DONT_CHECK_TIME_VALIDITY: DWORD = 0x00000200;
5992 pub const CRYPT_CHECK_FRESHNESS_TIME_VALIDITY: DWORD = 0x00000400;
5993 pub const CRYPT_ACCUMULATIVE_TIMEOUT: DWORD = 0x00000800;
5994 pub const CRYPT_OCSP_ONLY_RETRIEVAL: DWORD = 0x01000000;
5995 pub const CRYPT_NO_OCSP_FAILOVER_TO_CRL_RETRIEVAL: DWORD = 0x02000000;
5996 STRUCT!{struct CRYPTNET_URL_CACHE_PRE_FETCH_INFO {
5997     cbSize: DWORD,
5998     dwObjectType: DWORD,
5999     dwError: DWORD,
6000     dwReserved: DWORD,
6001     ThisUpdateTime: FILETIME,
6002     NextUpdateTime: FILETIME,
6003     PublishTime: FILETIME,
6004 }}
6005 pub type PCRYPTNET_URL_CACHE_PRE_FETCH_INFO = *mut CRYPTNET_URL_CACHE_PRE_FETCH_INFO;
6006 pub const CRYPTNET_URL_CACHE_PRE_FETCH_NONE: DWORD = 0;
6007 pub const CRYPTNET_URL_CACHE_PRE_FETCH_BLOB: DWORD = 1;
6008 pub const CRYPTNET_URL_CACHE_PRE_FETCH_CRL: DWORD = 2;
6009 pub const CRYPTNET_URL_CACHE_PRE_FETCH_OCSP: DWORD = 3;
6010 pub const CRYPTNET_URL_CACHE_PRE_FETCH_AUTOROOT_CAB: DWORD = 5;
6011 pub const CRYPTNET_URL_CACHE_PRE_FETCH_DISALLOWED_CERT_CAB: DWORD = 6;
6012 pub const CRYPTNET_URL_CACHE_PRE_FETCH_PIN_RULES_CAB: DWORD = 7;
6013 STRUCT!{struct CRYPTNET_URL_CACHE_FLUSH_INFO {
6014     cbSize: DWORD,
6015     dwExemptSeconds: DWORD,
6016     ExpireTime: FILETIME,
6017 }}
6018 pub type PCRYPTNET_URL_CACHE_FLUSH_INFO = *mut CRYPTNET_URL_CACHE_FLUSH_INFO;
6019 pub const CRYPTNET_URL_CACHE_DEFAULT_FLUSH: DWORD = 0;
6020 pub const CRYPTNET_URL_CACHE_DISABLE_FLUSH: DWORD = 0xFFFFFFFF;
6021 STRUCT!{struct CRYPTNET_URL_CACHE_RESPONSE_INFO {
6022     cbSize: DWORD,
6023     wResponseType: WORD,
6024     wResponseFlags: WORD,
6025     LastModifiedTime: FILETIME,
6026     dwMaxAge: DWORD,
6027     pwszETag: LPCWSTR,
6028     dwProxyId: DWORD,
6029 }}
6030 pub type PCRYPTNET_URL_CACHE_RESPONSE_INFO = *mut CRYPTNET_URL_CACHE_RESPONSE_INFO;
6031 pub const CRYPTNET_URL_CACHE_RESPONSE_NONE: WORD = 0;
6032 pub const CRYPTNET_URL_CACHE_RESPONSE_HTTP: WORD = 1;
6033 pub const CRYPTNET_URL_CACHE_RESPONSE_VALIDATED: WORD = 0x8000;
6034 STRUCT!{struct CRYPT_RETRIEVE_AUX_INFO {
6035     cbSize: DWORD,
6036     pLastSyncTime: *mut FILETIME,
6037     dwMaxUrlRetrievalByteCount: DWORD,
6038     pPreFetchInfo: PCRYPTNET_URL_CACHE_PRE_FETCH_INFO,
6039     pFlushInfo: PCRYPTNET_URL_CACHE_FLUSH_INFO,
6040     ppResponseInfo: *mut PCRYPTNET_URL_CACHE_RESPONSE_INFO,
6041     pwszCacheFileNamePrefix: LPWSTR,
6042     pftCacheResync: LPFILETIME,
6043     fProxyCacheRetrieval: BOOL,
6044     dwHttpStatusCode: DWORD,
6045     ppwszErrorResponseHeaders: *mut LPWSTR,
6046     ppErrorContentBlob: *mut PCRYPT_DATA_BLOB,
6047 }}
6048 pub type PCRYPT_RETRIEVE_AUX_INFO = *mut CRYPT_RETRIEVE_AUX_INFO;
6049 pub const CRYPT_RETRIEVE_MAX_ERROR_CONTENT_LENGTH: DWORD = 0x1000;
6050 extern "system" {
CryptRetrieveObjectByUrlA( pszUrl: LPCSTR, pszObjectOid: LPCSTR, dwRetrievalFlags: DWORD, dwTimeout: DWORD, ppvObject: *mut LPVOID, hAsyncRetrieve: HCRYPTASYNC, pCredentials: PCRYPT_CREDENTIALS, pvVerify: LPVOID, pAuxInfo: PCRYPT_RETRIEVE_AUX_INFO, ) -> BOOL6051     pub fn CryptRetrieveObjectByUrlA(
6052         pszUrl: LPCSTR,
6053         pszObjectOid: LPCSTR,
6054         dwRetrievalFlags: DWORD,
6055         dwTimeout: DWORD,
6056         ppvObject: *mut LPVOID,
6057         hAsyncRetrieve: HCRYPTASYNC,
6058         pCredentials: PCRYPT_CREDENTIALS,
6059         pvVerify: LPVOID,
6060         pAuxInfo: PCRYPT_RETRIEVE_AUX_INFO,
6061     ) -> BOOL;
CryptRetrieveObjectByUrlW( pszUrl: LPCWSTR, pszObjectOid: LPCSTR, dwRetrievalFlags: DWORD, dwTimeout: DWORD, ppvObject: *mut LPVOID, hAsyncRetrieve: HCRYPTASYNC, pCredentials: PCRYPT_CREDENTIALS, pvVerify: LPVOID, pAuxInfo: PCRYPT_RETRIEVE_AUX_INFO, ) -> BOOL6062     pub fn CryptRetrieveObjectByUrlW(
6063         pszUrl: LPCWSTR,
6064         pszObjectOid: LPCSTR,
6065         dwRetrievalFlags: DWORD,
6066         dwTimeout: DWORD,
6067         ppvObject: *mut LPVOID,
6068         hAsyncRetrieve: HCRYPTASYNC,
6069         pCredentials: PCRYPT_CREDENTIALS,
6070         pvVerify: LPVOID,
6071         pAuxInfo: PCRYPT_RETRIEVE_AUX_INFO,
6072     ) -> BOOL;
6073 }
6074 FN!{stdcall PFN_CRYPT_CANCEL_RETRIEVAL(
6075     dwFlags: DWORD,
6076     pvArg: *mut c_void,
6077 ) -> BOOL}
6078 extern "system" {
CryptInstallCancelRetrieval( pfnCancel: PFN_CRYPT_CANCEL_RETRIEVAL, pvArg: *const c_void, dwFlags: DWORD, pvReserved: *mut c_void, ) -> BOOL6079     pub fn CryptInstallCancelRetrieval(
6080         pfnCancel: PFN_CRYPT_CANCEL_RETRIEVAL,
6081         pvArg: *const c_void,
6082         dwFlags: DWORD,
6083         pvReserved: *mut c_void,
6084     ) -> BOOL;
CryptUninstallCancelRetrieval( dwFlags: DWORD, pvReserved: *mut c_void, ) -> BOOL6085     pub fn CryptUninstallCancelRetrieval(
6086         dwFlags: DWORD,
6087         pvReserved: *mut c_void,
6088     ) -> BOOL;
CryptCancelAsyncRetrieval( hAsyncRetrieval: HCRYPTASYNC, ) -> BOOL6089     pub fn CryptCancelAsyncRetrieval(
6090         hAsyncRetrieval: HCRYPTASYNC,
6091     ) -> BOOL;
6092 }
6093 pub const CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION: LPCSTR = 1 as LPCSTR;
6094 FN!{stdcall PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC(
6095     pvCompletion: LPVOID,
6096     dwCompletionCode: DWORD,
6097     pszUrl: LPCSTR,
6098     pszObjectOid: LPSTR,
6099     pvObject: LPVOID,
6100 ) -> ()}
6101 STRUCT!{struct CRYPT_ASYNC_RETRIEVAL_COMPLETION {
6102     pfnCompletion: PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC,
6103     pvCompletion: LPVOID,
6104 }}
6105 pub type PCRYPT_ASYNC_RETRIEVAL_COMPLETION = *mut CRYPT_ASYNC_RETRIEVAL_COMPLETION;
6106 pub const CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL: LPCSTR = 2 as LPCSTR;
6107 FN!{stdcall PFN_CANCEL_ASYNC_RETRIEVAL_FUNC(
6108     hAsyncRetrieve: HCRYPTASYNC,
6109 ) -> BOOL}
6110 pub const CRYPT_GET_URL_FROM_PROPERTY: DWORD = 0x00000001;
6111 pub const CRYPT_GET_URL_FROM_EXTENSION: DWORD = 0x00000002;
6112 pub const CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE: DWORD = 0x00000004;
6113 pub const CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE: DWORD = 0x00000008;
6114 STRUCT!{struct CRYPT_URL_ARRAY {
6115     cUrl: DWORD,
6116     rgwszUrl: *mut LPWSTR,
6117 }}
6118 pub type PCRYPT_URL_ARRAY = *mut CRYPT_URL_ARRAY;
6119 STRUCT!{struct CRYPT_URL_INFO {
6120     cbSize: DWORD,
6121     dwSyncDeltaTime: DWORD,
6122     cGroup: DWORD,
6123     rgcGroupEntry: *mut DWORD,
6124 }}
6125 pub type PCRYPT_URL_INFO = *mut CRYPT_URL_INFO;
6126 extern "system" {
CryptGetObjectUrl( pszUrlOid: LPCSTR, pvPara: LPVOID, dwFlags: DWORD, pUrlArray: PCRYPT_URL_ARRAY, pcbUrlArray: *mut DWORD, pUrlInfo: PCRYPT_URL_INFO, pcbUrlInfo: *mut DWORD, pvReserved: LPVOID, ) -> BOOL6127     pub fn CryptGetObjectUrl(
6128         pszUrlOid: LPCSTR,
6129         pvPara: LPVOID,
6130         dwFlags: DWORD,
6131         pUrlArray: PCRYPT_URL_ARRAY,
6132         pcbUrlArray: *mut DWORD,
6133         pUrlInfo: PCRYPT_URL_INFO,
6134         pcbUrlInfo: *mut DWORD,
6135         pvReserved: LPVOID,
6136     ) -> BOOL;
6137 }
6138 pub const URL_OID_GET_OBJECT_URL_FUNC: &'static str = "UrlDllGetObjectUrl";
6139 pub const URL_OID_CERTIFICATE_ISSUER: LPCSTR = 1 as LPCSTR;
6140 pub const URL_OID_CERTIFICATE_CRL_DIST_POINT: LPCSTR = 2 as LPCSTR;
6141 pub const URL_OID_CTL_ISSUER: LPCSTR = 3 as LPCSTR;
6142 pub const URL_OID_CTL_NEXT_UPDATE: LPCSTR = 4 as LPCSTR;
6143 pub const URL_OID_CRL_ISSUER: LPCSTR = 5 as LPCSTR;
6144 pub const URL_OID_CERTIFICATE_FRESHEST_CRL: LPCSTR = 6 as LPCSTR;
6145 pub const URL_OID_CRL_FRESHEST_CRL: LPCSTR = 7 as LPCSTR;
6146 pub const URL_OID_CROSS_CERT_DIST_POINT: LPCSTR = 8 as LPCSTR;
6147 pub const URL_OID_CERTIFICATE_OCSP: LPCSTR = 9 as LPCSTR;
6148 pub const URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT: LPCSTR = 10 as LPCSTR;
6149 pub const URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP: LPCSTR = 11 as LPCSTR;
6150 pub const URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS: LPCSTR = 12 as LPCSTR;
6151 pub const URL_OID_CERTIFICATE_ONLY_OCSP: LPCSTR = 13 as LPCSTR;
6152 STRUCT!{struct CERT_CRL_CONTEXT_PAIR {
6153     pCertContext: PCCERT_CONTEXT,
6154     pCrlContext: PCCRL_CONTEXT,
6155 }}
6156 pub type PCERT_CRL_CONTEXT_PAIR = *mut CERT_CRL_CONTEXT_PAIR;
6157 pub type PCCERT_CRL_CONTEXT_PAIR = *const CERT_CRL_CONTEXT_PAIR;
6158 STRUCT!{struct CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO {
6159     cbSize: DWORD,
6160     iDeltaCrlIndicator: c_int,
6161     pftCacheResync: LPFILETIME,
6162     pLastSyncTime: LPFILETIME,
6163     pMaxAgeTime: LPFILETIME,
6164     pChainPara: PCERT_REVOCATION_CHAIN_PARA,
6165     pDeltaCrlIndicator: PCRYPT_INTEGER_BLOB,
6166 }}
6167 pub type PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO = *mut CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO;
6168 extern "system" {
CryptGetTimeValidObject( pszTimeValidOid: LPCSTR, pvPara: LPVOID, pIssuer: PCCERT_CONTEXT, pftValidFor: LPFILETIME, dwFlags: DWORD, dwTimeout: DWORD, ppvObject: *mut LPVOID, pCredentials: PCRYPT_CREDENTIALS, pExtraInfo: PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO, ) -> BOOL6169     pub fn CryptGetTimeValidObject(
6170         pszTimeValidOid: LPCSTR,
6171         pvPara: LPVOID,
6172         pIssuer: PCCERT_CONTEXT,
6173         pftValidFor: LPFILETIME,
6174         dwFlags: DWORD,
6175         dwTimeout: DWORD,
6176         ppvObject: *mut LPVOID,
6177         pCredentials: PCRYPT_CREDENTIALS,
6178         pExtraInfo: PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO,
6179     ) -> BOOL;
6180 }
6181 pub const TIME_VALID_OID_GET_OBJECT_FUNC: &'static str = "TimeValidDllGetObject";
6182 pub const TIME_VALID_OID_GET_CTL: LPCSTR = 1 as LPCSTR;
6183 pub const TIME_VALID_OID_GET_CRL: LPCSTR = 2 as LPCSTR;
6184 pub const TIME_VALID_OID_GET_CRL_FROM_CERT: LPCSTR = 3 as LPCSTR;
6185 pub const TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT: LPCSTR = 4 as LPCSTR;
6186 pub const TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL: LPCSTR = 5 as LPCSTR;
6187 extern "system" {
CryptFlushTimeValidObject( pszFlushTimeValidOid: LPCSTR, pvPara: LPVOID, pIssuer: PCCERT_CONTEXT, dwFlags: DWORD, pvReserved: LPVOID, ) -> BOOL6188     pub fn CryptFlushTimeValidObject(
6189         pszFlushTimeValidOid: LPCSTR,
6190         pvPara: LPVOID,
6191         pIssuer: PCCERT_CONTEXT,
6192         dwFlags: DWORD,
6193         pvReserved: LPVOID,
6194     ) -> BOOL;
6195 }
6196 pub const TIME_VALID_OID_FLUSH_OBJECT_FUNC: &'static str = "TimeValidDllFlushObject";
6197 pub const TIME_VALID_OID_FLUSH_CTL: LPCSTR = 1 as LPCSTR;
6198 pub const TIME_VALID_OID_FLUSH_CRL: LPCSTR = 2 as LPCSTR;
6199 pub const TIME_VALID_OID_FLUSH_CRL_FROM_CERT: LPCSTR = 3 as LPCSTR;
6200 pub const TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT: LPCSTR = 4 as LPCSTR;
6201 pub const TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL: LPCSTR = 5 as LPCSTR;
6202 extern "system" {
CertCreateSelfSignCertificate( hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, pSubjectIssuerBlob: PCERT_NAME_BLOB, dwFlags: DWORD, pKeyProvInfo: PCRYPT_KEY_PROV_INFO, pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER, pStartTime: PSYSTEMTIME, pEndTime: PSYSTEMTIME, pExtensions: PCERT_EXTENSIONS, ) -> PCCERT_CONTEXT6203     pub fn CertCreateSelfSignCertificate(
6204         hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
6205         pSubjectIssuerBlob: PCERT_NAME_BLOB,
6206         dwFlags: DWORD,
6207         pKeyProvInfo: PCRYPT_KEY_PROV_INFO,
6208         pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
6209         pStartTime: PSYSTEMTIME,
6210         pEndTime: PSYSTEMTIME,
6211         pExtensions: PCERT_EXTENSIONS,
6212     ) -> PCCERT_CONTEXT;
6213 }
6214 pub const CERT_CREATE_SELFSIGN_NO_SIGN: DWORD = 1;
6215 pub const CERT_CREATE_SELFSIGN_NO_KEY_INFO: DWORD = 2;
6216 extern "system" {
CryptGetKeyIdentifierProperty( pKeyIdentifier: *const CRYPT_HASH_BLOB, dwPropId: DWORD, dwFlags: DWORD, pwszComputerName: LPCWSTR, pvReserved: *mut c_void, pvData: *mut c_void, pcbData: *mut DWORD, ) -> BOOL6217     pub fn CryptGetKeyIdentifierProperty(
6218         pKeyIdentifier: *const CRYPT_HASH_BLOB,
6219         dwPropId: DWORD,
6220         dwFlags: DWORD,
6221         pwszComputerName: LPCWSTR,
6222         pvReserved: *mut c_void,
6223         pvData: *mut c_void,
6224         pcbData: *mut DWORD,
6225     ) -> BOOL;
6226 }
6227 pub const CRYPT_KEYID_MACHINE_FLAG: DWORD = 0x00000020;
6228 pub const CRYPT_KEYID_ALLOC_FLAG: DWORD = 0x00008000;
6229 extern "system" {
CryptSetKeyIdentifierProperty( pKeyIdentifier: *const CRYPT_HASH_BLOB, dwPropId: DWORD, dwFlags: DWORD, pwszComputerName: LPCWSTR, pvReserved: *mut c_void, pvData: *const c_void, ) -> BOOL6230     pub fn CryptSetKeyIdentifierProperty(
6231         pKeyIdentifier: *const CRYPT_HASH_BLOB,
6232         dwPropId: DWORD,
6233         dwFlags: DWORD,
6234         pwszComputerName: LPCWSTR,
6235         pvReserved: *mut c_void,
6236         pvData: *const c_void,
6237     ) -> BOOL;
6238 }
6239 pub const CRYPT_KEYID_DELETE_FLAG: DWORD = 0x00000010;
6240 pub const CRYPT_KEYID_SET_NEW_FLAG: DWORD = 0x00002000;
6241 FN!{stdcall PFN_CRYPT_ENUM_KEYID_PROP(
6242     pKeyIdentifier: *const CRYPT_HASH_BLOB,
6243     dwFlags: DWORD,
6244     pvReserved: *mut c_void,
6245     pvArg: *mut c_void,
6246     cProp: DWORD,
6247     rgdwPropId: *mut DWORD,
6248     rgpvData: *mut *mut c_void,
6249     rgcbData: *mut DWORD,
6250 ) -> BOOL}
6251 extern "system" {
CryptEnumKeyIdentifierProperties( pKeyIdentifier: *const CRYPT_HASH_BLOB, dwPropId: DWORD, dwFlags: DWORD, pwszComputerName: LPCWSTR, pvReserved: *mut c_void, pvArg: *mut c_void, pfnEnum: PFN_CRYPT_ENUM_KEYID_PROP, ) -> BOOL6252     pub fn CryptEnumKeyIdentifierProperties(
6253         pKeyIdentifier: *const CRYPT_HASH_BLOB,
6254         dwPropId: DWORD,
6255         dwFlags: DWORD,
6256         pwszComputerName: LPCWSTR,
6257         pvReserved: *mut c_void,
6258         pvArg: *mut c_void,
6259         pfnEnum: PFN_CRYPT_ENUM_KEYID_PROP,
6260     ) -> BOOL;
CryptCreateKeyIdentifierFromCSP( dwCertEncodingType: DWORD, pszPubKeyOID: LPCSTR, pPubKeyStruc: *const PUBLICKEYSTRUC, cbPubKeyStruc: DWORD, dwFlags: DWORD, pvReserved: *mut c_void, pbHash: *mut BYTE, pcbHash: *mut DWORD, ) -> BOOL6261     pub fn CryptCreateKeyIdentifierFromCSP(
6262         dwCertEncodingType: DWORD,
6263         pszPubKeyOID: LPCSTR,
6264         pPubKeyStruc: *const PUBLICKEYSTRUC,
6265         cbPubKeyStruc: DWORD,
6266         dwFlags: DWORD,
6267         pvReserved: *mut c_void,
6268         pbHash: *mut BYTE,
6269         pcbHash: *mut DWORD,
6270     ) -> BOOL;
6271 }
6272 pub const CERT_CHAIN_CONFIG_REGPATH: &'static str
6273     = "Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CertDllCreateCertificateChainEngine\\Config";
6274 pub const CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME: &'static str
6275     = "MaxUrlRetrievalByteCount";
6276 pub const CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_DEFAULT: DWORD = 100 * 1024 * 1024;
6277 pub const CERT_CHAIN_CACHE_RESYNC_FILETIME_VALUE_NAME: &'static str = "ChainCacheResyncFiletime";
6278 pub const CERT_CHAIN_DISABLE_MANDATORY_BASIC_CONSTRAINTS_VALUE_NAME: &'static str
6279     = "DisableMandatoryBasicConstraints";
6280 pub const CERT_CHAIN_DISABLE_CA_NAME_CONSTRAINTS_VALUE_NAME: &'static str
6281     = "DisableCANameConstraints";
6282 pub const CERT_CHAIN_DISABLE_UNSUPPORTED_CRITICAL_EXTENSIONS_VALUE_NAME: &'static str
6283     = "DisableUnsupportedCriticalExtensions";
6284 pub const CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_VALUE_NAME: &'static str = "MaxAIAUrlCountInCert";
6285 pub const CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_DEFAULT: DWORD = 5;
6286 pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_VALUE_NAME: &'static str
6287     = "MaxAIAUrlRetrievalCountPerChain";
6288 pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_DEFAULT: DWORD = 3;
6289 pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME: &'static str
6290     = "MaxAIAUrlRetrievalByteCount";
6291 pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_DEFAULT: DWORD = 100000;
6292 pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_VALUE_NAME: &'static str
6293     = "MaxAIAUrlRetrievalCertCount";
6294 pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_DEFAULT: DWORD = 10;
6295 pub const CERT_CHAIN_OCSP_VALIDITY_SECONDS_VALUE_NAME: &'static str
6296     = "OcspValiditySeconds";
6297 pub const CERT_CHAIN_OCSP_VALIDITY_SECONDS_DEFAULT: DWORD = 12 * 60 * 60;
6298 pub const CERT_CHAIN_DISABLE_SERIAL_CHAIN_VALUE_NAME: &'static str = "DisableSerialChain";
6299 pub const CERT_CHAIN_SERIAL_CHAIN_LOG_FILE_NAME_VALUE_NAME: &'static str
6300     = "SerialChainLogFileName";
6301 pub const CERT_CHAIN_DISABLE_SYNC_WITH_SSL_TIME_VALUE_NAME: &'static str
6302     = "DisableSyncWithSslTime";
6303 pub const CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_VALUE_NAME: &'static str
6304     = "MaxSslTimeUpdatedEventCount";
6305 pub const CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_DEFAULT: DWORD = 5;
6306 pub const CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_DISABLE: DWORD = 0xFFFFFFFF;
6307 pub const CERT_CHAIN_SSL_HANDSHAKE_LOG_FILE_NAME_VALUE_NAME: &'static str
6308     = "SslHandshakeLogFileName";
6309 pub const CERT_CHAIN_ENABLE_WEAK_SIGNATURE_FLAGS_VALUE_NAME: &'static str
6310     = "EnableWeakSignatureFlags";
6311 pub const CERT_CHAIN_ENABLE_MD2_MD4_FLAG: DWORD = 0x00000001;
6312 pub const CERT_CHAIN_ENABLE_WEAK_RSA_ROOT_FLAG: DWORD = 0x00000002;
6313 pub const CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG: DWORD = 0x00000004;
6314 pub const CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG: DWORD = 0x00000008;
6315 pub const CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_VALUE_NAME: &'static str = "MinRsaPubKeyBitLength";
6316 pub const CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DEFAULT: DWORD = 1023;
6317 pub const CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DISABLE: DWORD = 0xFFFFFFFF;
6318 pub const CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_VALUE_NAME: &'static str = "WeakRsaPubKeyTime";
6319 pub const CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_DEFAULT: u64 = 0x01CA8A755C6E0000;
6320 pub const CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME: &'static str = "WeakSignatureLogDir";
6321 pub const CERT_CHAIN_DEFAULT_CONFIG_SUBDIR: &'static str = "Default";
6322 pub const CERT_CHAIN_WEAK_PREFIX_NAME: &'static str = "Weak";
6323 pub const CERT_CHAIN_WEAK_THIRD_PARTY_CONFIG_NAME: &'static str = "ThirdParty";
6324 pub const CERT_CHAIN_WEAK_ALL_CONFIG_NAME: &'static str = "Al";
6325 pub const CERT_CHAIN_WEAK_FLAGS_NAME: &'static str = "Flags";
6326 pub const CERT_CHAIN_WEAK_HYGIENE_NAME: &'static str = "Hygiene";
6327 pub const CERT_CHAIN_WEAK_AFTER_TIME_NAME: &'static str = "AfterTime";
6328 pub const CERT_CHAIN_WEAK_FILE_HASH_AFTER_TIME_NAME: &'static str = "FileHashAfterTime";
6329 pub const CERT_CHAIN_WEAK_TIMESTAMP_HASH_AFTER_TIME_NAME: &'static str = "TimestampHashAfterTime";
6330 pub const CERT_CHAIN_WEAK_MIN_BIT_LENGTH_NAME: &'static str = "MinBitLength";
6331 pub const CERT_CHAIN_WEAK_SHA256_ALLOW_NAME: &'static str = "Sha256Allow";
6332 pub const CERT_CHAIN_MIN_PUB_KEY_BIT_LENGTH_DISABLE: DWORD = 0xFFFFFFFF;
6333 pub const CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG: DWORD = 0x80000000;
6334 pub const CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG: DWORD = 0x00010000;
6335 pub const CERT_CHAIN_ENABLE_ALL_EKU_HYGIENE_FLAG: DWORD = 0x00020000;
6336 pub const CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG: DWORD = 0x00040000;
6337 pub const CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG: DWORD = 0x00100000;
6338 pub const CERT_CHAIN_ENABLE_SERVER_AUTH_HYGIENE_FLAG: DWORD = 0x00200000;
6339 pub const CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG: DWORD = 0x00400000;
6340 pub const CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG: DWORD = 0x00800000;
6341 pub const CERT_CHAIN_ENABLE_CODE_SIGNING_HYGIENE_FLAG: DWORD = 0x01000000;
6342 pub const CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG: DWORD = 0x02000000;
6343 pub const CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG: DWORD = 0x04000000;
6344 pub const CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG: DWORD = 0x08000000;
6345 pub const CERT_CHAIN_ENABLE_TIMESTAMP_HYGIENE_FLAG: DWORD = 0x10000000;
6346 pub const CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG: DWORD = 0x20000000;
6347 pub const CERT_CHAIN_MOTW_IGNORE_AFTER_TIME_WEAK_FLAG: DWORD = 0x40000000;
6348 pub const CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAG: DWORD = 0x00001000;
6349 pub const CERT_CHAIN_DISABLE_MOTW_FILE_HASH_WEAK_FLAG: DWORD = 0x00002000;
6350 pub const CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAG: DWORD = 0x00004000;
6351 pub const CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_HASH_WEAK_FLAG: DWORD = 0x00008000;
6352 pub const CERT_CHAIN_DISABLE_WEAK_FLAGS: DWORD = CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG
6353     | CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG | CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG
6354     | CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG | CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG
6355     | CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG | CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG;
6356 pub const CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAGS: DWORD = CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAG
6357     | CERT_CHAIN_DISABLE_MOTW_FILE_HASH_WEAK_FLAG;
6358 pub const CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAGS: DWORD
6359     = CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAG
6360     | CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_HASH_WEAK_FLAG;
6361 pub const CERT_CHAIN_ENABLE_HYGIENE_FLAGS: DWORD = CERT_CHAIN_ENABLE_ALL_EKU_HYGIENE_FLAG
6362     | CERT_CHAIN_ENABLE_SERVER_AUTH_HYGIENE_FLAG | CERT_CHAIN_ENABLE_CODE_SIGNING_HYGIENE_FLAG
6363     | CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG | CERT_CHAIN_ENABLE_TIMESTAMP_HYGIENE_FLAG
6364     | CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG;
6365 pub const CERT_CHAIN_MOTW_WEAK_FLAGS: DWORD = CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG
6366     | CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG
6367     | CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG
6368     | CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG | CERT_CHAIN_MOTW_IGNORE_AFTER_TIME_WEAK_FLAG;
6369 pub const CERT_CHAIN_OPT_IN_WEAK_FLAGS: DWORD = CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG;
6370 pub const CERT_CHAIN_AUTO_CURRENT_USER: DWORD = 1;
6371 pub const CERT_CHAIN_AUTO_LOCAL_MACHINE: DWORD = 2;
6372 pub const CERT_CHAIN_AUTO_IMPERSONATED: DWORD = 3;
6373 pub const CERT_CHAIN_AUTO_PROCESS_INFO: DWORD = 4;
6374 pub const CERT_CHAIN_AUTO_PINRULE_INFO: DWORD = 5;
6375 pub const CERT_CHAIN_AUTO_NETWORK_INFO: DWORD = 6;
6376 pub const CERT_CHAIN_AUTO_SERIAL_LOCAL_MACHINE: DWORD = 7;
6377 pub const CERT_CHAIN_AUTO_HPKP_RULE_INFO: DWORD = 8;
6378 pub const CERT_CHAIN_AUTO_FLAGS_VALUE_NAME: &'static str = "AutoFlags";
6379 pub const CERT_CHAIN_AUTO_FLUSH_DISABLE_FLAG: DWORD = 0x00000001;
6380 pub const CERT_CHAIN_AUTO_LOG_CREATE_FLAG: DWORD = 0x00000002;
6381 pub const CERT_CHAIN_AUTO_LOG_FREE_FLAG: DWORD = 0x00000004;
6382 pub const CERT_CHAIN_AUTO_LOG_FLUSH_FLAG: DWORD = 0x00000008;
6383 pub const CERT_CHAIN_AUTO_LOG_FLAGS: DWORD = CERT_CHAIN_AUTO_LOG_CREATE_FLAG
6384     | CERT_CHAIN_AUTO_LOG_FREE_FLAG | CERT_CHAIN_AUTO_LOG_FLUSH_FLAG;
6385 pub const CERT_CHAIN_AUTO_FLUSH_FIRST_DELTA_SECONDS_VALUE_NAME: &'static str
6386     = "AutoFlushFirstDeltaSeconds";
6387 pub const CERT_CHAIN_AUTO_FLUSH_FIRST_DELTA_SECONDS_DEFAULT: DWORD = 5 * 60;
6388 pub const CERT_CHAIN_AUTO_FLUSH_NEXT_DELTA_SECONDS_VALUE_NAME: &'static str
6389     = "AutoFlushNextDeltaSeconds";
6390 pub const CERT_CHAIN_AUTO_FLUSH_NEXT_DELTA_SECONDS_DEFAULT: DWORD = 30 * 60;
6391 pub const CERT_CHAIN_AUTO_LOG_FILE_NAME_VALUE_NAME: &'static str = "AutoLogFileName";
6392 pub const CERT_CHAIN_DISABLE_AUTO_FLUSH_PROCESS_NAME_LIST_VALUE_NAME: &'static str
6393     = "DisableAutoFlushProcessNameList";
6394 pub const CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_VALUE_NAME: &'static str
6395     = "SrvOcspRespMinValiditySeconds";
6396 pub const CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_DEFAULT: DWORD = 10 * 60;
6397 pub const CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME: &'static str
6398     = "SrvOcspRespUrlRetrievalTimeoutMilliseconds";
6399 pub const CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT: DWORD = 15 * 1000;
6400 pub const CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
6401     = "SrvOcspRespMaxBeforeNextUpdateSeconds";
6402 pub const CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 4 * 60 * 60;
6403 pub const CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
6404     = "SrvOcspRespMinBeforeNextUpdateSeconds";
6405 pub const CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 2 * 60;
6406 pub const CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
6407     = "SrvOcspRespMinAfterNextUpdateSeconds";
6408 pub const CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 1 * 60;
6409 pub const CERT_SRV_OCSP_RESP_MIN_SYNC_CERT_FILE_SECONDS_VALUE_NAME: &'static str
6410     = "SrvOcspRespMinSyncCertFileSeconds";
6411 pub const CERT_SRV_OCSP_RESP_MIN_SYNC_CERT_FILE_SECONDS_DEFAULT: DWORD = 5;
6412 pub const CERT_SRV_OCSP_RESP_MAX_SYNC_CERT_FILE_SECONDS_VALUE_NAME: &'static str
6413     = "SrvOcspRespMaxSyncCertFileSeconds";
6414 pub const CERT_SRV_OCSP_RESP_MAX_SYNC_CERT_FILE_SECONDS_DEFAULT: DWORD = 1 * 60 * 60;
6415 pub const CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_VALUE_NAME: &'static str
6416     = "CryptnetMaxCachedOcspPerCrlCount";
6417 pub const CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_DEFAULT: DWORD = 500;
6418 pub const CRYPTNET_OCSP_AFTER_CRL_DISABLE: DWORD = 0xFFFFFFFF;
6419 pub const CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_VALUE_NAME: &'static str
6420     = "CryptnetDefaultFlushExemptSeconds";
6421 pub const CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_DEFAULT: DWORD = 28 * 24 * 60 * 60;
6422 pub const CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_VALUE_NAME: &'static str
6423     = "CryptnetPreFetchMinMaxAgeSeconds";
6424 pub const CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_DEFAULT: DWORD = 1 * 60 * 60;
6425 pub const CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_VALUE_NAME: &'static str
6426     = "CryptnetPreFetchMaxMaxAgeSeconds";
6427 pub const CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_DEFAULT: DWORD = 14 * 24 * 60 * 60;
6428 pub const CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_VALUE_NAME: &'static str
6429     = "CryptnetPreFetchMinOcspValidityPeriodSeconds";
6430 pub const CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_DEFAULT: DWORD = 14 * 24 * 60 * 60;
6431 pub const CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_VALUE_NAME: &'static str
6432     = "CryptnetPreFetchAfterPublishPreFetchDivisor";
6433 pub const CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_DEFAULT: DWORD = 10;
6434 pub const CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME: &'static str
6435     = "CryptnetPreFetchBeforeNextUpdatePreFetchDivisor";
6436 pub const CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT: DWORD = 20;
6437 pub const CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME: &'static str
6438     = "CryptnetPreFetchMinBeforeNextUpdatePreFetchSeconds";
6439 pub const CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT: DWORD
6440     = 1 * 60 * 60;
6441 pub const CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME: &'static str
6442     = "CryptnetPreFetchValidityPeriodAfterNextUpdatePreFetchDivisor";
6443 pub const CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT: DWORD
6444     = 10;
6445 pub const CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME: &'static str
6446     = "CryptnetPreFetchMaxAfterNextUpdatePreFetchPeriodSeconds";
6447 pub const CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT: DWORD
6448     = 4 * 60 * 60;
6449 pub const CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME: &'static str
6450     = "CryptnetPreFetchMinAfterNextUpdatePreFetchPeriodSeconds";
6451 pub const CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT: DWORD
6452     = 30 * 60;
6453 pub const CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME: &'static str
6454     = "CryptnetPreFetchAfterCurrentTimePreFetchPeriodSeconds";
6455 pub const CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_DEFAULT: DWORD
6456     = 30 * 60;
6457 pub const CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_VALUE_NAME: &'static str
6458     = "CryptnetPreFetchTriggerPeriodSeconds";
6459 pub const CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_DEFAULT: DWORD = 10 * 60;
6460 pub const CRYPTNET_PRE_FETCH_TRIGGER_DISABLE: DWORD = 0xFFFFFFFF;
6461 pub const CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_VALUE_NAME: &'static str
6462     = "CryptnetPreFetchScanAfterTriggerDelaySeconds";
6463 pub const CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_DEFAULT: DWORD = 60;
6464 pub const CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_VALUE_NAME: &'static str
6465     = "CryptnetPreFetchRetrievalTimeoutSeconds";
6466 pub const CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_DEFAULT: DWORD = 5 * 60;
6467 pub const CRYPTNET_CRL_PRE_FETCH_CONFIG_REGPATH: &'static str
6468     = "Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CertDllCreateCertificateChainEngine\\Config\\CrlPreFetch";
6469 pub const CRYPTNET_CRL_PRE_FETCH_PROCESS_NAME_LIST_VALUE_NAME: &'static str = "ProcessNameList";
6470 pub const CRYPTNET_CRL_PRE_FETCH_URL_LIST_VALUE_NAME: &'static str = "PreFetchUrlList";
6471 pub const CRYPTNET_CRL_PRE_FETCH_DISABLE_INFORMATION_EVENTS_VALUE_NAME: &'static str
6472     = "DisableInformationEvents";
6473 pub const CRYPTNET_CRL_PRE_FETCH_LOG_FILE_NAME_VALUE_NAME: &'static str = "LogFileName";
6474 pub const CRYPTNET_CRL_PRE_FETCH_TIMEOUT_SECONDS_VALUE_NAME: &'static str = "TimeoutSeconds";
6475 pub const CRYPTNET_CRL_PRE_FETCH_TIMEOUT_SECONDS_DEFAULT: DWORD = 5 * 60;
6476 pub const CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_VALUE_NAME: &'static str = "MaxAgeSeconds";
6477 pub const CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_DEFAULT: DWORD = 2 * 60 * 60;
6478 pub const CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_MIN: DWORD = 5 * 60;
6479 pub const CRYPTNET_CRL_PRE_FETCH_PUBLISH_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
6480     = "PublishBeforeNextUpdateSeconds";
6481 pub const CRYPTNET_CRL_PRE_FETCH_PUBLISH_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 1 * 60 * 60;
6482 pub const CRYPTNET_CRL_PRE_FETCH_PUBLISH_RANDOM_INTERVAL_SECONDS_VALUE_NAME: &'static str
6483     = "PublishRandomIntervalSeconds";
6484 pub const CRYPTNET_CRL_PRE_FETCH_PUBLISH_RANDOM_INTERVAL_SECONDS_DEFAULT: DWORD = 5 * 60;
6485 pub const CRYPTNET_CRL_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
6486     = "MinBeforeNextUpdateSeconds";
6487 pub const CRYPTNET_CRL_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 5 * 60;
6488 pub const CRYPTNET_CRL_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
6489     = "MinAfterNextUpdateSeconds";
6490 pub const CRYPTNET_CRL_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 5 * 60;
6491 pub const CERT_GROUP_POLICY_CHAIN_CONFIG_REGPATH: &'static str
6492     = "Software\\Policies\\Microsoft\\SystemCertificates\\ChainEngine\\Config";
6493 pub const CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME: &'static str
6494     = "ChainUrlRetrievalTimeoutMilliseconds";
6495 pub const CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT: DWORD = 15 * 1000;
6496 pub const CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME: &'static str
6497     = "ChainRevAccumulativeUrlRetrievalTimeoutMilliseconds";
6498 pub const CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT: DWORD
6499     = 20 * 1000;
6500 pub const CERT_RETR_BEHAVIOR_INET_AUTH_VALUE_NAME: &'static str = "EnableInetUnknownAuth";
6501 pub const CERT_RETR_BEHAVIOR_INET_STATUS_VALUE_NAME: &'static str = "EnableInetLocal";
6502 pub const CERT_RETR_BEHAVIOR_FILE_VALUE_NAME: &'static str = "AllowFileUrlScheme";
6503 pub const CERT_RETR_BEHAVIOR_LDAP_VALUE_NAME: &'static str = "DisableLDAPSignAndEncrypt";
6504 pub const CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_VALUE_NAME: &'static str
6505     = "CryptnetCachedOcspSwitchToCrlCount";
6506 pub const CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_DEFAULT: DWORD = 50;
6507 pub const CRYPTNET_CRL_BEFORE_OCSP_ENABLE: DWORD = 0xFFFFFFFF;
6508 pub const CERT_CHAIN_DISABLE_AIA_URL_RETRIEVAL_VALUE_NAME: &'static str = "DisableAIAUrlRetrieval";
6509 pub const CERT_CHAIN_OPTIONS_VALUE_NAME: &'static str = "Options";
6510 pub const CERT_CHAIN_OPTION_DISABLE_AIA_URL_RETRIEVAL: DWORD = 0x2;
6511 pub const CERT_CHAIN_OPTION_ENABLE_SIA_URL_RETRIEVAL: DWORD = 0x4;
6512 pub const CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_VALUE_NAME: &'static str
6513     = "CrossCertDownloadIntervalHours";
6514 pub const CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_DEFAULT: DWORD = 24 * 7;
6515 pub const CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_VALUE_NAME: &'static str
6516     = "CRLValidityExtensionPeriod";
6517 pub const CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_DEFAULT: DWORD = 12;
6518 pub type HCERTCHAINENGINE = HANDLE;
6519 pub const HCCE_CURRENT_USER: HCERTCHAINENGINE = 0 as HCERTCHAINENGINE;
6520 pub const HCCE_LOCAL_MACHINE: HCERTCHAINENGINE = 0x1 as HCERTCHAINENGINE;
6521 pub const HCCE_SERIAL_LOCAL_MACHINE: HCERTCHAINENGINE = 0x2 as HCERTCHAINENGINE;
6522 pub const CERT_CHAIN_CACHE_END_CERT: DWORD = 0x00000001;
6523 pub const CERT_CHAIN_THREAD_STORE_SYNC: DWORD = 0x00000002;
6524 pub const CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL: DWORD = 0x00000004;
6525 pub const CERT_CHAIN_USE_LOCAL_MACHINE_STORE: DWORD = 0x00000008;
6526 pub const CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE: DWORD = 0x00000010;
6527 pub const CERT_CHAIN_ENABLE_SHARE_STORE: DWORD = 0x00000020;
6528 STRUCT!{struct CERT_CHAIN_ENGINE_CONFIG {
6529     cbSize: DWORD,
6530     hRestrictedRoot: HCERTSTORE,
6531     hRestrictedTrust: HCERTSTORE,
6532     hRestrictedOther: HCERTSTORE,
6533     cAdditionalStore: DWORD,
6534     rghAdditionalStore: *mut HCERTSTORE,
6535     dwFlags: DWORD,
6536     dwUrlRetrievalTimeout: DWORD,
6537     MaximumCachedCertificates: DWORD,
6538     CycleDetectionModulus: DWORD,
6539     hExclusiveRoot: HCERTSTORE,
6540     hExclusiveTrustedPeople: HCERTSTORE,
6541     dwExclusiveFlags: DWORD,
6542 }}
6543 pub type PCERT_CHAIN_ENGINE_CONFIG = *mut CERT_CHAIN_ENGINE_CONFIG;
6544 extern "system" {
CertCreateCertificateChainEngine( pConfig: PCERT_CHAIN_ENGINE_CONFIG, phChainEngine: *mut HCERTCHAINENGINE, ) -> BOOL6545     pub fn CertCreateCertificateChainEngine(
6546         pConfig: PCERT_CHAIN_ENGINE_CONFIG,
6547         phChainEngine: *mut HCERTCHAINENGINE,
6548     ) -> BOOL;
CertFreeCertificateChainEngine( hChainEngine: HCERTCHAINENGINE, )6549     pub fn CertFreeCertificateChainEngine(
6550         hChainEngine: HCERTCHAINENGINE,
6551     );
CertResyncCertificateChainEngine( hChainEngine: HCERTCHAINENGINE, ) -> BOOL6552     pub fn CertResyncCertificateChainEngine(
6553         hChainEngine: HCERTCHAINENGINE,
6554     ) -> BOOL;
6555 }
6556 STRUCT!{struct CERT_TRUST_STATUS {
6557     dwErrorStatus: DWORD,
6558     dwInfoStatus: DWORD,
6559 }}
6560 pub type PCERT_TRUST_STATUS = *mut CERT_TRUST_STATUS;
6561 pub const CERT_TRUST_NO_ERROR: DWORD = 0x00000000;
6562 pub const CERT_TRUST_IS_NOT_TIME_VALID: DWORD = 0x00000001;
6563 pub const CERT_TRUST_IS_NOT_TIME_NESTED: DWORD = 0x00000002;
6564 pub const CERT_TRUST_IS_REVOKED: DWORD = 0x00000004;
6565 pub const CERT_TRUST_IS_NOT_SIGNATURE_VALID: DWORD = 0x00000008;
6566 pub const CERT_TRUST_IS_NOT_VALID_FOR_USAGE: DWORD = 0x00000010;
6567 pub const CERT_TRUST_IS_UNTRUSTED_ROOT: DWORD = 0x00000020;
6568 pub const CERT_TRUST_REVOCATION_STATUS_UNKNOWN: DWORD = 0x00000040;
6569 pub const CERT_TRUST_IS_CYCLIC: DWORD = 0x00000080;
6570 pub const CERT_TRUST_INVALID_EXTENSION: DWORD = 0x00000100;
6571 pub const CERT_TRUST_INVALID_POLICY_CONSTRAINTS: DWORD = 0x00000200;
6572 pub const CERT_TRUST_INVALID_BASIC_CONSTRAINTS: DWORD = 0x00000400;
6573 pub const CERT_TRUST_INVALID_NAME_CONSTRAINTS: DWORD = 0x00000800;
6574 pub const CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT: DWORD = 0x00001000;
6575 pub const CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT: DWORD = 0x00002000;
6576 pub const CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT: DWORD = 0x00004000;
6577 pub const CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT: DWORD = 0x00008000;
6578 pub const CERT_TRUST_IS_OFFLINE_REVOCATION: DWORD = 0x01000000;
6579 pub const CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY: DWORD = 0x02000000;
6580 pub const CERT_TRUST_IS_PARTIAL_CHAIN: DWORD = 0x00010000;
6581 pub const CERT_TRUST_CTL_IS_NOT_TIME_VALID: DWORD = 0x00020000;
6582 pub const CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID: DWORD = 0x00040000;
6583 pub const CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE: DWORD = 0x00080000;
6584 pub const CERT_TRUST_HAS_EXACT_MATCH_ISSUER: DWORD = 0x00000001;
6585 pub const CERT_TRUST_HAS_KEY_MATCH_ISSUER: DWORD = 0x00000002;
6586 pub const CERT_TRUST_HAS_NAME_MATCH_ISSUER: DWORD = 0x00000004;
6587 pub const CERT_TRUST_IS_SELF_SIGNED: DWORD = 0x00000008;
6588 pub const CERT_TRUST_AUTO_UPDATE_CA_REVOCATION: DWORD = 0x00000010;
6589 pub const CERT_TRUST_AUTO_UPDATE_END_REVOCATION: DWORD = 0x00000020;
6590 pub const CERT_TRUST_NO_OCSP_FAILOVER_TO_CRL: DWORD = 0x00000040;
6591 pub const CERT_TRUST_IS_KEY_ROLLOVER: DWORD = 0x00000080;
6592 pub const CERT_TRUST_SSL_HANDSHAKE_OCSP: DWORD = 0x00040000;
6593 pub const CERT_TRUST_SSL_TIME_VALID_OCSP: DWORD = 0x00080000;
6594 pub const CERT_TRUST_SSL_RECONNECT_OCSP: DWORD = 0x00100000;
6595 pub const CERT_TRUST_HAS_PREFERRED_ISSUER: DWORD = 0x00000100;
6596 pub const CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY: DWORD = 0x00000200;
6597 pub const CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS: DWORD = 0x00000400;
6598 pub const CERT_TRUST_IS_PEER_TRUSTED: DWORD = 0x00000800;
6599 pub const CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED: DWORD = 0x00001000;
6600 pub const CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE: DWORD = 0x00002000;
6601 pub const CERT_TRUST_IS_CA_TRUSTED: DWORD = 0x00004000;
6602 pub const CERT_TRUST_HAS_AUTO_UPDATE_WEAK_SIGNATURE: DWORD = 0x00008000;
6603 pub const CERT_TRUST_HAS_ALLOW_WEAK_SIGNATURE: DWORD = 0x00020000;
6604 pub const CERT_TRUST_IS_COMPLEX_CHAIN: DWORD = 0x00010000;
6605 pub const CERT_TRUST_SSL_TIME_VALID: DWORD = 0x01000000;
6606 pub const CERT_TRUST_NO_TIME_CHECK: DWORD = 0x02000000;
6607 STRUCT!{struct CERT_REVOCATION_INFO {
6608     cbSize: DWORD,
6609     dwRevocationResult: DWORD,
6610     pszRevocationOid: LPCSTR,
6611     pvOidSpecificInfo: LPVOID,
6612     fHasFreshnessTime: BOOL,
6613     dwFreshnessTime: DWORD,
6614     pCrlInfo: PCERT_REVOCATION_CRL_INFO,
6615 }}
6616 pub type PCERT_REVOCATION_INFO = *mut CERT_REVOCATION_INFO;
6617 STRUCT!{struct CERT_TRUST_LIST_INFO {
6618     cbSize: DWORD,
6619     pCtlEntry: PCTL_ENTRY,
6620     pCtlContext: PCCTL_CONTEXT,
6621 }}
6622 pub type PCERT_TRUST_LIST_INFO = *mut CERT_TRUST_LIST_INFO;
6623 STRUCT!{struct CERT_CHAIN_ELEMENT {
6624     cbSize: DWORD,
6625     pCertContext: PCCERT_CONTEXT,
6626     TrustStatus: CERT_TRUST_STATUS,
6627     pRevocationInfo: PCERT_REVOCATION_INFO,
6628     pIssuanceUsage: PCERT_ENHKEY_USAGE,
6629     pApplicationUsage: PCERT_ENHKEY_USAGE,
6630     pwszExtendedErrorInfo: LPWSTR,
6631 }}
6632 pub type PCERT_CHAIN_ELEMENT = *mut CERT_CHAIN_ELEMENT;
6633 pub type PCCERT_CHAIN_ELEMENT = *const CERT_CHAIN_ELEMENT;
6634 STRUCT!{struct CERT_SIMPLE_CHAIN {
6635     cbSize: DWORD,
6636     TrustStatus: CERT_TRUST_STATUS,
6637     cElement: DWORD,
6638     rgpElement: *mut PCERT_CHAIN_ELEMENT,
6639     pTrustListInfo: PCERT_TRUST_LIST_INFO,
6640     fHasRevocationFreshnessTime: BOOL,
6641     dwRevocationFreshnessTime: DWORD,
6642 }}
6643 pub type PCERT_SIMPLE_CHAIN = *mut CERT_SIMPLE_CHAIN;
6644 pub type PCCERT_SIMPLE_CHAIN = *const CERT_SIMPLE_CHAIN;
6645 pub type PCERT_CHAIN_CONTEXT = *mut CERT_CHAIN_CONTEXT;
6646 pub type PCCERT_CHAIN_CONTEXT = *const CERT_CHAIN_CONTEXT;
6647 STRUCT!{struct CERT_CHAIN_CONTEXT {
6648     cbSize: DWORD,
6649     TrustStatus: CERT_TRUST_STATUS,
6650     cChain: DWORD,
6651     rgpChain: *mut PCERT_SIMPLE_CHAIN,
6652     cLowerQualityChainContext: DWORD,
6653     rgpLowerQualityChainContext: *mut PCCERT_CHAIN_CONTEXT,
6654     fHasRevocationFreshnessTime: BOOL,
6655     dwRevocationFreshnessTime: DWORD,
6656     dwCreateFlags: DWORD,
6657     ChainId: GUID,
6658 }}
6659 pub const USAGE_MATCH_TYPE_AND: DWORD = 0x00000000;
6660 pub const USAGE_MATCH_TYPE_OR: DWORD = 0x00000001;
6661 STRUCT!{struct CERT_USAGE_MATCH {
6662     dwType: DWORD,
6663     Usage: CERT_ENHKEY_USAGE,
6664 }}
6665 pub type PCERT_USAGE_MATCH = *mut CERT_USAGE_MATCH;
6666 STRUCT!{struct CTL_USAGE_MATCH {
6667     dwType: DWORD,
6668     Usage: CTL_USAGE,
6669 }}
6670 pub type PCTL_USAGE_MATCH = *mut CTL_USAGE_MATCH;
6671 STRUCT!{struct CERT_CHAIN_PARA {
6672     cbSize: DWORD,
6673     RequestedUsage: CERT_USAGE_MATCH,
6674     RequestedIssuancePolicy: CERT_USAGE_MATCH,
6675     dwUrlRetrievalTimeout: DWORD,
6676     fCheckRevocationFreshnessTime: BOOL,
6677     dwRevocationFreshnessTime: DWORD,
6678     pftCacheResync: LPFILETIME,
6679     pStrongSignPara: PCCERT_STRONG_SIGN_PARA,
6680     dwStrongSignFlags: DWORD,
6681 }}
6682 pub type PCERT_CHAIN_PARA = *mut CERT_CHAIN_PARA;
6683 pub const CERT_CHAIN_STRONG_SIGN_DISABLE_END_CHECK_FLAG: DWORD = 0x00000001;
6684 pub const CERT_CHAIN_REVOCATION_CHECK_END_CERT: DWORD = 0x10000000;
6685 pub const CERT_CHAIN_REVOCATION_CHECK_CHAIN: DWORD = 0x20000000;
6686 pub const CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT: DWORD = 0x40000000;
6687 pub const CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY: DWORD = 0x80000000;
6688 pub const CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT: DWORD = 0x08000000;
6689 pub const CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT: DWORD = 0x04000000;
6690 pub const CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING: DWORD = 0x00000040;
6691 pub const CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS: DWORD = 0x00000080;
6692 pub const CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE: DWORD = 0x00000100;
6693 pub const CERT_CHAIN_TIMESTAMP_TIME: DWORD = 0x00000200;
6694 pub const CERT_CHAIN_ENABLE_PEER_TRUST: DWORD = 0x00000400;
6695 pub const CERT_CHAIN_DISABLE_MY_PEER_TRUST: DWORD = 0x00000800;
6696 pub const CERT_CHAIN_DISABLE_MD2_MD4: DWORD = 0x00001000;
6697 pub const CERT_CHAIN_DISABLE_AIA: DWORD = 0x00002000;
6698 pub const CERT_CHAIN_HAS_MOTW: DWORD = 0x00004000;
6699 pub const CERT_CHAIN_ONLY_ADDITIONAL_AND_AUTH_ROOT: DWORD = 0x00008000;
6700 pub const CERT_CHAIN_OPT_IN_WEAK_SIGNATURE: DWORD = 0x00010000;
6701 extern "system" {
CertGetCertificateChain( hChainEngine: HCERTCHAINENGINE, pCertContext: PCCERT_CONTEXT, pTime: LPFILETIME, hAdditionalStore: HCERTSTORE, pChainPara: PCERT_CHAIN_PARA, dwFlags: DWORD, pvReserved: LPVOID, ppChainContext: *mut PCCERT_CHAIN_CONTEXT, ) -> BOOL6702     pub fn CertGetCertificateChain(
6703         hChainEngine: HCERTCHAINENGINE,
6704         pCertContext: PCCERT_CONTEXT,
6705         pTime: LPFILETIME,
6706         hAdditionalStore: HCERTSTORE,
6707         pChainPara: PCERT_CHAIN_PARA,
6708         dwFlags: DWORD,
6709         pvReserved: LPVOID,
6710         ppChainContext: *mut PCCERT_CHAIN_CONTEXT,
6711     ) -> BOOL;
CertFreeCertificateChain( pChainContext: PCCERT_CHAIN_CONTEXT, )6712     pub fn CertFreeCertificateChain(
6713         pChainContext: PCCERT_CHAIN_CONTEXT,
6714     );
CertDuplicateCertificateChain( pChainContext: PCCERT_CHAIN_CONTEXT, ) -> PCCERT_CHAIN_CONTEXT6715     pub fn CertDuplicateCertificateChain(
6716         pChainContext: PCCERT_CHAIN_CONTEXT,
6717     ) -> PCCERT_CHAIN_CONTEXT;
6718 }
6719 STRUCT!{struct CERT_REVOCATION_CHAIN_PARA {
6720     cbSize: DWORD,
6721     hChainEngine: HCERTCHAINENGINE,
6722     hAdditionalStore: HCERTSTORE,
6723     dwChainFlags: DWORD,
6724     dwUrlRetrievalTimeout: DWORD,
6725     pftCurrentTime: LPFILETIME,
6726     pftCacheResync: LPFILETIME,
6727     cbMaxUrlRetrievalByteCount: DWORD,
6728 }}
6729 pub const REVOCATION_OID_CRL_REVOCATION: LPCSTR = 1 as LPCSTR;
6730 STRUCT!{struct CRL_REVOCATION_INFO {
6731     pCrlEntry: PCRL_ENTRY,
6732     pCrlContext: PCCRL_CONTEXT,
6733     pCrlIssuerChain: PCCERT_CHAIN_CONTEXT,
6734 }}
6735 pub type PCRL_REVOCATION_INFO = *mut CRL_REVOCATION_INFO;
6736 extern "system" {
CertFindChainInStore( hCertStore: HCERTSTORE, dwCertEncodingType: DWORD, dwFindFlags: DWORD, dwFindType: DWORD, pvFindPara: *const c_void, pPrevChainContext: PCCERT_CHAIN_CONTEXT, ) -> PCCERT_CHAIN_CONTEXT6737     pub fn CertFindChainInStore(
6738         hCertStore: HCERTSTORE,
6739         dwCertEncodingType: DWORD,
6740         dwFindFlags: DWORD,
6741         dwFindType: DWORD,
6742         pvFindPara: *const c_void,
6743         pPrevChainContext: PCCERT_CHAIN_CONTEXT,
6744     ) -> PCCERT_CHAIN_CONTEXT;
6745 }
6746 pub const CERT_CHAIN_FIND_BY_ISSUER: DWORD = 1;
6747 FN!{stdcall PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK(
6748     pCert: PCCERT_CONTEXT,
6749     pvFindArg: *mut c_void,
6750 ) -> BOOL}
6751 STRUCT!{struct CERT_CHAIN_FIND_ISSUER_PARA {
6752     cbSize: DWORD,
6753     pszUsageIdentifier: LPCSTR,
6754     dwKeySpec: DWORD,
6755     dwAcquirePrivateKeyFlags: DWORD,
6756     cIssuer: DWORD,
6757     rgIssuer: *mut CERT_NAME_BLOB,
6758     pfnFindCallback: PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK,
6759     pvFindArg: *mut c_void,
6760     pdwIssuerChainIndex: *mut DWORD,
6761     pdwIssuerElementIndex: *mut DWORD,
6762 }}
6763 pub type PCERT_CHAIN_FIND_ISSUER_PARA = *mut CERT_CHAIN_FIND_ISSUER_PARA;
6764 pub type CERT_CHAIN_FIND_BY_ISSUER_PARA = CERT_CHAIN_FIND_ISSUER_PARA;
6765 pub type PCERT_CHAIN_FIND_BY_ISSUER_PARA = *mut CERT_CHAIN_FIND_ISSUER_PARA;
6766 pub const CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG: DWORD = 0x0001;
6767 pub const CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG: DWORD = 0x0002;
6768 pub const CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG: DWORD = 0x0004;
6769 pub const CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG: DWORD = 0x0008;
6770 pub const CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG: DWORD = 0x4000;
6771 pub const CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG: DWORD = 0x8000;
6772 STRUCT!{struct CERT_CHAIN_POLICY_PARA {
6773     cbSize: DWORD,
6774     dwFlags: DWORD,
6775     pvExtraPolicyPara: *mut c_void,
6776 }}
6777 pub type PCERT_CHAIN_POLICY_PARA = *mut CERT_CHAIN_POLICY_PARA;
6778 STRUCT!{struct CERT_CHAIN_POLICY_STATUS {
6779     cbSize: DWORD,
6780     dwError: DWORD,
6781     lChainIndex: LONG,
6782     lElementIndex: LONG,
6783     pvExtraPolicyStatus: *mut c_void,
6784 }}
6785 pub type PCERT_CHAIN_POLICY_STATUS = *mut CERT_CHAIN_POLICY_STATUS;
6786 pub const CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG: DWORD = 0x00000001;
6787 pub const CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG: DWORD = 0x00000002;
6788 pub const CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG: DWORD = 0x00000004;
6789 pub const CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG: DWORD = 0x00000008;
6790 pub const CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS: DWORD
6791     = CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG
6792     | CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG
6793     | CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG;
6794 pub const CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG: DWORD = 0x00000010;
6795 pub const CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG: DWORD = 0x00000020;
6796 pub const CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG: DWORD = 0x00000040;
6797 pub const CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG: DWORD = 0x00000080;
6798 pub const CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG: DWORD = 0x00000100;
6799 pub const CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG: DWORD = 0x00000200;
6800 pub const CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG: DWORD = 0x00000400;
6801 pub const CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG: DWORD = 0x00000800;
6802 pub const CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS: DWORD
6803     = CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG
6804     | CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG
6805     | CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG
6806     | CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG;
6807 pub const CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG: DWORD = 0x00008000;
6808 pub const CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG: DWORD = 0x00004000;
6809 pub const CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG: DWORD = 0x00002000;
6810 pub const CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG: DWORD = 0x00001000;
6811 pub const CERT_CHAIN_POLICY_IGNORE_WEAK_SIGNATURE_FLAG: DWORD = 0x08000000;
6812 extern "system" {
CertVerifyCertificateChainPolicy( pszPolicyOID: LPCSTR, pChainContext: PCCERT_CHAIN_CONTEXT, pPolicyPara: PCERT_CHAIN_POLICY_PARA, pPolicyStatus: PCERT_CHAIN_POLICY_STATUS, ) -> BOOL6813     pub fn CertVerifyCertificateChainPolicy(
6814         pszPolicyOID: LPCSTR,
6815         pChainContext: PCCERT_CHAIN_CONTEXT,
6816         pPolicyPara: PCERT_CHAIN_POLICY_PARA,
6817         pPolicyStatus: PCERT_CHAIN_POLICY_STATUS,
6818     ) -> BOOL;
6819 }
6820 pub const CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC: &'static str
6821     = "CertDllVerifyCertificateChainPolicy";
6822 pub const CERT_CHAIN_POLICY_BASE: LPCSTR = 1 as LPCSTR;
6823 pub const CERT_CHAIN_POLICY_AUTHENTICODE: LPCSTR = 2 as LPCSTR;
6824 pub const CERT_CHAIN_POLICY_AUTHENTICODE_TS: LPCSTR = 3 as LPCSTR;
6825 pub const CERT_CHAIN_POLICY_SSL: LPCSTR = 4 as LPCSTR;
6826 pub const CERT_CHAIN_POLICY_BASIC_CONSTRAINTS: LPCSTR = 5 as LPCSTR;
6827 pub const CERT_CHAIN_POLICY_NT_AUTH: LPCSTR = 6 as LPCSTR;
6828 pub const CERT_CHAIN_POLICY_MICROSOFT_ROOT: LPCSTR = 7 as LPCSTR;
6829 pub const CERT_CHAIN_POLICY_EV: LPCSTR = 8 as LPCSTR;
6830 pub const CERT_CHAIN_POLICY_SSL_F12: LPCSTR = 9 as LPCSTR;
6831 pub const CERT_CHAIN_POLICY_SSL_HPKP_HEADER: LPCSTR = 10 as LPCSTR;
6832 pub const CERT_CHAIN_POLICY_THIRD_PARTY_ROOT: LPCSTR = 11 as LPCSTR;
6833 pub const CERT_CHAIN_POLICY_SSL_KEY_PIN: LPCSTR = 12 as LPCSTR;
6834 STRUCT!{struct AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
6835     cbSize: DWORD,
6836     dwRegPolicySettings: DWORD,
6837     pSignerInfo: PCMSG_SIGNER_INFO,
6838 }}
6839 pub type PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA
6840     = *mut AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
6841 STRUCT!{struct AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
6842     cbSize: DWORD,
6843     fCommercial: BOOL,
6844 }}
6845 pub type PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS
6846     = *mut AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
6847 STRUCT!{struct AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
6848     cbSize: DWORD,
6849     dwRegPolicySettings: DWORD,
6850     fCommercial: BOOL,
6851 }}
6852 pub type PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA
6853     = *mut AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;
6854 UNION!{union HTTPSPolicyCallbackData_u {
6855     [u32; 1],
6856     cbStruct cbStruct_mut: DWORD,
6857     cbSize cbSize_mut: DWORD,
6858 }}
6859 STRUCT!{struct HTTPSPolicyCallbackData {
6860     u: HTTPSPolicyCallbackData_u,
6861     dwAuthType: DWORD,
6862     fdwChecks: DWORD,
6863     pwszServerName: *mut WCHAR,
6864 }}
6865 pub type PHTTPSPolicyCallbackData = *mut HTTPSPolicyCallbackData;
6866 pub type SSL_EXTRA_CERT_CHAIN_POLICY_PARA = HTTPSPolicyCallbackData;
6867 pub type PSSL_EXTRA_CERT_CHAIN_POLICY_PARA = *mut HTTPSPolicyCallbackData;
6868 pub const AUTHTYPE_CLIENT: DWORD = 1;
6869 pub const AUTHTYPE_SERVER: DWORD = 2;
6870 pub const BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG: DWORD = 0x80000000;
6871 pub const BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG: DWORD = 0x40000000;
6872 pub const MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG: DWORD = 0x00010000;
6873 pub const MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG: DWORD = 0x00020000;
6874 pub const MICROSOFT_ROOT_CERT_CHAIN_POLICY_DISABLE_FLIGHT_ROOT_FLAG: DWORD = 0x00040000;
6875 STRUCT!{struct EV_EXTRA_CERT_CHAIN_POLICY_PARA {
6876     cbSize: DWORD,
6877     dwRootProgramQualifierFlags: DWORD,
6878 }}
6879 pub type PEV_EXTRA_CERT_CHAIN_POLICY_PARA = *mut EV_EXTRA_CERT_CHAIN_POLICY_PARA;
6880 STRUCT!{struct EV_EXTRA_CERT_CHAIN_POLICY_STATUS {
6881     cbSize: DWORD,
6882     dwQualifiers: DWORD,
6883     dwIssuanceUsageIndex: DWORD,
6884 }}
6885 pub type PEV_EXTRA_CERT_CHAIN_POLICY_STATUS = *mut EV_EXTRA_CERT_CHAIN_POLICY_STATUS;
6886 pub const SSL_F12_ERROR_TEXT_LENGTH: usize = 256;
6887 STRUCT!{struct SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS {
6888     cbSize: DWORD,
6889     dwErrorLevel: DWORD,
6890     dwErrorCategory: DWORD,
6891     dwReserved: DWORD,
6892     wszErrorText: [WCHAR; SSL_F12_ERROR_TEXT_LENGTH],
6893 }}
6894 pub type PSSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS = *mut SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS;
6895 pub const CERT_CHAIN_POLICY_SSL_F12_SUCCESS_LEVEL: DWORD = 0;
6896 pub const CERT_CHAIN_POLICY_SSL_F12_WARNING_LEVEL: DWORD = 1;
6897 pub const CERT_CHAIN_POLICY_SSL_F12_ERROR_LEVEL: DWORD = 2;
6898 pub const CERT_CHAIN_POLICY_SSL_F12_NONE_CATEGORY: DWORD = 0;
6899 pub const CERT_CHAIN_POLICY_SSL_F12_WEAK_CRYPTO_CATEGORY: DWORD = 1;
6900 pub const CERT_CHAIN_POLICY_SSL_F12_ROOT_PROGRAM_CATEGORY: DWORD = 2;
6901 pub const SSL_HPKP_PKP_HEADER_INDEX: usize = 0;
6902 pub const SSL_HPKP_PKP_RO_HEADER_INDEX: usize = 1;
6903 pub const SSL_HPKP_HEADER_COUNT: usize = 2;
6904 STRUCT!{struct SSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA {
6905     cbSize: DWORD,
6906     dwReserved: DWORD,
6907     pwszServerName: LPWSTR,
6908     rgpszHpkpValue: [LPSTR; SSL_HPKP_HEADER_COUNT],
6909 }}
6910 pub type PSSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA
6911     = *mut SSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA;
6912 STRUCT!{struct SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA {
6913     cbSize: DWORD,
6914     dwReserved: DWORD,
6915     pwszServerName: PCWSTR,
6916 }}
6917 pub type PSSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA = *mut SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA;
6918 pub const SSL_KEY_PIN_ERROR_TEXT_LENGTH: usize = 512;
6919 STRUCT!{struct SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS {
6920     cbSize: DWORD,
6921     lError: LONG,
6922     wszErrorText: [WCHAR; SSL_KEY_PIN_ERROR_TEXT_LENGTH],
6923 }}
6924 pub type PSSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS
6925     = *mut SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS;
6926 pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_MISMATCH_ERROR: LONG = -2;
6927 pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_MITM_ERROR: LONG = -1;
6928 pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_SUCCESS: LONG = 0;
6929 pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_MITM_WARNING: LONG = 1;
6930 pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_MISMATCH_WARNING: LONG = 2;
6931 extern "system" {
CryptStringToBinaryA( pszString: LPCSTR, cchString: DWORD, dwFlags: DWORD, pbBinary: *mut BYTE, pcbBinary: *mut DWORD, pdwSkip: *mut DWORD, pdwFlags: *mut DWORD, ) -> BOOL6932     pub fn CryptStringToBinaryA(
6933         pszString: LPCSTR,
6934         cchString: DWORD,
6935         dwFlags: DWORD,
6936         pbBinary: *mut BYTE,
6937         pcbBinary: *mut DWORD,
6938         pdwSkip: *mut DWORD,
6939         pdwFlags: *mut DWORD,
6940     ) -> BOOL;
CryptStringToBinaryW( pszString: LPCWSTR, cchString: DWORD, dwFlags: DWORD, pbBinary: *mut BYTE, pcbBinary: *mut DWORD, pdwSkip: *mut DWORD, pdwFlags: *mut DWORD, ) -> BOOL6941     pub fn CryptStringToBinaryW(
6942         pszString: LPCWSTR,
6943         cchString: DWORD,
6944         dwFlags: DWORD,
6945         pbBinary: *mut BYTE,
6946         pcbBinary: *mut DWORD,
6947         pdwSkip: *mut DWORD,
6948         pdwFlags: *mut DWORD,
6949     ) -> BOOL;
CryptBinaryToStringA( pbBinary: *const BYTE, cbBinary: DWORD, dwFlags: DWORD, pszString: LPSTR, pcchString: *mut DWORD, ) -> BOOL6950     pub fn CryptBinaryToStringA(
6951         pbBinary: *const BYTE,
6952         cbBinary: DWORD,
6953         dwFlags: DWORD,
6954         pszString: LPSTR,
6955         pcchString: *mut DWORD,
6956     ) -> BOOL;
CryptBinaryToStringW( pbBinary: *const BYTE, cbBinary: DWORD, dwFlags: DWORD, pszString: LPWSTR, pcchString: *mut DWORD, ) -> BOOL6957     pub fn CryptBinaryToStringW(
6958         pbBinary: *const BYTE,
6959         cbBinary: DWORD,
6960         dwFlags: DWORD,
6961         pszString: LPWSTR,
6962         pcchString: *mut DWORD,
6963     ) -> BOOL;
6964 }
6965 pub const CRYPT_STRING_BASE64HEADER: DWORD = 0x00000000;
6966 pub const CRYPT_STRING_BASE64: DWORD = 0x00000001;
6967 pub const CRYPT_STRING_BINARY: DWORD = 0x00000002;
6968 pub const CRYPT_STRING_BASE64REQUESTHEADER: DWORD = 0x00000003;
6969 pub const CRYPT_STRING_HEX: DWORD = 0x00000004;
6970 pub const CRYPT_STRING_HEXASCII: DWORD = 0x00000005;
6971 pub const CRYPT_STRING_BASE64_ANY: DWORD = 0x00000006;
6972 pub const CRYPT_STRING_ANY: DWORD = 0x00000007;
6973 pub const CRYPT_STRING_HEX_ANY: DWORD = 0x00000008;
6974 pub const CRYPT_STRING_BASE64X509CRLHEADER: DWORD = 0x00000009;
6975 pub const CRYPT_STRING_HEXADDR: DWORD = 0x0000000a;
6976 pub const CRYPT_STRING_HEXASCIIADDR: DWORD = 0x0000000b;
6977 pub const CRYPT_STRING_HEXRAW: DWORD = 0x0000000c;
6978 pub const CRYPT_STRING_BASE64URI: DWORD = 0x0000000d;
6979 pub const CRYPT_STRING_ENCODEMASK: DWORD = 0x000000ff;
6980 pub const CRYPT_STRING_RESERVED100: DWORD = 0x00000100;
6981 pub const CRYPT_STRING_RESERVED200: DWORD = 0x00000200;
6982 pub const CRYPT_STRING_PERCENTESCAPE: DWORD = 0x08000000;
6983 pub const CRYPT_STRING_HASHDATA: DWORD = 0x10000000;
6984 pub const CRYPT_STRING_STRICT: DWORD = 0x20000000;
6985 pub const CRYPT_STRING_NOCRLF: DWORD = 0x40000000;
6986 pub const CRYPT_STRING_NOCR: DWORD = 0x80000000;
6987 pub const szOID_PKCS_12_PbeIds: &'static str = "1.2.840.113549.1.12.1";
6988 pub const szOID_PKCS_12_pbeWithSHA1And128BitRC4: &'static str = "1.2.840.113549.1.12.1.1";
6989 pub const szOID_PKCS_12_pbeWithSHA1And40BitRC4: &'static str = "1.2.840.113549.1.12.1.2";
6990 pub const szOID_PKCS_12_pbeWithSHA1And3KeyTripleDES: &'static str = "1.2.840.113549.1.12.1.3";
6991 pub const szOID_PKCS_12_pbeWithSHA1And2KeyTripleDES: &'static str = "1.2.840.113549.1.12.1.4";
6992 pub const szOID_PKCS_12_pbeWithSHA1And128BitRC2: &'static str = "1.2.840.113549.1.12.1.5";
6993 pub const szOID_PKCS_12_pbeWithSHA1And40BitRC2: &'static str = "1.2.840.113549.1.12.1.6";
6994 STRUCT!{struct CRYPT_PKCS12_PBE_PARAMS {
6995     iIterations: c_int,
6996     cbSalt: ULONG,
6997 }}
6998 extern "system" {
PFXImportCertStore( pPFX: *mut CRYPT_DATA_BLOB, szPassword: LPCWSTR, dwFlags: DWORD, ) -> HCERTSTORE6999     pub fn PFXImportCertStore(
7000         pPFX: *mut CRYPT_DATA_BLOB,
7001         szPassword: LPCWSTR,
7002         dwFlags: DWORD,
7003     ) -> HCERTSTORE;
7004 }
7005 pub const PKCS12_IMPORT_SILENT: DWORD = 0x00000040;
7006 pub const CRYPT_USER_KEYSET: DWORD = 0x00001000;
7007 pub const PKCS12_PREFER_CNG_KSP: DWORD = 0x00000100;
7008 pub const PKCS12_ALWAYS_CNG_KSP: DWORD = 0x00000200;
7009 pub const PKCS12_ONLY_CERTIFICATES: DWORD = 0x00000400;
7010 pub const PKCS12_ONLY_NOT_ENCRYPTED_CERTIFICATES: DWORD = 0x00000800;
7011 pub const PKCS12_ALLOW_OVERWRITE_KEY: DWORD = 0x00004000;
7012 pub const PKCS12_NO_PERSIST_KEY: DWORD = 0x00008000;
7013 pub const PKCS12_IMPORT_RESERVED_MASK: DWORD = 0xffff0000;
7014 pub const PKCS12_OBJECT_LOCATOR_ALL_IMPORT_FLAGS: DWORD = PKCS12_ALWAYS_CNG_KSP
7015     | PKCS12_NO_PERSIST_KEY | PKCS12_IMPORT_SILENT | PKCS12_INCLUDE_EXTENDED_PROPERTIES;
7016 pub const PKCS12_ONLY_CERTIFICATES_PROVIDER_TYPE: DWORD = 0;
7017 pub const PKCS12_ONLY_CERTIFICATES_PROVIDER_NAME: &'static str = "PfxProvider";
7018 pub const PKCS12_ONLY_CERTIFICATES_CONTAINER_NAME: &'static str = "PfxContainer";
7019 extern "system" {
PFXIsPFXBlob( pPFX: *mut CRYPT_DATA_BLOB, ) -> BOOL7020     pub fn PFXIsPFXBlob(
7021         pPFX: *mut CRYPT_DATA_BLOB,
7022     ) -> BOOL;
PFXVerifyPassword( pPFX: *mut CRYPT_DATA_BLOB, szPassword: LPCWSTR, dwFlags: DWORD, ) -> BOOL7023     pub fn PFXVerifyPassword(
7024         pPFX: *mut CRYPT_DATA_BLOB,
7025         szPassword: LPCWSTR,
7026         dwFlags: DWORD,
7027     ) -> BOOL;
PFXExportCertStoreEx( hStore: HCERTSTORE, pPFX: *mut CRYPT_DATA_BLOB, szPassword: LPCWSTR, pvPara: *mut c_void, dwFlags: DWORD, ) -> BOOL7028     pub fn PFXExportCertStoreEx(
7029         hStore: HCERTSTORE,
7030         pPFX: *mut CRYPT_DATA_BLOB,
7031         szPassword: LPCWSTR,
7032         pvPara: *mut c_void,
7033         dwFlags: DWORD,
7034     ) -> BOOL;
7035 }
7036 pub const REPORT_NO_PRIVATE_KEY: DWORD = 0x0001;
7037 pub const REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY: DWORD = 0x0002;
7038 pub const EXPORT_PRIVATE_KEYS: DWORD = 0x0004;
7039 pub const PKCS12_INCLUDE_EXTENDED_PROPERTIES: DWORD = 0x0010;
7040 pub const PKCS12_PROTECT_TO_DOMAIN_SIDS: DWORD = 0x0020;
7041 pub const PKCS12_EXPORT_SILENT: DWORD = 0x0040;
7042 pub const PKCS12_DISABLE_ENCRYPT_CERTIFICATES: DWORD = 0x0100;
7043 pub const PKCS12_ENCRYPT_CERTIFICATES: DWORD = 0x0200;
7044 pub const PKCS12_EXPORT_ECC_CURVE_PARAMETERS: DWORD = 0x1000;
7045 pub const PKCS12_EXPORT_ECC_CURVE_OID: DWORD = 0x2000;
7046 pub const PKCS12_EXPORT_RESERVED_MASK: DWORD = 0xffff0000;
7047 pub const PKCS12_CONFIG_REGPATH: &'static str
7048     = "Software\\Microsoft\\Windows\\CurrentVersion\\PFX";
7049 pub const PKCS12_ENCRYPT_CERTIFICATES_VALUE_NAME: &'static str = "EncryptCertificates";
7050 extern "system" {
PFXExportCertStore( hStore: HCERTSTORE, pPFX: *mut CRYPT_DATA_BLOB, szPassword: LPCWSTR, dwFlags: DWORD, ) -> BOOL7051     pub fn PFXExportCertStore(
7052         hStore: HCERTSTORE,
7053         pPFX: *mut CRYPT_DATA_BLOB,
7054         szPassword: LPCWSTR,
7055         dwFlags: DWORD,
7056     ) -> BOOL;
7057 }
7058 pub type HCERT_SERVER_OCSP_RESPONSE = *mut c_void;
7059 pub type PCERT_SERVER_OCSP_RESPONSE_CONTEXT = *mut CERT_SERVER_OCSP_RESPONSE_CONTEXT;
7060 pub type PCCERT_SERVER_OCSP_RESPONSE_CONTEXT = *const CERT_SERVER_OCSP_RESPONSE_CONTEXT;
7061 STRUCT!{struct CERT_SERVER_OCSP_RESPONSE_CONTEXT {
7062     cbSize: DWORD,
7063     pbEncodedOcspResponse: *mut BYTE,
7064     cbEncodedOcspResponse: DWORD,
7065 }}
7066 FN!{stdcall PFN_CERT_SERVER_OCSP_RESPONSE_UPDATE_CALLBACK(
7067     pChainContext: PCCERT_CHAIN_CONTEXT,
7068     pServerOcspResponseContext: PCCERT_SERVER_OCSP_RESPONSE_CONTEXT,
7069     pNewCrlContext: PCCRL_CONTEXT,
7070     pPrevCrlContext: PCCRL_CONTEXT,
7071     pvArg: PVOID,
7072     dwWriteOcspFileError: DWORD,
7073 ) -> ()}
7074 STRUCT!{struct CERT_SERVER_OCSP_RESPONSE_OPEN_PARA {
7075     cbSize: DWORD,
7076     dwFlags: DWORD,
7077     pcbUsedSize: *mut DWORD,
7078     pwszOcspDirectory: PWSTR,
7079     pfnUpdateCallback: PFN_CERT_SERVER_OCSP_RESPONSE_UPDATE_CALLBACK,
7080     pvUpdateCallbackArg: PVOID,
7081 }}
7082 pub type PCERT_SERVER_OCSP_RESPONSE_OPEN_PARA = *mut CERT_SERVER_OCSP_RESPONSE_OPEN_PARA;
7083 pub const CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_READ_FLAG: DWORD = 0x00000001;
7084 pub const CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_WRITE_FLAG: DWORD = 0x00000002;
7085 extern "system" {
CertOpenServerOcspResponse( pChainContext: PCCERT_CHAIN_CONTEXT, dwFlags: DWORD, pvReserved: LPVOID, ) -> HCERT_SERVER_OCSP_RESPONSE7086     pub fn CertOpenServerOcspResponse(
7087         pChainContext: PCCERT_CHAIN_CONTEXT,
7088         dwFlags: DWORD,
7089         pvReserved: LPVOID,
7090     ) -> HCERT_SERVER_OCSP_RESPONSE;
7091 }
7092 pub const CERT_SERVER_OCSP_RESPONSE_ASYNC_FLAG: DWORD = 0x00000001;
7093 extern "system" {
CertAddRefServerOcspResponse( hServerOcspResponse: HCERT_SERVER_OCSP_RESPONSE, )7094     pub fn CertAddRefServerOcspResponse(
7095         hServerOcspResponse: HCERT_SERVER_OCSP_RESPONSE,
7096     );
CertCloseServerOcspResponse( hServerOcspResponse: HCERT_SERVER_OCSP_RESPONSE, dwFlags: DWORD, )7097     pub fn CertCloseServerOcspResponse(
7098         hServerOcspResponse: HCERT_SERVER_OCSP_RESPONSE,
7099         dwFlags: DWORD,
7100     );
CertGetServerOcspResponseContext( hServerOcspResponse: HCERT_SERVER_OCSP_RESPONSE, dwFlags: DWORD, pvReserved: LPVOID, ) -> PCCERT_SERVER_OCSP_RESPONSE_CONTEXT7101     pub fn CertGetServerOcspResponseContext(
7102         hServerOcspResponse: HCERT_SERVER_OCSP_RESPONSE,
7103         dwFlags: DWORD,
7104         pvReserved: LPVOID,
7105     ) -> PCCERT_SERVER_OCSP_RESPONSE_CONTEXT;
CertAddRefServerOcspResponseContext( pServerOcspResponseContext: PCCERT_SERVER_OCSP_RESPONSE_CONTEXT, )7106     pub fn CertAddRefServerOcspResponseContext(
7107         pServerOcspResponseContext: PCCERT_SERVER_OCSP_RESPONSE_CONTEXT,
7108     );
CertFreeServerOcspResponseContext( pServerOcspResponseContext: PCCERT_SERVER_OCSP_RESPONSE_CONTEXT, )7109     pub fn CertFreeServerOcspResponseContext(
7110         pServerOcspResponseContext: PCCERT_SERVER_OCSP_RESPONSE_CONTEXT,
7111     );
CertRetrieveLogoOrBiometricInfo( pCertContext: PCCERT_CONTEXT, lpszLogoOrBiometricType: LPCSTR, dwRetrievalFlags: DWORD, dwTimeout: DWORD, dwFlags: DWORD, pvReserved: *mut c_void, ppbData: *mut *mut BYTE, pcbData: *mut DWORD, ppwszMimeType: *mut LPWSTR, ) -> BOOL7112     pub fn CertRetrieveLogoOrBiometricInfo(
7113         pCertContext: PCCERT_CONTEXT,
7114         lpszLogoOrBiometricType: LPCSTR,
7115         dwRetrievalFlags: DWORD,
7116         dwTimeout: DWORD,
7117         dwFlags: DWORD,
7118         pvReserved: *mut c_void,
7119         ppbData: *mut *mut BYTE,
7120         pcbData: *mut DWORD,
7121         ppwszMimeType: *mut LPWSTR,
7122     ) -> BOOL;
7123 }
7124 pub const CERT_RETRIEVE_ISSUER_LOGO: LPCSTR = 1 as LPCSTR;
7125 pub const CERT_RETRIEVE_SUBJECT_LOGO: LPCSTR = 2 as LPCSTR;
7126 pub const CERT_RETRIEVE_COMMUNITY_LOGO: LPCSTR = 3 as LPCSTR;
7127 pub const CERT_RETRIEVE_BIOMETRIC_PREDEFINED_BASE_TYPE: LPCSTR = 1000 as LPCSTR;
7128 pub const CERT_RETRIEVE_BIOMETRIC_PICTURE_TYPE: LPCSTR
7129     = (1000 + CERT_BIOMETRIC_PICTURE_TYPE) as LPCSTR;
7130 pub const CERT_RETRIEVE_BIOMETRIC_SIGNATURE_TYPE: LPCSTR
7131     = (1000 + CERT_BIOMETRIC_SIGNATURE_TYPE) as LPCSTR;
7132 STRUCT!{struct CERT_SELECT_CHAIN_PARA {
7133     hChainEngine: HCERTCHAINENGINE,
7134     pTime: PFILETIME,
7135     hAdditionalStore: HCERTSTORE,
7136     pChainPara: PCERT_CHAIN_PARA,
7137     dwFlags: DWORD,
7138 }}
7139 pub type PCERT_SELECT_CHAIN_PARA = *mut CERT_SELECT_CHAIN_PARA;
7140 pub type PCCERT_SELECT_CHAIN_PARA = *const CERT_SELECT_CHAIN_PARA;
7141 pub const CERT_SELECT_MAX_PARA: DWORD = 500;
7142 STRUCT!{struct CERT_SELECT_CRITERIA {
7143     dwType: DWORD,
7144     cPara: DWORD,
7145     ppPara: *mut *mut c_void,
7146 }}
7147 pub type PCERT_SELECT_CRITERIA = *mut CERT_SELECT_CRITERIA;
7148 pub type PCCERT_SELECT_CRITERIA = *const CERT_SELECT_CRITERIA;
7149 pub const CERT_SELECT_BY_ENHKEY_USAGE: DWORD = 1;
7150 pub const CERT_SELECT_BY_KEY_USAGE: DWORD = 2;
7151 pub const CERT_SELECT_BY_POLICY_OID: DWORD = 3;
7152 pub const CERT_SELECT_BY_PROV_NAME: DWORD = 4;
7153 pub const CERT_SELECT_BY_EXTENSION: DWORD = 5;
7154 pub const CERT_SELECT_BY_SUBJECT_HOST_NAME: DWORD = 6;
7155 pub const CERT_SELECT_BY_ISSUER_ATTR: DWORD = 7;
7156 pub const CERT_SELECT_BY_SUBJECT_ATTR: DWORD = 8;
7157 pub const CERT_SELECT_BY_ISSUER_NAME: DWORD = 9;
7158 pub const CERT_SELECT_BY_PUBLIC_KEY: DWORD = 10;
7159 pub const CERT_SELECT_BY_TLS_SIGNATURES: DWORD = 11;
7160 pub const CERT_SELECT_BY_ISSUER_DISPLAYNAME: DWORD = 12;
7161 pub const CERT_SELECT_BY_FRIENDLYNAME: DWORD = 13;
7162 pub const CERT_SELECT_BY_THUMBPRINT: DWORD = 14;
7163 pub const CERT_SELECT_LAST: DWORD = CERT_SELECT_BY_TLS_SIGNATURES;
7164 pub const CERT_SELECT_MAX: DWORD = CERT_SELECT_LAST * 3;
7165 pub const CERT_SELECT_ALLOW_EXPIRED: DWORD = 0x00000001;
7166 pub const CERT_SELECT_TRUSTED_ROOT: DWORD = 0x00000002;
7167 pub const CERT_SELECT_DISALLOW_SELFSIGNED: DWORD = 0x00000004;
7168 pub const CERT_SELECT_HAS_PRIVATE_KEY: DWORD = 0x00000008;
7169 pub const CERT_SELECT_HAS_KEY_FOR_SIGNATURE: DWORD = 0x00000010;
7170 pub const CERT_SELECT_HAS_KEY_FOR_KEY_EXCHANGE: DWORD = 0x00000020;
7171 pub const CERT_SELECT_HARDWARE_ONLY: DWORD = 0x00000040;
7172 pub const CERT_SELECT_ALLOW_DUPLICATES: DWORD = 0x00000080;
7173 pub const CERT_SELECT_IGNORE_AUTOSELECT: DWORD = 0x00000100;
7174 extern "system" {
CertSelectCertificateChains( pSelectionContext: LPCGUID, dwFlags: DWORD, pChainParameters: PCCERT_SELECT_CHAIN_PARA, cCriteria: DWORD, rgpCriteria: PCCERT_SELECT_CRITERIA, hStore: HCERTSTORE, pcSelection: PDWORD, pprgpSelection: *mut *mut PCCERT_CHAIN_CONTEXT, ) -> BOOL7175     pub fn CertSelectCertificateChains(
7176         pSelectionContext: LPCGUID,
7177         dwFlags: DWORD,
7178         pChainParameters: PCCERT_SELECT_CHAIN_PARA,
7179         cCriteria: DWORD,
7180         rgpCriteria: PCCERT_SELECT_CRITERIA,
7181         hStore: HCERTSTORE,
7182         pcSelection: PDWORD,
7183         pprgpSelection: *mut *mut PCCERT_CHAIN_CONTEXT,
7184     ) -> BOOL;
CertFreeCertificateChainList( prgpSelection: *mut PCCERT_CHAIN_CONTEXT, )7185     pub fn CertFreeCertificateChainList(
7186         prgpSelection: *mut PCCERT_CHAIN_CONTEXT,
7187     );
7188 }
7189 pub const TIMESTAMP_VERSION: DWORD = 1;
7190 STRUCT!{struct CRYPT_TIMESTAMP_REQUEST {
7191     dwVersion: DWORD,
7192     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
7193     HashedMessage: CRYPT_DER_BLOB,
7194     pszTSAPolicyId: LPSTR,
7195     Nonce: CRYPT_INTEGER_BLOB,
7196     fCertReq: BOOL,
7197     cExtension: DWORD,
7198     rgExtension: PCERT_EXTENSION,
7199 }}
7200 pub type PCRYPT_TIMESTAMP_REQUEST = *mut CRYPT_TIMESTAMP_REQUEST;
7201 STRUCT!{struct CRYPT_TIMESTAMP_RESPONSE {
7202     dwStatus: DWORD,
7203     cFreeText: DWORD,
7204     rgFreeText: *mut LPWSTR,
7205     FailureInfo: CRYPT_BIT_BLOB,
7206     ContentInfo: CRYPT_DER_BLOB,
7207 }}
7208 pub type PCRYPT_TIMESTAMP_RESPONSE = *mut CRYPT_TIMESTAMP_RESPONSE;
7209 pub const TIMESTAMP_STATUS_GRANTED: DWORD = 0;
7210 pub const TIMESTAMP_STATUS_GRANTED_WITH_MODS: DWORD = 1;
7211 pub const TIMESTAMP_STATUS_REJECTED: DWORD = 2;
7212 pub const TIMESTAMP_STATUS_WAITING: DWORD = 3;
7213 pub const TIMESTAMP_STATUS_REVOCATION_WARNING: DWORD = 4;
7214 pub const TIMESTAMP_STATUS_REVOKED: DWORD = 5;
7215 pub const TIMESTAMP_FAILURE_BAD_ALG: DWORD = 0;
7216 pub const TIMESTAMP_FAILURE_BAD_REQUEST: DWORD = 2;
7217 pub const TIMESTAMP_FAILURE_BAD_FORMAT: DWORD = 5;
7218 pub const TIMESTAMP_FAILURE_TIME_NOT_AVAILABLE: DWORD = 14;
7219 pub const TIMESTAMP_FAILURE_POLICY_NOT_SUPPORTED: DWORD = 15;
7220 pub const TIMESTAMP_FAILURE_EXTENSION_NOT_SUPPORTED: DWORD = 16;
7221 pub const TIMESTAMP_FAILURE_INFO_NOT_AVAILABLE: DWORD = 17;
7222 pub const TIMESTAMP_FAILURE_SYSTEM_FAILURE: DWORD = 25;
7223 STRUCT!{struct CRYPT_TIMESTAMP_ACCURACY {
7224     dwSeconds: DWORD,
7225     dwMillis: DWORD,
7226     dwMicros: DWORD,
7227 }}
7228 pub type PCRYPT_TIMESTAMP_ACCURACY = *mut CRYPT_TIMESTAMP_ACCURACY;
7229 STRUCT!{struct CRYPT_TIMESTAMP_INFO {
7230     dwVersion: DWORD,
7231     pszTSAPolicyId: LPSTR,
7232     HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
7233     HashedMessage: CRYPT_DER_BLOB,
7234     SerialNumber: CRYPT_INTEGER_BLOB,
7235     ftTime: FILETIME,
7236     pvAccuracy: PCRYPT_TIMESTAMP_ACCURACY,
7237     fOrdering: BOOL,
7238     Nonce: CRYPT_DER_BLOB,
7239     Tsa: CRYPT_DER_BLOB,
7240     cExtension: DWORD,
7241     rgExtension: PCERT_EXTENSION,
7242 }}
7243 pub type PCRYPT_TIMESTAMP_INFO = *mut CRYPT_TIMESTAMP_INFO;
7244 STRUCT!{struct CRYPT_TIMESTAMP_CONTEXT {
7245     cbEncoded: DWORD,
7246     pbEncoded: *mut BYTE,
7247     pTimeStamp: PCRYPT_TIMESTAMP_INFO,
7248 }}
7249 pub type PCRYPT_TIMESTAMP_CONTEXT = *mut CRYPT_TIMESTAMP_CONTEXT;
7250 STRUCT!{struct CRYPT_TIMESTAMP_PARA {
7251     pszTSAPolicyId: LPCSTR,
7252     fRequestCerts: BOOL,
7253     Nonce: CRYPT_INTEGER_BLOB,
7254     cExtension: DWORD,
7255     rgExtension: PCERT_EXTENSION,
7256 }}
7257 pub type PCRYPT_TIMESTAMP_PARA = *mut CRYPT_TIMESTAMP_PARA;
7258 extern "system" {
CryptRetrieveTimeStamp( wszUrl: LPCWSTR, dwRetrievalFlags: DWORD, dwTimeout: DWORD, pszHashId: LPCSTR, pPara: *const CRYPT_TIMESTAMP_PARA, pbData: *const BYTE, cbData: DWORD, ppTsContext: *mut PCRYPT_TIMESTAMP_CONTEXT, ppTsSigner: *mut PCCERT_CONTEXT, phStore: *mut HCERTSTORE, ) -> BOOL7259     pub fn CryptRetrieveTimeStamp(
7260         wszUrl: LPCWSTR,
7261         dwRetrievalFlags: DWORD,
7262         dwTimeout: DWORD,
7263         pszHashId: LPCSTR,
7264         pPara: *const CRYPT_TIMESTAMP_PARA,
7265         pbData: *const BYTE,
7266         cbData: DWORD,
7267         ppTsContext: *mut PCRYPT_TIMESTAMP_CONTEXT,
7268         ppTsSigner: *mut PCCERT_CONTEXT,
7269         phStore: *mut HCERTSTORE,
7270     ) -> BOOL;
7271 }
7272 pub const TIMESTAMP_DONT_HASH_DATA: DWORD = 0x00000001;
7273 pub const TIMESTAMP_VERIFY_CONTEXT_SIGNATURE: DWORD = 0x00000020;
7274 pub const TIMESTAMP_NO_AUTH_RETRIEVAL: DWORD = 0x00020000;
7275 extern "system" {
CryptVerifyTimeStampSignature( pbTSContentInfo: *const BYTE, cbTSContentInfo: DWORD, pbData: *const BYTE, cbData: DWORD, hAdditionalStore: HCERTSTORE, ppTsContext: *mut PCRYPT_TIMESTAMP_CONTEXT, ppTsSigner: *mut PCCERT_CONTEXT, phStore: *mut HCERTSTORE, ) -> BOOL7276     pub fn CryptVerifyTimeStampSignature(
7277         pbTSContentInfo: *const BYTE,
7278         cbTSContentInfo: DWORD,
7279         pbData: *const BYTE,
7280         cbData: DWORD,
7281         hAdditionalStore: HCERTSTORE,
7282         ppTsContext: *mut PCRYPT_TIMESTAMP_CONTEXT,
7283         ppTsSigner: *mut PCCERT_CONTEXT,
7284         phStore: *mut HCERTSTORE,
7285     ) -> BOOL;
7286 }
7287 pub const CRYPT_OBJECT_LOCATOR_SPN_NAME_TYPE: DWORD = 1;
7288 pub const CRYPT_OBJECT_LOCATOR_LAST_RESERVED_NAME_TYPE: DWORD = 32;
7289 pub const CRYPT_OBJECT_LOCATOR_FIRST_RESERVED_USER_NAME_TYPE: DWORD = 33;
7290 pub const CRYPT_OBJECT_LOCATOR_LAST_RESERVED_USER_NAME_TYPE: DWORD = 0x0000FFFF;
7291 pub const SSL_OBJECT_LOCATOR_PFX_FUNC: &'static str = "SslObjectLocatorInitializePfx";
7292 pub const SSL_OBJECT_LOCATOR_ISSUER_LIST_FUNC: &'static str
7293     = "SslObjectLocatorInitializeIssuerList";
7294 pub const SSL_OBJECT_LOCATOR_CERT_VALIDATION_CONFIG_FUNC: &'static str
7295     = "SslObjectLocatorInitializeCertValidationConfig";
7296 pub const CRYPT_OBJECT_LOCATOR_RELEASE_SYSTEM_SHUTDOWN: DWORD = 1;
7297 pub const CRYPT_OBJECT_LOCATOR_RELEASE_SERVICE_STOP: DWORD = 2;
7298 pub const CRYPT_OBJECT_LOCATOR_RELEASE_PROCESS_EXIT: DWORD = 3;
7299 pub const CRYPT_OBJECT_LOCATOR_RELEASE_DLL_UNLOAD: DWORD = 4;
7300 FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FLUSH(
7301     pContext: LPVOID,
7302     rgIdentifierOrNameList: *mut PCERT_NAME_BLOB,
7303     dwIdentifierOrNameListCount: DWORD,
7304 ) -> BOOL}
7305 FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET(
7306     pPluginContext: LPVOID,
7307     pIdentifier: PCRYPT_DATA_BLOB,
7308     dwNameType: DWORD,
7309     pNameBlob: PCERT_NAME_BLOB,
7310     ppbContent: *mut PBYTE,
7311     pcbContent: *mut DWORD,
7312     ppwszPassword: *mut PCWSTR,
7313     ppIdentifier: *mut PCRYPT_DATA_BLOB,
7314 ) -> BOOL}
7315 FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_RELEASE(
7316     dwReason: DWORD,
7317     pPluginContext: LPVOID,
7318 ) -> ()}
7319 FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_PASSWORD(
7320     pPluginContext: LPVOID,
7321     pwszPassword: PCWSTR,
7322 ) -> ()}
7323 FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE(
7324     pPluginContext: LPVOID,
7325     pbData: PBYTE,
7326 ) -> ()}
7327 FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_IDENTIFIER(
7328     pPluginContext: LPVOID,
7329     pIdentifier: PCRYPT_DATA_BLOB,
7330 ) -> ()}
7331 STRUCT!{struct CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE {
7332     cbSize: DWORD,
7333     pfnGet: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET,
7334     pfnRelease: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_RELEASE,
7335     pfnFreePassword: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_PASSWORD,
7336     pfnFree: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE,
7337     pfnFreeIdentifier: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_IDENTIFIER,
7338 }}
7339 pub type PCRYPT_OBJECT_LOCATOR_PROVIDER_TABLE = *mut CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE;
7340 FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_INITIALIZE(
7341     pfnFlush: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FLUSH,
7342     pContext: LPVOID,
7343     pdwExpectedObjectCount: *mut DWORD,
7344     ppFuncTable: *mut PCRYPT_OBJECT_LOCATOR_PROVIDER_TABLE,
7345     ppPluginContext: *mut *mut c_void,
7346 ) -> BOOL}
7347 extern "system" {
CertIsWeakHash( dwHashUseType: DWORD, pwszCNGHashAlgid: LPCWSTR, dwChainFlags: DWORD, pSignerChainContext: PCCERT_CHAIN_CONTEXT, pTimeStamp: LPFILETIME, pwszFileName: LPCWSTR, ) -> BOOL7348     pub fn CertIsWeakHash(
7349         dwHashUseType: DWORD,
7350         pwszCNGHashAlgid: LPCWSTR,
7351         dwChainFlags: DWORD,
7352         pSignerChainContext: PCCERT_CHAIN_CONTEXT,
7353         pTimeStamp: LPFILETIME,
7354         pwszFileName: LPCWSTR,
7355     ) -> BOOL;
7356 }
7357 FN!{stdcall PFN_CERT_IS_WEAK_HASH(
7358     dwHashUseType: DWORD,
7359     pwszCNGHashAlgid: LPCWSTR,
7360     dwChainFlags: DWORD,
7361     pSignerChainContext: PCCERT_CHAIN_CONTEXT,
7362     pTimeStamp: LPFILETIME,
7363     pwszFileName: LPCWSTR,
7364 ) -> BOOL}
7365 pub const CERT_FILE_HASH_USE_TYPE: DWORD = 1;
7366 pub const CERT_TIMESTAMP_HASH_USE_TYPE: DWORD = 2;
7367