CreateDIBSection takes a const pointer to BITMAPINFO.
[wine] / include / wincrypt.h
1 /*
2  * Copyright (C) 2002 Travis Michielsen
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #ifndef __WINE_WINCRYPT_H
20 #define __WINE_WINCRYPT_H
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 /* some typedefs for function parameters */
27 typedef unsigned int ALG_ID;
28 typedef unsigned long HCRYPTPROV;
29 typedef unsigned long HCRYPTKEY;
30 typedef unsigned long HCRYPTHASH;
31 typedef void *HCERTSTORE;
32
33 /* CSP Structs */
34
35 typedef struct _CRYPTOAPI_BLOB {
36   DWORD    cbData;
37   BYTE*    pbData;
38 } CRYPT_INTEGER_BLOB,  *PCRYPT_INTEGER_BLOB,
39   CRYPT_UINT_BLOB,     *PCRYPT_UINT_BLOB,
40   CRYPT_OBJID_BLOB,    *PCRYPT_OBJID_BLOB,
41   CERT_NAME_BLOB,      *PCERT_NAME_BLOB,
42   CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
43   CERT_BLOB,           *PCERT_BLOB,
44   CRL_BLOB,            *PCRL_BLOB,
45   DATA_BLOB,           *PDATA_BLOB,
46   CRYPT_DATA_BLOB,     *PCRYPT_DATA_BLOB,
47   CRYPT_HASH_BLOB,     *PCRYPT_HASH_BLOB,
48   CRYPT_DIGEST_BLOB,   *PCRYPT_DIGEST_BLOB,
49   CRYPT_DER_BLOB,      *PCRYPT_DER_BLOB,
50   CRYPT_ATTR_BLOB,     *PCRYPT_ATTR_BLOB;
51
52 typedef struct _CRYPTPROTECT_PROMPTSTRUCT{
53   DWORD   cbSize;
54   DWORD   dwPromptFlags;
55   HWND    hwndApp;
56   LPCWSTR szPrompt;
57 } CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;
58
59 typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
60   LPSTR            pszObjId;
61   CRYPT_OBJID_BLOB Parameters;
62 } CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
63
64 typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
65   LPSTR               pszObjId;
66   CRYPT_OBJID_BLOB    Value;
67 } CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
68
69 typedef struct _PUBLICKEYSTRUC {
70     BYTE   bType;
71     BYTE   bVersion;
72     WORD   reserved;
73     ALG_ID aiKeyAlg;
74 } BLOBHEADER, PUBLICKEYSTRUC;
75
76 typedef struct _CRYPT_BIT_BLOB {
77     DWORD cbData;
78     BYTE  *pbData;
79     DWORD cUnusedBits;
80 } CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
81
82 typedef struct _CERT_PUBLIC_KEY_INFO {
83     CRYPT_ALGORITHM_IDENTIFIER Algorithm;
84     CRYPT_BIT_BLOB             PublicKey;
85 } CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
86
87 typedef struct _CERT_EXTENSION {
88     LPSTR               pszObjId;
89     BOOL                fCritical;
90     CRYPT_OBJID_BLOB    Value;
91 } CERT_EXTENSION, *PCERT_EXTENSION;
92
93 typedef struct _CERT_INFO {
94     DWORD                      dwVersion;
95     CRYPT_INTEGER_BLOB         SerialNumber;
96     CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
97     CERT_NAME_BLOB             Issuer;
98     FILETIME                   NotBefore;
99     FILETIME                   NotAfter;
100     CERT_NAME_BLOB             Subject;
101     CERT_PUBLIC_KEY_INFO       SubjectPublicKeyInfo;
102     CRYPT_BIT_BLOB             IssuerUniqueId;
103     CRYPT_BIT_BLOB             SubjectUniqueId;
104     DWORD                      cExtension;
105     PCERT_EXTENSION            rgExtension;
106 } CERT_INFO, *PCERT_INFO;
107
108 typedef struct _CERT_CONTEXT {
109     DWORD      dwCertEncodingType;
110     BYTE       *pbCertEncoded;
111     DWORD      cbCertEncoded;
112     PCERT_INFO pCertInfo;
113     HCERTSTORE hCertStore;
114 } CERT_CONTEXT, *PCERT_CONTEXT;
115 typedef const CERT_CONTEXT *PCCERT_CONTEXT;
116
117 typedef struct _CRL_ENTRY {
118     CRYPT_INTEGER_BLOB SerialNumber;
119     FILETIME           RevocationDate;
120     DWORD              cExtension;
121     PCERT_EXTENSION    rgExtension;
122 } CRL_ENTRY, *PCRL_ENTRY;
123
124 typedef struct _CRL_INFO {
125     DWORD           dwVersion;
126     CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
127     CERT_NAME_BLOB  Issuer;
128     FILETIME        ThisUpdate;
129     FILETIME        NextUpdate;
130     DWORD           cCRLEntry;
131     PCRL_ENTRY      rgCRLEntry;
132     DWORD           cExtension;
133     PCERT_EXTENSION rgExtension;
134 } CRL_INFO, *PCRL_INFO;
135
136 typedef struct _CRL_CONTEXT {
137     DWORD      dwCertEncodingType;
138     BYTE      *pbCrlEncoded;
139     DWORD      cbCrlEncoded;
140     PCRL_INFO  pCrlInfo;
141     HCERTSTORE hCertStore;
142 } CRL_CONTEXT, *PCRL_CONTEXT;
143 typedef const CRL_CONTEXT *PCCRL_CONTEXT;
144
145 typedef struct _VTableProvStruc {
146     DWORD    Version;
147     FARPROC  pFuncVerifyImage;
148     FARPROC  pFuncReturnhWnd;
149     DWORD    dwProvType;
150     BYTE    *pbContextInfo;
151     DWORD    cbContextInfo;
152     LPSTR    pszProvName;
153 } VTableProvStruc, *PVTableProvStruc;
154
155 /* Algorithm IDs */
156
157 #define GET_ALG_CLASS(x)                (x & (7 << 13))
158 #define GET_ALG_TYPE(x)                 (x & (15 << 9))
159 #define GET_ALG_SID(x)                  (x & (511))
160
161 /* Algorithm Classes */
162 #define ALG_CLASS_ANY                   (0)
163 #define ALG_CLASS_SIGNATURE             (1 << 13)
164 #define ALG_CLASS_MSG_ENCRYPT           (2 << 13)
165 #define ALG_CLASS_DATA_ENCRYPT          (3 << 13)
166 #define ALG_CLASS_HASH                  (4 << 13)
167 #define ALG_CLASS_KEY_EXCHANGE          (5 << 13)
168 /* Algorithm types */
169 #define ALG_TYPE_ANY                    (0)
170 #define ALG_TYPE_DSS                    (1 << 9)
171 #define ALG_TYPE_RSA                    (2 << 9)
172 #define ALG_TYPE_BLOCK                  (3 << 9)
173 #define ALG_TYPE_STREAM                 (4 << 9)
174
175 /* SIDs */
176 #define ALG_SID_ANY                     (0)
177 /* RSA SIDs */
178 #define ALG_SID_RSA_ANY                 0
179 #define ALG_SID_RSA_PKCS                1
180 #define ALG_SID_RSA_MSATWORK            2
181 #define ALG_SID_RSA_ENTRUST             3
182 #define ALG_SID_RSA_PGP                 4
183 /* DSS SIDs */
184 #define ALG_SID_DSS_ANY                 0
185 #define ALG_SID_DSS_PKCS                1
186 #define ALG_SID_DSS_DMS                 2
187
188 /* DES SIDs */
189 #define ALG_SID_DES                     1
190 #define ALG_SID_3DES                    3
191 #define ALG_SID_DESX                    4
192 #define ALG_SID_IDEA                    5
193 #define ALG_SID_CAST                    6
194 #define ALG_SID_SAFERSK64               7
195 #define ALD_SID_SAFERSK128              8
196 /* RC2 SIDs */
197 #define ALG_SID_RC4                     1
198 #define ALG_SID_RC2                     2
199 #define ALG_SID_SEAL                    2
200 /* Hash SIDs */
201 #define ALG_SID_MD2                     1
202 #define ALG_SID_MD4                     2
203 #define ALG_SID_MD5                     3
204 #define ALG_SID_SHA                     4
205 #define ALG_SID_MAC                     5
206 #define ALG_SID_RIPEMD                  6
207 #define ALG_SID_RIPEMD160               7
208 #define ALG_SID_SSL3SHAMD5              8
209
210 /* Algorithm Definitions */
211 #define CALG_MD2        (ALG_CLASS_HASH         | ALG_TYPE_ANY    | ALG_SID_MD2)
212 #define CALG_MD4        (ALG_CLASS_HASH         | ALG_TYPE_ANY    | ALG_SID_MD4)
213 #define CALG_MD5        (ALG_CLASS_HASH         | ALG_TYPE_ANY    | ALG_SID_MD5)
214 #define CALG_SHA        (ALG_CLASS_HASH         | ALG_TYPE_ANY    | ALG_SID_SHA)
215 #define CALG_MAC        (ALG_CLASS_HASH         | ALG_TYPE_ANY    | ALG_SID_MAC)
216 #define CALG_RSA_SIGN   (ALG_CLASS_SIGNATURE    | ALG_TYPE_RSA    | ALG_SID_RSA_ANY)
217 #define CALG_DSS_SIGN   (ALG_CLASS_SIGNATURE    | ALG_TYPE_DSS    | ALG_SID_DSS_ANY)
218 #define CALG_RSA_KEYX   (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA    | ALG_SID_RSA_ANY)
219 #define CALG_DES        (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK  | ALG_SID_DES)
220 #define CALG_RC2        (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK  | ALG_SID_RC2)
221 #define CALG_RC4        (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4)
222 #define CALG_SEAL       (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL)
223
224 /* Provider names */
225 #define MS_DEF_PROV_A                            "Microsoft Base Cryptographic Provider v1.0"
226 #if defined(__GNUC__)
227 # define MS_DEF_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
228         'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
229         'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
230 #elif defined(_MSC_VER)
231 # define MS_DEF_PROV_W      L"Microsoft Base Cryptographic Provider v1.0"
232 #else
233 static const WCHAR MS_DEF_PROV_W[] =             { 'M','i','c','r','o','s','o','f','t',' ',
234         'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
235         'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
236 #endif
237 #define MS_DEF_PROV                              WINELIB_NAME_AW(MS_DEF_PROV_)
238
239 #define MS_ENHANCED_PROV_A                       "Microsoft Enhanced Cryptographic Provider v1.0"
240 #if defined(__GNUC__)
241 # define MS_ENHANCED_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
242         'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
243         'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
244 #elif defined(_MSC_VER)
245 # define MS_ENHANCED_PROV_W     L"Microsoft Enhanced Cryptographic Provider v1.0"
246 #else
247 static const WCHAR MS_ENHANCED_PROV_W[] =        { 'M','i','c','r','o','s','o','f','t',' ',
248         'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
249         'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
250 #endif
251 #define MS_ENHANCED_PROV                         WINELIB_NAME_AW(MS_ENHANCED_PROV_)
252
253 #define MS_STRONG_PROV_A                         "Microsoft Strong Cryptographic Provider"
254 #if defined(__GNUC__)
255 # define MS_STRONG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
256         'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
257         'P','r','o','v','i','d','e','r',0 }
258 #elif defined(_MSC_VER)
259 # define MS_STRONG_PROV_W     L"Microsoft Strong Cryptographic Provider"
260 #else
261 static const WCHAR MS_STRONG_PROV_W[] =          { 'M','i','c','r','o','s','o','f','t',' ',
262         'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
263         'P','r','o','v','i','d','e','r',0 };
264 #endif
265 #define MS_STRONG_PROV                           WINELIB_NAME_AW(MS_STRONG_PROV_)
266
267 #define MS_DEF_RSA_SIG_PROV_A                    "Microsoft RSA Signature Cryptographic Provider"
268 #if defined(__GNUC__)
269 # define MS_DEF_RSA_SIG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
270         'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ', \
271         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
272 #elif defined(_MSC_VER)
273 # define MS_DEF_RSA_SIG_PROV_W      L"Microsoft RSA Signature Cryptographic Provider"
274 #else
275 static const WCHAR MS_DEF_RSA_SIG_PROV_W[] =     { 'M','i','c','r','o','s','o','f','t',' ',
276         'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ',
277         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
278 #endif
279 #define MS_DEF_RSA_SIG_PROV                      WINELIB_NAME_AW(MS_DEF_RSA_SIG_PROV_)
280
281 #define MS_DEF_RSA_SCHANNEL_PROV_A               "Microsoft RSA SChannel Cryptographic Provider"
282 #if defined(__GNUC__)
283 # define MS_DEF_RSA_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
284         'R','S','A',' ','S','C','h','a','n','n','e','l',' ', \
285         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
286 #elif defined(_MSC_VER)
287 # define MS_DEF_RSA_SCHANNEL_PROV_W     L"Microsoft RSA SChannel Cryptographic Provider"
288 #else
289 static const WCHAR MS_DEF_RSA_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
290         'R','S','A',' ','S','C','h','a','n','n','e','l',' ',
291         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
292 #endif
293 #define MS_DEF_RSA_SCHANNEL_PROV                 WINELIB_NAME_AW(MS_DEF_RSA_SCHANNEL_PROV_)
294
295 #define MS_DEF_DSS_PROV_A                        "Microsoft Base DSS Cryptographic Provider"
296 #if defined(__GNUC__)
297 # define MS_DEF_DSS_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
298         'B','a','s','e',' ','D','S','S',' ', \
299         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
300 #elif defined(_MSC_VER)
301 # define MS_DEF_DSS_PROV_W     L"Microsoft Base DSS Cryptographic Provider"
302 #else
303 static const WCHAR MS_DEF_DSS_PROV_W[] =         { 'M','i','c','r','o','s','o','f','t',' ',
304         'B','a','s','e',' ','D','S','S',' ',
305         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
306 #endif
307 #define MS_DEF_DSS_PROV                          WINELIB_NAME_AW(MS_DEF_DSS_PROV_)
308
309 #define MS_DEF_DSS_DH_PROV_A                     "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
310 #if defined(__GNUC__)
311 # define MS_DEF_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
312         'B','a','s','e',' ','D','S','S',' ','a','n','d',' ', \
313         'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
314         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
315 #elif defined(_MSC_VER)
316 # define MS_DEF_DSS_DH_PROV_W     L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
317 #else
318 static const WCHAR MS_DEF_DSS_DH_PROV_W[] =      { 'M','i','c','r','o','s','o','f','t',' ',
319         'B','a','s','e',' ','D','S','S',' ','a','n','d',' ',
320         'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
321         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
322 #endif
323 #define MS_DEF_DSS_DH_PROV                       WINELIB_NAME_AW(MS_DEF_DSS_DH_PROV_)
324
325 #define MS_ENH_DSS_DH_PROV_A                     "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
326 #if defined(__GNUC__)
327 # define MS_ENH_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
328         'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ', \
329         'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
330         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
331 #elif defined(_MSC_VER)
332 # define MS_ENH_DSS_DH_PROV_W     L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
333 #else
334 static const WCHAR MS_ENH_DSS_DH_PROV_W[] =      { 'M','i','c','r','o','s','o','f','t',' ',
335         'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ',
336         'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
337         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
338 #endif
339 #define MS_ENH_DSS_DH_PROV                       WINELIB_NAME_AW(MS_ENH_DSS_DH_PROV_)
340
341 #define MS_DEF_DH_SCHANNEL_PROV_A                "Microsoft DH SChannel Cryptographic Provider"
342 #if defined(__GNUC__)
343 # define MS_DEF_DH_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
344         'D','H',' ','S','C','h','a','n','n','e','l',' ', \
345         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
346 #elif defined(_MSC_VER)
347 # define MS_DEF_DH_SCHANNEL_PROV_W     L"Microsoft DH SChannel Cryptographic Provider"
348 #else
349 static const WCHAR MS_DEF_DH_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
350         'D','H',' ','S','C','h','a','n','n','e','l',' ',
351         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
352 #endif
353 #define MS_DEF_DH_SCHANNEL_PROV                  WINELIB_NAME_AW(MS_DEF_DH_SCHANNEL_PROV_)
354
355 #define MS_SCARD_PROV_A                          "Microsoft Base Smart Card Cryptographic Provider"
356 #if defined(__GNUC__)
357 # define MS_SCARD_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
358         'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ', \
359         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
360 #elif defined(_MSC_VER)
361 # define MS_SCARD_PROV_W     L"Microsoft Base Smart Card Cryptographic Provider"
362 #else
363 static const WCHAR MS_SCARD_PROV_W[] =           { 'M','i','c','r','o','s','o','f','t',' ',
364         'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ',
365         'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
366 #endif
367 #define MS_SCARD_PROV                            WINELIB_NAME_AW(MS_SCARD_PROV_)
368
369 /* Key Specs*/
370 #define AT_KEYEXCHANGE          1
371 #define AT_SIGNATURE            2
372
373 /* Provider Types */
374 #define PROV_RSA_FULL             1
375 #define PROV_RSA_SIG              2
376 #define PROV_DSS                  3
377 #define PROV_FORTEZZA             4
378 #define PROV_MS_EXCHANGE          5
379 #define PROV_SSL                  6
380 #define PROV_RSA_SCHANNEL         12
381 #define PROV_DSS_DH               13
382 #define PROV_EC_ECDSA_SIG         14
383 #define PROV_EC_ECNRA_SIG         15
384 #define PROV_EC_ECDSA_FULL        16
385 #define PROV_EC_ECNRA_FULL        17
386 #define PROV_DH_SCHANNEL          18
387 #define PROV_SPYRUS_LYNKS         20
388 #define PROV_RNG                  21
389 #define PROV_INTEL_SEC            22
390 #define PROV_REPLACE_OWF          23
391 #define PROV_RSA_AES              24
392
393 /* FLAGS Section */
394
395 /* Provider Parameters */
396 #define PP_ENUMALGS             1
397 #define PP_ENUMCONTAINERS       2
398 #define PP_IMPTYPE              3
399 #define PP_NAME                 4
400 #define PP_VERSION              5
401 #define PP_CONTAINER            6
402
403 #define CRYPT_FIRST             1
404 #define CRYPT_NEXT              2
405
406 #define CRYPT_IMPL_HARDWARE     1
407 #define CRYPT_IMPL_SOFTWARE     2
408 #define CRYPT_IMPL_MIXED        3
409 #define CRYPT_IMPL_UNKNOWN      4
410
411 /* CryptAcquireContext */
412 #define CRYPT_VERIFYCONTEXT       0xF0000000
413 #define CRYPT_NEWKEYSET           0x00000008
414 #define CRYPT_MACHINE_KEYSET      0x00000000
415 #define CRYPT_DELETEKEYSET        0x00000010
416 #define CRYPT_SILENT              0x00000000
417
418 /* Crypt{Get|Set}Provider */
419 #define CRYPT_MACHINE_DEFAULT     0x00000001
420 #define CRYPT_USER_DEFAULT        0x00000002
421 #define CRYPT_DELETE_DEFAULT      0x00000004
422
423 /* Crypt{Get/Set}ProvParam */
424 #define PP_CLIENT_HWND          1
425 #define PP_ENUMALGS             1
426 #define PP_ENUMCONTAINERS       2
427 #define PP_IMPTYPE              3
428 #define PP_NAME                 4
429 #define PP_VERSION              5
430 #define PP_CONTAINER            6
431 #define PP_CHANGE_PASSWORD      7
432 #define PP_KEYSET_SEC_DESCR     8
433 #define PP_KEY_TYPE_SUBTYPE     10
434 #define PP_CONTEXT_INFO         11
435 #define PP_KEYEXCHANGE_KEYSIZE  12
436 #define PP_SIGNATURE_KEYSIZE    13
437 #define PP_KEYEXCHANGE_ALG      14
438 #define PP_SIGNATURE_ALG        15
439 #define PP_PROVTYPE             16
440 #define PP_KEYSTORAGE           17
441 #define PP_SYM_KEYSIZE          19
442 #define PP_SESSION_KEYSIZE      20
443 #define PP_UI_PROMPT            21
444 #define PP_ENUMALGS_EX          22
445 #define PP_DELETEKEY            24
446 #define PP_ENUMMANDROOTS        25
447 #define PP_ENUMELECTROOTS       26
448 #define PP_KEYSET_TYPE          27
449 #define PP_ADMIN_PIN            31
450 #define PP_KEYEXCHANGE_PIN      32
451 #define PP_SIGNATURE_PIN        33
452 #define PP_SIG_KEYSIZE_INC      34
453 #define PP_KEYX_KEYSIZE_INC     35
454 #define PP_UNIQUE_CONTAINER     36
455 #define PP_SGC_INFO             37
456 #define PP_USE_HARDWARE_RNG     38
457 #define PP_KEYSPEC              39
458 #define PP_ENUMEX_SIGNING_PROT  40
459
460 /* CryptSignHash/CryptVerifySignature */
461 #define CRYPT_NOHASHOID         0x00000001
462 #define CRYPT_TYPE2_FORMAT      0x00000002
463 #define CRYPT_X931_FORMAT       0x00000004
464
465 /* Crypt*Key */
466 #define CRYPT_EXPORTABLE        0x00000001
467 #define CRYPT_USER_PROTECTED    0x00000002
468 #define CRYPT_CREATE_SALT       0x00000004
469 #define CRYPT_UPDATE_KEY        0x00000008
470 #define CRYPT_NO_SALT           0x00000010
471 #define CRYPT_PREGEN            0x00000040
472 #define CRYPT_ARCHIVABLE        0x00004000
473 #define CRYPT_SSL2_FALLBACK     0x00000002
474 #define CRYPT_DESTROYKEY        0x00000004
475 #define CRYPT_OAEP              0x00000040
476
477 /* Blob Types */
478 #define SIMPLEBLOB              0x1
479 #define PUBLICKEYBLOB           0x6
480 #define PRIVATEKEYBLOB          0x7
481 #define PLAINTEXTKEYBLOB        0x8
482 #define OPAQUEKEYBLOB           0x9
483 #define PUBLICKEYBLOBEX         0xA
484 #define SYMMETRICWRAPKEYBLOB    0xB
485
486 /* cert store provider types */
487 #define CERT_STORE_PROV_MSG                  ((LPCSTR)1)
488 #define CERT_STORE_PROV_MEMORY               ((LPCSTR)2)
489 #define CERT_STORE_PROV_FILE                 ((LPCSTR)3)
490 #define CERT_STORE_PROV_REG                  ((LPCSTR)4)
491 #define CERT_STORE_PROV_PKCS7                ((LPCSTR)5)
492 #define CERT_STORE_PROV_SERIALIZED           ((LPCSTR)6)
493 #define CERT_STORE_PROV_FILENAME_A           ((LPCSTR)7)
494 #define CERT_STORE_PROV_FILENAME_W           ((LPCSTR)8)
495 #define CERT_STORE_PROV_SYSTEM_A             ((LPCSTR)9)
496 #define CERT_STORE_PROV_SYSTEM_W             ((LPCSTR)10)
497 #define CERT_STORE_PROV_SYSTEM               CERT_STORE_PROV_SYSTEM_W
498 #define CERT_STORE_PROV_COLLECTION           ((LPCSTR)11)
499 #define CERT_STORE_PROV_SYSTEM_REGISTRY_A    ((LPCSTR)12)
500 #define CERT_STORE_PROV_SYSTEM_REGISTRY_W    ((LPCSTR)13)
501 #define CERT_STORE_PROV_SYSTEM_REGISTRY      CERT_STORE_PROV_SYSTEM_REGISTRY_W
502 #define CERT_STORE_PROV_PHYSICAL_W           ((LPCSTR)14)
503 #define CERT_STORE_PROV_PHYSICAL             CERT_STORE_PROV_PHYSICAL_W
504 #define CERT_STORE_PROV_SMART_CARD_W         ((LPCSTR)15)
505 #define CERT_STORE_PROV_SMART_CARD           CERT_STORE_PROV_SMART_CARD_W
506 #define CERT_STORE_PROV_LDAP_W               ((LPCSTR)16)
507 #define CERT_STORE_PROV_LDAP                 CERT_STORE_PROV_LDAP_W
508
509 #define sz_CERT_STORE_PROV_MEMORY            "Memory"
510 #define sz_CERT_STORE_PROV_FILENAME_W        "File"
511 #define sz_CERT_STORE_PROV_FILENAME          sz_CERT_STORE_PROV_FILENAME_W
512 #define sz_CERT_STORE_PROV_SYSTEM_W          "System"
513 #define sz_CERT_STORE_PROV_SYSTEM            sz_CERT_STORE_PROV_SYSTEM_W
514 #define sz_CERT_STORE_PROV_PKCS7             "PKCS7"
515 #define sz_CERT_STORE_PROV_SERIALIZED        "Serialized"
516 #define sz_CERT_STORE_PROV_COLLECTION        "Collection"
517 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
518 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY   sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
519 #define sz_CERT_STORE_PROV_PHYSICAL_W        "Physical"
520 #define sz_CERT_STORE_PROV_PHYSICAL          sz_CERT_STORE_PROV_PHYSICAL_W
521 #define sz_CERT_STORE_PROV_SMART_CARD_W      "SmartCard"
522 #define sz_CERT_STORE_PROV_SMART_CARD        sz_CERT_STORE_PROV_SMART_CARD_W
523 #define sz_CERT_STORE_PROV_LDAP_W            "Ldap"
524 #define sz_CERT_STORE_PROV_LDAP              sz_CERT_STORE_PROV_LDAP_W
525
526 #define X509_ASN_ENCODING   0x00000001
527 #define X509_NDR_ENCODING   0x00000002
528 #define PKCS_7_ASN_ENCODING 0x00010000
529 #define PKCS_7_NDR_ENCODING 0x00020000
530
531 /* function declarations */
532 /* advapi32.dll */
533 BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *phProv, LPCSTR pszContainer,
534                                    LPCSTR pszProvider, DWORD dwProvType,
535                                    DWORD dwFlags);
536 BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *phProv, LPCWSTR pszContainer,
537                 LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags);
538 #define CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext)
539 BOOL WINAPI CryptGenRandom (HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer);
540 BOOL WINAPI CryptContextAddRef (HCRYPTPROV hProv, DWORD *pdwReserved, DWORD dwFlags);
541 BOOL WINAPI CryptCreateHash (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey,
542                 DWORD dwFlags, HCRYPTHASH *phHash);
543 BOOL WINAPI CryptDecrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final,
544                 DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
545 BOOL WINAPI CryptDeriveKey (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseData,
546                 DWORD dwFlags, HCRYPTKEY *phKey);
547 BOOL WINAPI CryptDestroyHash (HCRYPTHASH hHash);
548 BOOL WINAPI CryptDestroyKey (HCRYPTKEY hKey);
549 BOOL WINAPI CryptDuplicateKey (HCRYPTKEY hKey, DWORD *pdwReserved, DWORD dwFlags, HCRYPTKEY *phKey);
550 BOOL WINAPI CryptDuplicateHash (HCRYPTHASH hHash, DWORD *pdwReserved,
551                 DWORD dwFlags, HCRYPTHASH *phHash);
552 BOOL WINAPI CryptEncrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final,
553                 DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen);
554 BOOL WINAPI CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved,
555                 DWORD dwFlags, DWORD *pdwProvType, LPSTR pszProvName, DWORD *pcbProvName);
556 BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
557                 DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszProvName, DWORD *pcbProvName);
558 #define CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders)
559 BOOL WINAPI CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved,
560                 DWORD dwFlags, DWORD *pdwProvType, LPSTR pszTypeName, DWORD *pcbTypeName);
561 BOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved,
562                 DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszTypeName, DWORD *pcbTypeName);
563 #define CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes)
564 BOOL WINAPI CryptExportKey (HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType,
565                 DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
566 BOOL WINAPI CryptGenKey (HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey);
567 BOOL WINAPI CryptGetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData,
568                 DWORD *pdwDataLen, DWORD dwFlags);
569 BOOL WINAPI CryptGetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData,
570                 DWORD *pdwDataLen, DWORD dwFlags);
571 BOOL WINAPI CryptGetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData,
572                 DWORD *pdwDataLen, DWORD dwFlags);
573 BOOL WINAPI CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved,
574                 DWORD dwFlags, LPSTR pszProvName, DWORD *pcbProvName);
575 BOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved,
576                 DWORD dwFlags, LPWSTR pszProvName, DWORD *pcbProvName);
577 #define CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider)
578 BOOL WINAPI CryptGetUserKey (HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey);
579 BOOL WINAPI CryptHashData (HCRYPTHASH hHash, BYTE *pbData, DWORD dwDataLen, DWORD dwFlags);
580 BOOL WINAPI CryptHashSessionKey (HCRYPTHASH hHash, HCRYPTKEY hKey, DWORD dwFlags);
581 BOOL WINAPI CryptImportKey (HCRYPTPROV hProv, BYTE *pbData, DWORD dwDataLen,
582                 HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey);
583 BOOL WINAPI CryptRegisterOIDFunction(DWORD,LPCSTR,LPCSTR,LPCWSTR,LPCSTR);
584
585 BOOL WINAPI CryptReleaseContext (HCRYPTPROV hProv, DWORD dwFlags);
586 BOOL WINAPI CryptSignHashA (HCRYPTHASH hHash, DWORD dwKeySpec, LPCSTR sDescription,
587                 DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen);
588 BOOL WINAPI CryptSignHashW (HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription,
589                 DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen);
590 #define CryptSignHash WINELIB_NAME_AW(CryptSignHash)
591 BOOL WINAPI CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD dwFlags);
592 BOOL WINAPI CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD dwFlags);
593 BOOL WINAPI CryptSetProviderA (LPCSTR pszProvName, DWORD dwProvType);
594 BOOL WINAPI CryptSetProviderW (LPCWSTR pszProvName, DWORD dwProvType);
595 #define CryptSetProvider WINELIB_NAME_AW(CryptSetProvider)
596 BOOL WINAPI CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags);
597 BOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags);
598 #define CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx)
599 BOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD dwFlags);
600 BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH hHash, BYTE *pbSignature, DWORD dwSigLen,
601                 HCRYPTKEY hPubKey, LPCSTR sDescription, DWORD dwFlags);
602 BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, BYTE *pbSignature, DWORD dwSigLen,
603                 HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags);
604 #define CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature)
605
606 /* cert store functions */
607 HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType,
608  HCRYPTPROV hCryptProv, DWORD dwFlags, const void *pvPara);
609
610 HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV hProv,
611  LPCSTR szSubSystemProtocol);
612 HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV hProv,
613  LPCWSTR szSubSystemProtocol);
614 #define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore)
615
616 PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrev);
617
618 BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
619              DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags);
620
621 PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType,
622   const BYTE* pbCrlEncoded, DWORD cbCrlEncoded);
623
624 BOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags );
625
626 BOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext );
627
628 #ifdef __cplusplus
629 }
630 #endif
631
632 #endif