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