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