root/trunk/win32/wincrypt.d

Revision 352, 26.2 kB (checked in by Yu Hozuki, 2 years ago)

Many argument types and return types were improved to const using CPtr template.
They follow the original headers.

Line 
1 /***********************************************************************\
2 *                               wincrypt.d                              *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                           by Stewart Gordon                           *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.wincrypt;
12
13 private import win32.w32api, win32.winbase, win32.windef;
14
15 /* FIXME:
16  *  Types of some constants
17  *  Types of macros
18  *  Inits of various "size" and "version" members
19  *  Why are some #ifdefs commented out?
20  */
21
22 const TCHAR[]
23     MS_DEF_PROV = "Microsoft Base Cryptographic Provider v1.0",
24     MS_ENHANCED_PROV = "Microsoft Enhanced Cryptographic Provider v1.0",
25     MS_STRONG_PROV = "Microsoft Strong Cryptographic Provider",
26     MS_DEF_RSA_SIG_PROV = "Microsoft RSA Signature Cryptographic Provider",
27     MS_DEF_RSA_SCHANNEL_PROV = "Microsoft RSA SChannel Cryptographic Provider",
28     MS_DEF_DSS_PROV = "Microsoft Base DSS Cryptographic Provider",
29     MS_DEF_DSS_DH_PROV
30       = "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider",
31     MS_ENH_DSS_DH_PROV
32       = "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider",
33     MS_DEF_DH_SCHANNEL_PROV = "Microsoft DH SChannel Cryptographic Provider",
34     MS_SCARD_PROV = "Microsoft Base Smart Card Crypto Provider";
35
36 static if (WINVER > 0x501) {
37     const TCHAR[] MS_ENH_RSA_AES_PROV
38       = "Microsoft Enhanced RSA and AES Cryptographic Provider";
39 } else static if (WINVER == 0x501) {
40     const TCHAR[] MS_ENH_RSA_AES_PROV
41       = "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)";
42 }
43
44 ALG_ID GET_ALG_CLASS(ALG_ID x) { return x & 0xE000; }
45 ALG_ID GET_ALG_TYPE (ALG_ID x) { return x & 0x1E00; }
46 ALG_ID GET_ALG_SID  (ALG_ID x) { return x & 0x01FF; }
47
48 enum : ALG_ID {
49     ALG_CLASS_ANY           = 0,
50     ALG_CLASS_SIGNATURE     = 0x2000,
51     ALG_CLASS_MSG_ENCRYPT   = 0x4000,
52     ALG_CLASS_DATA_ENCRYPT  = 0x6000,
53     ALG_CLASS_HASH          = 0x8000,
54     ALG_CLASS_KEY_EXCHANGE  = 0xA000,
55     ALG_CLASS_ALL           = 0xE000
56 }
57
58 enum : ALG_ID {
59     ALG_TYPE_ANY           = 0,
60     ALG_TYPE_DSS           = 0x0200,
61     ALG_TYPE_RSA           = 0x0400,
62     ALG_TYPE_BLOCK         = 0x0600,
63     ALG_TYPE_STREAM        = 0x0800,
64     ALG_TYPE_DH            = 0x0A00,
65     ALG_TYPE_SECURECHANNEL = 0x0C00
66 }
67
68 enum : ALG_ID {
69     ALG_SID_ANY          =  0,
70     ALG_SID_RSA_ANY      =  0,
71     ALG_SID_RSA_PKCS,
72     ALG_SID_RSA_MSATWORK,
73     ALG_SID_RSA_ENTRUST,
74     ALG_SID_RSA_PGP,  // =  4
75     ALG_SID_DSS_ANY      =  0,
76     ALG_SID_DSS_PKCS,
77     ALG_SID_DSS_DMS,  // =  2
78     ALG_SID_DES          =  1,
79     ALG_SID_3DES         =  3,
80     ALG_SID_DESX,
81     ALG_SID_IDEA,
82     ALG_SID_CAST,
83     ALG_SID_SAFERSK64,
84     ALG_SID_SAFERSK128,
85     ALG_SID_3DES_112,
86     ALG_SID_SKIPJACK,
87     ALG_SID_TEK,
88     ALG_SID_CYLINK_MEK,
89     ALG_SID_RC5,      // = 13
90     ALG_SID_RC2          =  2,
91     ALG_SID_RC4          =  1,
92     ALG_SID_SEAL         =  2,
93     ALG_SID_MD2          =  1,
94     ALG_SID_MD4,
95     ALG_SID_MD5,
96     ALG_SID_SHA,
97     ALG_SID_MAC,
98     ALG_SID_RIPEMD,
99     ALG_SID_RIPEMD160,
100     ALG_SID_SSL3SHAMD5,
101     ALG_SID_HMAC,
102     ALG_SID_TLS1PRF,  // = 10
103     ALG_SID_AES_128      = 14,
104     ALG_SID_AES_192,
105     ALG_SID_AES_256,
106     ALG_SID_AES,      // = 17
107     ALG_SID_EXAMPLE      = 80
108 }
109
110 enum : ALG_ID {
111     CALG_MD2        = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2,
112     CALG_MD4        = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4,
113     CALG_MD5        = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5,
114     CALG_SHA        = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA,
115     CALG_SHA1       = CALG_SHA,
116     CALG_MAC        = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC,
117     CALG_3DES       = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | 3,
118     CALG_CYLINK_MEK = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | 12,
119     CALG_SKIPJACK   = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | 10,
120     CALG_KEA_KEYX   = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_STREAM | ALG_TYPE_DSS | 4,
121     CALG_RSA_SIGN   = ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY,
122     CALG_DSS_SIGN   = ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY,
123     CALG_RSA_KEYX   = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY,
124     CALG_DES        = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES,
125     CALG_RC2        = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2,
126     CALG_RC4        = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4,
127     CALG_SEAL       = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL,
128     CALG_DH_EPHEM   = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_STREAM | ALG_TYPE_DSS
129                       | ALG_SID_DSS_DMS,
130     CALG_DESX       = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DESX,
131 // is undefined ALG_CLASS_DHASH in MinGW - presuming typo
132     CALG_TLS1PRF    = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF,
133     CALG_AES_128    = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128,
134     CALG_AES_192    = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192,
135     CALG_AES_256    = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256,
136     CALG_AES        = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES,
137 }
138
139 /+
140 #define CRYPT_VERIFYCONTEXT 0xF0000000
141 #define CRYPT_NEWKEYSET 8
142 #define CRYPT_DELETEKEYSET 16
143 #define CRYPT_MACHINE_KEYSET 32
144 #define CRYPT_SILENT 64
145 #define CRYPT_EXPORTABLE 1
146 #define CRYPT_USER_PROTECTED 2
147 #define CRYPT_CREATE_SALT 4
148 #define CRYPT_UPDATE_KEY 8
149 #define SIMPLEBLOB 1
150 #define PUBLICKEYBLOB 6
151 #define PRIVATEKEYBLOB 7
152 #define PLAINTEXTKEYBLOB 8
153 #define OPAQUEKEYBLOB 9
154 #define PUBLICKEYBLOBEX 10
155 #define SYMMETRICWRAPKEYBLOB 11
156 #define AT_KEYEXCHANGE 1
157 #define AT_SIGNATURE 2
158 #define CRYPT_USERDATA 1
159 #define PKCS5_PADDING 1
160 #define CRYPT_MODE_CBC 1
161 #define CRYPT_MODE_ECB 2
162 #define CRYPT_MODE_OFB 3
163 #define CRYPT_MODE_CFB 4
164 #define CRYPT_MODE_CTS 5
165 #define CRYPT_MODE_CBCI 6
166 #define CRYPT_MODE_CFBP 7
167 #define CRYPT_MODE_OFBP 8
168 #define CRYPT_MODE_CBCOFM 9
169 #define CRYPT_MODE_CBCOFMI 10
170 #define CRYPT_ENCRYPT 1
171 #define CRYPT_DECRYPT 2
172 #define CRYPT_EXPORT 4
173 #define CRYPT_READ 8
174 #define CRYPT_WRITE 16
175 #define CRYPT_MAC 32
176 #define HP_ALGID 1
177 #define HP_HASHVAL 2
178 #define HP_HASHSIZE 4
179 #define HP_HMAC_INFO 5
180 #define CRYPT_FAILED FALSE
181 #define CRYPT_SUCCEED TRUE
182 #define RCRYPT_SUCCEEDED(r) ((r)==CRYPT_SUCCEED)
183 #define RCRYPT_FAILED(r) ((r)==CRYPT_FAILED)
184 #define PP_ENUMALGS 1
185 #define PP_ENUMCONTAINERS 2
186 #define PP_IMPTYPE 3
187 #define PP_NAME 4
188 #define PP_VERSION 5
189 #define PP_CONTAINER 6
190 #define PP_CHANGE_PASSWORD  7
191 #define PP_KEYSET_SEC_DESCR 8
192 #define PP_CERTCHAIN    9
193 #define PP_KEY_TYPE_SUBTYPE 10
194 #define PP_PROVTYPE 16
195 #define PP_KEYSTORAGE   17
196 #define PP_APPLI_CERT   18
197 #define PP_SYM_KEYSIZE  19
198 #define PP_SESSION_KEYSIZE  20
199 #define PP_UI_PROMPT    21
200 #define PP_ENUMALGS_EX  22
201 #define PP_ENUMMANDROOTS 25
202 #define PP_ENUMELECTROOTS 26
203 #define PP_KEYSET_TYPE 27
204 #define PP_ADMIN_PIN 31
205 #define PP_KEYEXCHANGE_PIN 32
206 #define PP_SIGNATURE_PIN 33
207 #define PP_SIG_KEYSIZE_INC 34
208 #define PP_KEYX_KEYSIZE_INC 35
209 #define PP_UNIQUE_CONTAINER 36
210 #define PP_SGC_INFO 37
211 #define PP_USE_HARDWARE_RNG 38
212 #define PP_KEYSPEC 39
213 #define PP_ENUMEX_SIGNING_PROT 40
214 #define CRYPT_FIRST 1
215 #define CRYPT_NEXT 2
216 #define CRYPT_IMPL_HARDWARE 1
217 #define CRYPT_IMPL_SOFTWARE 2
218 #define CRYPT_IMPL_MIXED 3
219 #define CRYPT_IMPL_UNKNOWN 4
220 #define PROV_RSA_FULL 1
221 #define PROV_RSA_SIG 2
222 #define PROV_DSS 3
223 #define PROV_FORTEZZA 4
224 #define PROV_MS_MAIL 5
225 #define PROV_SSL 6
226 #define PROV_STT_MER 7
227 #define PROV_STT_ACQ 8
228 #define PROV_STT_BRND 9
229 #define PROV_STT_ROOT 10
230 #define PROV_STT_ISS 11
231 #define PROV_RSA_SCHANNEL 12
232 #define PROV_DSS_DH 13
233 #define PROV_EC_ECDSA_SIG 14
234 #define PROV_EC_ECNRA_SIG 15
235 #define PROV_EC_ECDSA_FULL 16
236 #define PROV_EC_ECNRA_FULL 17
237 #define PROV_DH_SCHANNEL 18
238 #define PROV_SPYRUS_LYNKS 20
239 #define PROV_RNG 21
240 #define PROV_INTEL_SEC 22
241 #define PROV_RSA_AES 24
242 #define MAXUIDLEN 64
243 #define CUR_BLOB_VERSION 2
244 #define X509_ASN_ENCODING 1
245 #define PKCS_7_ASN_ENCODING  65536
246 #define CERT_V1 0
247 #define CERT_V2 1
248 #define CERT_V3 2
249 #define CERT_E_CHAINING (-2146762486)
250 #define CERT_E_CN_NO_MATCH (-2146762481)
251 #define CERT_E_EXPIRED (-2146762495)
252 #define CERT_E_PURPOSE (-2146762490)
253 #define CERT_E_REVOCATION_FAILURE (-2146762482)
254 #define CERT_E_REVOKED (-2146762484)
255 #define CERT_E_ROLE (-2146762493)
256 #define CERT_E_UNTRUSTEDROOT (-2146762487)
257 #define CERT_E_UNTRUSTEDTESTROOT (-2146762483)
258 #define CERT_E_VALIDITYPERIODNESTING (-2146762494)
259 #define CERT_E_WRONG_USAGE (-2146762480)
260 #define CERT_E_PATHLENCONST (-2146762492)
261 #define CERT_E_CRITICAL (-2146762491)
262 #define CERT_E_ISSUERCHAINING (-2146762489)
263 #define CERT_E_MALFORMED (-2146762488)
264 #define CRYPT_E_REVOCATION_OFFLINE (-2146885613)
265 #define CRYPT_E_REVOKED (-2146885616)
266 #define TRUST_E_BASIC_CONSTRAINTS (-2146869223)
267 #define TRUST_E_CERT_SIGNATURE (-2146869244)
268 #define TRUST_E_FAIL (-2146762485)
269 #define CERT_TRUST_NO_ERROR 0
270 #define CERT_TRUST_IS_NOT_TIME_VALID 1
271 #define CERT_TRUST_IS_NOT_TIME_NESTED 2
272 #define CERT_TRUST_IS_REVOKED 4
273 #define CERT_TRUST_IS_NOT_SIGNATURE_VALID 8
274 #define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 16
275 #define CERT_TRUST_IS_UNTRUSTED_ROOT 32
276 #define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 64
277 #define CERT_TRUST_IS_CYCLIC 128
278 #define CERT_TRUST_IS_PARTIAL_CHAIN 65536
279 #define CERT_TRUST_CTL_IS_NOT_TIME_VALID 131072
280 #define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 262144
281 #define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 524288
282 #define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 1
283 #define CERT_TRUST_HAS_KEY_MATCH_ISSUER 2
284 #define CERT_TRUST_HAS_NAME_MATCH_ISSUER 4
285 #define CERT_TRUST_IS_SELF_SIGNED 8
286 #define CERT_TRUST_IS_COMPLEX_CHAIN 65536
287 #define CERT_CHAIN_POLICY_BASE ((LPCSTR) 1)
288 #define CERT_CHAIN_POLICY_AUTHENTICODE  ((LPCSTR) 2)
289 #define CERT_CHAIN_POLICY_AUTHENTICODE_TS  ((LPCSTR) 3)
290 #define CERT_CHAIN_POLICY_SSL  ((LPCSTR) 4)
291 #define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR) 5)
292 #define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR) 6)
293 #define USAGE_MATCH_TYPE_AND 0
294 #define USAGE_MATCH_TYPE_OR 1
295 #define CERT_SIMPLE_NAME_STR 1
296 #define CERT_OID_NAME_STR 2
297 #define CERT_X500_NAME_STR 3
298 #define CERT_NAME_STR_SEMICOLON_FLAG 1073741824
299 #define CERT_NAME_STR_CRLF_FLAG 134217728
300 #define CERT_NAME_STR_NO_PLUS_FLAG 536870912
301 #define CERT_NAME_STR_NO_QUOTING_FLAG 268435456
302 #define CERT_NAME_STR_REVERSE_FLAG 33554432
303 #define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 131072
304 #define CERT_FIND_ANY 0
305 #define CERT_FIND_CERT_ID 1048576
306 #define CERT_FIND_CTL_USAGE 655360
307 #define CERT_FIND_ENHKEY_USAGE 655360
308 #define CERT_FIND_EXISTING 851968
309 #define CERT_FIND_HASH 65536
310 #define CERT_FIND_ISSUER_ATTR 196612
311 #define CERT_FIND_ISSUER_NAME 131076
312 #define CERT_FIND_ISSUER_OF 786432
313 #define CERT_FIND_KEY_IDENTIFIER 983040
314 #define CERT_FIND_KEY_SPEC 589824
315 #define CERT_FIND_MD5_HASH 262144
316 #define CERT_FIND_PROPERTY 327680
317 #define CERT_FIND_PUBLIC_KEY 393216
318 #define CERT_FIND_SHA1_HASH 65536
319 #define CERT_FIND_SIGNATURE_HASH 917504
320 #define CERT_FIND_SUBJECT_ATTR 196615
321 #define CERT_FIND_SUBJECT_CERT 720896
322 #define CERT_FIND_SUBJECT_NAME 131079
323 #define CERT_FIND_SUBJECT_STR_A 458759
324 #define CERT_FIND_SUBJECT_STR_W 524295
325 #define CERT_FIND_ISSUER_STR_A 458756
326 #define CERT_FIND_ISSUER_STR_W 524292
327 #define CERT_FIND_OR_ENHKEY_USAGE_FLAG 16
328 #define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  1
329 #define CERT_FIND_NO_ENHKEY_USAGE_FLAG  8
330 #define CERT_FIND_VALID_ENHKEY_USAGE_FLAG  32
331 #define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  2
332 #define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG  2
333 #define CERT_UNICODE_IS_RDN_ATTRS_FLAG 1
334 #define CERT_CHAIN_FIND_BY_ISSUER 1
335 #define CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG 1
336 #define CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG 2
337 #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG 32768
338 #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG 4
339 #define CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG 8
340 #define CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG 16384
341 #define CERT_STORE_PROV_SYSTEM 10
342 #define CERT_SYSTEM_STORE_LOCAL_MACHINE 131072
343 #define szOID_PKIX_KP_SERVER_AUTH "4235600"
344 #define szOID_SERVER_GATED_CRYPTO "4235658"
345 #define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
346 #define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
347 #define CRYPT_NOHASHOID 0x00000001
348 #define CRYPT_NO_SALT 0x10
349 #define CRYPT_PREGEN 0x40
350 #define CRYPT_RECIPIENT 0x10
351 #define CRYPT_INITIATOR 0x40
352 #define CRYPT_ONLINE 0x80
353 #define CRYPT_SF 0x100
354 #define CRYPT_CREATE_IV 0x200
355 #define CRYPT_KEK 0x400
356 #define CRYPT_DATA_KEY 0x800
357 #define CRYPT_VOLATILE 0x1000
358 #define CRYPT_SGCKEY 0x2000
359 #define KP_IV               0x00000001
360 #define KP_SALT             0x00000002
361 #define KP_PADDING          0x00000003
362 #define KP_MODE             0x00000004
363 #define KP_MODE_BITS        0x00000005
364 #define KP_PERMISSIONS      0x00000006
365 #define KP_ALGID            0x00000007
366 #define KP_BLOCKLEN         0x00000008
367 #define KP_KEYLEN           0x00000009
368 #define KP_SALT_EX          0x0000000a
369 #define KP_P                0x0000000b
370 #define KP_G                0x0000000c
371 #define KP_Q                0x0000000d
372 #define KP_X                0x0000000e
373 #define KP_Y                0x0000000f
374 #define KP_RA               0x00000010
375 #define KP_RB               0x00000011
376 #define KP_INFO             0x00000012
377 #define KP_EFFECTIVE_KEYLEN 0x00000013
378 #define KP_SCHANNEL_ALG     0x00000014
379 #define KP_PUB_PARAMS       0x00000027
380 #define CRYPT_FLAG_PCT1    0x0001
381 #define CRYPT_FLAG_SSL2    0x0002
382 #define CRYPT_FLAG_SSL3    0x0004
383 #define CRYPT_FLAG_TLS1    0x0008
384 #define CRYPT_FLAG_IPSEC   0x0010
385 #define CRYPT_FLAG_SIGNING 0x0020
386 #define SCHANNEL_MAC_KEY    0x00000000
387 #define SCHANNEL_ENC_KEY    0x00000001
388 #define INTERNATIONAL_USAGE 0x00000001
389 +/
390
391 alias UINT ALG_ID;
392 alias ULONG HCRYPTPROV, HCRYPTKEY, HCRYPTHASH;
393 alias PVOID HCERTSTORE, HCRYPTMSG, HCERTCHAINENGINE;
394
395 struct VTableProvStruc {
396     FARPROC FuncVerifyImage;
397 }
398 alias VTableProvStruc* PVTableProvStruc;
399
400 struct _CRYPTOAPI_BLOB {
401     DWORD cbData;
402     BYTE* pbData;
403 }
404 alias _CRYPTOAPI_BLOB CRYPT_INTEGER_BLOB, CRYPT_UINT_BLOB,
405   CRYPT_OBJID_BLOB, CERT_NAME_BLOB, CERT_RDN_VALUE_BLOB, CERT_BLOB,
406   CRL_BLOB, DATA_BLOB, CRYPT_DATA_BLOB, CRYPT_HASH_BLOB,
407   CRYPT_DIGEST_BLOB, CRYPT_DER_BLOB, CRYPT_ATTR_BLOB;
408 alias _CRYPTOAPI_BLOB* PCRYPT_INTEGER_BLOB, PCRYPT_UINT_BLOB,
409   PCRYPT_OBJID_BLOB, PCERT_NAME_BLOB, PCERT_RDN_VALUE_BLOB, PCERT_BLOB,
410   PCRL_BLOB, PDATA_BLOB, PCRYPT_DATA_BLOB, PCRYPT_HASH_BLOB,
411   PCRYPT_DIGEST_BLOB, PCRYPT_DER_BLOB, PCRYPT_ATTR_BLOB;
412
413 // not described in SDK; has the same layout as HTTPSPolicyCallbackData
414 struct SSL_EXTRA_CERT_CHAIN_POLICY_PARA {
415     DWORD  cbStruct;
416     DWORD  dwAuthType;
417     DWORD  fdwChecks;
418     LPWSTR pwszServerName;
419 }
420 alias SSL_EXTRA_CERT_CHAIN_POLICY_PARA HTTPSPolicyCallbackData;
421 alias SSL_EXTRA_CERT_CHAIN_POLICY_PARA* PSSL_EXTRA_CERT_CHAIN_POLICY_PARA,
422   PHTTPSPolicyCallbackData;
423
424 /* #if (_WIN32_WINNT>=0x500) */
425 struct CERT_CHAIN_POLICY_PARA {
426     DWORD cbSize = CERT_CHAIN_POLICY_PARA.sizeof;
427     DWORD dwFlags;
428     void* pvExtraPolicyPara;
429 }
430 alias CERT_CHAIN_POLICY_PARA* PCERT_CHAIN_POLICY_PARA;
431
432 struct CERT_CHAIN_POLICY_STATUS {
433     DWORD cbSize = CERT_CHAIN_POLICY_STATUS.sizeof;
434     DWORD dwError;
435     LONG  lChainIndex;
436     LONG  lElementIndex;
437     void* pvExtraPolicyStatus;
438 }
439 alias CERT_CHAIN_POLICY_STATUS* PCERT_CHAIN_POLICY_STATUS;
440 /* #endif */
441
442 struct CRYPT_ALGORITHM_IDENTIFIER {
443     LPSTR pszObjId;
444     CRYPT_OBJID_BLOB Parameters;
445 }
446 alias CRYPT_ALGORITHM_IDENTIFIER* PCRYPT_ALGORITHM_IDENTIFIER;
447
448 struct CRYPT_BIT_BLOB {
449     DWORD cbData;
450     BYTE* pbData;
451     DWORD cUnusedBits;
452 }
453 alias CRYPT_BIT_BLOB* PCRYPT_BIT_BLOB;
454
455 struct CERT_PUBLIC_KEY_INFO {
456     CRYPT_ALGORITHM_IDENTIFIER Algorithm;
457     CRYPT_BIT_BLOB             PublicKey;
458 }
459 alias CERT_PUBLIC_KEY_INFO* PCERT_PUBLIC_KEY_INFO;
460
461 struct CERT_EXTENSION {
462     LPSTR            pszObjId;
463     BOOL             fCritical;
464     CRYPT_OBJID_BLOB Value;
465 }
466 alias CERT_EXTENSION* PCERT_EXTENSION;
467
468 struct CERT_INFO {
469     DWORD dwVersion;
470     CRYPT_INTEGER_BLOB SerialNumber;
471     CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
472     CERT_NAME_BLOB Issuer;
473     FILETIME NotBefore;
474     FILETIME NotAfter;
475     CERT_NAME_BLOB Subject;
476     CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
477     CRYPT_BIT_BLOB IssuerUniqueId;
478     CRYPT_BIT_BLOB SubjectUniqueId;
479     DWORD cExtension;
480     PCERT_EXTENSION rgExtension;
481 }
482 alias CERT_INFO* PCERT_INFO;
483
484 struct CERT_CONTEXT {
485     DWORD      dwCertEncodingType;
486     BYTE*      pbCertEncoded;
487     DWORD      cbCertEncoded;
488     PCERT_INFO pCertInfo;
489     HCERTSTORE hCertStore;
490 }
491 alias CERT_CONTEXT*       PCERT_CONTEXT;
492 alias CPtr!(CERT_CONTEXT) PCCERT_CONTEXT;
493
494 struct CTL_USAGE {
495     DWORD  cUsageIdentifier;
496     LPSTR* rgpszUsageIdentifier;
497 }
498 alias CTL_USAGE CERT_ENHKEY_USAGE;
499 alias CTL_USAGE* PCTRL_USAGE, PCERT_ENHKEY_USAGE;
500
501 struct CERT_USAGE_MATCH {
502     DWORD             dwType;
503     CERT_ENHKEY_USAGE Usage;
504 }
505 alias CERT_USAGE_MATCH* PCERT_USAGE_MATCH;
506 /* #if (_WIN32_WINNT>=0x500) */
507
508 struct CERT_CHAIN_PARA {
509     DWORD            cbSize = CERT_CHAIN_PARA.sizeof;
510     CERT_USAGE_MATCH RequestedUsage;
511 //#if CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
512     CERT_USAGE_MATCH RequestedIssuancePolicy;
513     DWORD            dwUrlRetrievalTimeout;
514     BOOL             fCheckRevocationFreshnessTime;
515     DWORD            dwRevocationFreshnessTime;
516 //#endif
517 }
518 alias CERT_CHAIN_PARA* PCERT_CHAIN_PARA;
519
520 extern (Windows) alias BOOL function(PCCERT_CONTEXT, void*)
521   PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK;
522
523 struct CERT_CHAIN_FIND_BY_ISSUER_PARA {
524     DWORD  cbSize = CERT_CHAIN_FIND_BY_ISSUER_PARA.sizeof;
525     LPCSTR pszUsageIdentifier;
526     DWORD  dwKeySpec;
527     DWORD  dwAcquirePrivateKeyFlags;
528     DWORD  cIssuer;
529     CERT_NAME_BLOB* rgIssuer;
530     PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFIndCallback;
531     void*  pvFindArg;
532     DWORD* pdwIssuerChainIndex;
533     DWORD* pdwIssuerElementIndex;
534 }
535 alias CERT_CHAIN_FIND_BY_ISSUER_PARA* PCERT_CHAIN_FIND_BY_ISSUER_PARA;
536 /* #endif */
537
538 struct CERT_TRUST_STATUS {
539     DWORD dwErrorStatus;
540     DWORD dwInfoStatus;
541 }
542 alias CERT_TRUST_STATUS* PCERT_TRUST_STATUS;
543
544 struct CRL_ENTRY {
545     CRYPT_INTEGER_BLOB SerialNumber;
546     FILETIME           RevocationDate;
547     DWORD              cExtension;
548     PCERT_EXTENSION    rgExtension;
549 }
550 alias CRL_ENTRY* PCRL_ENTRY;
551
552 struct CRL_INFO {
553     DWORD           dwVersion;
554     CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
555     CERT_NAME_BLOB  Issuer;
556     FILETIME        ThisUpdate;
557     FILETIME        NextUpdate;
558     DWORD           cCRLEntry;
559     PCRL_ENTRY      rgCRLEntry;
560     DWORD           cExtension;
561     PCERT_EXTENSION rgExtension;
562 }
563 alias CRL_INFO* PCRL_INFO;
564
565 struct CRL_CONTEXT {
566     DWORD      dwCertEncodingType;
567     BYTE*      pbCrlEncoded;
568     DWORD      cbCrlEncoded;
569     PCRL_INFO  pCrlInfo;
570     HCERTSTORE hCertStore;
571 }
572 alias CRL_CONTEXT*       PCRL_CONTEXT;
573 alias CPtr!(CRL_CONTEXT) PCCRL_CONTEXT;
574
575 struct CERT_REVOCATION_CRL_INFO {
576     DWORD         cbSize = CERT_REVOCATION_CRL_INFO.sizeof;
577     PCCRL_CONTEXT pBaseCRLContext;
578     PCCRL_CONTEXT pDeltaCRLContext;
579     PCRL_ENTRY    pCrlEntry;
580     BOOL          fDeltaCrlEntry;
581 }
582 alias CERT_REVOCATION_CRL_INFO* PCERT_REVOCATION_CRL_INFO;
583
584 struct CERT_REVOCATION_INFO {
585     DWORD  cbSize = CERT_REVOCATION_INFO.sizeof;
586     DWORD  dwRevocationResult;
587     LPCSTR pszRevocationOid;
588     LPVOID pvOidSpecificInfo;
589     BOOL   fHasFreshnessTime;
590     DWORD  dwFreshnessTime;
591     PCERT_REVOCATION_CRL_INFO pCrlInfo;
592 }
593 alias CERT_REVOCATION_INFO* PCERT_REVOCATION_INFO;
594
595 /* #if (_WIN32_WINNT>=0x500) */
596 struct CERT_CHAIN_ELEMENT {
597     DWORD                 cbSize = CERT_CHAIN_ELEMENT.sizeof;
598     PCCERT_CONTEXT        pCertContext;
599     CERT_TRUST_STATUS     TrustStatus;
600     PCERT_REVOCATION_INFO pRevocationInfo;
601     PCERT_ENHKEY_USAGE    pIssuanceUsage;
602     PCERT_ENHKEY_USAGE    pApplicationUsage;
603 }
604 alias CERT_CHAIN_ELEMENT* PCERT_CHAIN_ELEMENT;
605 /* #endif */
606
607 struct CRYPT_ATTRIBUTE {
608     LPSTR            pszObjId;
609     DWORD            cValue;
610     PCRYPT_ATTR_BLOB rgValue;
611 }
612 alias CRYPT_ATTRIBUTE* PCRYPT_ATTRIBUTE;
613
614 struct CTL_ENTRY {
615     CRYPT_DATA_BLOB  SubjectIdentifier;
616     DWORD            cAttribute;
617     PCRYPT_ATTRIBUTE rgAttribute;
618 }
619 alias CTL_ENTRY* PCTL_ENTRY;
620
621 struct CTL_INFO {
622     DWORD              dwVersion;
623     CTL_USAGE          SubjectUsage;
624     CRYPT_DATA_BLOB    ListIdentifier;
625     CRYPT_INTEGER_BLOB SequenceNumber;
626     FILETIME           ThisUpdate;
627     FILETIME           NextUpdate;
628     CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
629     DWORD              cCTLEntry;
630     PCTL_ENTRY         rgCTLEntry;
631     DWORD              cExtension;
632     PCERT_EXTENSION    rgExtension;
633 }
634 alias CTL_INFO* PCTL_INFO;
635
636 struct CTL_CONTEXT {
637     DWORD      dwMsgAndCertEncodingType;
638     BYTE*      pbCtlEncoded;
639     DWORD      cbCtlEncoded;
640     PCTL_INFO  pCtlInfo;
641     HCERTSTORE hCertStore;
642     HCRYPTMSG  hCryptMsg;
643     BYTE*      pbCtlContent;
644     DWORD      cbCtlContent;
645 }
646 alias CTL_CONTEXT*       PCTL_CONTEXT;
647 alias CPtr!(CTL_CONTEXT) PCCTL_CONTEXT;
648
649 struct CERT_TRUST_LIST_INFO {
650     DWORD         cbSize = CERT_TRUST_LIST_INFO.sizeof;
651     PCTL_ENTRY    pCtlEntry;
652     PCCTL_CONTEXT pCtlContext;
653 }
654 alias CERT_TRUST_LIST_INFO* PCERT_TRUST_LIST_INFO;
655
656 struct CERT_SIMPLE_CHAIN {
657     DWORD                 cbSize = CERT_SIMPLE_CHAIN.sizeof;
658     CERT_TRUST_STATUS     TrustStatus;
659     DWORD                 cElement;
660     PCERT_CHAIN_ELEMENT*  rgpElement;
661     PCERT_TRUST_LIST_INFO pTrustListInfo;
662     BOOL                  fHasRevocationFreshnessTime;
663     DWORD                 dwRevocationFreshnessTime;
664 }
665 alias CERT_SIMPLE_CHAIN* PCERT_SIMPLE_CHAIN;
666
667 /* #if (_WIN32_WINNT>=0x500) */
668 alias CPtr!(CERT_CHAIN_CONTEXT) PCCERT_CHAIN_CONTEXT;
669 struct CERT_CHAIN_CONTEXT {
670     DWORD                 cbSize = CERT_CHAIN_CONTEXT.sizeof;
671     CERT_TRUST_STATUS     TrustStatus;
672     DWORD                 cChain;
673     PCERT_SIMPLE_CHAIN*   rgpChain;
674     DWORD                 cLowerQualityChainContext;
675     PCCERT_CHAIN_CONTEXT* rgpLowerQualityChainContext;
676     BOOL                  fHasRevocationFreshnessTime;
677     DWORD                 dwRevocationFreshnessTime;
678 }
679 alias CERT_CHAIN_CONTEXT* PCERT_CHAIN_CONTEXT;
680 /* #endif */
681
682 struct PROV_ENUMALGS {
683     ALG_ID   aiAlgid;
684     DWORD    dwBitLen;
685     DWORD    dwNameLen;
686     CHAR[20] szName;
687 }
688
689 struct PUBLICKEYSTRUC {
690     BYTE   bType;
691     BYTE   bVersion;
692     WORD   reserved;
693     ALG_ID aiKeyAlg;
694 }
695 alias PUBLICKEYSTRUC BLOBHEADER;
696
697 struct RSAPUBKEY {
698     DWORD magic;
699     DWORD bitlen;
700     DWORD pubexp;
701 }
702
703 struct HMAC_INFO {
704     ALG_ID HashAlgid;
705     BYTE*  pbInnerString;
706     DWORD  cbInnerString;
707     BYTE*  pbOuterString;
708     DWORD  cbOuterString;
709 }
710 alias HMAC_INFO* PHMAC_INFO;
711
712 extern (Windows) {
713     BOOL CertCloseStore(HCERTSTORE, DWORD);
714     BOOL CertGetCertificateChain(HCERTCHAINENGINE, PCCERT_CONTEXT, LPFILETIME,
715       HCERTSTORE, PCERT_CHAIN_PARA, DWORD, LPVOID, PCCERT_CHAIN_CONTEXT*);
716     BOOL CertVerifyCertificateChainPolicy(LPCSTR, PCCERT_CHAIN_CONTEXT,
717       PCERT_CHAIN_POLICY_PARA, PCERT_CHAIN_POLICY_STATUS);
718     void CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT);
719     DWORD CertNameToStrA(DWORD, PCERT_NAME_BLOB, DWORD, LPSTR, DWORD);
720     DWORD CertNameToStrW(DWORD, PCERT_NAME_BLOB, DWORD, LPWSTR, DWORD);
721     HCERTSTORE CertOpenSystemStoreA(HCRYPTPROV, LPCSTR);
722     HCERTSTORE CertOpenSystemStoreW(HCRYPTPROV, LPCWSTR);
723     HCERTSTORE CertOpenStore(LPCSTR, DWORD, HCRYPTPROV, DWORD, CPtr!(void));
724     PCCERT_CONTEXT CertFindCertificateInStore(HCERTSTORE, DWORD, DWORD, DWORD,
725       CPtr!(void), PCCERT_CONTEXT);
726     BOOL CertFreeCertificateContext(PCCERT_CONTEXT);
727     PCCERT_CONTEXT CertGetIssuerCertificateFromStore(HCERTSTORE,
728       PCCERT_CONTEXT, PCCERT_CONTEXT, DWORD*);
729     PCCERT_CHAIN_CONTEXT CertFindChainInStore(HCERTSTORE, DWORD, DWORD, DWORD,
730       CPtr!(void), PCCERT_CHAIN_CONTEXT);
731
732     BOOL CryptAcquireContextA(HCRYPTPROV*, LPCSTR, LPCSTR, DWORD, DWORD);
733     BOOL CryptAcquireContextW(HCRYPTPROV*, LPCWSTR, LPCWSTR, DWORD, DWORD);
734      BOOL CryptContextAddRef(HCRYPTPROV, DWORD*, DWORD);
735     BOOL CryptReleaseContext(HCRYPTPROV, DWORD);
736     BOOL CryptGenKey(HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY*);
737     BOOL CryptDeriveKey(HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY*);
738     BOOL CryptDestroyKey(HCRYPTKEY);
739     static if (WINVER >= 0x0500) {
740         BOOL CryptDuplicateHash(HCRYPTHASH, DWORD*, DWORD, HCRYPTHASH*);
741         BOOL CryptDuplicateKey(HCRYPTKEY, DWORD*, DWORD, HCRYPTKEY*);
742     }
743     BOOL CryptSetKeyParam(HCRYPTKEY, DWORD, PBYTE, DWORD);
744     BOOL CryptGetKeyParam(HCRYPTKEY, DWORD, PBYTE, PDWORD, DWORD);
745     BOOL CryptSetHashParam(HCRYPTHASH, DWORD, PBYTE, DWORD);
746     BOOL CryptGetHashParam(HCRYPTHASH, DWORD, PBYTE, PDWORD, DWORD);
747     BOOL CryptSetProvParam(HCRYPTPROV, DWORD, PBYTE, DWORD);
748     BOOL CryptGetProvParam(HCRYPTPROV, DWORD, PBYTE, PDWORD, DWORD);
749     BOOL CryptGenRandom(HCRYPTPROV, DWORD, PBYTE);
750     BOOL CryptGetUserKey(HCRYPTPROV, DWORD, HCRYPTKEY*);
751     BOOL CryptExportKey(HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, PBYTE, PDWORD);
752     BOOL CryptImportKey(HCRYPTPROV, PBYTE, DWORD, HCRYPTKEY, DWORD,
753       HCRYPTKEY*);
754     BOOL CryptEncrypt(HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, PBYTE, PDWORD,
755       DWORD);
756     BOOL CryptDecrypt(HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, PBYTE, PDWORD);
757     BOOL CryptCreateHash(HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH*);
758     BOOL CryptHashData(HCRYPTHASH, PBYTE, DWORD, DWORD);
759     BOOL CryptHashSessionKey(HCRYPTHASH, HCRYPTKEY, DWORD);
760     BOOL CryptGetHashValue(HCRYPTHASH, DWORD, PBYTE, PDWORD);
761     BOOL CryptDestroyHash(HCRYPTHASH);
762     BOOL CryptSignHashA(HCRYPTHASH, DWORD, LPCSTR, DWORD, PBYTE, PDWORD);
763     BOOL CryptSignHashW(HCRYPTHASH, DWORD, LPCWSTR, DWORD, PBYTE, PDWORD);
764     BOOL CryptVerifySignatureA(HCRYPTHASH, PBYTE, DWORD, HCRYPTKEY, LPCSTR,
765       DWORD);
766     BOOL CryptVerifySignatureW(HCRYPTHASH, PBYTE, DWORD, HCRYPTKEY, LPCWSTR,
767       DWORD);
768     BOOL CryptSetProviderA(LPCSTR, DWORD);
769     BOOL CryptSetProviderW(LPCWSTR, DWORD);
770 }
771
772 version (Unicode) {
773     alias CertNameToStrW CertNameToStr;
774     alias CryptAcquireContextW CryptAcquireContext;
775     alias CryptSignHashW CryptSignHash;
776     alias CryptVerifySignatureW CryptVerifySignature;
777     alias CryptSetProviderW CryptSetProvider;
778     alias CertOpenSystemStoreW CertOpenSystemStore;
779     /+alias CERT_FIND_SUBJECT_STR_W CERT_FIND_SUBJECT_STR;
780     alias CERT_FIND_ISSUER_STR_W CERT_FIND_ISSUER_STR;+/
781 } else {
782     alias CertNameToStrA CertNameToStr;
783     alias CryptAcquireContextA CryptAcquireContext;
784     alias CryptSignHashA CryptSignHash;
785     alias CryptVerifySignatureA CryptVerifySignature;
786     alias CryptSetProviderA CryptSetProvider;
787     alias CertOpenSystemStoreA CertOpenSystemStore;
788     /+alias CERT_FIND_SUBJECT_STR_A CERT_FIND_SUBJECT_STR;
789     alias CERT_FIND_ISSUER_STR_A CERT_FIND_ISSUER_STR;+/
790 }
Note: See TracBrowser for help on using the browser.