Reactos
1/*
2 * Copyright (C) 2002 Travis Michielsen
3 * Copyright (C) 2004-2005 Juan Lang
4 * Copyright (C) 2007 Vijay Kiran Kamuju
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#ifndef __WINE_WINCRYPT_H
22#define __WINE_WINCRYPT_H
23
24#ifdef __REACTOS__
25#include <specstrings.h>
26#endif
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#include <bcrypt.h>
33#ifndef __REACTOS__
34#include <ncrypt.h>
35#endif
36
37#ifndef WINADVAPI
38#ifdef _ADVAPI32_
39# define WINADVAPI
40#else
41# define WINADVAPI DECLSPEC_IMPORT
42#endif
43#endif
44
45#ifndef WINCRYPT32API
46#ifdef _CRYPT32_
47# define WINCRYPT32API
48#else
49# define WINCRYPT32API DECLSPEC_IMPORT
50#endif
51#endif
52
53/* some typedefs for function parameters */
54typedef unsigned int ALG_ID;
55typedef ULONG_PTR HCRYPTPROV;
56typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;
57typedef ULONG_PTR HCRYPTPROV_LEGACY;
58typedef ULONG_PTR HCRYPTKEY;
59typedef ULONG_PTR HCRYPTHASH;
60typedef void *HCERTSTORE;
61typedef void *HCRYPTMSG;
62typedef void *HCERTSTOREPROV;
63typedef void *HCRYPTOIDFUNCSET;
64typedef void *HCRYPTOIDFUNCADDR;
65typedef void *HCRYPTDEFAULTCONTEXT;
66
67/* CSP Structs */
68
69typedef struct _PROV_ENUMALGS {
70 ALG_ID aiAlgid;
71 DWORD dwBitLen;
72 DWORD dwNameLen;
73 CHAR szName[20];
74} PROV_ENUMALGS;
75
76typedef struct _PROV_ENUMALGS_EX {
77 ALG_ID aiAlgid;
78 DWORD dwDefaultLen;
79 DWORD dwMinLen;
80 DWORD dwMaxLen;
81 DWORD dwProtocols;
82 DWORD dwNameLen;
83 CHAR szName[20];
84 DWORD dwLongNameLen;
85 CHAR szLongName[40];
86} PROV_ENUMALGS_EX;
87
88#define SCHANNEL_MAC_KEY 0
89#define SCHANNEL_ENC_KEY 1
90
91typedef struct _SCHANNEL_ALG {
92 DWORD dwUse;
93 ALG_ID Algid;
94 DWORD cBits;
95 DWORD dwFlags;
96 DWORD dwReserved;
97} SCHANNEL_ALG, *PSCHANNEL_ALG;
98
99
100#define CRYPT_IPSEC_HMAC_KEY 0x0100
101
102typedef struct _HMAC_INFO {
103 ALG_ID HashAlgid;
104 BYTE* pbInnerString;
105 DWORD cbInnerString;
106 BYTE* pbOuterString;
107 DWORD cbOuterString;
108} HMAC_INFO, *PHMAC_INFO;
109
110typedef struct _CRYPTOAPI_BLOB {
111 DWORD cbData;
112 BYTE* pbData;
113} CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
114 CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB,
115 CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
116 CERT_NAME_BLOB, *PCERT_NAME_BLOB,
117 CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
118 CERT_BLOB, *PCERT_BLOB,
119 CRL_BLOB, *PCRL_BLOB,
120 DATA_BLOB, *PDATA_BLOB,
121 CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB,
122 CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB,
123 CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
124 CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
125 CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
126
127typedef struct _CRYPTPROTECT_PROMPTSTRUCT{
128 DWORD cbSize;
129 DWORD dwPromptFlags;
130 HWND hwndApp;
131 LPCWSTR szPrompt;
132} CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;
133
134typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
135 LPSTR pszObjId;
136 CRYPT_OBJID_BLOB Parameters;
137} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
138
139typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
140 LPSTR pszObjId;
141 CRYPT_OBJID_BLOB Value;
142} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
143
144typedef struct _PUBLICKEYSTRUC {
145 BYTE bType;
146 BYTE bVersion;
147 WORD reserved;
148 ALG_ID aiKeyAlg;
149} BLOBHEADER, PUBLICKEYSTRUC;
150
151typedef struct _RSAPUBKEY {
152 DWORD magic;
153 DWORD bitlen;
154 DWORD pubexp;
155} RSAPUBKEY;
156
157typedef struct _PUBKEY {
158 DWORD magic;
159 DWORD bitlen;
160} DHPUBKEY, DSSPUBKEY, KEAPUBKEY, TEKPUBKEY;
161
162typedef struct _DSSSEED {
163 DWORD counter;
164 BYTE seed[20];
165} DSSSEED;
166
167typedef struct _PUBKEYVER3 {
168 DWORD magic;
169 DWORD bitlenP;
170 DWORD bitlenQ;
171 DWORD bitlenJ;
172 DSSSEED DSSSeed;
173} DHPUBKEY_VER3, DSSPUBKEY_VER3;
174
175typedef struct _PRIVKEYVER3 {
176 DWORD magic;
177 DWORD bitlenP;
178 DWORD bitlenQ;
179 DWORD bitlenJ;
180 DWORD bitlenX;
181 DSSSEED DSSSeed;
182} DHPRIVKEY_VER3, DSSPRIVKEY_VER3;
183
184typedef struct _KEY_TYPE_SUBTYPE {
185 DWORD dwKeySpec;
186 GUID Type;
187 GUID SubType;
188} KEY_TYPE_SUBTYPE, *PKEY_TYPE_SUBTYPE;
189
190typedef struct _CERT_FORTEZZA_DATA_PROP {
191 unsigned char SerialNumber[8];
192 int CertIndex;
193 unsigned char CertLabel[36];
194} CERT_FORTEZZA_DATA_PROP;
195
196typedef struct _CMS_DH_KEY_INFO {
197 DWORD dwVersion;
198 ALG_ID Algid;
199 LPSTR pszContentEncObjId;
200 CRYPT_DATA_BLOB PubInfo;
201 void *pReserved;
202} CMS_DH_KEY_INFO, *PCMS_DH_KEY_INFO;
203
204typedef struct _CRYPT_BIT_BLOB {
205 DWORD cbData;
206 BYTE *pbData;
207 DWORD cUnusedBits;
208} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
209
210typedef struct _CRYPT_KEY_PROV_PARAM {
211 DWORD dwParam;
212 BYTE *pbData;
213 DWORD cbData;
214 DWORD dwFlags;
215} CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;
216
217typedef struct _CRYPT_KEY_PROV_INFO {
218 LPWSTR pwszContainerName;
219 LPWSTR pwszProvName;
220 DWORD dwProvType;
221 DWORD dwFlags;
222 DWORD cProvParam;
223 PCRYPT_KEY_PROV_PARAM rgProvParam;
224 DWORD dwKeySpec;
225} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
226
227typedef struct _CERT_KEY_CONTEXT {
228 DWORD cbSize;
229 HCRYPTPROV hCryptProv;
230 DWORD dwKeySpec;
231} CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT;
232
233typedef struct _CERT_PUBLIC_KEY_INFO {
234 CRYPT_ALGORITHM_IDENTIFIER Algorithm;
235 CRYPT_BIT_BLOB PublicKey;
236} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
237
238typedef struct _CERT_EXTENSION {
239 LPSTR pszObjId;
240 BOOL fCritical;
241 CRYPT_OBJID_BLOB Value;
242} CERT_EXTENSION, *PCERT_EXTENSION;
243
244typedef struct _CERT_EXTENSIONS {
245 DWORD cExtension;
246 PCERT_EXTENSION rgExtension;
247} CERT_EXTENSIONS, *PCERT_EXTENSIONS;
248
249typedef struct _CERT_INFO {
250 DWORD dwVersion;
251 CRYPT_INTEGER_BLOB SerialNumber;
252 CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
253 CERT_NAME_BLOB Issuer;
254 FILETIME NotBefore;
255 FILETIME NotAfter;
256 CERT_NAME_BLOB Subject;
257 CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
258 CRYPT_BIT_BLOB IssuerUniqueId;
259 CRYPT_BIT_BLOB SubjectUniqueId;
260 DWORD cExtension;
261 PCERT_EXTENSION rgExtension;
262} CERT_INFO, *PCERT_INFO;
263
264typedef struct _CERT_RDN_ATTR {
265 LPSTR pszObjId;
266 DWORD dwValueType;
267 CERT_RDN_VALUE_BLOB Value;
268} CERT_RDN_ATTR, *PCERT_RDN_ATTR;
269
270typedef struct _CERT_RDN {
271 DWORD cRDNAttr;
272 PCERT_RDN_ATTR rgRDNAttr;
273} CERT_RDN, *PCERT_RDN;
274
275typedef struct _CERT_NAME_INFO {
276 DWORD cRDN;
277 PCERT_RDN rgRDN;
278} CERT_NAME_INFO, *PCERT_NAME_INFO;
279
280typedef struct _CERT_NAME_VALUE {
281 DWORD dwValueType;
282 CERT_RDN_VALUE_BLOB Value;
283} CERT_NAME_VALUE, *PCERT_NAME_VALUE;
284
285typedef struct _CERT_ENCRYPTED_PRIVATE_KEY_INFO {
286 CRYPT_ALGORITHM_IDENTIFIER EncryptionAlgorithm;
287 CRYPT_DATA_BLOB EncryptedPrivateKey;
288} CERT_ENCRYPTED_PRIVATE_KEY_INFO, *PCERT_ENCRYPTED_PRIVATE_KEY_INFO;
289
290typedef struct _CERT_AUTHORITY_KEY_ID_INFO {
291 CRYPT_DATA_BLOB KeyId;
292 CERT_NAME_BLOB CertIssuer;
293 CRYPT_INTEGER_BLOB CertSerialNumber;
294} CERT_AUTHORITY_KEY_ID_INFO, *PCERT_AUTHORITY_KEY_ID_INFO;
295
296typedef struct _CERT_PRIVATE_KEY_VALIDITY {
297 FILETIME NotBefore;
298 FILETIME NotAfter;
299} CERT_PRIVATE_KEY_VALIDITY, *PCERT_PRIVATE_KEY_VALIDITY;
300
301typedef struct _CERT_KEY_ATTRIBUTES_INFO {
302 CRYPT_DATA_BLOB KeyId;
303 CRYPT_BIT_BLOB IntendedKeyUsage;
304 PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod;
305} CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO;
306
307typedef struct _CERT_ECC_SIGNATURE {
308 CRYPT_UINT_BLOB r;
309 CRYPT_UINT_BLOB s;
310} CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE;
311
312/* byte 0 */
313#define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80
314#define CERT_NON_REPUDIATION_KEY_USAGE 0x40
315#define CERT_KEY_ENCIPHERMENT_KEY_USAGE 0x20
316#define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10
317#define CERT_KEY_AGREEMENT_KEY_USAGE 0x08
318#define CERT_KEY_CERT_SIGN_KEY_USAGE 0x04
319#define CERT_OFFLINE_CRL_SIGN_KEY_USAGE 0x02
320#define CERT_CRL_SIGN_KEY_USAGE 0x02
321#define CERT_ENCIPHER_ONLY_KEY_USAGE 0x01
322/* byte 1 */
323#define CERT_DECIPHER_ONLY_KEY_USAGE 0x80
324
325typedef struct _CERT_POLICY_ID {
326 DWORD cCertPolicyElementId;
327 LPSTR *rgbszCertPolicyElementId;
328} CERT_POLICY_ID, *PCERT_POLICY_ID;
329
330typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO {
331 DWORD cCertPolicyId;
332 PCERT_POLICY_ID rgCertPolicyId;
333 CRYPT_BIT_BLOB RestrictedKeyUsage;
334} CERT_KEY_USAGE_RESTRICTION_INFO, *PCERT_KEY_USAGE_RESTRICTION_INFO;
335
336typedef struct _CERT_OTHER_NAME {
337 LPSTR pszObjId;
338 CRYPT_OBJID_BLOB Value;
339} CERT_OTHER_NAME, *PCERT_OTHER_NAME;
340
341typedef struct _CERT_ALT_NAME_ENTRY {
342 DWORD dwAltNameChoice;
343 union {
344 PCERT_OTHER_NAME pOtherName;
345 LPWSTR pwszRfc822Name;
346 LPWSTR pwszDNSName;
347 CERT_NAME_BLOB DirectoryName;
348 LPWSTR pwszURL;
349 CRYPT_DATA_BLOB IPAddress;
350 LPSTR pszRegisteredID;
351 } DUMMYUNIONNAME;
352} CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY;
353
354#define CERT_ALT_NAME_OTHER_NAME 1
355#define CERT_ALT_NAME_RFC822_NAME 2
356#define CERT_ALT_NAME_DNS_NAME 3
357#define CERT_ALT_NAME_X400_ADDRESS 4
358#define CERT_ALT_NAME_DIRECTORY_NAME 5
359#define CERT_ALT_NAME_EDI_PARTY_NAME 6
360#define CERT_ALT_NAME_URL 7
361#define CERT_ALT_NAME_IP_ADDRESS 8
362#define CERT_ALT_NAME_REGISTERED_ID 9
363
364typedef struct _CERT_ALT_NAME_INFO {
365 DWORD cAltEntry;
366 PCERT_ALT_NAME_ENTRY rgAltEntry;
367} CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO;
368
369#define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xff
370#define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16
371#define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0x0000ffff
372#define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0
373#define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(x) \
374 (((x) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & \
375 CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
376#define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(x) \
377 ((x) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
378
379typedef struct _CERT_BASIC_CONSTRAINTS_INFO {
380 CRYPT_BIT_BLOB SubjectType;
381 BOOL fPathLenConstraint;
382 DWORD dwPathLenConstraint;
383 DWORD cSubtreesConstraint;
384 CERT_NAME_BLOB *rgSubtreesConstraint;
385} CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO;
386
387#define CERT_CA_SUBJECT_FLAG 0x80
388#define CERT_END_ENTITY_SUBJECT_FLAG 0x40
389
390typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
391 BOOL fCA;
392 BOOL fPathLenConstraint;
393 DWORD dwPathLenConstraint;
394} CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO;
395
396typedef struct _CERT_POLICY_QUALIFIER_INFO {
397 LPSTR pszPolicyQualifierId;
398 CRYPT_OBJID_BLOB Qualifier;
399} CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO;
400
401typedef struct _CERT_POLICY_INFO {
402 LPSTR pszPolicyIdentifier;
403 DWORD cPolicyQualifier;
404 CERT_POLICY_QUALIFIER_INFO *rgPolicyQualifier;
405} CERT_POLICY_INFO, *PCERT_POLICY_INFO;
406
407typedef struct _CERT_POLICIES_INFO {
408 DWORD cPolicyInfo;
409 CERT_POLICY_INFO *rgPolicyInfo;
410} CERT_POLICIES_INFO, *PCERT_POLICIES_INFO;
411
412typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
413 LPSTR pszOrganization;
414 DWORD cNoticeNumbers;
415 int *rgNoticeNumbers;
416} CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,
417 *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
418
419typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE {
420 CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *pNoticeReference;
421 LPWSTR pszDisplayText;
422} CERT_POLICY_QUALIFIER_USER_NOTICE, *PCERT_POLICY_QUALIFIER_USER_NOTICE;
423
424typedef struct _CPS_URLS {
425 LPWSTR pszURL;
426 CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm;
427 CRYPT_DATA_BLOB *pDigest;
428} CPS_URLS, *PCPS_URLS;
429
430typedef struct _CERT_POLICY95_QUALIFIER1 {
431 LPWSTR pszPracticesReference;
432 LPSTR pszNoticeIdentifier;
433 LPSTR pszNSINoticeIdentifier;
434 DWORD cCPSURLs;
435 CPS_URLS *rgCPSURLs;
436} CERT_POLICY95_QUALIFIER1, *PCERT_POLICY95_QUALIFIER1;
437
438typedef struct _CERT_POLICY_MAPPING {
439 LPSTR pszIssuerDomainPolicy;
440 LPSTR pszSubjectDomainPolicy;
441} CERT_POLICY_MAPPING, *PCERT_POLICY_MAPPING;
442
443typedef struct _CERT_POLICY_MAPPINGS_INFO {
444 DWORD cPolicyMapping;
445 PCERT_POLICY_MAPPING rgPolicyMapping;
446} CERT_POLICY_MAPPINGS_INFO, *PCERT_POLICY_MAPPINGS_INFO;
447
448typedef struct _CERT_POLICY_CONSTRAINTS_INFO {
449 BOOL fRequireExplicitPolicy;
450 DWORD dwRequireExplicitPolicySkipCerts;
451 BOOL fInhibitPolicyMapping;
452 DWORD dwInhibitPolicyMappingSkipCerts;
453} CERT_POLICY_CONSTRAINTS_INFO, *PCERT_POLICY_CONSTRAINTS_INFO;
454
455typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {
456 LPSTR pszObjId;
457 DWORD cValue;
458 PCRYPT_DER_BLOB rgValue;
459} CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY, *PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;
460
461typedef struct _CRYPT_CONTENT_INFO {
462 LPSTR pszObjId;
463 CRYPT_DER_BLOB Content;
464} CRYPT_CONTENT_INFO, *PCRYPT_CONTENT_INFO;
465
466typedef struct _CRYPT_SEQUENCE_OF_ANY {
467 DWORD cValue;
468 PCRYPT_DER_BLOB rgValue;
469} CRYPT_SEQUENCE_OF_ANY, *PCRYPT_SEQUENCE_OF_ANY;
470
471typedef struct _CERT_AUTHORITY_KEY_ID2_INFO {
472 CRYPT_DATA_BLOB KeyId;
473 CERT_ALT_NAME_INFO AuthorityCertIssuer;
474 CRYPT_INTEGER_BLOB AuthorityCertSerialNumber;
475} CERT_AUTHORITY_KEY_ID2_INFO, *PCERT_AUTHORITY_KEY_ID2_INFO;
476
477typedef struct _CERT_ACCESS_DESCRIPTION {
478 LPSTR pszAccessMethod;
479 CERT_ALT_NAME_ENTRY AccessLocation;
480} CERT_ACCESS_DESCRIPTION, *PCERT_ACCESS_DESCRIPTION;
481
482typedef struct _CERT_AUTHORITY_INFO_ACCESS {
483 DWORD cAccDescr;
484 PCERT_ACCESS_DESCRIPTION rgAccDescr;
485} CERT_AUTHORITY_INFO_ACCESS, *PCERT_AUTHORITY_INFO_ACCESS;
486
487typedef struct _CERT_CONTEXT {
488 DWORD dwCertEncodingType;
489 BYTE *pbCertEncoded;
490 DWORD cbCertEncoded;
491 PCERT_INFO pCertInfo;
492 HCERTSTORE hCertStore;
493} CERT_CONTEXT, *PCERT_CONTEXT;
494typedef const CERT_CONTEXT *PCCERT_CONTEXT;
495
496typedef struct _CRL_ENTRY {
497 CRYPT_INTEGER_BLOB SerialNumber;
498 FILETIME RevocationDate;
499 DWORD cExtension;
500 PCERT_EXTENSION rgExtension;
501} CRL_ENTRY, *PCRL_ENTRY;
502
503typedef struct _CRL_INFO {
504 DWORD dwVersion;
505 CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
506 CERT_NAME_BLOB Issuer;
507 FILETIME ThisUpdate;
508 FILETIME NextUpdate;
509 DWORD cCRLEntry;
510 PCRL_ENTRY rgCRLEntry;
511 DWORD cExtension;
512 PCERT_EXTENSION rgExtension;
513} CRL_INFO, *PCRL_INFO;
514
515typedef struct _CRL_DIST_POINT_NAME {
516 DWORD dwDistPointNameChoice;
517 union {
518 CERT_ALT_NAME_INFO FullName;
519 } DUMMYUNIONNAME;
520} CRL_DIST_POINT_NAME, *PCRL_DIST_POINT_NAME;
521
522#define CRL_DIST_POINT_NO_NAME 0
523#define CRL_DIST_POINT_FULL_NAME 1
524#define CRL_DIST_POINT_ISSUER_RDN_NAME 2
525
526typedef struct _CRL_DIST_POINT {
527 CRL_DIST_POINT_NAME DistPointName;
528 CRYPT_BIT_BLOB ReasonFlags;
529 CERT_ALT_NAME_INFO CRLIssuer;
530} CRL_DIST_POINT, *PCRL_DIST_POINT;
531
532#define CRL_REASON_UNUSED_FLAG 0x80
533#define CRL_REASON_KEY_COMPROMISE_FLAG 0x40
534#define CRL_REASON_CA_COMPROMISE_FLAG 0x20
535#define CRL_REASON_AFFILIATION_CHANGED_FLAG 0x10
536#define CRL_REASON_SUPERSEDED_FLAG 0x08
537#define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x04
538#define CRL_REASON_CERTIFICATE_HOLD_FLAG 0x02
539
540typedef struct _CRL_DIST_POINTS_INFO {
541 DWORD cDistPoint;
542 PCRL_DIST_POINT rgDistPoint;
543} CRL_DIST_POINTS_INFO, *PCRL_DIST_POINTS_INFO;
544
545#define CRL_DIST_POINT_ERR_INDEX_MASK 0x7f
546#define CRL_DIST_POINT_ERR_INDEX_SHIFT 24
547#define GET_CRL_DIST_POINT_ERR_INDEX(x) \
548 (((x) >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK)
549
550#ifdef __REACTOS__
551#define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT 0x80000000L
552#else
553#define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT __MSABI_LONG(0x80000000)
554#endif
555#define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(x) \
556 ((x) & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT)
557
558typedef struct _CROSS_CERT_DIST_POINTS_INFO {
559 DWORD dwSyncDeltaTime;
560 DWORD cDistPoint;
561 PCERT_ALT_NAME_INFO rgDistPoint;
562} CROSS_CERT_DIST_POINTS_INFO, *PCROSS_CERT_DIST_POINTS_INFO;
563
564#define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK 0xff
565#define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24
566#define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(x) \
567 (((x) >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & \
568 CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)
569
570typedef struct _CERT_PAIR {
571 CERT_BLOB Forward;
572 CERT_BLOB Reverse;
573} CERT_PAIR, *PCERT_PAIR;
574
575typedef struct _CRL_ISSUING_DIST_POINT {
576 CRL_DIST_POINT_NAME DistPointName;
577 BOOL fOnlyContainsUserCerts;
578 BOOL fOnlyContainsCACerts;
579 CRYPT_BIT_BLOB OnlySomeReasonFlags;
580 BOOL fIndirectCRL;
581} CRL_ISSUING_DIST_POINT, *PCRL_ISSUING_DIST_POINT;
582
583typedef struct _CERT_GENERAL_SUBTREE {
584 CERT_ALT_NAME_ENTRY Base;
585 DWORD dwMinimum;
586 BOOL fMaximum;
587 DWORD dwMaximum;
588} CERT_GENERAL_SUBTREE, *PCERT_GENERAL_SUBTREE;
589
590typedef struct _CERT_NAME_CONSTRAINTS_INFO {
591 DWORD cPermittedSubtree;
592 PCERT_GENERAL_SUBTREE rgPermittedSubtree;
593 DWORD cExcludedSubtree;
594 PCERT_GENERAL_SUBTREE rgExcludedSubtree;
595} CERT_NAME_CONSTRAINTS_INFO, *PCERT_NAME_CONSTRAINTS_INFO;
596
597#ifdef __REACTOS__
598#define CERT_EXCLUDED_SUBTREE_BIT 0x80000000L
599#else
600#define CERT_EXCLUDED_SUBTREE_BIT __MSABI_LONG(0x80000000)
601#endif
602#define IS_CERT_EXCLUDED_SUBTREE(x) ((x) & CERT_EXCLUDED_SUBTREE_BIT)
603
604typedef struct _CRYPT_ATTRIBUTE {
605 LPSTR pszObjId;
606 DWORD cValue;
607 PCRYPT_DATA_BLOB rgValue;
608} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
609
610typedef struct _CRYPT_ATTRIBUTES {
611 DWORD cAttr;
612 PCRYPT_ATTRIBUTE rgAttr;
613} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
614
615typedef struct _CERT_REQUEST_INFO {
616 DWORD dwVersion;
617 CERT_NAME_BLOB Subject;
618 CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
619 DWORD cAttribute;
620 PCRYPT_ATTRIBUTE rgAttribute;
621} CERT_REQUEST_INFO, *PCERT_REQUEST_INFO;
622
623typedef struct _CERT_KEYGEN_REQUEST_INFO {
624 DWORD dwVersion;
625 CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
626 LPWSTR pwszChallengeString;
627} CERT_KEYGEN_REQUEST_INFO, *PCERT_KEYGEN_REQUEST_INFO;
628
629typedef struct _CERT_SIGNED_CONTENT_INFO {
630 CRYPT_DER_BLOB ToBeSigned;
631 CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
632 CRYPT_BIT_BLOB Signature;
633} CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO;
634
635typedef struct _OCSP_SIGNATURE_INFO {
636 CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
637 CRYPT_BIT_BLOB Signature;
638 DWORD cCertEncoded;
639 PCERT_BLOB rgCertEncoded;
640} OCSP_SIGNATURE_INFO, *POCSP_SIGNATURE_INFO;
641
642typedef struct _OCSP_SIGNED_REQUEST_INFO {
643 CRYPT_DER_BLOB ToBeSigned;
644 POCSP_SIGNATURE_INFO pOptionalSignatureInfo;
645} OCSP_SIGNED_REQUEST_INFO, *POCSP_SIGNED_REQUEST_INFO;
646
647typedef struct _OCSP_CERT_ID {
648 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
649 CRYPT_HASH_BLOB IssuerNameHash;
650 CRYPT_HASH_BLOB IssuerKeyHash;
651 CRYPT_INTEGER_BLOB SerialNumber;
652} OCSP_CERT_ID, *POCSP_CERT_ID;
653
654typedef struct _OCSP_REQUEST_ENTRY {
655 OCSP_CERT_ID CertId;
656 DWORD cExtension;
657 PCERT_EXTENSION rgExtension;
658} OCSP_REQUEST_ENTRY, *POCSP_REQUEST_ENTRY;
659
660#define OCSP_REQUEST_V1 0
661
662typedef struct _OCSP_REQUEST_INFO {
663 DWORD dwVersion;
664 PCERT_ALT_NAME_ENTRY pRequestorName;
665 DWORD cRequestEntry;
666 POCSP_REQUEST_ENTRY rgRequestEntry;
667 DWORD cExtension;
668 PCERT_EXTENSION rgExtension;
669} OCSP_REQUEST_INFO, *POCSP_REQUEST_INFO;
670
671#define OCSP_SUCCESSFUL_RESPONSE 0
672#define OCSP_MALFORMED_REQUEST_RESPONSE 1
673#define OCSP_INTERNAL_ERROR_RESPONSE 2
674#define OCSP_TRY_LATER_RESPONSE 3
675#define OCSP_SIG_REQUIRED_RESPONSE 5
676#define OCSP_UNAUTHORIZED_RESPONSE 6
677
678#define szOID_PKIX_OCSP_BASIC_SIGNED_RESPONSE "1.3.6.1.5.5.7.48.1.1"
679
680typedef struct _OCSP_RESPONSE_INFO {
681 DWORD dwStatus;
682 LPSTR pszObjId;
683 CRYPT_OBJID_BLOB Value;
684} OCSP_RESPONSE_INFO, *POCSP_RESPONSE_INFO;
685
686typedef struct _OCSP_BASIC_SIGNED_RESPONSE_INFO {
687 CRYPT_DER_BLOB ToBeSigned;
688 OCSP_SIGNATURE_INFO SignatureInfo;
689} OCSP_BASIC_SIGNED_RESPONSE_INFO, *POCSP_BASIC_SIGNED_RESPONSE_INFO;
690
691typedef struct _OCSP_BASIC_REVOKED_INFO {
692 FILETIME RevocationDate;
693 DWORD dwCrlReasonCode;
694} OCSP_BASIC_REVOKED_INFO, *POCSP_BASIC_REVOKED_INFO;
695
696#define OCSP_BASIC_GOOD_CERT_STATUS 0
697#define OCSP_BASIC_REVOKED_CERT_STATUS 1
698#define OCSP_BASIC_UNKNOWN_CERT_STATUS 2
699
700typedef struct _OCSP_BASIC_RESPONSE_ENTRY {
701 OCSP_CERT_ID CertId;
702 DWORD dwCertStatus;
703 union {
704 POCSP_BASIC_REVOKED_INFO pRevokedInfo;
705 } DUMMYUNIONNAME;
706 FILETIME ThisUpdate;
707 FILETIME NextUpdate;
708 DWORD cExtension;
709 PCERT_EXTENSION rgExtension;
710} OCSP_BASIC_RESPONSE_ENTRY, *POCSP_BASIC_RESPONSE_ENTRY;
711
712#define OCSP_BASIC_RESPONSE_V1 0
713#define OCSP_BASIC_BY_NAME_RESPONDER_ID 1
714#define OCSP_BASIC_BY_KEY_RESPONDER_ID 2
715
716typedef struct _OCSP_BASIC_RESPONSE_INFO {
717 DWORD dwVersion;
718 DWORD dwResponderIdChoice;
719 union {
720 CERT_NAME_BLOB ByNameResponderId;
721 CRYPT_HASH_BLOB ByKeyResponderId;
722 } DUMMYUNIONNAME;
723 FILETIME ProducedAt;
724 DWORD cResponseEntry;
725 POCSP_BASIC_RESPONSE_ENTRY rgResponseEntry;
726 DWORD cExtension;
727 PCERT_EXTENSION rgExtension;
728} OCSP_BASIC_RESPONSE_INFO, *POCSP_BASIC_RESPONSE_INFO;
729
730typedef struct _CRL_CONTEXT {
731 DWORD dwCertEncodingType;
732 BYTE *pbCrlEncoded;
733 DWORD cbCrlEncoded;
734 PCRL_INFO pCrlInfo;
735 HCERTSTORE hCertStore;
736} CRL_CONTEXT, *PCRL_CONTEXT;
737typedef const CRL_CONTEXT *PCCRL_CONTEXT;
738
739#define SORTED_CTL_EXT_FLAGS_OFFSET (0*4)
740#define SORTED_CTL_EXT_COUNT_OFFSET (1*4)
741#define SORTED_CTL_EXT_MAX_COLLISION_OFFSET (2*4)
742#define SORTED_CTL_EXT_HASH_BUCKET_OFFSET (3*4)
743
744#define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG 0x1
745
746typedef struct _CERT_DSS_PARAMETERS {
747 CRYPT_UINT_BLOB p;
748 CRYPT_UINT_BLOB q;
749 CRYPT_UINT_BLOB g;
750} CERT_DSS_PARAMETERS, *PCERT_DSS_PARAMETERS;
751
752#define CERT_DSS_R_LEN 20
753#define CERT_DSS_S_LEN 20
754#define CERT_DSS_SIGNATURE_LEN (CERT_DSS_R_LEN + CERT_DSS_S_LEN)
755
756#define CERT_MAX_ENCODED_DSS_SIGNATURE_LEN (2 + 2*(2 + 20 +1))
757
758typedef struct _CERT_DH_PARAMETERS {
759 CRYPT_UINT_BLOB p;
760 CRYPT_UINT_BLOB g;
761} CERT_DH_PARAMETERS, *PCERT_DH_PARAMETERS;
762
763typedef struct _CERT_X942_DH_VALIDATION_PARAMS {
764 CRYPT_BIT_BLOB seed;
765 DWORD pgenCounter;
766} CERT_X942_DH_VALIDATION_PARAMS, *PCERT_X942_DH_VALIDATION_PARAMS;
767
768typedef struct _CERT_X942_DH_PARAMETERS {
769 CRYPT_UINT_BLOB p;
770 CRYPT_UINT_BLOB g;
771 CRYPT_UINT_BLOB q;
772 CRYPT_UINT_BLOB j;
773 PCERT_X942_DH_VALIDATION_PARAMS pValidationParams;
774} CERT_X942_DH_PARAMETERS, *PCERT_X942_DH_PARAMETERS;
775
776#define CRYPT_X942_COUNTER_BYTE_LENGTH 4
777#define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH 4
778#define CRYPT_X942_PUB_INFO_BYTE_LENGTH (512/8)
779
780typedef struct _CRYPT_X942_OTHER_INFO {
781 LPSTR pszContentEncryptionObjId;
782 BYTE rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH];
783 BYTE rgbKeyLength[CRYPT_X942_KEY_LENGTH_BYTE_LENGTH];
784 CRYPT_DATA_BLOB PubInfo;
785} CRYPT_X942_OTHER_INFO, *PCRYPT_X942_OTHER_INFO;
786
787typedef struct _CRYPT_RC2_CBC_PARAMETERS {
788 DWORD dwVersion;
789 BOOL fIV;
790 BYTE rgbIV[4];
791} CRYPT_RC2_CBC_PARAMETERS, *PCRYPT_RC2_CBC_PARAMETERS;
792
793#define CRYPT_RC2_40BIT_VERSION 160
794#define CRYPT_RC2_56BIT_VERSION 52
795#define CRYPT_RC2_64BIT_VERSION 120
796#define CRYPT_RC2_128BIT_VERSION 58
797
798typedef struct _CRYPT_SMIME_CAPABILITY {
799 LPSTR pszObjId;
800 CRYPT_OBJID_BLOB Parameters;
801} CRYPT_SMIME_CAPABILITY, *PCRYPT_SMIME_CAPABILITY;
802
803typedef struct _CRYPT_SMIME_CAPABILITIES {
804 DWORD cCapability;
805 PCRYPT_SMIME_CAPABILITY rgCapability;
806} CRYPT_SMIME_CAPABILITIES, *PCRYPT_SMIME_CAPABILITIES;
807
808typedef struct _VTableProvStruc {
809 DWORD Version;
810#ifndef WINE_NO_STRICT_PROTOTYPES
811 BOOL (WINAPI *FuncVerifyImage)(LPCSTR,BYTE*);
812 void (WINAPI *FuncReturnhWnd)(HWND*);
813#else
814 FARPROC FuncVerifyImage;
815 FARPROC FuncReturnhWnd;
816#endif
817 DWORD dwProvType;
818 BYTE *pbContextInfo;
819 DWORD cbContextInfo;
820 LPSTR pszProvName;
821} VTableProvStruc, *PVTableProvStruc;
822
823typedef struct _CERT_PRIVATE_KEY_INFO {
824 DWORD Version;
825 CRYPT_ALGORITHM_IDENTIFIER Algorithm;
826 CRYPT_DER_BLOB PrivateKey;
827 PCRYPT_ATTRIBUTES pAttributes;
828} CERT_PRIVATE_KEY_INFO, *PCERT_PRIVATE_KEY_INFO;
829
830typedef struct _CTL_USAGE {
831 DWORD cUsageIdentifier;
832 LPSTR *rgpszUsageIdentifier;
833} CTL_USAGE, *PCTL_USAGE, CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
834
835typedef struct _CTL_ENTRY {
836 CRYPT_DATA_BLOB SubjectIdentifier;
837 DWORD cAttribute;
838 PCRYPT_ATTRIBUTE rgAttribute;
839} CTL_ENTRY, *PCTL_ENTRY;
840
841typedef struct _CTL_INFO {
842 DWORD dwVersion;
843 CTL_USAGE SubjectUsage;
844 CRYPT_DATA_BLOB ListIdentifier;
845 CRYPT_INTEGER_BLOB SequenceNumber;
846 FILETIME ThisUpdate;
847 FILETIME NextUpdate;
848 CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
849 DWORD cCTLEntry;
850 PCTL_ENTRY rgCTLEntry;
851 DWORD cExtension;
852 PCERT_EXTENSION rgExtension;
853} CTL_INFO, *PCTL_INFO;
854
855typedef struct _CTL_CONTEXT {
856 DWORD dwMsgAndCertEncodingType;
857 BYTE *pbCtlEncoded;
858 DWORD cbCtlEncoded;
859 PCTL_INFO pCtlInfo;
860 HCERTSTORE hCertStore;
861 HCRYPTMSG hCryptMsg;
862 BYTE *pbCtlContext;
863 DWORD cbCtlContext;
864} CTL_CONTEXT, *PCTL_CONTEXT;
865typedef const CTL_CONTEXT *PCCTL_CONTEXT;
866
867typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO {
868 LPSTR pszTimeStampAlgorithm;
869 LPSTR pszContentType;
870 CRYPT_OBJID_BLOB Content;
871 DWORD cAttribute;
872 PCRYPT_ATTRIBUTE rgAttribute;
873} CRYPT_TIME_STAMP_REQUEST_INFO, *PCRYPT_TIME_STAMP_REQUEST_INFO;
874
875typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR {
876 LPWSTR pwszName;
877 LPWSTR pwszValue;
878} CRYPT_ENROLLMENT_NAME_VALUE_PAIR, *PCRYPT_ENROLLMENT_NAME_VALUE_PAIR;
879
880typedef struct _CMSG_SIGNER_INFO {
881 DWORD dwVersion;
882 CERT_NAME_BLOB Issuer;
883 CRYPT_INTEGER_BLOB SerialNumber;
884 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
885 CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
886 CRYPT_DATA_BLOB EncryptedHash;
887 CRYPT_ATTRIBUTES AuthAttrs;
888 CRYPT_ATTRIBUTES UnauthAttrs;
889} CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO;
890
891#define CMSG_VERIFY_SIGNER_PUBKEY 1
892#define CMSG_VERIFY_SIGNER_CERT 2
893#define CMSG_VERIFY_SIGNER_CHAIN 3
894#define CMSG_VERIFY_SIGNER_NULL 4
895
896typedef struct _CERT_REVOCATION_CRL_INFO {
897 DWORD cbSize;
898 PCCRL_CONTEXT pBaseCrlContext;
899 PCCRL_CONTEXT pDeltaCrlContext;
900 PCRL_ENTRY pCrlEntry;
901 BOOL fDeltaCrlEntry;
902} CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
903
904typedef struct _CERT_REVOCATION_INFO {
905 DWORD cbSize;
906 DWORD dwRevocationResult;
907 LPCSTR pszRevocationOid;
908 LPVOID pvOidSpecificInfo;
909 BOOL fHasFreshnessTime;
910 DWORD dwFreshnessTime;
911 PCERT_REVOCATION_CRL_INFO pCrlInfo;
912} CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
913
914typedef struct _CERT_REVOCATION_PARA {
915 DWORD cbSize;
916 PCCERT_CONTEXT pIssuerCert;
917 DWORD cCertStore;
918 HCERTSTORE *rgCertStore;
919 HCERTSTORE hCrlStore;
920 LPFILETIME pftTimeToUse;
921#ifdef CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS
922 DWORD dwUrlRetrievalTimeout;
923 BOOL fCheckFreshnessTime;
924 DWORD dwFreshnessTime;
925 LPFILETIME pftCurrentTime;
926 PCERT_REVOCATION_CRL_INFO pCrlInfo;
927#endif
928} CERT_REVOCATION_PARA, *PCERT_REVOCATION_PARA;
929
930#define CERT_CONTEXT_REVOCATION_TYPE 1
931#define CERT_VERIFY_REV_CHAIN_FLAG 0x00000001
932#define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION 0x00000002
933#define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x00000004
934
935typedef struct _CTL_VERIFY_USAGE_PARA {
936 DWORD cbSize;
937 CRYPT_DATA_BLOB ListIdentifier;
938 DWORD cCtlStore;
939 HCERTSTORE *rghCtlStore;
940 DWORD cSignerStore;
941 HCERTSTORE *rghSignerStore;
942} CTL_VERIFY_USAGE_PARA, *PCTL_VERIFY_USAGE_PARA;
943
944typedef struct _CTL_VERIFY_USAGE_STATUS {
945 DWORD cbSize;
946 DWORD dwError;
947 DWORD dwFlags;
948 PCCTL_CONTEXT *ppCtl;
949 DWORD dwCtlEntryIndex;
950 PCCERT_CONTEXT *ppSigner;
951 DWORD dwSignerIndex;
952} CTL_VERIFY_USAGE_STATUS, *PCTL_VERIFY_USAGE_STATUS;
953
954#define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1
955#define CERT_VERIFY_TRUSTED_SIGNERS_FLAG 0x2
956#define CERT_VERIFY_NO_TIME_CHECK_FLAG 0x4
957#define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG 0x8
958#define CERT_VERIFY_UPDATED_CTL_FLAG 0x1
959
960typedef struct _CERT_CHAIN {
961 DWORD cCerts;
962 PCERT_BLOB certs;
963 CRYPT_KEY_PROV_INFO keyLocatorInfo;
964} CERT_CHAIN, *PCERT_CHAIN;
965
966typedef struct _CERT_REVOCATION_STATUS {
967 DWORD cbSize;
968 DWORD dwIndex;
969 DWORD dwError;
970 DWORD dwReason;
971 BOOL fHasFreshnessTime;
972 DWORD dwFreshnessTime;
973} CERT_REVOCATION_STATUS, *PCERT_REVOCATION_STATUS;
974
975typedef struct _CERT_TRUST_LIST_INFO {
976 DWORD cbSize;
977 PCTL_ENTRY pCtlEntry;
978 PCCTL_CONTEXT pCtlContext;
979} CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
980
981#define CERT_TRUST_NO_ERROR 0x00000000
982#define CERT_TRUST_IS_NOT_TIME_VALID 0x00000001
983#define CERT_TRUST_IS_NOT_TIME_NESTED 0x00000002
984#define CERT_TRUST_IS_REVOKED 0x00000004
985#define CERT_TRUST_IS_NOT_SIGNATURE_VALID 0x00000008
986#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 0x00000010
987#define CERT_TRUST_IS_UNTRUSTED_ROOT 0x00000020
988#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 0x00000040
989#define CERT_TRUST_IS_CYCLIC 0x00000080
990#define CERT_TRUST_INVALID_EXTENSION 0x00000100
991#define CERT_TRUST_INVALID_POLICY_CONSTRAINTS 0x00000200
992#define CERT_TRUST_INVALID_BASIC_CONSTRAINTS 0x00000400
993#define CERT_TRUST_INVALID_NAME_CONSTRAINTS 0x00000800
994#define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x00001000
995#define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT 0x00002000
996#define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x00004000
997#define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT 0x00008000
998#define CERT_TRUST_IS_OFFLINE_REVOCATION 0x01000000
999#define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY 0x02000000
1000#define CERT_TRUST_IS_EXPLICIT_DISTRUST 0x04000000
1001#define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT 0x08000000
1002
1003#define CERT_TRUST_IS_PARTIAL_CHAIN 0x00010000
1004#define CERT_TRUST_CTL_IS_NOT_TIME_VALID 0x00020000
1005#define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 0x00040000
1006#define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 0x00080000
1007
1008#define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 0x00000001
1009#define CERT_TRUST_HAS_KEY_MATCH_ISSUER 0x00000002
1010#define CERT_TRUST_HAS_NAME_MATCH_ISSUER 0x00000004
1011#define CERT_TRUST_IS_SELF_SIGNED 0x00000008
1012
1013#define CERT_TRUST_HAS_PREFERRED_ISSUER 0x00000100
1014#define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY 0x00000200
1015#define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS 0x00000400
1016#define CERT_TRUST_IS_PEER_TRUSTED 0x00000800
1017#define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED 0x00001000
1018
1019#define CERT_TRUST_IS_COMPLEX_CHAIN 0x00010000
1020
1021typedef struct _CERT_TRUST_STATUS {
1022 DWORD dwErrorStatus;
1023 DWORD dwInfoStatus;
1024} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
1025
1026typedef struct _CERT_CHAIN_ELEMENT {
1027 DWORD cbSize;
1028 PCCERT_CONTEXT pCertContext;
1029 CERT_TRUST_STATUS TrustStatus;
1030 PCERT_REVOCATION_INFO pRevocationInfo;
1031 PCERT_ENHKEY_USAGE pIssuanceUsage;
1032 PCERT_ENHKEY_USAGE pApplicationUsage;
1033 LPCWSTR pwszExtendedErrorInfo;
1034} CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
1035
1036typedef struct _CERT_SIMPLE_CHAIN {
1037 DWORD cbSize;
1038 CERT_TRUST_STATUS TrustStatus;
1039 DWORD cElement;
1040 PCERT_CHAIN_ELEMENT *rgpElement;
1041 PCERT_TRUST_LIST_INFO pTrustListInfo;
1042 BOOL fHasRevocationFreshnessTime;
1043 DWORD dwRevocationFreshnessTime;
1044} CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
1045
1046typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
1047typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;
1048
1049struct _CERT_CHAIN_CONTEXT {
1050 DWORD cbSize;
1051 CERT_TRUST_STATUS TrustStatus;
1052 DWORD cChain;
1053 PCERT_SIMPLE_CHAIN *rgpChain;
1054 DWORD cLowerQualityChainContext;
1055 PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext;
1056 BOOL fHasRevocationFreshnessTime;
1057 DWORD dwRevocationFreshnessTime;
1058};
1059
1060typedef struct _CERT_CHAIN_POLICY_PARA {
1061 DWORD cbSize;
1062 DWORD dwFlags;
1063 void *pvExtraPolicyPara;
1064} CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
1065
1066typedef struct _CERT_CHAIN_POLICY_STATUS {
1067 DWORD cbSize;
1068 DWORD dwError;
1069 LONG lChainIndex;
1070 LONG lElementIndex;
1071 void *pvExtraPolicyStatus;
1072} CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;
1073
1074#define CERT_CHAIN_POLICY_BASE ((LPCSTR)1)
1075#define CERT_CHAIN_POLICY_AUTHENTICODE ((LPCSTR)2)
1076#define CERT_CHAIN_POLICY_AUTHENTICODE_TS ((LPCSTR)3)
1077#define CERT_CHAIN_POLICY_SSL ((LPCSTR)4)
1078#define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR)5)
1079#define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR)6)
1080#define CERT_CHAIN_POLICY_MICROSOFT_ROOT ((LPCSTR)7)
1081
1082#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG 0x00000001
1083#define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG 0x00000002
1084#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG 0x00000004
1085#define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x00000008
1086
1087#define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS ( \
1088 CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG \
1089 CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG \
1090 CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG )
1091
1092#define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG 0x00000010
1093#define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG 0x00000020
1094#define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG 0x00000040
1095#define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG 0x00000080
1096
1097#define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG 0x00000100
1098#define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG 0x00000200
1099#define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG 0x00000400
1100#define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG 0x00000800
1101
1102#define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS ( \
1103 CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG \
1104 CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG \
1105 CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG \
1106 CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG )
1107
1108#define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG 0x00001000
1109#define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x00002000
1110#define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG 0x00004000
1111#define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG 0x00008000
1112#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000
1113#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG 0x00020000
1114
1115typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
1116 DWORD cbSize;
1117 DWORD dwRegPolicySettings;
1118 PCMSG_SIGNER_INFO pSignerInfo;
1119} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA,
1120 *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
1121
1122typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
1123 DWORD cbSize;
1124 BOOL fCommercial;
1125} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS,
1126 *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
1127
1128typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
1129 DWORD cbSize;
1130 DWORD dwRegPolicySettings;
1131 BOOL fCommercial;
1132} AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA,
1133 *PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;
1134
1135typedef struct _HTTPSPolicyCallbackData {
1136 union {
1137 DWORD cbStruct;
1138 DWORD cbSize;
1139 } DUMMYUNIONNAME;
1140 DWORD dwAuthType;
1141 DWORD fdwChecks;
1142 WCHAR *pwszServerName;
1143} HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData,
1144 SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA;
1145
1146/* Values for HTTPSPolicyCallbackData's dwAuthType */
1147#define AUTHTYPE_CLIENT 1
1148#define AUTHTYPE_SERVER 2
1149/* Values for HTTPSPolicyCallbackData's fdwChecks are defined in wininet.h */
1150
1151#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG 0x80000000
1152#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000
1153
1154#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000
1155
1156#define USAGE_MATCH_TYPE_AND 0x00000000
1157#define USAGE_MATCH_TYPE_OR 0x00000001
1158
1159typedef struct _CERT_USAGE_MATCH {
1160 DWORD dwType;
1161 CERT_ENHKEY_USAGE Usage;
1162} CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
1163
1164typedef struct _CTL_USAGE_MATCH {
1165 DWORD dwType;
1166 CTL_USAGE Usage;
1167} CTL_USAGE_MATCH, *PCTL_USAGE_MATCH;
1168
1169#define CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000
1170#define CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000
1171#define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000
1172#define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000
1173
1174#define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x08000000
1175
1176#define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING 0x00000040
1177#define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS 0x00000080
1178#define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE 0x00000100
1179#define CERT_CHAIN_TIMESTAMP_TIME 0x00000200
1180
1181typedef struct _CERT_CHAIN_PARA {
1182 DWORD cbSize;
1183 CERT_USAGE_MATCH RequestedUsage;
1184#ifdef CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
1185 CERT_USAGE_MATCH RequestedIssuancePolicy;
1186 DWORD dwUrlRetrievalTimeout;
1187 BOOL fCheckRevocationFreshnessTime;
1188 DWORD dwRevocationFreshnessTime;
1189 LPFILETIME pftCacheResync;
1190#endif
1191} CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;
1192
1193typedef struct _CERT_SYSTEM_STORE_INFO {
1194 DWORD cbSize;
1195} CERT_SYSTEM_STORE_INFO, *PCERT_SYSTEM_STORE_INFO;
1196
1197typedef struct _CERT_PHYSICAL_STORE_INFO {
1198 DWORD cbSize;
1199 LPSTR pszOpenStoreProvider;
1200 DWORD dwOpenEncodingType;
1201 DWORD dwOpenFlags;
1202 CRYPT_DATA_BLOB OpenParameters;
1203 DWORD dwFlags;
1204 DWORD dwPriority;
1205} CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO;
1206
1207typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {
1208 union {
1209 HKEY hKeyBase;
1210 VOID *pvBase;
1211 } DUMMYUNIONNAME;
1212 union {
1213 void *pvSystemStore;
1214 LPCSTR pszSystemStore;
1215 LPCWSTR pwszSystemStore;
1216 } DUMMYUNIONNAME2;
1217} CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA;
1218
1219#ifdef __REACTOS__
1220typedef BOOL
1221(WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(
1222 _In_ LPCWSTR pwszStoreLocation,
1223 _In_ DWORD dwFlags,
1224 _Reserved_ void *pvReserved,
1225 _Inout_opt_ void *pvArg);
1226
1227typedef BOOL
1228(WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(
1229 _In_ const void *pvSystemStore,
1230 _In_ DWORD dwFlags,
1231 _In_ PCERT_SYSTEM_STORE_INFO pStoreInfo,
1232 _Reserved_ void *pvReserved,
1233 _Inout_opt_ void *pvArg);
1234
1235typedef BOOL
1236(WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(
1237 _In_ const void *pvSystemStore,
1238 _In_ DWORD dwFlags,
1239 _In_ LPCWSTR pwszStoreName,
1240 _In_ PCERT_PHYSICAL_STORE_INFO pStoreInfo,
1241 _Reserved_ void *pvReserved,
1242 _Inout_opt_ void *pvArg);
1243#else
1244typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(
1245 LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg);
1246
1247typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore,
1248 DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved,
1249 void *pvArg);
1250
1251typedef BOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore,
1252 DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo,
1253 void *pvReserved, void *pvArg);
1254#endif // __REACTOS
1255
1256/* Encode/decode object */
1257typedef LPVOID (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize);
1258typedef VOID (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);
1259
1260typedef struct _CRYPT_ENCODE_PARA {
1261 DWORD cbSize;
1262 PFN_CRYPT_ALLOC pfnAlloc;
1263 PFN_CRYPT_FREE pfnFree;
1264} CRYPT_ENCODE_PARA, *PCRYPT_ENCODE_PARA;
1265
1266typedef struct _CRYPT_DECODE_PARA {
1267 DWORD cbSize;
1268 PFN_CRYPT_ALLOC pfnAlloc;
1269 PFN_CRYPT_FREE pfnFree;
1270} CRYPT_DECODE_PARA, *PCRYPT_DECODE_PARA;
1271
1272typedef struct _CERT_STORE_PROV_INFO {
1273 DWORD cbSize;
1274 DWORD cStoreProvFunc;
1275 void **rgpvStoreProvFunc;
1276 HCERTSTOREPROV hStoreProv;
1277 DWORD dwStoreProvFlags;
1278 HCRYPTOIDFUNCADDR hStoreProvFuncAddr2;
1279} CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO;
1280
1281#ifdef __REACTOS__
1282typedef BOOL
1283(WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(
1284 _In_ LPCSTR lpszStoreProvider,
1285 _In_ DWORD dwEncodingType,
1286 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
1287 _In_ DWORD dwFlags,
1288 _In_opt_ const void *pvPara,
1289 _In_ HCERTSTORE hCertStore,
1290 _Inout_ PCERT_STORE_PROV_INFO pStoreProvInfo);
1291
1292typedef void
1293(WINAPI *PFN_CERT_STORE_PROV_CLOSE)(
1294 _Inout_opt_ HCERTSTOREPROV hStoreProv,
1295 _In_ DWORD dwFlags);
1296
1297typedef
1298_Success_(return != 0)
1299BOOL
1300(WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(
1301 _Inout_ HCERTSTOREPROV hStoreProv,
1302 _In_ PCCERT_CONTEXT pStoreCertContext,
1303 _In_ DWORD dwFlags,
1304 _Outptr_ PCCERT_CONTEXT *ppProvCertContext);
1305
1306typedef BOOL
1307(WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(
1308 _Inout_ HCERTSTOREPROV hStoreProv,
1309 _In_ PCCERT_CONTEXT pCertContext,
1310 _In_ DWORD dwFlags);
1311
1312typedef BOOL
1313(WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)(
1314 _Inout_ HCERTSTOREPROV hStoreProv,
1315 _In_ PCCERT_CONTEXT pCertContext,
1316 _In_ DWORD dwFlags);
1317
1318typedef BOOL
1319(WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)(
1320 _Inout_ HCERTSTOREPROV hStoreProv,
1321 _In_ PCCERT_CONTEXT pCertContext,
1322 _In_ DWORD dwPropId,
1323 _In_ DWORD dwFlags,
1324 _In_opt_ const void *pvData);
1325
1326typedef
1327_Success_(return != 0)
1328BOOL
1329(WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(
1330 _Inout_ HCERTSTOREPROV hStoreProv,
1331 _In_ PCCRL_CONTEXT pStoreCrlContext,
1332 _In_ DWORD dwFlags,
1333 _Outptr_ PCCRL_CONTEXT *ppProvCrlContext);
1334
1335typedef BOOL
1336(WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(
1337 _Inout_ HCERTSTOREPROV hStoreProv,
1338 _In_ PCCRL_CONTEXT pCrlContext,
1339 _In_ DWORD dwFlags);
1340
1341typedef BOOL
1342(WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(
1343 _Inout_ HCERTSTOREPROV hStoreProv,
1344 _In_ PCCRL_CONTEXT pCrlContext,
1345 _In_ DWORD dwFlags);
1346
1347typedef BOOL
1348(WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)(
1349 _Inout_ HCERTSTOREPROV hStoreProv,
1350 _In_ PCCRL_CONTEXT pCrlContext,
1351 _In_ DWORD dwPropId,
1352 _In_ DWORD dwFlags,
1353 _In_opt_ const void *pvData);
1354
1355typedef
1356_Success_(return != 0)
1357BOOL
1358(WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(
1359 _Inout_ HCERTSTOREPROV hStoreProv,
1360 _In_ PCCTL_CONTEXT pStoreCtlContext,
1361 _In_ DWORD dwFlags,
1362 _Outptr_ PCCTL_CONTEXT *ppProvCtlContext);
1363
1364typedef BOOL
1365(WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(
1366 _Inout_ HCERTSTOREPROV hStoreProv,
1367 _In_ PCCTL_CONTEXT pCtlContext,
1368 _In_ DWORD dwFlags);
1369
1370typedef BOOL
1371(WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)(
1372 _Inout_ HCERTSTOREPROV hStoreProv,
1373 _In_ PCCTL_CONTEXT pCtlContext,
1374 _In_ DWORD dwFlags);
1375
1376typedef BOOL
1377(WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)(
1378 _Inout_ HCERTSTOREPROV hStoreProv,
1379 _In_ PCCTL_CONTEXT pCtlContext,
1380 _In_ DWORD dwPropId,
1381 _In_ DWORD dwFlags,
1382 _In_opt_ const void *pvData);
1383
1384typedef BOOL
1385(WINAPI *PFN_CERT_STORE_PROV_CONTROL)(
1386 _Inout_ HCERTSTOREPROV hStoreProv,
1387 _In_ DWORD dwFlags,
1388 _In_ DWORD dwCtrlType,
1389 _In_opt_ void const *pvCtrlPara);
1390#else
1391typedef BOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(
1392 LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv,
1393 DWORD dwFlags, const void *pvPara, HCERTSTORE hCertStore,
1394 PCERT_STORE_PROV_INFO pStoreProvInfo);
1395
1396typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE)(HCERTSTOREPROV hStoreProv,
1397 DWORD dwFlags);
1398
1399typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(HCERTSTOREPROV hStoreProv,
1400 PCCERT_CONTEXT pStoreCertContext, DWORD dwFlags,
1401 PCCERT_CONTEXT *ppProvCertContext);
1402
1403typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(HCERTSTOREPROV hStoreProv,
1404 PCCERT_CONTEXT pCertContext, DWORD dwFlags);
1405
1406typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)(
1407 HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags);
1408
1409typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)(
1410 HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,
1411 DWORD dwFlags, const void *pvData);
1412
1413typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(HCERTSTOREPROV hStoreProv,
1414 PCCRL_CONTEXT pStoreCrlContext, DWORD dwFlags,
1415 PCCRL_CONTEXT *ppProvCrlContext);
1416
1417typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(HCERTSTOREPROV hStoreProv,
1418 PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
1419
1420typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(HCERTSTOREPROV hStoreProv,
1421 PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
1422
1423typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)(
1424 HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,
1425 DWORD dwFlags, const void *pvData);
1426
1427typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(HCERTSTOREPROV hStoreProv,
1428 PCCTL_CONTEXT pStoreCtlContext, DWORD dwFlags,
1429 PCCTL_CONTEXT *ppProvCtlContext);
1430
1431typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(HCERTSTOREPROV hStoreProv,
1432 PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
1433
1434typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)(
1435 HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
1436
1437typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)(
1438 HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,
1439 DWORD dwFlags, const void *pvData);
1440
1441typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL)(HCERTSTOREPROV hStoreProv,
1442 DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
1443#endif
1444
1445typedef struct _CERT_STORE_PROV_FIND_INFO {
1446 DWORD cbSize;
1447 DWORD dwMsgAndCertEncodingType;
1448 DWORD dwFindFlags;
1449 DWORD dwFindType;
1450 const void *pvFindPara;
1451} CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO;
1452typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,
1453 *PCCERT_STORE_PROV_FIND_INFO;
1454
1455#ifdef __REACTOS__
1456typedef
1457_Success_(return != 0)
1458BOOL
1459(WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(
1460 _Inout_ HCERTSTOREPROV hStoreProv,
1461 _In_ PCCERT_STORE_PROV_FIND_INFO pFindInfo,
1462 _In_ PCCERT_CONTEXT pPrevCertContext,
1463 _In_ DWORD dwFlags,
1464 _Inout_ void **ppvStoreProvFindInfo,
1465 _Outptr_ PCCERT_CONTEXT *ppProvCertContext);
1466
1467typedef BOOL
1468(WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(
1469 _Inout_ HCERTSTOREPROV hStoreProv,
1470 _In_ PCCERT_CONTEXT pCertContext,
1471 _In_ void *pvStoreProvFindInfo,
1472 _In_ DWORD dwFlags);
1473
1474typedef BOOL
1475(WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(
1476 _Inout_ HCERTSTOREPROV hStoreProv,
1477 _In_ PCCERT_CONTEXT pCertContext,
1478 _In_ DWORD dwPropId,
1479 _In_ DWORD dwFlags,
1480 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) void *pvData,
1481 _Inout_ DWORD *pcbData);
1482
1483typedef
1484_Success_(return != 0)
1485BOOL
1486(WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(
1487 _Inout_ HCERTSTOREPROV hStoreProv,
1488 _In_ PCCERT_STORE_PROV_FIND_INFO pFindInfo,
1489 _In_ PCCRL_CONTEXT pPrevCrlContext,
1490 _In_ DWORD dwFlags,
1491 _Inout_ void **ppvStoreProvFindInfo,
1492 _Outptr_ PCCRL_CONTEXT *ppProvCrlContext);
1493
1494typedef BOOL
1495(WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)(
1496 _Inout_ HCERTSTOREPROV hStoreProv,
1497 _In_ PCCRL_CONTEXT pCrlContext,
1498 _In_ void *pvStoreProvFindInfo,
1499 _In_ DWORD dwFlags);
1500
1501typedef BOOL
1502(WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)(
1503 _Inout_ HCERTSTOREPROV hStoreProv,
1504 _In_ PCCRL_CONTEXT pCrlContext,
1505 _In_ DWORD dwPropId,
1506 _In_ DWORD dwFlags,
1507 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) void *pvData,
1508 _Inout_ DWORD *pcbData);
1509
1510typedef
1511_Success_(return != 0)
1512BOOL
1513(WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(
1514 _In_ HCERTSTOREPROV hStoreProv,
1515 _In_ PCCERT_STORE_PROV_FIND_INFO pFindInfo,
1516 _In_ PCCTL_CONTEXT pPrevCtlContext,
1517 _In_ DWORD dwFlags,
1518 _Inout_ void **ppvStoreProvFindInfo,
1519 _Outptr_ PCCTL_CONTEXT *ppProvCtlContext);
1520
1521typedef BOOL
1522(WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(
1523 _Inout_ HCERTSTOREPROV hStoreProv,
1524 _In_ PCCTL_CONTEXT pCtlContext,
1525 _In_ DWORD dwPropId,
1526 _In_ DWORD dwFlags,
1527 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) void *pvData,
1528 _Inout_ DWORD *pcbData);
1529#else
1530typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv,
1531 PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCERT_CONTEXT pPrevCertContext,
1532 DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext);
1533
1534typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(
1535 HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext,
1536 void *pvStoreProvFindInfo, DWORD dwFlags);
1537
1538typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(
1539 HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,
1540 DWORD dwFlags, void *pvData, DWORD *pcbData);
1541
1542typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(HCERTSTOREPROV hStoreProv,
1543 PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCRL_CONTEXT pPrevCrlContext,
1544 DWORD dwFlags, void **ppvStoreProvFindInfo, PCCRL_CONTEXT *ppProvCrlContext);
1545
1546typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)(
1547 HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext,
1548 void *pvStoreProvFindInfo, DWORD dwFlags);
1549
1550typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)(
1551 HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,
1552 DWORD dwFlags, void *pvData, DWORD *pcbData);
1553
1554typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(HCERTSTOREPROV hStoreProv,
1555 PCCTL_CONTEXT pCtlContext, void *pvStoreProvFindInfo, DWORD dwFlags);
1556
1557typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(
1558 HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,
1559 DWORD dwFlags, void *pvData);
1560#endif
1561
1562typedef struct _CERT_CREATE_CONTEXT_PARA {
1563 DWORD cbSize;
1564 PFN_CRYPT_FREE pfnFree;
1565 void *pvFree;
1566} CERT_CREATE_CONTEXT_PARA, *PCERT_CREATE_CONTEXT_PARA;
1567
1568typedef struct _CRYPT_OID_FUNC_ENTRY {
1569 LPCSTR pszOID;
1570 void *pvFuncAddr;
1571} CRYPT_OID_FUNC_ENTRY, *PCRYPT_OID_FUNC_ENTRY;
1572
1573#ifdef __REACTOS__
1574typedef BOOL
1575(WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(
1576 _In_ DWORD dwEncodingType,
1577 _In_ LPCSTR pszFuncName,
1578 _In_ LPCSTR pszOID,
1579 _In_ DWORD cValue,
1580 _In_reads_(cValue) const DWORD rgdwValueType[],
1581 _In_reads_(cValue) LPCWSTR const rgpwszValueName[],
1582 _In_reads_(cValue) const BYTE * const rgpbValueData[],
1583 _In_reads_(cValue) const DWORD rgcbValueData[],
1584 _Inout_opt_ void *pvArg);
1585
1586#else
1587typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType,
1588 LPCSTR pszFuncName, LPCSTR pszOID, DWORD cValue, const DWORD rgdwValueType[],
1589 LPCWSTR const rgpwszValueName[], const BYTE * const rgpbValueData[],
1590 const DWORD rgcbValueData[], void *pvArg);
1591#endif
1592
1593#define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff
1594
1595#define CALG_OID_INFO_CNG_ONLY 0xffffffff
1596#define CALG_OID_INFO_PARAMETERS 0xfffffffe
1597
1598#if defined(_MSC_VER) || defined(__MINGW32__)
1599#define CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM L"CryptOIDInfoHashParameters"
1600#define CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM L"CryptOIDInfoECCParameters"
1601#define CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM L"CryptOIDInfoMgf1Parameters"
1602#define CRYPT_OID_INFO_NO_SIGN_ALGORITHM L"CryptOIDInfoNoSign"
1603#define CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM L"CryptOIDInfoOAEPParameters"
1604#define CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM L"CryptOIDInfoECCWrapParameters"
1605#define CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM L"CryptOIDInfoNoParameters"
1606#else
1607static const WCHAR CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','H','a','s','h','P','a','r','a','m','e','t','e','r','s',0};
1608static const WCHAR CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','E','C','C','P','a','r','a','m','e','t','e','r','s',0};
1609static const WCHAR CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','M','g','f','1','P','a','r','a','m','e','t','e','r','s',0};
1610static const WCHAR CRYPT_OID_INFO_NO_SIGN_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','N','o','S','i','g','n',0};
1611static const WCHAR CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','O','A','E','P','P','a','r','a','m','e','t','e','r','s',0};
1612static const WCHAR CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','E','C','C','W','r','a','p','P','a','r','a','m','e','t','e','r','s',0};
1613static const WCHAR CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','N','o','P','a','r','a','m','e','t','e','r','s',0};
1614#endif
1615
1616typedef struct _CRYPT_OID_INFO {
1617 DWORD cbSize;
1618 LPCSTR pszOID;
1619 LPCWSTR pwszName;
1620 DWORD dwGroupId;
1621 union {
1622 DWORD dwValue;
1623 ALG_ID Algid;
1624 DWORD dwLength;
1625 } DUMMYUNIONNAME;
1626 CRYPT_DATA_BLOB ExtraInfo;
1627#ifdef CRYPT_OID_INFO_HAS_EXTRA_FIELDS
1628 LPCWSTR pwszCNGAlgid;
1629 LPCWSTR pwszCNGExtraAlgid;
1630#endif
1631} CRYPT_OID_INFO, *PCRYPT_OID_INFO;
1632typedef const CRYPT_OID_INFO CCRYPT_OID_INFO, *PCCRYPT_OID_INFO;
1633
1634#ifdef __REACTOS__
1635typedef BOOL
1636(WINAPI *PFN_CRYPT_ENUM_OID_INFO)(
1637 _In_ PCCRYPT_OID_INFO pInfo,
1638 _Inout_opt_ void *pvArg);
1639#else
1640typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo,
1641 void *pvArg);
1642#endif
1643
1644typedef struct _CRYPT_SIGN_MESSAGE_PARA {
1645 DWORD cbSize;
1646 DWORD dwMsgEncodingType;
1647 PCCERT_CONTEXT pSigningCert;
1648 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
1649 void * pvHashAuxInfo;
1650 DWORD cMsgCert;
1651 PCCERT_CONTEXT *rgpMsgCert;
1652 DWORD cMsgCrl;
1653 PCCRL_CONTEXT *rgpMsgCrl;
1654 DWORD cAuthAttr;
1655 PCRYPT_ATTRIBUTE rgAuthAttr;
1656 DWORD cUnauthAttr;
1657 PCRYPT_ATTRIBUTE rgUnauthAttr;
1658 DWORD dwFlags;
1659 DWORD dwInnerContentType;
1660#ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS
1661 CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
1662 void * pvHashEncryptionAuxInfo;
1663#endif
1664} CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA;
1665
1666#define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG 0x00000001
1667#define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x00000002
1668#define CRYPT_MESSAGE_KEYID_SIGNER_FLAG 0x00000004
1669#define CRYPT_MESSAGE_SILENT_KEYSET_FLAG 0x00000008
1670
1671#ifdef __REACTOS__
1672typedef PCCERT_CONTEXT
1673(WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(
1674 _Inout_opt_ void *pvGetArg,
1675 _In_ DWORD dwCertEncodingType,
1676 _In_ PCERT_INFO pSignerId,
1677 _In_ HCERTSTORE hMsgCertStore);
1678#else
1679typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(void *pvArg,
1680 DWORD dwCertEncodingType, PCERT_INFO pSignerId, HCERTSTORE hMsgCertStore);
1681#endif
1682
1683typedef struct _CRYPT_VERIFY_MESSAGE_PARA {
1684 DWORD cbSize;
1685 DWORD dwMsgAndCertEncodingType;
1686 HCRYPTPROV_LEGACY hCryptProv;
1687 PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate;
1688 void * pvGetArg;
1689} CRYPT_VERIFY_MESSAGE_PARA, *PCRYPT_VERIFY_MESSAGE_PARA;
1690
1691typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
1692 DWORD cbSize;
1693 DWORD dwMsgEncodingType;
1694 HCRYPTPROV_LEGACY hCryptProv;
1695 CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
1696 void * pvEncryptionAuxInfo;
1697 DWORD dwFlags;
1698 DWORD dwInnerContentType;
1699} CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA;
1700
1701#define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x00000004
1702
1703typedef struct _CRYPT_DECRYPT_MESSAGE_PARA {
1704 DWORD cbSize;
1705 DWORD dwMsgAndCertEncodingType;
1706 DWORD cCertStore;
1707 HCERTSTORE *rghCertStore;
1708#ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS
1709 DWORD dwFlags;
1710#endif
1711} CRYPT_DECRYPT_MESSAGE_PARA, *PCRYPT_DECRYPT_MESSAGE_PARA;
1712
1713typedef struct _CRYPT_HASH_MESSAGE_PARA {
1714 DWORD cbSize;
1715 DWORD dwMsgEncodingType;
1716 HCRYPTPROV_LEGACY hCryptProv;
1717 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
1718 void * pvHashAuxInfo;
1719} CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA;
1720
1721typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {
1722 DWORD cbSize;
1723 DWORD dwMsgAndCertEncodingType;
1724 HCRYPTPROV hCryptProv;
1725 DWORD dwKeySpec;
1726 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
1727 void * pvHashAuxInfo;
1728} CRYPT_KEY_SIGN_MESSAGE_PARA, *PCRYPT_KEY_SIGN_MESSAGE_PARA;
1729
1730typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {
1731 DWORD cbSize;
1732 DWORD dwMsgEncodingType;
1733 HCRYPTPROV_LEGACY hCryptProv;
1734} CRYPT_KEY_VERIFY_MESSAGE_PARA, *PCRYPT_KEY_VERIFY_MESSAGE_PARA;
1735
1736typedef struct _CRYPT_URL_ARRAY {
1737 DWORD cUrl;
1738 LPWSTR *rgwszUrl;
1739} CRYPT_URL_ARRAY, *PCRYPT_URL_ARRAY;
1740
1741typedef struct _CRYPT_URL_INFO {
1742 DWORD cbSize;
1743 DWORD dwSyncDeltaTime;
1744 DWORD cGroup;
1745 DWORD *rgcGroupEntry;
1746} CRYPT_URL_INFO, *PCRYPT_URL_INFO;
1747
1748#define URL_OID_CERTIFICATE_ISSUER ((LPCSTR)1)
1749#define URL_OID_CERTIFICATE_CRL_DIST_POINT ((LPCSTR)2)
1750#define URL_OID_CTL_ISSUER ((LPCSTR)3)
1751#define URL_OID_CTL_NEXT_UPDATE ((LPCSTR)4)
1752#define URL_OID_CRL_ISSUER ((LPCSTR)5)
1753#define URL_OID_CERTIFICATE_FRESHEST_CRL ((LPCSTR)6)
1754#define URL_OID_CRL_FRESHEST_CRL ((LPCSTR)7)
1755#define URL_OID_CROSS_CERT_DIST_POINT ((LPCSTR)8)
1756#define URL_OID_CERTIFICATE_OCSP ((LPCSTR)9)
1757#define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT ((LPCSTR)10)
1758#define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP ((LPCSTR)11)
1759#define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS ((LPCSTR)12)
1760
1761#define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
1762
1763typedef HANDLE HCRYPTASYNC, *PHCRYPTASYNC;
1764
1765#ifdef __REACTOS__
1766typedef void
1767(WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(
1768 _In_ LPSTR pszParamOid,
1769 _In_ LPVOID pvParam);
1770#else
1771typedef void (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid,
1772 LPVOID pvParam);
1773#endif
1774
1775#define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1)
1776#define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL ((LPCSTR)2)
1777
1778#ifdef __REACTOS__
1779typedef void
1780(WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)(
1781 _Inout_opt_ void *pvCompletion,
1782 _In_ DWORD dwCompletionCode,
1783 _In_ LPCSTR pszURL,
1784 _In_opt_ LPSTR pszObjectOid,
1785 _In_ void *pvObject);
1786
1787typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION {
1788 __callback PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;
1789 _Inout_opt_ void *pvCompletion;
1790} CRYPT_ASYNC_RETRIEVAL_COMPLETION, *PCRYPT_ASYNC_RETRIEVAL_COMPLETION;
1791
1792typedef BOOL
1793(WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)(
1794 _In_opt_ HCRYPTASYNC hAsyncRetrieve);
1795#else
1796typedef void (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)(
1797 void *pvCompletion, DWORD dwCompletionCode, LPCSTR pszURL, LPSTR pszObjectOid,
1798 void *pvObject);
1799
1800typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION
1801{
1802 PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;
1803 void *pvCompletion;
1804} CRYPT_ASYNC_RETRIEVAL_COMPLETION, *PCRYPT_ASYNC_RETRIEVAL_COMPLETION;
1805
1806typedef BOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)(
1807 HCRYPTASYNC hAsyncRetrieve);
1808#endif
1809
1810typedef struct _CRYPT_BLOB_ARRAY
1811{
1812 DWORD cBlob;
1813 PCRYPT_DATA_BLOB rgBlob;
1814} CRYPT_BLOB_ARRAY, *PCRYPT_BLOB_ARRAY;
1815
1816typedef struct _CRYPT_CREDENTIALS {
1817 DWORD cbSize;
1818 LPCSTR pszCredentialsOid;
1819 LPVOID pvCredentials;
1820} CRYPT_CREDENTIALS, *PCRYPT_CREDENTIALS;
1821
1822#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A ((LPCSTR)1)
1823#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W ((LPCSTR)2)
1824#define CREDENTIAL_OID_PASSWORD_CREDENTIALS \
1825 WINELIB_NAME_AW(CREDENTIAL_OID_PASSWORD_CREDENTIALS_)
1826
1827typedef struct _CRYPT_PASSWORD_CREDENTIALSA {
1828 DWORD cbSize;
1829 LPSTR pszUsername;
1830 LPSTR pszPassword;
1831} CRYPT_PASSWORD_CREDENTIALSA, *PCRYPT_PASSWORD_CREDENTIALSA;
1832
1833typedef struct _CRYPT_PASSWORD_CREDENTIALSW {
1834 DWORD cbSize;
1835 LPWSTR pszUsername;
1836 LPWSTR pszPassword;
1837} CRYPT_PASSWORD_CREDENTIALSW, *PCRYPT_PASSWORD_CREDENTIALSW;
1838#define CRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(CRYPT_PASSWORD_CREDENTIALS)
1839#define PCRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(PCRYPT_PASSWORD_CREDENTIALS)
1840
1841typedef struct _CRYPT_RETRIEVE_AUX_INFO {
1842 DWORD cbSize;
1843 FILETIME *pLastSyncTime;
1844 DWORD dwMaxUrlRetrievalByteCount;
1845} CRYPT_RETRIEVE_AUX_INFO, *PCRYPT_RETRIEVE_AUX_INFO;
1846
1847#ifdef __REACTOS__
1848typedef void
1849(WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(
1850 _In_opt_ LPCSTR pszObjectOid,
1851 _Inout_ PCRYPT_BLOB_ARRAY pObject,
1852 _Inout_opt_ void *pvFreeContext);
1853#else
1854typedef void (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid,
1855 PCRYPT_BLOB_ARRAY pObject, void *pvFreeContext);
1856#endif
1857
1858#define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC \
1859 "SchemeDllRetrieveEncodedObject"
1860#define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC \
1861 "SchemeDllRetrieveEncodedObjectW"
1862/* The signature of SchemeDllRetrieveEncodedObjectW is:
1863BOOL WINAPI SchemeDllRetrieveEncodedObjectW(LPCWSTR pwszUrl,
1864 LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout,
1865 PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject,
1866 void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve,
1867 PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
1868 */
1869
1870#define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext"
1871/* The signature of ContextDllCreateObjectContext is:
1872BOOL WINAPI ContextDllCreateObjectContext(LPCSTR pszObjectOid,
1873 DWORD dwRetrievalFlags, PCRYPT_BLOB_ARRAY pObject, void **ppvContxt);
1874 */
1875
1876#define CONTEXT_OID_CERTIFICATE ((LPCSTR)1)
1877#define CONTEXT_OID_CRL ((LPCSTR)2)
1878#define CONTEXT_OID_CTL ((LPCSTR)3)
1879#define CONTEXT_OID_PKCS7 ((LPCSTR)4)
1880#define CONTEXT_OID_CAPI2_ANY ((LPCSTR)5)
1881
1882#define CRYPT_RETRIEVE_MULTIPLE_OBJECTS 0x00000001
1883#define CRYPT_CACHE_ONLY_RETRIEVAL 0x00000002
1884#define CRYPT_WIRE_ONLY_RETRIEVAL 0x00000004
1885#define CRYPT_DONT_CACHE_RESULT 0x00000008
1886#define CRYPT_ASYNC_RETRIEVAL 0x00000010
1887#define CRYPT_STICKY_CACHE_RETRIEVAL 0x00001000
1888#define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x00002000
1889#define CRYPT_OFFLINE_CHECK_RETRIEVAL 0x00004000
1890#define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE 0x00008000
1891#define CRYPT_LDAP_SIGN_RETRIEVAL 0x00010000
1892#define CRYPT_NO_AUTH_RETRIEVAL 0x00020000
1893#define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL 0x00040000
1894#define CRYPT_AIA_RETRIEVAL 0x00080000
1895
1896#define CRYPT_VERIFY_CONTEXT_SIGNATURE 0x00000020
1897#define CRYPT_VERIFY_DATA_HASH 0x00000040
1898#define CRYPT_KEEP_TIME_VALID 0x00000080
1899#define CRYPT_DONT_VERIFY_SIGNATURE 0x00000100
1900#define CRYPT_DONT_CHECK_TIME_VALIDITY 0x00000200
1901#define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x00000400
1902#define CRYPT_ACCUMULATIVE_TIMEOUT 0x00000800
1903
1904#ifdef __REACTOS__
1905typedef BOOL
1906(WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(
1907 _In_ DWORD dwFlags,
1908 _Inout_opt_ void *pvArg);
1909#else
1910typedef BOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(DWORD dwFlags, void *pvArg);
1911#endif
1912
1913typedef struct _CERT_CRL_CONTEXT_PAIR
1914{
1915 PCCERT_CONTEXT pCertContext;
1916 PCCRL_CONTEXT pCrlContext;
1917} CERT_CRL_CONTEXT_PAIR, *PCERT_CRL_CONTEXT_PAIR;
1918typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
1919
1920#define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
1921
1922#define TIME_VALID_OID_GET_CTL ((LPCSTR)1)
1923#define TIME_VALID_OID_GET_CRL ((LPCSTR)2)
1924#define TIME_VALID_OID_GET_CRL_FROM_CERT ((LPCSTR)3)
1925#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
1926#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
1927
1928#define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject"
1929
1930#define TIME_VALID_OID_FLUSH_CTL ((LPCSTR)1)
1931#define TIME_VALID_OID_FLUSH_CRL ((LPCSTR)2)
1932#define TIME_VALID_OID_FLUSH_CRL_FROM_CERT ((LPCSTR)3)
1933#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
1934#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
1935
1936/* OID group IDs */
1937#define CRYPT_HASH_ALG_OID_GROUP_ID 1
1938#define CRYPT_ENCRYPT_ALG_OID_GROUP_ID 2
1939#define CRYPT_PUBKEY_ALG_OID_GROUP_ID 3
1940#define CRYPT_SIGN_ALG_OID_GROUP_ID 4
1941#define CRYPT_RDN_ATTR_OID_GROUP_ID 5
1942#define CRYPT_EXT_OR_ATTR_OID_GROUP_ID 6
1943#define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7
1944#define CRYPT_POLICY_OID_GROUP_ID 8
1945#define CRYPT_TEMPLATE_OID_GROUP_ID 9
1946#define CRYPT_LAST_OID_GROUP_ID 9
1947
1948#define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID
1949#define CRYPT_LAST_ALG_OID_GROUP_ID CRYPT_SIGN_ALG_OID_GROUP_ID
1950
1951#define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG 0x1
1952#define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2
1953#define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG 0x4
1954
1955#define CRYPT_OID_INFO_OID_KEY 1
1956#define CRYPT_OID_INFO_NAME_KEY 2
1957#define CRYPT_OID_INFO_ALGID_KEY 3
1958#define CRYPT_OID_INFO_SIGN_KEY 4
1959
1960/* Algorithm IDs */
1961
1962#define GET_ALG_CLASS(x) (x & (7 << 13))
1963#define GET_ALG_TYPE(x) (x & (15 << 9))
1964#define GET_ALG_SID(x) (x & (511))
1965
1966/* Algorithm Classes */
1967#define ALG_CLASS_ANY (0)
1968#define ALG_CLASS_SIGNATURE (1 << 13)
1969#define ALG_CLASS_MSG_ENCRYPT (2 << 13)
1970#define ALG_CLASS_DATA_ENCRYPT (3 << 13)
1971#define ALG_CLASS_HASH (4 << 13)
1972#define ALG_CLASS_KEY_EXCHANGE (5 << 13)
1973#define ALG_CLASS_ALL (7 << 13)
1974/* Algorithm types */
1975#define ALG_TYPE_ANY (0)
1976#define ALG_TYPE_DSS (1 << 9)
1977#define ALG_TYPE_RSA (2 << 9)
1978#define ALG_TYPE_BLOCK (3 << 9)
1979#define ALG_TYPE_STREAM (4 << 9)
1980#define ALG_TYPE_DH (5 << 9)
1981#define ALG_TYPE_SECURECHANNEL (6 << 9)
1982#define ALG_TYPE_ECDH (7 << 9)
1983
1984/* SIDs */
1985#define ALG_SID_ANY (0)
1986/* RSA SIDs */
1987#define ALG_SID_RSA_ANY 0
1988#define ALG_SID_RSA_PKCS 1
1989#define ALG_SID_RSA_MSATWORK 2
1990#define ALG_SID_RSA_ENTRUST 3
1991#define ALG_SID_RSA_PGP 4
1992/* DSS SIDs */
1993#define ALG_SID_DSS_ANY 0
1994#define ALG_SID_DSS_PKCS 1
1995#define ALG_SID_DSS_DMS 2
1996#define ALG_SID_ECDSA 3
1997
1998/* DES SIDs */
1999#define ALG_SID_DES 1
2000#define ALG_SID_3DES 3
2001#define ALG_SID_DESX 4
2002#define ALG_SID_IDEA 5
2003#define ALG_SID_CAST 6
2004#define ALG_SID_SAFERSK64 7
2005#define ALG_SID_SAFERSK128 8
2006#define ALG_SID_3DES_112 9
2007#define ALG_SID_CYLINK_MEK 12
2008#define ALG_SID_RC5 13
2009#define ALG_SID_AES_128 14
2010#define ALG_SID_AES_192 15
2011#define ALG_SID_AES_256 16
2012#define ALG_SID_AES 17
2013/* Fortezza */
2014#define ALG_SID_SKIPJACK 10
2015#define ALG_SID_TEK 11
2016/* Diffie-Hellmans SIDs */
2017#define ALG_SID_DH_SANDF 1
2018#define ALG_SID_DH_EPHEM 2
2019#define ALG_SID_AGREED_KEY_ANY 3
2020#define ALG_SID_KEA 4
2021#define ALG_SID_ECDH 5
2022#define ALG_SID_ECDH_EPHEM 6
2023/* RC2 SIDs */
2024#define ALG_SID_RC4 1
2025#define ALG_SID_RC2 2
2026#define ALG_SID_SEAL 2
2027/* Hash SIDs */
2028#define ALG_SID_MD2 1
2029#define ALG_SID_MD4 2
2030#define ALG_SID_MD5 3
2031#define ALG_SID_SHA 4
2032#define ALG_SID_SHA1 ALG_SID_SHA
2033#define ALG_SID_MAC 5
2034#define ALG_SID_RIPEMD 6
2035#define ALG_SID_RIPEMD160 7
2036#define ALG_SID_SSL3SHAMD5 8
2037#define ALG_SID_HMAC 9
2038#define ALG_SID_TLS1PRF 10
2039#define ALG_SID_HASH_REPLACE_OWF 11
2040#define ALG_SID_SHA_256 12
2041#define ALG_SID_SHA_384 13
2042#define ALG_SID_SHA_512 14
2043/* SCHANNEL SIDs */
2044#define ALG_SID_SSL3_MASTER 1
2045#define ALG_SID_SCHANNEL_MASTER_HASH 2
2046#define ALG_SID_SCHANNEL_MAC_KEY 3
2047#define ALG_SID_PCT1_MASTER 4
2048#define ALG_SID_SSL2_MASTER 5
2049#define ALG_SID_TLS1_MASTER 6
2050#define ALG_SID_SCHANNEL_ENC_KEY 7
2051#define ALG_SID_EXAMPLE 80
2052
2053#define ALG_SID_ECMQV 1
2054
2055/* Algorithm Definitions */
2056#define CALG_MD2 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2)
2057#define CALG_MD4 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4)
2058#define CALG_MD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5)
2059#define CALG_SHA (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA)
2060#define CALG_SHA1 CALG_SHA
2061#define CALG_MAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC)
2062#define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)
2063#define CALG_HMAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC)
2064#define CALG_TLS1PRF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF)
2065#define CALG_HASH_REPLACE_OWF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF)
2066#define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
2067#define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
2068#define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
2069#define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
2070#define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY)
2071#define CALG_NO_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY)
2072#define CALG_ECDSA (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA)
2073#define CALG_DH_SF (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_SANDF)
2074#define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EPHEM)
2075#define CALG_AGREEDKEY_ANY (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_AGREED_KEY_ANY)
2076#define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_KEA)
2077#define CALG_HUGHES_MD5 (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_MD5)
2078#define CALG_ECDH (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH)
2079#define CALG_ECDH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ECDH | ALG_SID_ECDH_EPHEM)
2080#define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
2081#define CALG_ECMQV (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_ECMQV)
2082#define CALG_DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES)
2083#define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2)
2084#define CALG_3DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES)
2085#define CALG_3DES_112 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES_112)
2086#define CALG_DESX (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DESX)
2087#define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128)
2088#define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192)
2089#define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256)
2090#define CALG_AES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES)
2091#define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4)
2092#define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL)
2093#define CALG_RC5 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC5)
2094#define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SKIPJACK)
2095#define CALG_TEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_TEK)
2096#define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_CYLINK_MEK)
2097#define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER)
2098#define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH)
2099#define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY)
2100#define CALG_SCHANNEL_ENC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY)
2101#define CALG_PCT1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_PCT1_MASTER)
2102#define CALG_SSL2_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL2_MASTER)
2103#define CALG_TLS1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_TLS1_MASTER)
2104
2105
2106/* Protocol Flags */
2107#define CRYPT_FLAG_PCT1 0x0001
2108#define CRYPT_FLAG_SSL2 0x0002
2109#define CRYPT_FLAG_SSL3 0x0004
2110#define CRYPT_FLAG_TLS1 0x0008
2111#define CRYPT_FLAG_IPSEC 0x0010
2112#define CRYPT_FLAG_SIGNING 0x0020
2113
2114/* Provider names */
2115#define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0"
2116#if defined(_MSC_VER) || defined(__MINGW32__)
2117# define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0"
2118#else
2119static const WCHAR MS_DEF_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2120 'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
2121 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
2122#endif
2123#define MS_DEF_PROV WINELIB_NAME_AW(MS_DEF_PROV_)
2124
2125#define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0"
2126#if defined(_MSC_VER) || defined(__MINGW32__)
2127# define MS_ENHANCED_PROV_W L"Microsoft Enhanced Cryptographic Provider v1.0"
2128#else
2129static const WCHAR MS_ENHANCED_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2130 'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
2131 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
2132#endif
2133#define MS_ENHANCED_PROV WINELIB_NAME_AW(MS_ENHANCED_PROV_)
2134
2135#define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider"
2136#if defined(_MSC_VER) || defined(__MINGW32__)
2137# define MS_STRONG_PROV_W L"Microsoft Strong Cryptographic Provider"
2138#else
2139static const WCHAR MS_STRONG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2140 'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
2141 'P','r','o','v','i','d','e','r',0 };
2142#endif
2143#define MS_STRONG_PROV WINELIB_NAME_AW(MS_STRONG_PROV_)
2144
2145#define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider"
2146#if defined(_MSC_VER) || defined(__MINGW32__)
2147# define MS_DEF_RSA_SIG_PROV_W L"Microsoft RSA Signature Cryptographic Provider"
2148#else
2149static const WCHAR MS_DEF_RSA_SIG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2150 'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ',
2151 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
2152#endif
2153#define MS_DEF_RSA_SIG_PROV WINELIB_NAME_AW(MS_DEF_RSA_SIG_PROV_)
2154
2155#define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider"
2156#if defined(_MSC_VER) || defined(__MINGW32__)
2157# define MS_DEF_RSA_SCHANNEL_PROV_W L"Microsoft RSA SChannel Cryptographic Provider"
2158#else
2159static const WCHAR MS_DEF_RSA_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2160 'R','S','A',' ','S','C','h','a','n','n','e','l',' ',
2161 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
2162#endif
2163#define MS_DEF_RSA_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_RSA_SCHANNEL_PROV_)
2164
2165#define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider"
2166#if defined(_MSC_VER) || defined(__MINGW32__)
2167# define MS_DEF_DSS_PROV_W L"Microsoft Base DSS Cryptographic Provider"
2168#else
2169static const WCHAR MS_DEF_DSS_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2170 'B','a','s','e',' ','D','S','S',' ',
2171 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
2172#endif
2173#define MS_DEF_DSS_PROV WINELIB_NAME_AW(MS_DEF_DSS_PROV_)
2174
2175#define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
2176#if defined(_MSC_VER) || defined(__MINGW32__)
2177# define MS_DEF_DSS_DH_PROV_W L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
2178#else
2179static const WCHAR MS_DEF_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2180 'B','a','s','e',' ','D','S','S',' ','a','n','d',' ',
2181 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
2182 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
2183#endif
2184#define MS_DEF_DSS_DH_PROV WINELIB_NAME_AW(MS_DEF_DSS_DH_PROV_)
2185
2186#define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
2187#if defined(_MSC_VER) || defined(__MINGW32__)
2188# define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
2189#else
2190static const WCHAR MS_ENH_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2191 'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ',
2192 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
2193 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
2194#endif
2195#define MS_ENH_DSS_DH_PROV WINELIB_NAME_AW(MS_ENH_DSS_DH_PROV_)
2196
2197#define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider"
2198#if defined(_MSC_VER) || defined(__MINGW32__)
2199# define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider"
2200#else
2201static const WCHAR MS_DEF_DH_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2202 'D','H',' ','S','C','h','a','n','n','e','l',' ',
2203 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
2204#endif
2205#define MS_DEF_DH_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_DH_SCHANNEL_PROV_)
2206
2207#define MS_SCARD_PROV_A "Microsoft Base Smart Card Cryptographic Provider"
2208#if defined(_MSC_VER) || defined(__MINGW32__)
2209# define MS_SCARD_PROV_W L"Microsoft Base Smart Card Cryptographic Provider"
2210#else
2211static const WCHAR MS_SCARD_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2212 'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ',
2213 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
2214#endif
2215#define MS_SCARD_PROV WINELIB_NAME_AW(MS_SCARD_PROV_)
2216
2217#define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
2218#if defined(_MSC_VER) || defined(__MINGW32__)
2219# define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider"
2220#else
2221static const WCHAR MS_ENH_RSA_AES_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2222 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',
2223 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
2224#endif
2225#define MS_ENH_RSA_AES_PROV WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_)
2226
2227#define MS_ENH_RSA_AES_PROV_XP_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
2228#if defined(_MSC_VER) || defined(__MINGW32__)
2229# define MS_ENH_RSA_AES_PROV_XP_W L"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
2230#else
2231static const WCHAR MS_ENH_RSA_AES_PROV_XP_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
2232 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',
2233 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ',
2234 '(','P','r','o','t','o','t','y','p','e',')',0 };
2235#endif
2236#define MS_ENH_RSA_AES_PROV_XP WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_XP_)
2237
2238/* Key Specs*/
2239#define AT_KEYEXCHANGE 1
2240#define AT_SIGNATURE 2
2241
2242/* Provider Types */
2243#define PROV_RSA_FULL 1
2244#define PROV_RSA_SIG 2
2245#define PROV_DSS 3
2246#define PROV_FORTEZZA 4
2247#define PROV_MS_EXCHANGE 5
2248#define PROV_SSL 6
2249#define PROV_RSA_SCHANNEL 12
2250#define PROV_DSS_DH 13
2251#define PROV_EC_ECDSA_SIG 14
2252#define PROV_EC_ECNRA_SIG 15
2253#define PROV_EC_ECDSA_FULL 16
2254#define PROV_EC_ECNRA_FULL 17
2255#define PROV_DH_SCHANNEL 18
2256#define PROV_SPYRUS_LYNKS 20
2257#define PROV_RNG 21
2258#define PROV_INTEL_SEC 22
2259#define PROV_REPLACE_OWF 23
2260#define PROV_RSA_AES 24
2261
2262/* FLAGS Section */
2263
2264#define CRYPT_FIRST 1
2265#define CRYPT_NEXT 2
2266
2267#define CRYPT_IMPL_HARDWARE 1
2268#define CRYPT_IMPL_SOFTWARE 2
2269#define CRYPT_IMPL_MIXED 3
2270#define CRYPT_IMPL_UNKNOWN 4
2271
2272/* CryptAcquireContext */
2273#define CRYPT_VERIFYCONTEXT 0xF0000000
2274#define CRYPT_NEWKEYSET 0x00000008
2275#define CRYPT_DELETEKEYSET 0x00000010
2276#define CRYPT_MACHINE_KEYSET 0x00000020
2277#define CRYPT_SILENT 0x00000040
2278
2279/* Crypt{Get|Set}Provider */
2280#define CRYPT_MACHINE_DEFAULT 0x00000001
2281#define CRYPT_USER_DEFAULT 0x00000002
2282#define CRYPT_DELETE_DEFAULT 0x00000004
2283
2284/* Crypt{Get/Set}ProvParam */
2285#define PP_CLIENT_HWND 1
2286#define PP_ENUMALGS 1
2287#define PP_ENUMCONTAINERS 2
2288#define PP_IMPTYPE 3
2289#define PP_NAME 4
2290#define PP_VERSION 5
2291#define PP_CONTAINER 6
2292#define PP_CHANGE_PASSWORD 7
2293#define PP_KEYSET_SEC_DESCR 8
2294#define PP_KEY_TYPE_SUBTYPE 10
2295#define PP_CONTEXT_INFO 11
2296#define PP_KEYEXCHANGE_KEYSIZE 12
2297#define PP_SIGNATURE_KEYSIZE 13
2298#define PP_KEYEXCHANGE_ALG 14
2299#define PP_SIGNATURE_ALG 15
2300#define PP_PROVTYPE 16
2301#define PP_KEYSTORAGE 17
2302#define PP_SYM_KEYSIZE 19
2303#define PP_SESSION_KEYSIZE 20
2304#define PP_UI_PROMPT 21
2305#define PP_ENUMALGS_EX 22
2306#define PP_DELETEKEY 24
2307#define PP_ENUMMANDROOTS 25
2308#define PP_ENUMELECTROOTS 26
2309#define PP_KEYSET_TYPE 27
2310#define PP_ADMIN_PIN 31
2311#define PP_KEYEXCHANGE_PIN 32
2312#define PP_SIGNATURE_PIN 33
2313#define PP_SIG_KEYSIZE_INC 34
2314#define PP_KEYX_KEYSIZE_INC 35
2315#define PP_UNIQUE_CONTAINER 36
2316#define PP_SGC_INFO 37
2317#define PP_USE_HARDWARE_RNG 38
2318#define PP_KEYSPEC 39
2319#define PP_ENUMEX_SIGNING_PROT 40
2320#define PP_CRYPT_COUNT_KEY_USE 41
2321#define PP_USER_CERTSTORE 42
2322#define PP_SMARTCARD_READER 43
2323#define PP_SMARTCARD_GUID 45
2324#define PP_ROOT_CERTSTORE 46
2325
2326/* Values returned by CryptGetProvParam of PP_KEYSTORAGE */
2327#define CRYPT_SEC_DESCR 0x00000001
2328#define CRYPT_PSTORE 0x00000002
2329#define CRYPT_UI_PROMPT 0x00000004
2330
2331/* Crypt{Get/Set}KeyParam */
2332#define KP_IV 1
2333#define KP_SALT 2
2334#define KP_PADDING 3
2335#define KP_MODE 4
2336#define KP_MODE_BITS 5
2337#define KP_PERMISSIONS 6
2338#define KP_ALGID 7
2339#define KP_BLOCKLEN 8
2340#define KP_KEYLEN 9
2341#define KP_SALT_EX 10
2342#define KP_P 11
2343#define KP_G 12
2344#define KP_Q 13
2345#define KP_X 14
2346#define KP_Y 15
2347#define KP_RA 16
2348#define KP_RB 17
2349#define KP_INFO 18
2350#define KP_EFFECTIVE_KEYLEN 19
2351#define KP_SCHANNEL_ALG 20
2352#define KP_CLIENT_RANDOM 21
2353#define KP_SERVER_RANDOM 22
2354#define KP_RP 23
2355#define KP_PRECOMP_MD5 24
2356#define KP_PRECOMP_SHA 25
2357#define KP_CERTIFICATE 26
2358#define KP_CLEAR_KEY 27
2359#define KP_PUB_EX_LEN 28
2360#define KP_PUB_EX_VAL 29
2361#define KP_KEYVAL 30
2362#define KP_ADMIN_PIN 31
2363#define KP_KEYEXCHANGE_PIN 32
2364#define KP_SIGNATURE_PIN 33
2365#define KP_PREHASH 34
2366#define KP_ROUNDS 35
2367#define KP_OAEP_PARAMS 36
2368#define KP_CMS_KEY_INFO 37
2369#define KP_CMS_DH_KEY_INFO 38
2370#define KP_PUB_PARAMS 39
2371#define KP_VERIFY_PARAMS 40
2372#define KP_HIGHEST_VERSION 41
2373#define KP_GET_USE_COUNT 42
2374
2375/* Values for KP_PADDING */
2376#define PKCS5_PADDING 1
2377#define RANDOM_PADDING 2
2378#define ZERO_PADDING 3
2379
2380/* CryptSignHash/CryptVerifySignature */
2381#define CRYPT_NOHASHOID 0x00000001
2382#define CRYPT_TYPE2_FORMAT 0x00000002
2383#define CRYPT_X931_FORMAT 0x00000004
2384
2385/* Crypt{Get,Set}HashParam */
2386#define HP_ALGID 0x0001
2387#define HP_HASHVAL 0x0002
2388#define HP_HASHSIZE 0x0004
2389#define HP_HMAC_INFO 0x0005
2390#define HP_TLS1PRF_LABEL 0x0006
2391#define HP_TLS1PRF_SEED 0x0007
2392
2393/* Crypt{Get,Set}KeyParam */
2394#define CRYPT_MODE_CBC 1
2395#define CRYPT_MODE_ECB 2
2396#define CRYPT_MODE_OFB 3
2397#define CRYPT_MODE_CFB 4
2398
2399#define CRYPT_ENCRYPT 0x0001
2400#define CRYPT_DECRYPT 0x0002
2401#define CRYPT_EXPORT 0x0004
2402#define CRYPT_READ 0x0008
2403#define CRYPT_WRITE 0x0010
2404#define CRYPT_MAC 0x0020
2405#define CRYPT_EXPORT_KEY 0x0040
2406#define CRYPT_IMPORT_KEY 0x0080
2407#define CRYPT_ARCHIVE 0x0100
2408
2409/* Crypt*Key */
2410#define CRYPT_EXPORTABLE 0x00000001
2411#define CRYPT_USER_PROTECTED 0x00000002
2412#define CRYPT_CREATE_SALT 0x00000004
2413#define CRYPT_UPDATE_KEY 0x00000008
2414#define CRYPT_NO_SALT 0x00000010
2415#define CRYPT_PREGEN 0x00000040
2416#define CRYPT_SERVER 0x00000400
2417#define CRYPT_ARCHIVABLE 0x00004000
2418
2419/* CryptExportKey */
2420#define CRYPT_SSL2_FALLBACK 0x00000002
2421#define CRYPT_DESTROYKEY 0x00000004
2422#define CRYPT_OAEP 0x00000040
2423
2424/* CryptHashSessionKey */
2425#define CRYPT_LITTLE_ENDIAN 0x00000001
2426
2427/* Crypt{Protect,Unprotect}Data PROMPTSTRUCT flags */
2428#define CRYPTPROTECT_PROMPT_ON_PROTECT 0x0001
2429#define CRYPTPROTECT_PROMPT_ON_UNPROTECT 0x0002
2430/* Crypt{Protect,Unprotect}Data flags */
2431#define CRYPTPROTECT_UI_FORBIDDEN 0x0001
2432#define CRYPTPROTECT_LOCAL_MACHINE 0x0004
2433#define CRYPTPROTECT_AUDIT 0x0010
2434#define CRYPTPROTECT_VERIFY_PROTECTION 0x0040
2435
2436/* Crypt{Protect,Unprotect}Memory */
2437#define CRYPTPROTECTMEMORY_BLOCK_SIZE 16
2438#define CRYPTPROTECTMEMORY_SAME_PROCESS 0x0000
2439#define CRYPTPROTECTMEMORY_CROSS_PROCESS 0x0001
2440#define CRYPTPROTECTMEMORY_SAME_LOGON 0x0002
2441
2442/* Blob Types */
2443#define SIMPLEBLOB 0x1
2444#define PUBLICKEYBLOB 0x6
2445#define PRIVATEKEYBLOB 0x7
2446#define PLAINTEXTKEYBLOB 0x8
2447#define OPAQUEKEYBLOB 0x9
2448#define PUBLICKEYBLOBEX 0xA
2449#define SYMMETRICWRAPKEYBLOB 0xB
2450
2451#define CUR_BLOB_VERSION 2
2452
2453/* cert store provider types */
2454#define CERT_STORE_PROV_MSG ((LPCSTR)1)
2455#define CERT_STORE_PROV_MEMORY ((LPCSTR)2)
2456#define CERT_STORE_PROV_FILE ((LPCSTR)3)
2457#define CERT_STORE_PROV_REG ((LPCSTR)4)
2458#define CERT_STORE_PROV_PKCS7 ((LPCSTR)5)
2459#define CERT_STORE_PROV_SERIALIZED ((LPCSTR)6)
2460#define CERT_STORE_PROV_FILENAME_A ((LPCSTR)7)
2461#define CERT_STORE_PROV_FILENAME_W ((LPCSTR)8)
2462#define CERT_STORE_PROV_SYSTEM_A ((LPCSTR)9)
2463#define CERT_STORE_PROV_SYSTEM_W ((LPCSTR)10)
2464#define CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W
2465#define CERT_STORE_PROV_COLLECTION ((LPCSTR)11)
2466#define CERT_STORE_PROV_SYSTEM_REGISTRY_A ((LPCSTR)12)
2467#define CERT_STORE_PROV_SYSTEM_REGISTRY_W ((LPCSTR)13)
2468#define CERT_STORE_PROV_SYSTEM_REGISTRY CERT_STORE_PROV_SYSTEM_REGISTRY_W
2469#define CERT_STORE_PROV_PHYSICAL_W ((LPCSTR)14)
2470#define CERT_STORE_PROV_PHYSICAL CERT_STORE_PROV_PHYSICAL_W
2471#define CERT_STORE_PROV_SMART_CARD_W ((LPCSTR)15)
2472#define CERT_STORE_PROV_SMART_CARD CERT_STORE_PROV_SMART_CARD_W
2473#define CERT_STORE_PROV_LDAP_W ((LPCSTR)16)
2474#define CERT_STORE_PROV_LDAP CERT_STORE_PROV_LDAP_W
2475
2476#define sz_CERT_STORE_PROV_MEMORY "Memory"
2477#define sz_CERT_STORE_PROV_FILENAME_W "File"
2478#define sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W
2479#define sz_CERT_STORE_PROV_SYSTEM_W "System"
2480#define sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W
2481#define sz_CERT_STORE_PROV_PKCS7 "PKCS7"
2482#define sz_CERT_STORE_PROV_SERIALIZED "Serialized"
2483#define sz_CERT_STORE_PROV_COLLECTION "Collection"
2484#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
2485#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
2486#define sz_CERT_STORE_PROV_PHYSICAL_W "Physical"
2487#define sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W
2488#define sz_CERT_STORE_PROV_SMART_CARD_W "SmartCard"
2489#define sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W
2490#define sz_CERT_STORE_PROV_LDAP_W "Ldap"
2491#define sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W
2492
2493/* types for CertOpenStore dwEncodingType */
2494#define CERT_ENCODING_TYPE_MASK 0x0000ffff
2495#define CMSG_ENCODING_TYPE_MASK 0xffff0000
2496#define GET_CERT_ENCODING_TYPE(x) ((x) & CERT_ENCODING_TYPE_MASK)
2497#define GET_CMSG_ENCODING_TYPE(x) ((x) & CMSG_ENCODING_TYPE_MASK)
2498
2499#define CRYPT_ASN_ENCODING 0x00000001
2500#define CRYPT_NDR_ENCODING 0x00000002
2501#define X509_ASN_ENCODING 0x00000001
2502#define X509_NDR_ENCODING 0x00000002
2503#define PKCS_7_ASN_ENCODING 0x00010000
2504#define PKCS_7_NDR_ENCODING 0x00020000
2505
2506/* system store locations */
2507#define CERT_SYSTEM_STORE_LOCATION_MASK 0x00ff0000
2508#define CERT_SYSTEM_STORE_LOCATION_SHIFT 16
2509
2510/* system store location ids */
2511/* hkcu */
2512#define CERT_SYSTEM_STORE_CURRENT_USER_ID 1
2513/* hklm */
2514#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID 2
2515/* hklm\Software\Microsoft\Cryptography\Services */
2516#define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID 4
2517#define CERT_SYSTEM_STORE_SERVICES_ID 5
2518/* HKEY_USERS */
2519#define CERT_SYSTEM_STORE_USERS_ID 6
2520/* hkcu\Software\Policies\Microsoft\SystemCertificates */
2521#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID 7
2522/* hklm\Software\Policies\Microsoft\SystemCertificates */
2523#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8
2524/* hklm\Software\Microsoft\EnterpriseCertificates */
2525#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID 9
2526
2527/* system store location values */
2528#define CERT_SYSTEM_STORE_CURRENT_USER \
2529 (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2530#define CERT_SYSTEM_STORE_LOCAL_MACHINE \
2531 (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2532#define CERT_SYSTEM_STORE_CURRENT_SERVICE \
2533 (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2534#define CERT_SYSTEM_STORE_SERVICES \
2535 (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2536#define CERT_SYSTEM_STORE_USERS \
2537 (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2538#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY \
2539 (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2540#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY \
2541 (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2542#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE \
2543 (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
2544
2545#if defined(_MSC_VER) || defined(__MINGW32__)
2546#define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH \
2547 L"Software\\Microsoft\\SystemCertificates"
2548#define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH \
2549 L"Software\\Policies\\Microsoft\\SystemCertificates"
2550#else
2551static const WCHAR CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH[] =
2552 {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
2553 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',0 };
2554static const WCHAR CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH[] =
2555 {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
2556 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
2557 't','i','f','i','c','a','t','e','s',0 };
2558#endif
2559
2560#if defined(_MSC_VER) || defined(__MINGW32__)
2561#define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\EFS"
2562#define CERT_EFSBLOB_VALUE_NAME L"EFSBlob"
2563#else
2564static const WCHAR CERT_EFSBLOB_REGPATH[] =
2565 {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
2566 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
2567 't','i','f','i','c','a','t','e','s','\\','E','F','S',0 };
2568static const WCHAR CERT_EFSBLOB_VALUE_NAME[] = { 'E','F','S','B','l','o','b',0 };
2569#endif
2570
2571#if defined(_MSC_VER) || defined(__MINGW32__)
2572#define CERT_PROT_ROOT_FLAGS_REGPATH L"\\Root\\ProtectedRoots"
2573#define CERT_PROT_ROOT_FLAGS_VALUE_NAME L"Flags"
2574#else
2575static const WCHAR CERT_PROT_ROOT_FLAGS_REGPATH[] =
2576 { '\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o',
2577 't','s',0 };
2578static const WCHAR CERT_PROT_ROOT_FLAGS_VALUE_NAME[] = {'F','l','a','g','s',0 };
2579#endif
2580
2581#define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG 0x01
2582#define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG 0x02
2583#define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG 0x04
2584#define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG 0x08
2585#define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG 0x10
2586#define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20
2587
2588#if defined(_MSC_VER) || defined(__MINGW32__)
2589#define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH \
2590 CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
2591#else
2592static const WCHAR CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH[] =
2593 {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
2594 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
2595 't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d',
2596 'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 };
2597#endif
2598
2599#if defined(_MSC_VER) || defined(__MINGW32__)
2600#define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH \
2601 CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
2602#define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L"AuthenticodeFlags"
2603#else
2604static const WCHAR CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH[] =
2605 {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
2606 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\',
2607 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\',
2608 'S','a','f','e','r',0 };
2609static const WCHAR CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME[] =
2610 { 'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 };
2611#endif
2612
2613#define CERT_TRUST_PUB_ALLOW_END_USER_TRUST 0x00000000
2614#define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST 0x00000001
2615#define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x00000002
2616#define CERT_TRUST_PUB_ALLOW_TRUST_MASK 0x00000003
2617#define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG 0x00000100
2618#define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG 0x00000200
2619
2620/* flags for CertOpenStore dwFlags */
2621#define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x00000001
2622#define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x00000002
2623#define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x00000004
2624#define CERT_STORE_DELETE_FLAG 0x00000010
2625#define CERT_STORE_UNSAFE_PHYSICAL_FLAG 0x00000020
2626#define CERT_STORE_SHARE_STORE_FLAG 0x00000040
2627#define CERT_STORE_SHARE_CONTEXT_FLAG 0x00000080
2628#define CERT_STORE_MANIFOLD_FLAG 0x00000100
2629#define CERT_STORE_ENUM_ARCHIVED_FLAG 0x00000200
2630#define CERT_STORE_UPDATE_KEYID_FLAG 0x00000400
2631#define CERT_STORE_BACKUP_RESTORE_FLAG 0x00000800
2632#define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x00001000
2633#define CERT_STORE_CREATE_NEW_FLAG 0x00002000
2634#define CERT_STORE_OPEN_EXISTING_FLAG 0x00004000
2635#define CERT_STORE_READONLY_FLAG 0x00008000
2636
2637#define CERT_REGISTRY_STORE_REMOTE_FLAG 0x00010000
2638#define CERT_REGISTRY_STORE_SERIALIZED_FLAG 0x00020000
2639#define CERT_REGISTRY_STORE_ROAMING_FLAG 0x00040000
2640#define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x00080000
2641#define CERT_REGISTRY_STORE_LM_GPT_FLAG 0x01000000
2642#define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG 0x80000000
2643
2644#define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x00010000
2645
2646/* CertCloseStore dwFlags */
2647#define CERT_CLOSE_STORE_FORCE_FLAG 0x00000001
2648#define CERT_CLOSE_STORE_CHECK_FLAG 0x00000002
2649
2650/* dwAddDisposition */
2651#define CERT_STORE_ADD_NEW 1
2652#define CERT_STORE_ADD_USE_EXISTING 2
2653#define CERT_STORE_ADD_REPLACE_EXISTING 3
2654#define CERT_STORE_ADD_ALWAYS 4
2655#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5
2656#define CERT_STORE_ADD_NEWER 6
2657#define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 7
2658
2659/* Installable OID function defs */
2660#define CRYPT_OID_OPEN_STORE_PROV_FUNC "CertDllOpenStoreProv"
2661#define CRYPT_OID_ENCODE_OBJECT_FUNC "CryptDllEncodeObject"
2662#define CRYPT_OID_DECODE_OBJECT_FUNC "CryptDllDecodeObject"
2663#define CRYPT_OID_ENCODE_OBJECT_EX_FUNC "CryptDllEncodeObjectEx"
2664#define CRYPT_OID_DECODE_OBJECT_EX_FUNC "CryptDllDecodeObjectEx"
2665#define CRYPT_OID_CREATE_COM_OBJECT_FUNC "CryptDllCreateComObject"
2666#define CRYPT_OID_VERIFY_REVOCATION_FUNC "CertDllVerifyRevocation"
2667#define CRYPT_OID_VERIFY_CTL_USAGE_FUNC "CertDllVerifyCTLUsage"
2668#define CRYPT_OID_FORMAT_OBJECT_FUNC "CryptDllFormatObject"
2669#define CRYPT_OID_FIND_OID_INFO_FUNC "CryptDllFindOIDInfo"
2670#define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC "CryptDllFindLocalizedName"
2671#define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC "CryptDllExportPublicKeyInfoEx"
2672#define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC "CryptDllImportPublicKeyInfoEx"
2673#define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx"
2674#define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx"
2675#define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC \
2676 "CertDllVerifyCertificateChainPolicy"
2677#define CRYPT_OID_CONVERT_PUBLIC_KEY_INFO_FUNC "CryptDllConvertPublicKeyInfo"
2678#define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
2679#define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
2680#define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey"
2681#define CMSG_OID_EXPORT_KEY_TRANS_FUNC "CryptMsgDllExportKeyTrans"
2682#define CMSG_OID_IMPORT_KEY_TRANS_FUNC "CryptMsgDllImportKeyTrans"
2683
2684#define CRYPT_OID_REGPATH "Software\\Microsoft\\Cryptography\\OID"
2685#define CRYPT_OID_REG_ENCODING_TYPE_PREFIX "EncodingType "
2686#if defined(_MSC_VER) || defined(__MINGW32__)
2687# define CRYPT_OID_REG_DLL_VALUE_NAME L"Dll"
2688# define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME L"FuncName"
2689# define CRYPT_OID_REG_FLAGS_VALUE_NAME L"CryptFlags"
2690#else
2691static const WCHAR CRYPT_OID_REG_DLL_VALUE_NAME[] = { 'D','l','l',0 };
2692static const WCHAR CRYPT_OID_REG_FUNC_NAME_VALUE_NAME[] =
2693 { 'F','u','n','c','N','a','m','e',0 };
2694static const WCHAR CRYPT_OID_REG_FLAGS_VALUE_NAME[] =
2695 { 'C','r','y','p','t','F','l','a','g','s',0 };
2696#endif
2697#define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A "FuncName"
2698#define CRYPT_DEFAULT_OID "DEFAULT"
2699
2700#define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1
2701#define CRYPT_INSTALL_OID_INFO_BEFORE_FLAG 1
2702
2703#define CRYPT_GET_INSTALLED_OID_FUNC_FLAG 0x1
2704
2705#define CRYPT_REGISTER_FIRST_INDEX 0
2706#define CRYPT_REGISTER_LAST_INDEX 0xffffffff
2707
2708/* values for CERT_STORE_PROV_INFO's dwStoreProvFlags */
2709#define CERT_STORE_PROV_EXTERNAL_FLAG 0x1
2710#define CERT_STORE_PROV_DELETED_FLAG 0x2
2711#define CERT_STORE_PROV_NO_PERSIST_FLAG 0x4
2712#define CERT_STORE_PROV_SYSTEM_STORE_FLAG 0x8
2713#define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10
2714
2715/* function indices */
2716#define CERT_STORE_PROV_CLOSE_FUNC 0
2717#define CERT_STORE_PROV_READ_CERT_FUNC 1
2718#define CERT_STORE_PROV_WRITE_CERT_FUNC 2
2719#define CERT_STORE_PROV_DELETE_CERT_FUNC 3
2720#define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4
2721#define CERT_STORE_PROV_READ_CRL_FUNC 5
2722#define CERT_STORE_PROV_WRITE_CRL_FUNC 6
2723#define CERT_STORE_PROV_DELETE_CRL_FUNC 7
2724#define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC 8
2725#define CERT_STORE_PROV_READ_CTL_FUNC 9
2726#define CERT_STORE_PROV_WRITE_CTL_FUNC 10
2727#define CERT_STORE_PROV_DELETE_CTL_FUNC 11
2728#define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC 12
2729#define CERT_STORE_PROV_CONTROL_FUNC 13
2730#define CERT_STORE_PROV_FIND_CERT_FUNC 14
2731#define CERT_STORE_PROV_FREE_FIND_CERT_FUNC 15
2732#define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 16
2733#define CERT_STORE_PROV_FIND_CRL_FUNC 17
2734#define CERT_STORE_PROV_FREE_FIND_CRL_FUNC 18
2735#define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC 19
2736#define CERT_STORE_PROV_FIND_CTL_FUNC 20
2737#define CERT_STORE_PROV_FREE_FIND_CTL_FUNC 21
2738#define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC 22
2739
2740/* physical store dwFlags, also used by CertAddStoreToCollection as
2741 * dwUpdateFlags
2742 */
2743#define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1
2744#define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2
2745#define CERT_PHYSICAL_STORE_REMOVE_OPEN_DISABLE_FLAG 0x4
2746#define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8
2747
2748/* dwFlag values for CertEnumPhysicalStore callback */
2749#define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1
2750
2751/* predefined store names */
2752#if defined(_MSC_VER) || defined(__MINGW32__)
2753# define CERT_PHYSICAL_STORE_DEFAULT_NAME \
2754 L".Default"
2755# define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME \
2756 L".GroupPolicy"
2757# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME \
2758 L".LocalMachine"
2759# define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME \
2760 L".UserCertificate"
2761# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME \
2762 L".LocalMachineGroupPolicy"
2763# define CERT_PHYSICAL_STORE_ENTERPRISE_NAME \
2764 L".Enterprise"
2765# define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME \
2766 L".AuthRoot"
2767#else
2768static const WCHAR CERT_PHYSICAL_STORE_DEFAULT_NAME[] =
2769 {'.','D','e','f','a','u','l','t','0'};
2770static const WCHAR CERT_PHYSICAL_STORE_GROUP_POLICY_NAME[] =
2771 {'.','G','r','o','u','p','P','o','l','i','c','y',0};
2772static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME[] =
2773 {'.','L','o','c','a','l','M','a','c','h','i','n','e',0};
2774static const WCHAR CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME[] =
2775 {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0};
2776static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME[] =
2777 {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',
2778 'P','o','l','i','c','y',0};
2779static const WCHAR CERT_PHYSICAL_STORE_ENTERPRISE_NAME[] =
2780 {'.','E','n','t','e','r','p','r','i','s','e',0};
2781static const WCHAR CERT_PHYSICAL_STORE_AUTH_ROOT_NAME[] =
2782 {'.','A','u','t','h','R','o','o','t',0};
2783#endif
2784
2785/* cert system store flags */
2786#define CERT_SYSTEM_STORE_MASK 0xffff0000
2787#define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000
2788
2789/* CertFindChainInStore dwFindType types */
2790#define CERT_CHAIN_FIND_BY_ISSUER 1
2791
2792/* CertSaveStore dwSaveAs values */
2793#define CERT_STORE_SAVE_AS_STORE 1
2794#define CERT_STORE_SAVE_AS_PKCS7 2
2795/* CertSaveStore dwSaveTo values */
2796#define CERT_STORE_SAVE_TO_FILE 1
2797#define CERT_STORE_SAVE_TO_MEMORY 2
2798#define CERT_STORE_SAVE_TO_FILENAME_A 3
2799#define CERT_STORE_SAVE_TO_FILENAME_W 4
2800#define CERT_STORE_SAVE_TO_FILENAME CERT_STORE_SAVE_TO_FILENAME_W
2801
2802/* CERT_INFO versions/flags */
2803#define CERT_V1 0
2804#define CERT_V2 1
2805#define CERT_V3 2
2806#define CERT_INFO_VERSION_FLAG 1
2807#define CERT_INFO_SERIAL_NUMBER_FLAG 2
2808#define CERT_INFO_SIGNATURE_ALGORITHM_FLAG 3
2809#define CERT_INFO_ISSUER_FLAG 4
2810#define CERT_INFO_NOT_BEFORE_FLAG 5
2811#define CERT_INFO_NOT_AFTER_FLAG 6
2812#define CERT_INFO_SUBJECT_FLAG 7
2813#define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 8
2814#define CERT_INFO_ISSUER_UNIQUE_ID_FLAG 9
2815#define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG 10
2816#define CERT_INFO_EXTENSION_FLAG 11
2817
2818/* CERT_REQUEST_INFO versions */
2819#define CERT_REQUEST_V1 0
2820
2821/* CERT_KEYGEN_REQUEST_INFO versions */
2822#define CERT_KEYGEN_REQUEST_V1 0
2823
2824/* CRL versions */
2825#define CRL_V1 0
2826#define CRL_V2 1
2827
2828/* CTL versions */
2829#define CTL_V1 0
2830
2831/* Certificate, CRL, CTL property IDs */
2832#define CERT_KEY_PROV_HANDLE_PROP_ID 1
2833#define CERT_KEY_PROV_INFO_PROP_ID 2
2834#define CERT_SHA1_HASH_PROP_ID 3
2835#define CERT_HASH_PROP_ID CERT_SHA1_HASH_PROP_ID
2836#define CERT_MD5_HASH_PROP_ID 4
2837#define CERT_KEY_CONTEXT_PROP_ID 5
2838#define CERT_KEY_SPEC_PROP_ID 6
2839#define CERT_IE30_RESERVED_PROP_ID 7
2840#define CERT_PUBKEY_HASH_RESERVED_PROP_ID 8
2841#define CERT_ENHKEY_USAGE_PROP_ID 9
2842#define CERT_CTL_USAGE_PROP_ID CERT_ENHKEY_USAGE_PROP_ID
2843#define CERT_NEXT_UPDATE_LOCATION_PROP_ID 10
2844#define CERT_FRIENDLY_NAME_PROP_ID 11
2845#define CERT_PVK_FILE_PROP_ID 12
2846#define CERT_DESCRIPTION_PROP_ID 13
2847#define CERT_ACCESS_STATE_PROP_ID 14
2848#define CERT_SIGNATURE_HASH_PROP_ID 15
2849#define CERT_SMART_CARD_DATA_PROP_ID 16
2850#define CERT_EFS_PROP_ID 17
2851#define CERT_FORTEZZA_DATA_PROP_ID 18
2852#define CERT_ARCHIVED_PROP_ID 19
2853#define CERT_KEY_IDENTIFIER_PROP_ID 20
2854#define CERT_AUTO_ENROLL_PROP_ID 21
2855#define CERT_PUBKEY_ALG_PARA_PROP_ID 22
2856#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 23
2857#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID 24
2858#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID 25
2859#define CERT_ENROLLMENT_PROP_ID 26
2860#define CERT_DATE_STAMP_PROP_ID 27
2861#define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28
2862#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID 29
2863#define CERT_EXTENDED_ERROR_INFO_PROP_ID 30
2864/* 31 -- unused?
2865 32 -- cert prop id
2866 33 -- CRL prop id
2867 34 -- CTL prop id
2868 35 -- KeyId prop id
2869 36-63 -- reserved
2870 */
2871#define CERT_RENEWAL_PROP_ID 64
2872#define CERT_ARCHIVED_KEY_HASH_PROP_ID 65
2873#define CERT_AUTO_ENROLL_RETRY_PROP_ID 66
2874#define CERT_AIA_URL_RETRIEVED_PROP_ID 67
2875#define CERT_AUTHORITY_INFO_ACCESS_PROP_ID 68
2876#define CERT_BACKED_UP_PROP_ID 69
2877#define CERT_OCSP_RESPONSE_PROP_ID 70
2878#define CERT_REQUEST_ORIGINATOR_PROP_ID 71
2879#define CERT_SOURCE_LOCATION_PROP_ID 72
2880#define CERT_SOURCE_URL_PROP_ID 73
2881#define CERT_NEW_KEY_PROP_ID 74
2882#define CERT_OCSP_CACHE_PREFIX_PROP_ID 75
2883#define CERT_SMART_CARD_ROOT_INFO_PROP_ID 76
2884#define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID 77
2885#define CERT_NCRYPT_KEY_HANDLE_PROP_ID 78
2886#define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 79
2887#define CERT_SUBJECT_INFO_ACCESS_PROP_ID 80
2888#define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 81
2889#define CERT_CA_DISABLE_CRL_PROP_ID 82
2890#define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID 83
2891#define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 84
2892
2893#define CERT_FIRST_RESERVED_PROP_ID 85
2894#define CERT_LAST_RESERVED_PROP_ID 0x00007fff
2895#define CERT_FIRST_USER_PROP_ID 0x00008000
2896#define CERT_LAST_USER_PROP_ID 0x0000ffff
2897
2898#define IS_CERT_HASH_PROP_ID(x) \
2899 ((x) == CERT_SHA1_HASH_PROP_ID || (x) == CERT_MD5_HASH_PROP_ID || \
2900 (x) == CERT_SIGNATURE_HASH_PROP_ID)
2901
2902#define IS_PUBKEY_HASH_PROP_ID(x) \
2903 ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \
2904 (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID)
2905
2906#define IS_CHAIN_HASH_PROP_ID(x) \
2907 ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \
2908 (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID || \
2909 (x) == CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID || \
2910 (x) == CERT_SUBJECT_NAME_MD5_HASH_PROP_ID)
2911
2912/* access state flags */
2913#define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG 0x1
2914#define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG 0x2
2915#define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4
2916
2917/* CertSetCertificateContextProperty flags */
2918#define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG 0x40000000
2919#define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000
2920
2921/* CERT_RDN attribute dwValueType types */
2922#define CERT_RDN_TYPE_MASK 0x000000ff
2923#define CERT_RDN_ANY_TYPE 0
2924#define CERT_RDN_ENCODED_BLOB 1
2925#define CERT_RDN_OCTET_STRING 2
2926#define CERT_RDN_NUMERIC_STRING 3
2927#define CERT_RDN_PRINTABLE_STRING 4
2928#define CERT_RDN_TELETEX_STRING 5
2929#define CERT_RDN_T61_STRING 5
2930#define CERT_RDN_VIDEOTEX_STRING 6
2931#define CERT_RDN_IA5_STRING 7
2932#define CERT_RDN_GRAPHIC_STRING 8
2933#define CERT_RDN_VISIBLE_STRING 9
2934#define CERT_RDN_ISO646_STRING 9
2935#define CERT_RDN_GENERAL_STRING 10
2936#define CERT_RDN_UNIVERSAL_STRING 11
2937#define CERT_RDN_INT4_STRING 11
2938#define CERT_RDN_BMP_STRING 12
2939#define CERT_RDN_UNICODE_STRING 12
2940#define CERT_RDN_UTF8_STRING 13
2941
2942/* CERT_RDN attribute dwValueType flags */
2943#define CERT_RDN_FLAGS_MASK 0xff000000
2944#define CERT_RDN_ENABLE_T61_UNICODE_FLAG 0x80000000
2945#define CERT_RDN_DISABLE_CHECK_TYPE_FLAG 0x4000000
2946#define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x2000000
2947#define CERT_RDN_DISABLE_IE4_UTF8_FLAG 0x0100000
2948
2949#define IS_CERT_RDN_CHAR_STRING(x) \
2950 (((x) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING)
2951
2952/* CertIsRDNAttrsInCertificateName flags */
2953#define CERT_UNICODE_IS_RDN_ATTRS_FLAG 0x1
2954#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2
2955
2956/* CRL reason codes */
2957#define CRL_REASON_UNSPECIFIED 0
2958#define CRL_REASON_KEY_COMPROMISE 1
2959#define CRL_REASON_CA_COMPROMISE 2
2960#define CRL_REASON_AFFILIATION_CHANGED 3
2961#define CRL_REASON_SUPERSEDED 4
2962#define CRL_REASON_CESSATION_OF_OPERATION 5
2963#define CRL_REASON_CERTIFICATE_HOLD 6
2964#define CRL_REASON_REMOVE_FROM_CRL 8
2965
2966/* CertControlStore control types */
2967#define CERT_STORE_CTRL_RESYNC 1
2968#define CERT_STORE_CTRL_NOTIFY_CHANGE 2
2969#define CERT_STORE_CTRL_COMMIT 3
2970#define CERT_STORE_CTRL_AUTO_RESYNC 4
2971#define CERT_STORE_CTRL_CANCEL_NOTIFY 5
2972
2973#define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1
2974#define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2
2975
2976/* cert store properties */
2977#define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000
2978
2979/* CertCreateContext flags */
2980#define CERT_CREATE_CONTEXT_NOCOPY_FLAG 0x1
2981#define CERT_CREATE_CONTEXT_SORTED_FLAG 0x2
2982#define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4
2983#define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG 0x8
2984
2985#define CERT_COMPARE_MASK 0xffff
2986#define CERT_COMPARE_SHIFT 16
2987#define CERT_COMPARE_ANY 0
2988#define CERT_COMPARE_SHA1_HASH 1
2989#define CERT_COMPARE_HASH CERT_COMPARE_SHA1_HASH
2990#define CERT_COMPARE_NAME 2
2991#define CERT_COMPARE_ATTR 3
2992#define CERT_COMPARE_MD5_HASH 4
2993#define CERT_COMPARE_PROPERTY 5
2994#define CERT_COMPARE_PUBLIC_KEY 6
2995#define CERT_COMPARE_NAME_STR_A 7
2996#define CERT_COMPARE_NAME_STR_W 8
2997#define CERT_COMPARE_KEY_SPEC 9
2998#define CERT_COMPARE_ENHKEY_USAGE 10
2999#define CERT_COMPARE_CTL_USAGE CERT_COMPARE_ENHKEY_USAGE
3000#define CERT_COMPARE_SUBJECT_CERT 11
3001#define CERT_COMPARE_ISSUER_OF 12
3002#define CERT_COMPARE_EXISTING 13
3003#define CERT_COMPARE_SIGNATURE_HASH 14
3004#define CERT_COMPARE_KEY_IDENTIFIER 15
3005#define CERT_COMPARE_CERT_ID 16
3006#define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17
3007#define CERT_COMPARE_PUBKEY_MD5_HASH 18
3008
3009/* values of dwFindType for CertFind*InStore */
3010#define CERT_FIND_ANY \
3011 (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
3012#define CERT_FIND_SHA1_HASH \
3013 (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
3014#define CERT_FIND_MD5_HASH \
3015 (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
3016#define CERT_FIND_SIGNATURE_HASH \
3017 (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
3018#define CERT_FIND_KEY_IDENTIFIER \
3019 (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
3020#define CERT_FIND_HASH CERT_FIND_SHA1_HASH
3021#define CERT_FIND_PROPERTY \
3022 (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
3023#define CERT_FIND_PUBLIC_KEY \
3024 (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
3025#define CERT_FIND_SUBJECT_NAME \
3026 (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
3027#define CERT_FIND_SUBJECT_ATTR \
3028 (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
3029#define CERT_FIND_ISSUER_NAME \
3030 (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
3031#define CERT_FIND_ISSUER_ATTR \
3032 (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
3033#define CERT_FIND_SUBJECT_STR_A \
3034 (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
3035#define CERT_FIND_SUBJECT_STR_W \
3036 (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
3037#define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
3038#define CERT_FIND_ISSUER_STR_A \
3039 (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
3040#define CERT_FIND_ISSUER_STR_W \
3041 (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
3042#define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
3043#define CERT_FIND_KEY_SPEC \
3044 (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
3045#define CERT_FIND_ENHKEY_USAGE \
3046 (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
3047#define CERT_FIND_CTL_USAGE CERT_FIND_ENHKEY_USAGE
3048#define CERT_FIND_SUBJECT_CERT \
3049 (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
3050#define CERT_FIND_ISSUER_OF \
3051 (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
3052#define CERT_FIND_EXISTING \
3053 (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
3054#define CERT_FIND_CERT_ID \
3055 (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
3056#define CERT_FIND_CROSS_CERT_DIST_POINTS \
3057 (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
3058#define CERT_FIND_PUBKEY_MD5_HASH \
3059 (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
3060
3061#define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 0x1
3062#define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG 0x1
3063#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 0x2
3064#define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG 0x2
3065#define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4
3066#define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG 0x4
3067#define CERT_FIND_NO_ENHKEY_USAGE_FLAG 0x8
3068#define CERT_FIND_NO_CTL_USAGE_FLAG 0x8
3069#define CERT_FIND_OR_ENHKEY_USAGE_FLAG 0x10
3070#define CERT_FIND_OR_CTL_USAGE_FLAG 0x10
3071#define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 0x20
3072#define CERT_FIND_VALID_CTL_USAGE_FLAG 0x20
3073
3074#define CRL_FIND_ANY 0
3075#define CRL_FIND_ISSUED_BY 1
3076#define CRL_FIND_EXISTING 2
3077#define CRL_FIND_ISSUED_FOR 3
3078
3079#define CRL_FIND_ISSUED_BY_AKI_FLAG 0x1
3080#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2
3081#define CRL_FIND_ISSUED_BY_DELTA_FLAG 0x4
3082#define CRL_FIND_ISSUED_BY_BASE_FLAG 0x8
3083
3084typedef struct _CRL_FIND_ISSUED_FOR_PARA
3085{
3086 PCCERT_CONTEXT pSubjectCert;
3087 PCCERT_CONTEXT pIssuerCert;
3088} CRL_FIND_ISSUED_FOR_PARA, *PCRL_FIND_ISSUED_FOR_PARA;
3089
3090#define CTL_FIND_ANY 0
3091#define CTL_FIND_SHA1_HASH 1
3092#define CTL_FIND_MD5_HASH 2
3093#define CTL_FIND_USAGE 3
3094#define CTL_FIND_SUBJECT 4
3095#define CTL_FIND_EXISTING 5
3096
3097typedef struct _CTL_FIND_USAGE_PARA
3098{
3099 DWORD cbSize;
3100 CTL_USAGE SubjectUsage;
3101 CRYPT_DATA_BLOB ListIdentifier;
3102 PCERT_INFO pSigner;
3103} CTL_FIND_USAGE_PARA, *PCTL_FIND_USAGE_PARA;
3104
3105#define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff
3106#define CTL_FIND_NO_SIGNER_PTR ((PCERT_INFO)-1)
3107#define CTL_FIND_SAME_USAGE_FLAG 0x00000001
3108
3109typedef struct _CTL_FIND_SUBJECT_PARA
3110{
3111 DWORD cbSize;
3112 PCTL_FIND_USAGE_PARA pUsagePara;
3113 DWORD dwSubjectType;
3114 void *pvSubject;
3115} CTL_FIND_SUBJECT_PARA, *PCTL_FIND_SUBJECT_PARA;
3116
3117/* PFN_CERT_STORE_PROV_WRITE_CERT dwFlags values */
3118#define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1
3119
3120/* CertAddSerializedElementToStore context types */
3121#define CERT_STORE_CERTIFICATE_CONTEXT 1
3122#define CERT_STORE_CRL_CONTEXT 2
3123#define CERT_STORE_CTL_CONTEXT 3
3124#define CERT_STORE_ALL_CONTEXT_FLAG ~0U
3125#define CERT_STORE_CERTIFICATE_CONTEXT_FLAG \
3126 (1 << CERT_STORE_CERTIFICATE_CONTEXT)
3127#define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT)
3128#define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT)
3129
3130/* CryptBinaryToString/CryptStringToBinary flags */
3131#define CRYPT_STRING_BASE64HEADER 0x00000000
3132#define CRYPT_STRING_BASE64 0x00000001
3133#define CRYPT_STRING_BINARY 0x00000002
3134#define CRYPT_STRING_BASE64REQUESTHEADER 0x00000003
3135#define CRYPT_STRING_HEX 0x00000004
3136#define CRYPT_STRING_HEXASCII 0x00000005
3137#define CRYPT_STRING_BASE64_ANY 0x00000006
3138#define CRYPT_STRING_ANY 0x00000007
3139#define CRYPT_STRING_HEX_ANY 0x00000008
3140#define CRYPT_STRING_BASE64X509CRLHEADER 0x00000009
3141#define CRYPT_STRING_HEXADDR 0x0000000a
3142#define CRYPT_STRING_HEXASCIIADDR 0x0000000b
3143#define CRYPT_STRING_HEXRAW 0x0000000c
3144#define CRYPT_STRING_BASE64URI 0x0000000d
3145
3146#define CRYPT_STRING_PERCENTESCAPE 0x08000000
3147#define CRYPT_STRING_HASHDATA 0x10000000
3148#define CRYPT_STRING_STRICT 0x20000000
3149#define CRYPT_STRING_NOCRLF 0x40000000
3150#define CRYPT_STRING_NOCR 0x80000000
3151
3152/* OIDs */
3153#define szOID_RSA "1.2.840.113549"
3154#define szOID_PKCS "1.2.840.113549.1"
3155#define szOID_RSA_HASH "1.2.840.113549.2"
3156#define szOID_RSA_ENCRYPT "1.2.840.113549.3"
3157#define szOID_PKCS_1 "1.2.840.113549.1.1"
3158#define szOID_PKCS_2 "1.2.840.113549.1.2"
3159#define szOID_PKCS_3 "1.2.840.113549.1.3"
3160#define szOID_PKCS_4 "1.2.840.113549.1.4"
3161#define szOID_PKCS_5 "1.2.840.113549.1.5"
3162#define szOID_PKCS_6 "1.2.840.113549.1.6"
3163#define szOID_PKCS_7 "1.2.840.113549.1.7"
3164#define szOID_PKCS_8 "1.2.840.113549.1.8"
3165#define szOID_PKCS_9 "1.2.840.113549.1.9"
3166#define szOID_PKCS_10 "1.2.840.113549.1.10"
3167#define szOID_PKCS_11 "1.2.840.113549.1.12"
3168#define szOID_RSA_RSA "1.2.840.113549.1.1.1"
3169#define CERT_RSA_PUBLIC_KEY_OBJID szOID_RSA_RSA
3170#define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN szOID_RSA_RSA
3171#define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG szOID_RSA_RSA
3172#define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2"
3173#define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3"
3174#define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4"
3175#define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5"
3176#define szOID_RSA_SET0AEP_RSA "1.2.840.113549.1.1.6"
3177#define szOID_RSA_SHA256RSA "1.2.840.113549.1.1.11"
3178#define szOID_RSA_SHA384RSA "1.2.840.113549.1.1.12"
3179#define szOID_RSA_SHA512RSA "1.2.840.113549.1.1.13"
3180#define szOID_RSA_DH "1.2.840.113549.1.3.1"
3181#define szOID_RSA_data "1.2.840.113549.1.7.1"
3182#define szOID_RSA_signedData "1.2.840.113549.1.7.2"
3183#define szOID_RSA_envelopedData "1.2.840.113549.1.7.3"
3184#define szOID_RSA_signEnvData "1.2.840.113549.1.7.4"
3185#define szOID_RSA_digestedData "1.2.840.113549.1.7.5"
3186#define szOID_RSA_hashedData "1.2.840.113549.1.7.5"
3187#define szOID_RSA_encryptedData "1.2.840.113549.1.7.6"
3188#define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
3189#define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
3190#define szOID_RSA_contentType "1.2.840.113549.1.9.3"
3191#define szOID_RSA_messageDigest "1.2.840.113549.1.9.4"
3192#define szOID_RSA_signingTime "1.2.840.113549.1.9.5"
3193#define szOID_RSA_counterSign "1.2.840.113549.1.9.6"
3194#define szOID_RSA_challengePwd "1.2.840.113549.1.9.7"
3195#define szOID_RSA_unstructAddr "1.2.840.113549.1.9.9"
3196#define szOID_RSA_extCertAttrs "1.2.840.113549.1.9.9"
3197#define szOID_RSA_certExtensions "1.2.840.113549.1.9.14"
3198#define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15"
3199#define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1"
3200#define szOID_RSA_SMIMEalg "1.2.840.113549.1.9.16.3"
3201#define szOID_RSA_SMIMEalgESDH "1.2.840.113549.1.9.16.3.5"
3202#define szOID_RSA_SMIMEalgCMS3DESwrap "1.2.840.113549.1.9.16.3.6"
3203#define szOID_RSA_SMIMEalgCMSRC2wrap "1.2.840.113549.1.9.16.3.7"
3204#define szOID_RSA_MD2 "1.2.840.113549.2.2"
3205#define szOID_RSA_MD4 "1.2.840.113549.2.4"
3206#define szOID_RSA_MD5 "1.2.840.113549.2.5"
3207#define szOID_RSA_RC2CBC "1.2.840.113549.3.2"
3208#define szOID_RSA_RC4 "1.2.840.113549.3.4"
3209#define szOID_RSA_DES_EDE3_CBC "1.2.840.113549.3.7"
3210#define szOID_RSA_RC5_CBCPad "1.2.840.113549.3.9"
3211#define szOID_ANSI_X942 "1.2.840.10046"
3212#define szOID_ANSI_X942_DH "1.2.840.10046.2.1"
3213#define szOID_X957 "1.2.840.10040"
3214#define szOID_X957_DSA "1.2.840.10040.4.1"
3215#define szOID_X957_SHA1DSA "1.2.840.10040.4.3"
3216#define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1"
3217#define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7"
3218#define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3"
3219#define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2"
3220#define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3"
3221#define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4"
3222#define szOID_DS "2.5"
3223#define szOID_DSALG "2.5.8"
3224#define szOID_DSALG_CRPT "2.5.8.1"
3225#define szOID_DSALG_HASH "2.5.8.2"
3226#define szOID_DSALG_SIGN "2.5.8.3"
3227#define szOID_DSALG_RSA "2.5.8.1.1"
3228#define szOID_OIW "1.3.14"
3229#define szOID_OIWSEC "1.3.14.3.2"
3230#define szOID_OIWSEC_md4RSA "1.3.14.3.2.2"
3231#define szOID_OIWSEC_md5RSA "1.3.14.3.2.3"
3232#define szOID_OIWSEC_md4RSA2 "1.3.14.3.2.4"
3233#define szOID_OIWSEC_desECB "1.3.14.3.2.6"
3234#define szOID_OIWSEC_desCBC "1.3.14.3.2.7"
3235#define szOID_OIWSEC_desOFB "1.3.14.3.2.8"
3236#define szOID_OIWSEC_desCFB "1.3.14.3.2.9"
3237#define szOID_OIWSEC_desMAC "1.3.14.3.2.10"
3238#define szOID_OIWSEC_rsaSign "1.3.14.3.2.11"
3239#define szOID_OIWSEC_dsa "1.3.14.3.2.12"
3240#define szOID_OIWSEC_shaDSA "1.3.14.3.2.13"
3241#define szOID_OIWSEC_mdc2RSA "1.3.14.3.2.14"
3242#define szOID_OIWSEC_shaRSA "1.3.14.3.2.15"
3243#define szOID_OIWSEC_dhCommMod "1.3.14.3.2.16"
3244#define szOID_OIWSEC_desEDE "1.3.14.3.2.17"
3245#define szOID_OIWSEC_sha "1.3.14.3.2.18"
3246#define szOID_OIWSEC_mdc2 "1.3.14.3.2.19"
3247#define szOID_OIWSEC_dsaComm "1.3.14.3.2.20"
3248#define szOID_OIWSEC_dsaCommSHA "1.3.14.3.2.21"
3249#define szOID_OIWSEC_rsaXchg "1.3.14.3.2.22"
3250#define szOID_OIWSEC_keyHashSeal "1.3.14.3.2.23"
3251#define szOID_OIWSEC_md2RSASign "1.3.14.3.2.24"
3252#define szOID_OIWSEC_md5RSASign "1.3.14.3.2.25"
3253#define szOID_OIWSEC_sha1 "1.3.14.3.2.26"
3254#define szOID_OIWSEC_dsaSHA1 "1.3.14.3.2.27"
3255#define szOID_OIWSEC_dsaCommSHA1 "1.3.14.3.2.28"
3256#define szOID_OIWSEC_sha1RSASign "1.3.14.3.2.29"
3257#define szOID_OIWDIR "1.3.14.7.2"
3258#define szOID_OIWDIR_CRPT "1.3.14.7.2.1"
3259#define szOID_OIWDIR_HASH "1.3.14.7.2.2"
3260#define szOID_OIWDIR_SIGN "1.3.14.7.2.3"
3261#define szOID_OIWDIR_md2 "1.3.14.7.2.2.1"
3262#define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1"
3263#define szOID_ECC_CURVE_P384 "1.3.132.0.34"
3264#define szOID_ECC_CURVE_P521 "1.3.132.0.35"
3265#define szOID_INFOSEC "2.16.840.1.101.2.1"
3266#define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1"
3267#define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2"
3268#define szOID_INFOSEC_sdnsConfidentiality "2.16.840.1.101.2.1.1.3"
3269#define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4"
3270#define szOID_INFOSEC_sdnsIntegrity "2.16.840.1.101.2.1.1.5"
3271#define szOID_INFOSEC_mosaicIntegrity "2.16.840.1.101.2.1.1.6"
3272#define szOID_INFOSEC_sdnsTokenProtection "2.16.840.1.101.2.1.1.7"
3273#define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8"
3274#define szOID_INFOSEC_sdnsKeyManagement "2.16.840.1.101.2.1.1.9"
3275#define szOID_INFOSEC_mosaicKeyManagement "2.16.840.1.101.2.1.1.10"
3276#define szOID_INFOSEC_sdnsKMandSig "2.16.840.1.101.2.1.1.11"
3277#define szOID_INFOSEC_mosaicKMandSig "2.16.840.1.101.2.1.1.12"
3278#define szOID_INFOSEC_SuiteASignature "2.16.840.1.101.2.1.1.13"
3279#define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14"
3280#define szOID_INFOSEC_SuiteAIntegrity "2.16.840.1.101.2.1.1.15"
3281#define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16"
3282#define szOID_INFOSEC_SuiteAKeyManagement "2.16.840.1.101.2.1.1.17"
3283#define szOID_INFOSEC_SuiteAKMandSig "2.16.840.1.101.2.1.1.18"
3284#define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19"
3285#define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20"
3286#define szOID_INFOSEC_mosaicUpdateInteg "2.16.840.1.101.2.1.1.21"
3287#define szOID_NIST_sha256 "2.16.840.1.101.3.4.2.1"
3288#define szOID_NIST_sha384 "2.16.840.1.101.3.4.2.2"
3289#define szOID_NIST_sha512 "2.16.840.1.101.3.4.2.3"
3290#define szOID_COMMON_NAME "2.5.4.3"
3291#define szOID_SUR_NAME "2.5.4.4"
3292#define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5"
3293#define szOID_COUNTRY_NAME "2.5.4.6"
3294#define szOID_LOCALITY_NAME "2.5.4.7"
3295#define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8"
3296#define szOID_STREET_ADDRESS "2.5.4.9"
3297#define szOID_ORGANIZATION_NAME "2.5.4.10"
3298#define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11"
3299#define szOID_TITLE "2.5.4.12"
3300#define szOID_DESCRIPTION "2.5.4.13"
3301#define szOID_SEARCH_GUIDE "2.5.4.14"
3302#define szOID_BUSINESS_CATEGORY "2.5.4.15"
3303#define szOID_POSTAL_ADDRESS "2.5.4.16"
3304#define szOID_POSTAL_CODE "2.5.4.17"
3305#define szOID_POST_OFFICE_BOX "2.5.4.18"
3306#define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19"
3307#define szOID_TELEPHONE_NUMBER "2.5.4.20"
3308#define szOID_TELEX_NUMBER "2.5.4.21"
3309#define szOID_TELETEXT_TERMINAL_IDENTIFIER "2.5.4.22"
3310#define szOID_FACSIMILE_TELEPHONE_NUMBER "2.5.4.23"
3311#define szOID_X21_ADDRESS "2.5.4.24"
3312#define szOID_INTERNATIONAL_ISDN_NUMBER "2.5.4.25"
3313#define szOID_REGISTERED_ADDRESS "2.5.4.26"
3314#define szOID_DESTINATION_INDICATOR "2.5.4.27"
3315#define szOID_PREFERRED_DELIVERY_METHOD "2.5.4.28"
3316#define szOID_PRESENTATION_ADDRESS "2.5.4.29"
3317#define szOID_SUPPORTED_APPLICATION_CONTEXT "2.5.4.30"
3318#define szOID_MEMBER "2.5.4.31"
3319#define szOID_OWNER "2.5.4.32"
3320#define szOID_ROLE_OCCUPANT "2.5.4.33"
3321#define szOID_SEE_ALSO "2.5.4.34"
3322#define szOID_USER_PASSWORD "2.5.4.35"
3323#define szOID_USER_CERTIFICATE "2.5.4.36"
3324#define szOID_CA_CERTIFICATE "2.5.4.37"
3325#define szOID_AUTHORITY_REVOCATION_LIST "2.5.4.38"
3326#define szOID_CERTIFICATE_REVOCATION_LIST "2.5.4.39"
3327#define szOID_CROSS_CERTIFICATE_PAIR "2.5.4.40"
3328#define szOID_GIVEN_NAME "2.5.4.42"
3329#define szOID_INITIALS "2.5.4.43"
3330#define szOID_DN_QUALIFIER "2.5.4.46"
3331#define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1"
3332#define szOID_KEY_ATTRIBUTES "2.5.29.2"
3333#define szOID_CERT_POLICIES_95 "2.5.29.3"
3334#define szOID_KEY_USAGE_RESTRICTION "2.5.29.4"
3335#define szOID_LEGACY_POLICY_MAPPINGS "2.5.29.5"
3336#define szOID_SUBJECT_ALT_NAME "2.5.29.7"
3337#define szOID_ISSUER_ALT_NAME "2.5.29.8"
3338#define szOID_SUBJECT_DIR_ATTRS "2.5.29.9"
3339#define szOID_BASIC_CONSTRAINTS "2.5.29.10"
3340#define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14"
3341#define szOID_KEY_USAGE "2.5.29.15"
3342#define szOID_PRIVATEKEY_USAGE_PERIOD "2.5.29.16"
3343#define szOID_SUBJECT_ALT_NAME2 "2.5.29.17"
3344#define szOID_ISSUER_ALT_NAME2 "2.5.29.18"
3345#define szOID_BASIC_CONSTRAINTS2 "2.5.29.19"
3346#define szOID_CRL_NUMBER "2.5.29.20"
3347#define szOID_CRL_REASON_CODE "2.5.29.21"
3348#define szOID_REASON_CODE_HOLD "2.5.29.23"
3349#define szOID_DELTA_CRL_INDICATOR "2.5.29.27"
3350#define szOID_ISSUING_DIST_POINT "2.5.29.28"
3351#define szOID_NAME_CONSTRAINTS "2.5.29.30"
3352#define szOID_CRL_DIST_POINTS "2.5.29.31"
3353#define szOID_CERT_POLICIES "2.5.29.32"
3354#define szOID_ANY_CERT_POLICY "2.5.29.32.0"
3355#define szOID_POLICY_MAPPINGS "2.5.29.33"
3356#define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35"
3357#define szOID_POLICY_CONSTRAINTS "2.5.29.36"
3358#define szOID_ENHANCED_KEY_USAGE "2.5.29.37"
3359#define szOID_FRESHEST_CRL "2.5.29.46"
3360#define szOID_INHIBIT_ANY_POLICY "2.5.29.54"
3361#define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25"
3362#define szOID_PKCS_12_FRIENDLY_NAME_ATTR "1.2.840.113549.1.9.20"
3363#define szOID_PKCS_12_LOCAL_KEY_ID "1.2.840.113549.1.9.21"
3364#define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14"
3365#define szOID_NEXT_UPDATE_LOCATION "1.3.6.1.4.1.311.10.2"
3366#define szOID_KP_CTL_USAGE_SIGNING "1.3.6.1.4.1.311.10.3.1"
3367#define szOID_KP_TIME_STAMP_SIGNING "1.3.6.1.4.1.311.10.3.2"
3368#ifndef szOID_SERVER_GATED_CRYPTO
3369#define szOID_SERVER_GATED_CRYPTO "1.3.6.1.4.1.311.10.3.3"
3370#endif
3371#ifndef szOID_SGC_NETSCAPE
3372#define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
3373#endif
3374#define szOID_KP_EFS "1.3.6.1.4.1.311.10.3.4"
3375#define szOID_EFS_RECOVERY "1.3.6.1.4.1.311.10.3.4.1"
3376#define szOID_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.5"
3377#define szOID_NT5_CRYPTO "1.3.6.1.4.1.311.10.3.6"
3378#define szOID_OEM_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.7"
3379#define szOID_EMBEDDED_NT_CRYPTO "1.3.6.1.4.1.311.10.3.8"
3380#define szOID_ROOT_LIST_SIGNER "1.3.6.1.4.1.311.10.3.9"
3381#define szOID_KP_QUALIFIED_SUBORDINATION "1.3.6.1.4.1.311.10.3.10"
3382#define szOID_KP_KEY_RECOVERY "1.3.6.1.4.1.311.10.3.11"
3383#define szOID_KP_DOCUMENT_SIGNING "1.3.6.1.4.1.311.10.3.12"
3384#define szOID_KP_LIFETIME_SIGNING "1.3.6.1.4.1.311.10.3.13"
3385#define szOID_KP_MOBILE_DEVICE_SOFTWARE "1.3.6.1.4.1.311.10.3.14"
3386#define szOID_YESNO_TRUST_ATTR "1.3.6.1.4.1.311.10.4.1"
3387#ifndef szOID_DRM
3388#define szOID_DRM "1.3.6.1.4.1.311.10.5.1"
3389#endif
3390#ifndef szOID_DRM_INDIVIDUALIZATION
3391#define szOID_DRM_INDIVIDUALIZATION "1.3.6.1.4.1.311.10.5.2"
3392#endif
3393#ifndef szOID_LICENSES
3394#define szOID_LICENSES "1.3.6.1.4.1.311.10.6.1"
3395#endif
3396#ifndef szOID_LICENSE_SERVER
3397#define szOID_LICENSE_SERVER "1.3.6.1.4.1.311.10.6.2"
3398#endif
3399#define szOID_REMOVE_CERTIFICATE "1.3.6.1.4.1.311.10.8.1"
3400#define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1"
3401#define szOID_CTL "1.3.6.1.4.1.311.10.1"
3402#define szOID_SORTED_CTL "1.3.6.1.4.1.311.10.1.1"
3403#define szOID_ANY_APPLICATION_POLICY "1.3.6.1.4.1.311.10.12.1"
3404#define szOID_RENEWAL_CERTIFICATE "1.3.6.1.4.1.311.13.1"
3405#define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1"
3406#define szOID_ENROLLMENT_CSP_PROVIDER "1.3.6.1.4.1.311.13.2.2"
3407#define szOID_OS_VERSION "1.3.6.1.4.1.311.13.2.3"
3408#define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1"
3409#define szOID_LOCAL_MACHINE_KEYSET "1.3.6.1.4.1.311.17.2"
3410#define szOID_AUTO_ENROLL_CTL_USAGE "1.3.6.1.4.1.311.20.1"
3411#define szOID_ENROLL_CERTTYPE_EXTENSION "1.3.6.1.4.1.311.20.2"
3412#define szOID_ENROLLMENT_AGENT "1.3.6.1.4.1.311.20.2.1"
3413#ifndef szOID_KP_SMARTCARD_LOGON
3414#define szOID_KP_SMARTCARD_LOGON "1.3.6.1.4.1.311.20.2.2"
3415#endif
3416#ifndef szOID_NT_PRINCIPAL_NAME
3417#define szOID_NT_PRINCIPAL_NAME "1.3.6.1.4.1.311.20.2.3"
3418#endif
3419#define szOID_CERT_MANIFOLD "1.3.6.1.4.1.311.20.3"
3420#ifndef szOID_CERTSRV_CA_VERSION
3421#define szOID_CERTSRV_CA_VERSION "1.3.6.1.4.1.311.21.1"
3422#endif
3423#define szOID_CERTSRV_PREVIOUS_CERT_HASH "1.3.6.1.4.1.311.21.2"
3424#define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3"
3425#define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4"
3426#define szOID_KP_CA_EXCHANGE "1.3.6.1.4.1.311.21.5"
3427#define szOID_KP_KEY_RECOVERY_AGENT "1.3.6.1.4.1.311.21.6"
3428#define szOID_CERTIFICATE_TEMPLATE "1.3.6.1.4.1.311.21.7"
3429#define szOID_ENTERPRISE_OID_ROOT "1.3.6.1.4.1.311.21.8"
3430#define szOID_RDN_DUMMY_SIGNER "1.3.6.1.4.1.311.21.9"
3431#define szOID_APPLICATION_CERT_POLICIES "1.3.6.1.4.1.311.21.10"
3432#define szOID_APPLICATION_POLICY_MAPPINGS "1.3.6.1.4.1.311.21.11"
3433#define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12"
3434#define szOID_ARCHIVED_KEY_ATTR "1.3.6.1.4.1.311.21.13"
3435#define szOID_CRL_SELF_CDP "1.3.6.1.4.1.311.21.14"
3436#define szOID_REQUIRE_CERT_CHAIN_POLICY "1.3.6.1.4.1.311.21.15"
3437#define szOID_ARCHIVED_KEY_CERT_HASH "1.3.6.1.4.1.311.21.16"
3438#define szOID_ISSUED_CERT_HASH "1.3.6.1.4.1.311.21.17"
3439#define szOID_DS_EMAIL_REPLICATION "1.3.6.1.4.1.311.21.19"
3440#define szOID_REQUEST_CLIENT_INFO "1.3.6.1.4.1.311.21.20"
3441#define szOID_ENCRYPTED_KEY_HASH "1.3.6.1.4.1.311.21.21"
3442#define szOID_CERTSRV_CROSSCA_VERSION "1.3.6.1.4.1.311.21.22"
3443#define szOID_KEYID_RDN "1.3.6.1.4.1.311.10.7.1"
3444#define szOID_PKIX "1.3.6.1.5.5.7"
3445#define szOID_PKIX_PE "1.3.6.1.5.5.7.1"
3446#define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1"
3447#define szOID_PKIX_POLICY_QUALIFIER_CPS "1.3.6.1.5.5.7.2.1"
3448#define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2"
3449#define szOID_PKIX_KP "1.3.6.1.5.5.7.3"
3450#define szOID_PKIX_KP_SERVER_AUTH "1.3.6.1.5.5.7.3.1"
3451#define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
3452#define szOID_PKIX_KP_CODE_SIGNING "1.3.6.1.5.5.7.3.3"
3453#define szOID_PKIX_KP_EMAIL_PROTECTION "1.3.6.1.5.5.7.3.4"
3454#define szOID_PKIX_KP_IPSEC_END_SYSTEM "1.3.6.1.5.5.7.3.5"
3455#define szOID_PKIX_KP_IPSEC_TUNNEL "1.3.6.1.5.5.7.3.6"
3456#define szOID_PKIX_KP_IPSEC_USER "1.3.6.1.5.5.7.3.7"
3457#define szOID_PKIX_KP_TIMESTAMP_SIGNING "1.3.6.1.5.5.7.3.8"
3458#define szOID_PKIX_NO_SIGNATURE "1.3.6.1.5.5.7.6.2"
3459#define szOID_CMC "1.3.6.1.5.5.7.7"
3460#define szOID_CMC_STATUS_INFO "1.3.6.1.5.5.7.7.1"
3461#define szOID_CMC_IDENTIFICATION "1.3.6.1.5.5.7.7.2"
3462#define szOID_CMC_IDENTITY_PROOF "1.3.6.1.5.5.7.7.3"
3463#define szOID_CMC_DATA_RETURN "1.3.6.1.5.5.7.7.4"
3464#define szOID_CMC_TRANSACTION_ID "1.3.6.1.5.5.7.7.5"
3465#define szOID_CMC_SENDER_NONCE "1.3.6.1.5.5.7.7.6"
3466#define szOID_CMC_RECIPIENT_NONCE "1.3.6.1.5.5.7.7.7"
3467#define szOID_CMC_ADD_EXTENSIONS "1.3.6.1.5.5.7.7.8"
3468#define szOID_CMC_ENCRYPTED_POP "1.3.6.1.5.5.7.7.9"
3469#define szOID_CMC_DECRYPTED_POP "1.3.6.1.5.5.7.7.10"
3470#define szOID_CMC_LRA_POP_WITNESS "1.3.6.1.5.5.7.7.11"
3471#define szOID_CMC_GET_CERT "1.3.6.1.5.5.7.7.15"
3472#define szOID_CMC_GET_CRL "1.3.6.1.5.5.7.7.16"
3473#define szOID_CMC_REVOKE_REQUEST "1.3.6.1.5.5.7.7.17"
3474#define szOID_CMC_REG_INFO "1.3.6.1.5.5.7.7.18"
3475#define szOID_CMC_RESPONSE_INFO "1.3.6.1.5.5.7.7.19"
3476#define szOID_CMC_QUERY_PENDING "1.3.6.1.5.5.7.7.21"
3477#define szOID_CMC_ID_POP_LINK_RANDOM "1.3.6.1.5.5.7.7.22"
3478#define szOID_CMC_ID_POP_LINK_WITNESS "1.3.6.1.5.5.7.7.23"
3479#define szOID_CT_PKI_DATA "1.3.6.1.5.5.7.12.2"
3480#define szOID_CT_PKI_RESPONSE "1.3.6.1.5.5.7.12.3"
3481#define szOID_PKIX_ACC_DESCR "1.3.6.1.5.5.7.48"
3482#define szOID_PKIX_OCSP "1.3.6.1.5.5.7.48.1"
3483#define szOID_PKIX_CA_ISSUERS "1.3.6.1.5.5.7.48.2"
3484#define szOID_IPSEC_KP_IKE_INTERMEDIATE "1.3.6.1.5.5.8.2.2"
3485
3486#ifndef szOID_SERIALIZED
3487#define szOID_SERIALIZED "1.3.6.1.4.1.311.10.3.3.1"
3488#endif
3489
3490#ifndef szOID_PRODUCT_UPDATE
3491#define szOID_PRODUCT_UPDATE "1.3.6.1.4.1.311.31.1"
3492#endif
3493
3494#define szOID_NETSCAPE "2.16.840.1.113730"
3495#define szOID_NETSCAPE_CERT_EXTENSION "2.16.840.1.113730.1"
3496#define szOID_NETSCAPE_CERT_TYPE "2.16.840.1.113730.1.1"
3497#define szOID_NETSCAPE_BASE_URL "2.16.840.1.113730.1.2"
3498#define szOID_NETSCAPE_REVOCATION_URL "2.16.840.1.113730.1.3"
3499#define szOID_NETSCAPE_CA_REVOCATION_URL "2.16.840.1.113730.1.4"
3500#define szOID_NETSCAPE_CERT_RENEWAL_URL "2.16.840.1.113730.1.7"
3501#define szOID_NETSCAPE_CA_POLICY_URL "2.16.840.1.113730.1.8"
3502#define szOID_NETSCAPE_SSL_SERVER_NAME "2.16.840.1.113730.1.12"
3503#define szOID_NETSCAPE_COMMENT "2.16.840.1.113730.1.13"
3504#define szOID_NETSCAPE_DATA_TYPE "2.16.840.1.113730.2"
3505#define szOID_NETSCAPE_CERT_SEQUENCE "2.16.840.1.113730.2.5"
3506
3507/* Bits for szOID_NETSCAPE_CERT_TYPE */
3508#define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80
3509#define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40
3510#define NETSCAPE_SMIME_CERT_TYPE 0x20
3511#define NETSCAPE_SIGN_CERT_TYPE 0x10
3512#define NETSCAPE_SSL_CA_CERT_TYPE 0x04
3513#define NETSCAPE_SMIME_CA_CERT_TYPE 0x02
3514#define NETSCAPE_SIGN_CA_CERT_TYPE 0x01
3515
3516#define CRYPT_ENCODE_DECODE_NONE 0
3517#define X509_CERT ((LPCSTR)1)
3518#define X509_CERT_TO_BE_SIGNED ((LPCSTR)2)
3519#define X509_CERT_CRL_TO_BE_SIGNED ((LPCSTR)3)
3520#define X509_CERT_REQUEST_TO_BE_SIGNED ((LPCSTR)4)
3521#define X509_EXTENSIONS ((LPCSTR)5)
3522#define X509_NAME_VALUE ((LPCSTR)6)
3523#define X509_ANY_STRING X509_NAME_VALUE
3524#define X509_NAME ((LPCSTR)7)
3525#define X509_PUBLIC_KEY_INFO ((LPCSTR)8)
3526#define X509_AUTHORITY_KEY_ID ((LPCSTR)9)
3527#define X509_KEY_ATTRIBUTES ((LPCSTR)10)
3528#define X509_KEY_USAGE_RESTRICTION ((LPCSTR)11)
3529#define X509_ALTERNATE_NAME ((LPCSTR)12)
3530#define X509_BASIC_CONSTRAINTS ((LPCSTR)13)
3531#define X509_KEY_USAGE ((LPCSTR)14)
3532#define X509_BASIC_CONSTRAINTS2 ((LPCSTR)15)
3533#define X509_CERT_POLICIES ((LPCSTR)16)
3534#define PKCS_UTC_TIME ((LPCSTR)17)
3535#define PKCS_TIME_REQUEST ((LPCSTR)18)
3536#define RSA_CSP_PUBLICKEYBLOB ((LPCSTR)19)
3537#define X509_UNICODE_NAME ((LPCSTR)20)
3538#define X509_KEYGEN_REQUEST_TO_BE_SIGNED ((LPCSTR)21)
3539#define PKCS_ATTRIBUTE ((LPCSTR)22)
3540#define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY ((LPCSTR)23)
3541#define X509_UNICODE_NAME_VALUE ((LPCSTR)24)
3542#define X509_UNICODE_ANY_STRING X509_UNICODE_NAME_VALUE
3543#define X509_OCTET_STRING ((LPCSTR)25)
3544#define X509_BITS ((LPCSTR)26)
3545#define X509_INTEGER ((LPCSTR)27)
3546#define X509_MULTI_BYTE_INTEGER ((LPCSTR)28)
3547#define X509_ENUMERATED ((LPCSTR)29)
3548#define X509_CRL_REASON_CODE X509_ENUMERATED
3549#define X509_CHOICE_OF_TIME ((LPCSTR)30)
3550#define X509_AUTHORITY_KEY_ID2 ((LPCSTR)31)
3551#define X509_AUTHORITY_INFO_ACCESS ((LPCSTR)32)
3552#define PKCS_CONTENT_INFO ((LPCSTR)33)
3553#define X509_SEQUENCE_OF_ANY ((LPCSTR)34)
3554#define X509_CRL_DIST_POINTS ((LPCSTR)35)
3555#define X509_ENHANCED_KEY_USAGE ((LPCSTR)36)
3556#define PKCS_CTL ((LPCSTR)37)
3557#define X509_MULTI_BYTE_UINT ((LPCSTR)38)
3558#define X509_DSS_PUBLICKEY X509_MULTI_BYTE_UINT
3559#define X509_DSS_PARAMETERS ((LPCSTR)39)
3560#define X509_DSS_SIGNATURE ((LPCSTR)40)
3561#define PKCS_RC2_CBC_PARAMETERS ((LPCSTR)41)
3562#define PKCS_SMIME_CAPABILITIES ((LPCSTR)42)
3563#define PKCS_RSA_PRIVATE_KEY ((LPCSTR)43)
3564#define PKCS_PRIVATE_KEY_INFO ((LPCSTR)44)
3565#define PKCS_ENCRYPTED_PRIVATE_KEY_INFO ((LPCSTR)45)
3566#define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46)
3567#define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT
3568#define X509_DH_PARAMETERS ((LPCSTR)47)
3569#define X509_ECC_SIGNATURE ((LPCSTR)47)
3570#define PKCS_ATTRIBUTES ((LPCSTR)48)
3571#define PKCS_SORTED_CTL ((LPCSTR)49)
3572#define X942_DH_PARAMETERS ((LPCSTR)50)
3573#define X509_BITS_WITHOUT_TRAILING_ZEROES ((LPCSTR)51)
3574#define X942_OTHER_INFO ((LPCSTR)52)
3575#define X509_CERT_PAIR ((LPCSTR)53)
3576#define X509_ISSUING_DIST_POINT ((LPCSTR)54)
3577#define X509_NAME_CONSTRAINTS ((LPCSTR)55)
3578#define X509_POLICY_MAPPINGS ((LPCSTR)56)
3579#define X509_POLICY_CONSTRAINTS ((LPCSTR)57)
3580#define X509_CROSS_CERT_DIST_POINTS ((LPCSTR)58)
3581#define CMC_DATA ((LPCSTR)59)
3582#define CMC_RESPONSE ((LPCSTR)60)
3583#define CMC_STATUS ((LPCSTR)61)
3584#define CMC_ADD_EXTENSIONS ((LPCSTR)62)
3585#define CMC_ADD_ATTRIBUTES ((LPCSTR)63)
3586#define X509_CERTIFICATE_TEMPLATE ((LPCSTR)64)
3587#define OCSP_SIGNED_REQUEST ((LPCSTR)65)
3588#define OCSP_REQUEST ((LPCSTR)66)
3589#define OCSP_RESPONSE ((LPCSTR)67)
3590#define OCSP_BASIC_SIGNED_RESPONSE ((LPCSTR)68)
3591#define OCSP_BASIC_RESPONSE ((LPCSTR)69)
3592#define CNG_RSA_PUBLIC_KEY_BLOB ((LPCSTR)72)
3593#define X509_OBJECT_IDENTIFIER ((LPCSTR)73)
3594#define PKCS7_SIGNER_INFO ((LPCSTR)500)
3595#define CMS_SIGNER_INFO ((LPCSTR)501)
3596
3597/* encode/decode flags */
3598#define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x00008
3599#define CRYPT_ENCODE_ALLOC_FLAG 0x08000
3600#define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000
3601#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG \
3602 CERT_RDN_ENABLE_T61_UNICODE_FLAG
3603#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG \
3604 CERT_RDN_ENABLE_UTF8_UNICODE_FLAG
3605#define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG \
3606 CERT_RDN_DISABLE_CHECK_TYPE_FLAG
3607
3608#define CRYPT_DECODE_NOCOPY_FLAG 0x00001
3609#define CRYPT_DECODE_TO_BE_SIGNED_FLAG 0x00002
3610#define CRYPT_DECODE_SHARE_OID_STRING_FLAG 0x00004
3611#define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x00008
3612#define CRYPT_DECODE_ALLOC_FLAG 0x08000
3613#define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG \
3614 CERT_RDN_DISABLE_IE4_UTF8_FLAG
3615
3616#define CERT_STORE_SIGNATURE_FLAG 0x00000001
3617#define CERT_STORE_TIME_VALIDITY_FLAG 0x00000002
3618#define CERT_STORE_REVOCATION_FLAG 0x00000004
3619#define CERT_STORE_NO_CRL_FLAG 0x00010000
3620#define CERT_STORE_NO_ISSUER_FLAG 0x00020000
3621
3622#define CERT_STORE_BASE_CRL_FLAG 0x00000100
3623#define CERT_STORE_DELTA_CRL_FLAG 0x00000200
3624
3625/* subject types for CryptVerifyCertificateSignatureEx */
3626#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1
3627#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2
3628#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 3
3629
3630/* issuer types for CryptVerifyCertificateSignatureEx */
3631#define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1
3632#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT 2
3633#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN 3
3634#define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 4
3635
3636#define CRYPT_GET_URL_FROM_PROPERTY 0x00000001
3637#define CRYPT_GET_URL_FROM_EXTENSION 0x00000002
3638#define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x00000004
3639#define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE 0x00000008
3640
3641/* Certificate name string types and flags */
3642#define CERT_SIMPLE_NAME_STR 1
3643#define CERT_OID_NAME_STR 2
3644#define CERT_X500_NAME_STR 3
3645#define CERT_NAME_STR_SEMICOLON_FLAG 0x40000000
3646#define CERT_NAME_STR_NO_PLUS_FLAG 0x20000000
3647#define CERT_NAME_STR_NO_QUOTING_FLAG 0x10000000
3648#define CERT_NAME_STR_CRLF_FLAG 0x08000000
3649#define CERT_NAME_STR_COMMA_FLAG 0x04000000
3650#define CERT_NAME_STR_REVERSE_FLAG 0x02000000
3651#define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x00040000
3652#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 0x00020000
3653#define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x00010000
3654
3655#define CERT_NAME_EMAIL_TYPE 1
3656#define CERT_NAME_RDN_TYPE 2
3657#define CERT_NAME_ATTR_TYPE 3
3658#define CERT_NAME_SIMPLE_DISPLAY_TYPE 4
3659#define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5
3660#define CERT_NAME_DNS_TYPE 6
3661#define CERT_NAME_URL_TYPE 7
3662#define CERT_NAME_UPN_TYPE 8
3663
3664#define CERT_NAME_ISSUER_FLAG 0x00000001
3665#define CERT_NAME_SEARCH_ALL_NAMES_FLAG 0x00000002
3666#define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x00010000
3667#define CERT_NAME_STR_ENABLE_PUNYCODE_FLAG 0x00200000
3668
3669/* CryptFormatObject flags */
3670#define CRYPT_FORMAT_STR_MULTI_LINE 0x0001
3671#define CRYPT_FORMAT_STR_NO_HEX 0x0010
3672
3673#define CRYPT_FORMAT_SIMPLE 0x0001
3674#define CRYPT_FORMAT_X509 0x0002
3675#define CRYPT_FORMAT_OID 0x0004
3676#define CRYPT_FORMAT_RDN_SEMICOLON 0x0100
3677#define CRYPT_FORMAT_RDN_CRLF 0x0200
3678#define CRYPT_FORMAT_RDN_UNQUOTE 0x0400
3679#define CRYPT_FORMAT_RDN_REVERSE 0x0800
3680
3681#define CRYPT_FORMAT_COMMA 0x1000
3682#define CRYPT_FORMAT_SEMICOLON CRYPT_FORMAT_RDN_SEMICOLON
3683#define CRYPT_FORMAT_CRLF CRYPT_FORMAT_RDN_CRLF
3684
3685/* CryptQueryObject types and flags */
3686#define CERT_QUERY_OBJECT_FILE 1
3687#define CERT_QUERY_OBJECT_BLOB 2
3688
3689#define CERT_QUERY_CONTENT_CERT 1
3690#define CERT_QUERY_CONTENT_CTL 2
3691#define CERT_QUERY_CONTENT_CRL 3
3692#define CERT_QUERY_CONTENT_SERIALIZED_STORE 4
3693#define CERT_QUERY_CONTENT_SERIALIZED_CERT 5
3694#define CERT_QUERY_CONTENT_SERIALIZED_CTL 6
3695#define CERT_QUERY_CONTENT_SERIALIZED_CRL 7
3696#define CERT_QUERY_CONTENT_PKCS7_SIGNED 8
3697#define CERT_QUERY_CONTENT_PKCS7_UNSIGNED 9
3698#define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 10
3699#define CERT_QUERY_CONTENT_PKCS10 11
3700#define CERT_QUERY_CONTENT_PFX 12
3701#define CERT_QUERY_CONTENT_CERT_PAIR 13
3702
3703#define CERT_QUERY_CONTENT_FLAG_CERT (1 << CERT_QUERY_CONTENT_CERT)
3704#define CERT_QUERY_CONTENT_FLAG_CTL (1 << CERT_QUERY_CONTENT_CTL)
3705#define CERT_QUERY_CONTENT_FLAG_CRL (1 << CERT_QUERY_CONTENT_CRL)
3706#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE \
3707 (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
3708#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT \
3709 (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
3710#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL \
3711 (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
3712#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL \
3713 (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
3714#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED \
3715 (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
3716#define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED \
3717 (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
3718#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED \
3719 (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
3720#define CERT_QUERY_CONTENT_FLAG_PKCS10 (1 << CERT_QUERY_CONTENT_PKCS10)
3721#define CERT_QUERY_CONTENT_FLAG_PFX (1 << CERT_QUERY_CONTENT_PFX)
3722#define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR)
3723
3724#define CERT_QUERY_CONTENT_FLAG_ALL \
3725 CERT_QUERY_CONTENT_FLAG_CERT | \
3726 CERT_QUERY_CONTENT_FLAG_CTL | \
3727 CERT_QUERY_CONTENT_FLAG_CRL | \
3728 CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | \
3729 CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | \
3730 CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | \
3731 CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | \
3732 CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | \
3733 CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | \
3734 CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | \
3735 CERT_QUERY_CONTENT_FLAG_PKCS10 | \
3736 CERT_QUERY_CONTENT_FLAG_PFX | \
3737 CERT_QUERY_CONTENT_FLAG_CERT_PAIR
3738
3739#define CERT_QUERY_FORMAT_BINARY 1
3740#define CERT_QUERY_FORMAT_BASE64_ENCODED 2
3741#define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3
3742
3743#define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY)
3744#define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED \
3745 (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
3746#define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \
3747 (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
3748
3749#define CERT_QUERY_FORMAT_FLAG_ALL \
3750 CERT_QUERY_FORMAT_FLAG_BINARY | \
3751 CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | \
3752 CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \
3753
3754#define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x00000001
3755#define CERT_SET_KEY_CONTEXT_PROP_ID 0x00000001
3756
3757#define CERT_CREATE_SELFSIGN_NO_SIGN 1
3758#define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2
3759
3760/* flags for CryptAcquireCertificatePrivateKey */
3761#define CRYPT_ACQUIRE_CACHE_FLAG 0x00000001
3762#define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x00000002
3763#define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x00000004
3764#define CRYPT_ACQUIRE_SILENT_FLAG 0x00000040
3765
3766/* flags for CryptFindCertificateKeyProvInfo */
3767#define CRYPT_FIND_USER_KEYSET_FLAG 0x00000001
3768#define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x00000002
3769#define CRYPT_FIND_SILENT_KEYSET_FLAG 0x00000040
3770
3771/* Chain engines and chains */
3772typedef HANDLE HCERTCHAINENGINE;
3773#define HCCE_CURRENT_USER ((HCERTCHAINENGINE)NULL)
3774#define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)1)
3775
3776#define CERT_CHAIN_CACHE_END_CERT 0x00000001
3777#define CERT_CHAIN_THREAD_STORE_SYNC 0x00000002
3778#define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x00000004
3779#define CERT_CHAIN_USE_LOCAL_MACHINE_STORE 0x00000008
3780#define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x00000010
3781#define CERT_CHAIN_ENABLE_SHARE_STORE 0x00000020
3782
3783typedef struct _CERT_CHAIN_ENGINE_CONFIG
3784{
3785 DWORD cbSize;
3786 HCERTSTORE hRestrictedRoot;
3787 HCERTSTORE hRestrictedTrust;
3788 HCERTSTORE hRestrictedOther;
3789 DWORD cAdditionalStore;
3790 HCERTSTORE *rghAdditionalStore;
3791 DWORD dwFlags;
3792 DWORD dwUrlRetrievalTimeout;
3793 DWORD MaximumCachedCertificates;
3794 DWORD CycleDetectionModulus;
3795 HCERTSTORE hExclusiveRoot;
3796 HCERTSTORE hExclusiveRootTrustedPeople;
3797} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;
3798
3799/* message-related definitions */
3800
3801#ifdef __REACTOS__
3802typedef BOOL
3803(WINAPI *PFN_CMSG_STREAM_OUTPUT)(
3804 _In_opt_ const void *pvArg,
3805 _In_reads_bytes_opt_(cbData) BYTE *pbData,
3806 _In_ DWORD cbData,
3807 _In_ BOOL fFinal);
3808#else
3809typedef BOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg, BYTE *pbData,
3810 DWORD cbData, BOOL fFinal);
3811#endif
3812
3813#define CMSG_INDEFINITE_LENGTH 0xffffffff
3814
3815typedef struct _CMSG_STREAM_INFO
3816{
3817 DWORD cbContent;
3818 PFN_CMSG_STREAM_OUTPUT pfnStreamOutput;
3819 void *pvArg;
3820} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO;
3821
3822typedef struct _CERT_ISSUER_SERIAL_NUMBER
3823{
3824 CERT_NAME_BLOB Issuer;
3825 CRYPT_INTEGER_BLOB SerialNumber;
3826} CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER;
3827
3828typedef struct _CERT_ID
3829{
3830 DWORD dwIdChoice;
3831 union {
3832 CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber;
3833 CRYPT_HASH_BLOB KeyId;
3834 CRYPT_HASH_BLOB HashId;
3835 } DUMMYUNIONNAME;
3836} CERT_ID, *PCERT_ID;
3837
3838#define CERT_ID_ISSUER_SERIAL_NUMBER 1
3839#define CERT_ID_KEY_IDENTIFIER 2
3840#define CERT_ID_SHA1_HASH 3
3841
3842#ifndef USE_WC_PREFIX
3843#undef CMSG_DATA /* may be defined by sys/socket.h */
3844#define CMSG_DATA 1
3845#define CMSG_SIGNED 2
3846#define CMSG_ENVELOPED 3
3847#define CMSG_SIGNED_AND_ENVELOPED 4
3848#define CMSG_HASHED 5
3849#define CMSG_ENCRYPTED 6
3850
3851#define CMSG_ALL_FLAGS ~0U
3852#define CMSG_DATA_FLAG (1 << CMSG_DATA)
3853#define CMSG_SIGNED_FLAG (1 << CMSG_SIGNED)
3854#define CMSG_ENVELOPED_FLAG (1 << CMSG_ENVELOPED)
3855#define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED)
3856#define CMSG_ENCRYPTED_FLAG (1 << CMSG_ENCRYPTED)
3857#else
3858#define WC_CMSG_DATA 1
3859#define WC_CMSG_SIGNED 2
3860#define WC_CMSG_ENVELOPED 3
3861#define WC_CMSG_SIGNED_AND_ENVELOPED 4
3862#define WC_CMSG_HASHED 5
3863#define WC_CMSG_ENCRYPTED 6
3864
3865#define WC_CMSG_ALL_FLAGS ~0U
3866#define WC_CMSG_DATA_FLAG (1 << WC_CMSG_DATA)
3867#define WC_CMSG_SIGNED_FLAG (1 << WC_CMSG_SIGNED)
3868#define WC_CMSG_ENVELOPED_FLAG (1 << WC_CMSG_ENVELOPED)
3869#define WC_CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << WC_CMSG_SIGNED_AND_ENVELOPED)
3870#define WC_CMSG_ENCRYPTED_FLAG (1 << WC_CMSG_ENCRYPTED)
3871#endif
3872
3873typedef struct _CMSG_SIGNER_ENCODE_INFO
3874{
3875 DWORD cbSize;
3876 PCERT_INFO pCertInfo;
3877 HCRYPTPROV hCryptProv;
3878 DWORD dwKeySpec;
3879 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
3880 void *pvHashAuxInfo;
3881 DWORD cAuthAttr;
3882 PCRYPT_ATTRIBUTE rgAuthAttr;
3883 DWORD cUnauthAttr;
3884 PCRYPT_ATTRIBUTE rgUnauthAttr;
3885#ifdef CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS
3886 CERT_ID SignerId;
3887 CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
3888 void *pvHashEncryptionAuxInfo;
3889#endif
3890} CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO;
3891
3892typedef struct _CMSG_SIGNED_ENCODE_INFO
3893{
3894 DWORD cbSize;
3895 DWORD cSigners;
3896 PCMSG_SIGNER_ENCODE_INFO rgSigners;
3897 DWORD cCertEncoded;
3898 PCERT_BLOB rgCertEncoded;
3899 DWORD cCrlEncoded;
3900 PCRL_BLOB rgCrlEncoded;
3901#ifdef CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS
3902 DWORD cAttrCertEncoded;
3903 PCERT_BLOB rgAttrCertEncoded;
3904#endif
3905} CMSG_SIGNED_ENCODE_INFO, *PCMSG_SIGNED_ENCODE_INFO;
3906
3907typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO
3908{
3909 DWORD cbSize;
3910 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
3911 void *pvKeyEncryptionAuxInfo;
3912 HCRYPTPROV_LEGACY hCryptProv;
3913 CRYPT_BIT_BLOB RecipientPublicKey;
3914 CERT_ID RecipientId;
3915} CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
3916
3917typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO
3918{
3919 DWORD cbSize;
3920 CRYPT_BIT_BLOB RecipientPublicKey;
3921 CERT_ID RecipientId;
3922 FILETIME Date;
3923 PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
3924} CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,
3925 *PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
3926
3927typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO
3928{
3929 DWORD cbSize;
3930 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
3931 void *pvKeyEncryptionAuxInfo;
3932 CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm;
3933 void *pvKeyWrapAuxInfo;
3934 HCRYPTPROV_LEGACY hCryptProv;
3935 DWORD dwKeySpec;
3936 DWORD dwKeyChoice;
3937 union {
3938 PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm;
3939 PCERT_ID pSenderId;
3940 } DUMMYUNIONNAME;
3941 CRYPT_DATA_BLOB UserKeyingMaterial;
3942 DWORD cRecipientEncryptedKeys;
3943 PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys;
3944} CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
3945
3946#define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 1
3947#define CMSG_KEY_AGREE_STATIC_KEY_CHOICE 2
3948
3949typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO
3950{
3951 DWORD cbSize;
3952 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
3953 void *pvKeyEncryptionAuxInfo;
3954 HCRYPTPROV hCryptProv;
3955 DWORD dwKeyChoice;
3956 union {
3957 HCRYPTKEY hKeyEncryptionKey;
3958 void *pvKeyEncryptionKey;
3959 } DUMMYUNIONNAME;
3960 CRYPT_DATA_BLOB KeyId;
3961 FILETIME Date;
3962 PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
3963} CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, *PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
3964
3965#define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1
3966
3967typedef struct _CMSG_RECIPIENT_ENCODE_INFO
3968{
3969 DWORD dwRecipientChoice;
3970 union {
3971 PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans;
3972 PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree;
3973 PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList;
3974 } DUMMYUNIONNAME;
3975} CMSG_RECIPIENT_ENCODE_INFO, *PCMSG_RECIPIENT_ENCODE_INFO;
3976
3977#define CMSG_KEY_TRANS_RECIPIENT 1
3978#define CMSG_KEY_AGREE_RECIPIENT 2
3979#define CMSG_MAIL_LIST_RECIPIENT 3
3980
3981typedef struct _CMSG_ENVELOPED_ENCODE_INFO
3982{
3983 DWORD cbSize;
3984 HCRYPTPROV_LEGACY hCryptProv;
3985 CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
3986 void *pvEncryptionAuxInfo;
3987 DWORD cRecipients;
3988 PCERT_INFO *rgpRecipientCert;
3989#ifdef CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS
3990 PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
3991 DWORD cCertEncoded;
3992 PCERT_BLOB rgCertEncoded;
3993 DWORD cCrlEncoded;
3994 PCRL_BLOB rgCrlEncoded;
3995 DWORD cAttrCertEncoded;
3996 PCERT_BLOB rgAttrCertEncoded;
3997 DWORD cUnprotectedAttr;
3998 PCRYPT_ATTRIBUTE rgUnprotectedAttr;
3999#endif
4000} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO;
4001
4002typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO
4003{
4004 DWORD cbSize;
4005 CMSG_SIGNED_ENCODE_INFO SignedInfo;
4006 CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo;
4007} CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO,
4008 *PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;
4009
4010typedef struct _CMSG_HASHED_ENCODE_INFO
4011{
4012 DWORD cbSize;
4013 HCRYPTPROV_LEGACY hCryptProv;
4014 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
4015 void *pvHashAuxInfo;
4016} CMSG_HASHED_ENCODE_INFO, *PCMSG_HASHED_ENCODE_INFO;
4017
4018typedef struct _CMSG_ENCRYPTED_ENCODE_INFO
4019{
4020 DWORD cbSize;
4021 CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
4022 void *pvEncryptionAuxInfo;
4023} CMSG_ENCRYPTED_ENCODE_INFO, *PCMSG_ENCRYPTED_ENCODE_INFO;
4024
4025#define CMSG_BARE_CONTENT_FLAG 0x00000001
4026#define CMSG_LENGTH_ONLY_FLAG 0x00000002
4027#define CMSG_DETACHED_FLAG 0x00000004
4028#define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x00000008
4029#define CMSG_CONTENTS_OCTETS_FLAG 0x00000010
4030#define CMSG_MAX_LENGTH_FLAG 0x00000020
4031#define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x00000040
4032#define CMSG_CRYPT_RELEASE_CONTEXT_FLAG 0x00008000
4033
4034#define CMSG_CTRL_VERIFY_SIGNATURE 1
4035#define CMSG_CTRL_DECRYPT 2
4036#define CMSG_CTRL_VERIFY_HASH 5
4037#define CMSG_CTRL_ADD_SIGNER 6
4038#define CMSG_CTRL_DEL_SIGNER 7
4039#define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8
4040#define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9
4041#define CMSG_CTRL_ADD_CERT 10
4042#define CMSG_CTRL_DEL_CERT 11
4043#define CMSG_CTRL_ADD_CRL 12
4044#define CMSG_CTRL_DEL_CRL 13
4045#define CMSG_CTRL_ADD_ATTR_CERT 14
4046#define CMSG_CTRL_DEL_ATTR_CERT 15
4047#define CMSG_CTRL_KEY_TRANS_DECRYPT 16
4048#define CMSG_CTRL_KEY_AGREE_DECRYPT 17
4049#define CMSG_CTRL_MAIL_LIST_DECRYPT 18
4050#define CMSG_CTRL_VERIFY_SIGNATURE_EX 19
4051#define CMSG_CTRL_ADD_CMS_SIGNER_INFO 20
4052
4053typedef struct _CMSG_CTRL_DECRYPT_PARA
4054{
4055 DWORD cbSize;
4056 HCRYPTPROV hCryptProv;
4057 DWORD dwKeySpec;
4058 DWORD dwRecipientIndex;
4059} CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA;
4060
4061typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA
4062{
4063 DWORD cbSize;
4064 DWORD dwSignerIndex;
4065 CRYPT_DATA_BLOB blob;
4066} CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA,
4067 *PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;
4068
4069typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA
4070{
4071 DWORD cbSize;
4072 DWORD dwSignerIndex;
4073 DWORD dwUnauthAttrIndex;
4074} CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA,
4075 *PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
4076
4077typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
4078 DWORD cbSize;
4079 HCRYPTPROV hCryptProv;
4080 DWORD dwSignerIndex;
4081 DWORD dwSignerType;
4082 void *pvSigner;
4083} CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA, *PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;
4084
4085#define CMSG_VERIFY_SIGNER_PUBKEY 1
4086#define CMSG_VERIFY_SIGNER_CERT 2
4087#define CMSG_VERIFY_SIGNER_CHAIN 3
4088#define CMSG_VERIFY_SIGNER_NULL 4
4089
4090#define CMSG_TYPE_PARAM 1
4091#define CMSG_CONTENT_PARAM 2
4092#define CMSG_BARE_CONTENT_PARAM 3
4093#define CMSG_INNER_CONTENT_TYPE_PARAM 4
4094#define CMSG_SIGNER_COUNT_PARAM 5
4095#define CMSG_SIGNER_INFO_PARAM 6
4096#define CMSG_SIGNER_CERT_INFO_PARAM 7
4097#define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8
4098#define CMSG_SIGNER_AUTH_ATTR_PARAM 9
4099#define CMSG_SIGNER_UNAUTH_ATTR_PARAM 10
4100#define CMSG_CERT_COUNT_PARAM 11
4101#define CMSG_CERT_PARAM 12
4102#define CMSG_CRL_COUNT_PARAM 13
4103#define CMSG_CRL_PARAM 14
4104#define CMSG_ENVELOPE_ALGORITHM_PARAM 15
4105#define CMSG_RECIPIENT_COUNT_PARAM 17
4106#define CMSG_RECIPIENT_INDEX_PARAM 18
4107#define CMSG_RECIPIENT_INFO_PARAM 19
4108#define CMSG_HASH_ALGORITHM_PARAM 20
4109#define CMSG_HASH_DATA_PARAM 21
4110#define CMSG_COMPUTED_HASH_PARAM 22
4111#define CMSG_ENCRYPT_PARAM 26
4112#define CMSG_ENCRYPTED_DIGEST 27
4113#define CMSG_ENCODED_SIGNER 28
4114#define CMSG_ENCODED_MESSAGE 29
4115#define CMSG_VERSION_PARAM 30
4116#define CMSG_ATTR_CERT_COUNT_PARAM 31
4117#define CMSG_ATTR_CERT_PARAM 32
4118#define CMSG_CMS_RECIPIENT_COUNT_PARAM 33
4119#define CMSG_CMS_RECIPIENT_INDEX_PARAM 34
4120#define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 35
4121#define CMSG_CMS_RECIPIENT_INFO_PARAM 36
4122#define CMSG_UNPROTECTED_ATTR_PARAM 37
4123#define CMSG_SIGNER_CERT_ID_PARAM 38
4124#define CMSG_CMS_SIGNER_INFO_PARAM 39
4125
4126typedef struct _CMSG_CMS_SIGNER_INFO {
4127 DWORD dwVersion;
4128 CERT_ID SignerId;
4129 CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
4130 CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
4131 CRYPT_DATA_BLOB EncryptedHash;
4132 CRYPT_ATTRIBUTES AuthAttrs;
4133 CRYPT_ATTRIBUTES UnauthAttrs;
4134} CMSG_CMS_SIGNER_INFO, *PCMSG_CMS_SIGNER_INFO;
4135
4136typedef CRYPT_ATTRIBUTES CMSG_ATTR, *PCMSG_ATTR;
4137
4138#define CMSG_SIGNED_DATA_V1 1
4139#define CMSG_SIGNED_DATA_V3 3
4140#define CMSG_SIGNED_DATA_PKCS_1_5_VERSION CMSG_SIGNED_DATA_V1
4141#define CMSG_SIGNED_DATA_CMS_VERSION CMSG_SIGNED_DATA_V3
4142
4143#define CMSG_SIGNER_INFO_V1 1
4144#define CMSG_SIGNER_INFO_V3 3
4145#define CMSG_SIGNER_INFO_PKCS_1_5_VERSION CMSG_SIGNER_INFO_V1
4146#define CMSG_SIGNER_INFO_CMS_VERSION CMSG_SIGNER_INFO_V3
4147
4148#define CMSG_HASHED_DATA_V0 0
4149#define CMSG_HASHED_DATA_V2 2
4150#define CMSG_HASHED_DATA_PKCS_1_5_VERSION CMSG_HASHED_DATA_V0
4151#define CMSG_HASHED_DATA_CMS_VERSION CMSG_HASHED_DATA_V2
4152
4153#define CMSG_ENVELOPED_DATA_V0 0
4154#define CMSG_ENVELOPED_DATA_V2 2
4155#define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION CMSG_ENVELOPED_DATA_V0
4156#define CMSG_ENVELOPED_DATA_CMS_VERSION CMSG_ENVELOPED_DATA_V2
4157
4158typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO {
4159 DWORD dwVersion;
4160 CERT_ID RecipientId;
4161 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
4162 CRYPT_DATA_BLOB EncryptedKey;
4163} CMSG_KEY_TRANS_RECIPIENT_INFO, *PCMSG_KEY_TRANS_RECIPIENT_INFO;
4164
4165typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {
4166 CERT_ID RecipientId;
4167 CRYPT_DATA_BLOB EncryptedKey;
4168 PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
4169} CMSG_RECIPIENT_ENCRYPTED_KEY_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO;
4170
4171typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO {
4172 DWORD dwVersion;
4173 DWORD dwOriginatorChoice;
4174 union {
4175 CERT_ID OriginatorCertId;
4176 CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo;
4177 } DUMMYUNIONNAME;
4178 CRYPT_ALGORITHM_IDENTIFIER UserKeyingMaterial;
4179 DWORD cRecipientEncryptedKeys;
4180 PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO *rgpRecipientEncryptedKeys;
4181} CMSG_KEY_AGREE_RECIPIENT_INFO, *PCMSG_KEY_AGREE_RECIPIENT_INFO;
4182
4183#define CMSG_KEY_AGREE_ORIGINATOR_CERT 1
4184#define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 2
4185
4186typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO {
4187 DWORD dwVersion;
4188 CRYPT_DATA_BLOB KeyId;
4189 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
4190 CRYPT_DATA_BLOB EncryptedKey;
4191 FILETIME Date;
4192 PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
4193} CMSG_MAIL_LIST_RECIPIENT_INFO, *PCMSG_MAIL_LIST_RECIPIENT_INFO;
4194
4195typedef struct _CMSG_CMS_RECIPIENT_INFO {
4196 DWORD dwRecipientChoice;
4197 union {
4198 PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
4199 PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;
4200 PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList;
4201 } DUMMYUNIONNAME;
4202} CMSG_CMS_RECIPIENT_INFO, *PCMSG_CMS_RECIPIENT_INFO;
4203
4204#define CMSG_ENVELOPED_RECIPIENT_V0 0
4205#define CMSG_ENVELOPED_RECIPIENT_V2 2
4206#define CMSG_ENVELOPED_RECIPIENT_V3 3
4207#define CMSG_ENVELOPED_RECIPIENT_V4 4
4208#define CMSG_KEY_TRANS_PKCS_1_5_VERSION CMSG_ENVELOPED_RECIPIENT_V0
4209#define CMSG_KEY_TRANS_CMS_VERSION CMSG_ENVELOPED_RECIPIENT_V2
4210#define CMSG_KEY_AGREE_VERSION CMSG_ENVELOPED_RECIPIENT_V3
4211#define CMSG_MAIL_LIST_VERSION CMSG_ENVELOPED_RECIPIENT_V4
4212
4213typedef void * (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CMSG_ALLOC)(size_t cb);
4214typedef void (WINAPI *PFN_CMSG_FREE)(void *pv);
4215
4216typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
4217 DWORD cbSize;
4218 HCRYPTPROV hCryptProv;
4219 CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
4220 void *pvEncryptionAuxInfo;
4221 DWORD cRecipients;
4222 PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
4223 PFN_CMSG_ALLOC pfnAlloc;
4224 PFN_CMSG_FREE pfnFree;
4225 DWORD dwEncryptFlags;
4226 HCRYPTKEY hContentEncryptKey;
4227 DWORD dwFlags;
4228} CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO;
4229
4230typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO {
4231 DWORD cbSize;
4232 DWORD dwRecipientIndex;
4233 CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
4234 CRYPT_DATA_BLOB EncryptedKey;
4235 DWORD dwFlags;
4236} CMSG_KEY_TRANS_ENCRYPT_INFO, *PCMSG_KEY_TRANS_ENCRYPT_INFO;
4237
4238typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
4239 DWORD cbSize;
4240 HCRYPTPROV hCryptProv;
4241 DWORD dwKeySpec;
4242 PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
4243 DWORD dwRecipientIndex;
4244} CMSG_CTRL_KEY_TRANS_DECRYPT_PARA, *PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA;
4245
4246typedef struct _CERT_STRONG_SIGN_SERIALIZED_INFO {
4247 DWORD dwFlags;
4248 WCHAR *pwszCNGSignHashAlgids;
4249 WCHAR *pwszCNGPubKeyMinBitLengths;
4250} CERT_STRONG_SIGN_SERIALIZED_INFO, *PCERT_STRONG_SIGN_SERIALIZED_INFO;
4251
4252typedef struct _CERT_STRONG_SIGN_PARA {
4253 DWORD cbSize;
4254 DWORD dwInfoChoice;
4255 union {
4256 void *pvInfo;
4257 CERT_STRONG_SIGN_SERIALIZED_INFO *pSerializedInfo;
4258 char *pszOID;
4259 } DUMMYUNIONNAME;
4260} CERT_STRONG_SIGN_PARA, *PCERT_STRONG_SIGN_PARA;
4261
4262#define CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE 1
4263#define CERT_STRONG_SIGN_OID_INFO_CHOICE 2
4264
4265#define CERT_STRONG_SIGN_ENABLE_CRL_CHECK 0x1
4266#define CERT_STRONG_SIGN_ENABLE_OCSP_CHECK 0x2
4267
4268#ifdef __REACTOS__
4269typedef BOOL
4270(WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(
4271 _Inout_ PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
4272 _In_ DWORD dwFlags,
4273 _Reserved_ void *pvReserved);
4274
4275typedef BOOL
4276(WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)(
4277 _In_ PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
4278 _In_ PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo,
4279 _Inout_ PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo,
4280 _In_ DWORD dwFlags,
4281 _Reserved_ void *pvReserved);
4282
4283typedef BOOL
4284(WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)(
4285 _In_ PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,
4286 _In_ PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara,
4287 _In_ DWORD dwFlags,
4288 _Reserved_ void *pvReserved,
4289 _Out_ HCRYPTKEY *phContentEncryptKey);
4290#else
4291typedef BOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(
4292 PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags,
4293 void *pvReserved);
4294
4295typedef BOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)(
4296 PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
4297 PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo,
4298 PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo,
4299 DWORD dwFlags, void *pvReserved);
4300
4301typedef BOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)(
4302 PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,
4303 PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags,
4304 void *pvReserved, HCRYPTKEY *phContentEncryptKey);
4305#endif
4306
4307/* CryptMsgGetAndVerifySigner flags */
4308#define CMSG_TRUSTED_SIGNER_FLAG 0x1
4309#define CMSG_SIGNER_ONLY_FLAG 0x2
4310#define CMSG_USE_SIGNER_INDEX_FLAG 0x4
4311
4312/* CryptMsgSignCTL flags */
4313#define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x00008000
4314
4315/* CryptMsgEncodeAndSignCTL flags */
4316#define CMSG_ENCODED_SORTED_CTL_FLAG 0x1
4317#define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2
4318
4319/* PFXImportCertStore flags */
4320#define CRYPT_USER_KEYSET 0x00001000
4321#define PKCS12_IMPORT_SILENT 0x00000040
4322#define PKCS12_PREFER_CNG_KSP 0x00000100
4323#define PKCS12_ALWAYS_CNG_KSP 0x00000200
4324#define PKCS12_ONLY_CERTIFICATES 0x00000400
4325#define PKCS12_ONLY_NOT_ENCRYPTED_CERTIFICATES 0x00000800
4326#define PKCS12_ALLOW_OVERWRITE_KEY 0x00004000
4327#define PKCS12_NO_PERSIST_KEY 0x00008000
4328#define PKCS12_VIRTUAL_ISOLATION_KEY 0x00010000
4329#define PKCS12_IMPORT_RESERVED_MASK 0xffff0000
4330/* PFXExportCertStore flags */
4331#define REPORT_NO_PRIVATE_KEY 0x00000001
4332#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x00000002
4333#define EXPORT_PRIVATE_KEYS 0x00000004
4334#define PKCS12_EXPORT_RESERVED_MASK 0xffff0000
4335
4336#define CRYPT_USERDATA 0x00000001
4337
4338/* function declarations */
4339#ifdef __REACTOS__
4340/* advapi32.dll */
4341WINADVAPI
4342BOOL
4343WINAPI
4344CryptAcquireContextA(
4345 _Out_ HCRYPTPROV *,
4346 _In_opt_ LPCSTR,
4347 _In_opt_ LPCSTR,
4348 _In_ DWORD,
4349 _In_ DWORD);
4350
4351WINADVAPI
4352BOOL
4353WINAPI
4354CryptAcquireContextW(
4355 _Out_ HCRYPTPROV *,
4356 _In_opt_ LPCWSTR,
4357 _In_opt_ LPCWSTR,
4358 _In_ DWORD,
4359 _In_ DWORD);
4360
4361#define CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext)
4362
4363WINADVAPI
4364BOOL
4365WINAPI
4366CryptGenRandom(
4367 _In_ HCRYPTPROV hProv,
4368 _In_ DWORD dwLen,
4369 _Inout_updates_bytes_(dwLen) BYTE *pbBuffer);
4370
4371WINADVAPI
4372BOOL
4373WINAPI
4374CryptContextAddRef(
4375 _In_ HCRYPTPROV,
4376 _Reserved_ DWORD *,
4377 _In_ DWORD);
4378
4379WINADVAPI
4380BOOL
4381WINAPI
4382CryptCreateHash(
4383 _In_ HCRYPTPROV,
4384 _In_ ALG_ID,
4385 _In_ HCRYPTKEY,
4386 _In_ DWORD,
4387 _Out_ HCRYPTHASH *);
4388
4389_Success_(return != 0)
4390WINADVAPI
4391BOOL
4392WINAPI
4393CryptDecrypt(
4394 _In_ HCRYPTKEY hKey,
4395 _In_ HCRYPTHASH hHash,
4396 _In_ BOOL Final,
4397 _In_ DWORD dwFlags,
4398 _Inout_updates_bytes_to_(*pdwDataLen, *pdwDataLen) BYTE *pbData,
4399 _Inout_ DWORD *pdwDataLen);
4400
4401WINADVAPI
4402BOOL
4403WINAPI
4404CryptDeriveKey(
4405 _In_ HCRYPTPROV,
4406 _In_ ALG_ID,
4407 _In_ HCRYPTHASH,
4408 _In_ DWORD,
4409 _Out_ HCRYPTKEY *);
4410
4411WINADVAPI BOOL WINAPI CryptDestroyHash(_In_ HCRYPTHASH);
4412WINADVAPI BOOL WINAPI CryptDestroyKey(_In_ HCRYPTKEY);
4413
4414WINADVAPI
4415BOOL
4416WINAPI
4417CryptDuplicateKey(
4418 _In_ HCRYPTKEY,
4419 _Reserved_ DWORD *,
4420 _In_ DWORD,
4421 _Out_ HCRYPTKEY *);
4422
4423WINADVAPI
4424BOOL
4425WINAPI
4426CryptDuplicateHash(
4427 _In_ HCRYPTHASH,
4428 _Reserved_ DWORD *,
4429 _In_ DWORD,
4430 _Out_ HCRYPTHASH *);
4431
4432_Success_(return != 0)
4433WINADVAPI
4434BOOL
4435WINAPI
4436CryptEncrypt(
4437 _In_ HCRYPTKEY hKey,
4438 _In_ HCRYPTHASH hHash,
4439 _In_ BOOL Final,
4440 _In_ DWORD dwFlags,
4441 _Inout_updates_bytes_to_opt_(dwBufLen, *pdwDataLen) BYTE *pbData,
4442 _Inout_ DWORD *pdwDataLen,
4443 _In_ DWORD dwBufLen);
4444
4445_Success_(return != 0)
4446WINADVAPI
4447BOOL
4448WINAPI
4449CryptEnumProvidersA(
4450 _In_ DWORD dwIndex,
4451 _Reserved_ DWORD *pdwReserved,
4452 _In_ DWORD dwFlags,
4453 _Out_ DWORD *pdwProvType,
4454 _Out_writes_bytes_to_opt_(*pcbProvName, *pcbProvName) LPSTR szProvName,
4455 _Inout_ DWORD *pcbProvName);
4456
4457_Success_(return != 0)
4458WINADVAPI
4459BOOL
4460WINAPI
4461CryptEnumProvidersW(
4462 _In_ DWORD dwIndex,
4463 _Reserved_ DWORD *pdwReserved,
4464 _In_ DWORD dwFlags,
4465 _Out_ DWORD *pdwProvType,
4466 _Out_writes_bytes_to_opt_(*pcbProvName, *pcbProvName) LPWSTR szProvName,
4467 _Inout_ DWORD *pcbProvName);
4468
4469#define CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders)
4470
4471_Success_(return != 0)
4472WINADVAPI
4473BOOL
4474WINAPI
4475CryptEnumProviderTypesA(
4476 _In_ DWORD dwIndex,
4477 _Reserved_ DWORD *pdwReserved,
4478 _In_ DWORD dwFlags,
4479 _Out_ DWORD *pdwProvType,
4480 _Out_writes_bytes_to_opt_(*pcbTypeName, *pcbTypeName) LPSTR szTypeName,
4481 _Inout_ DWORD *pcbTypeName);
4482
4483_Success_(return != 0)
4484WINADVAPI
4485BOOL
4486WINAPI
4487CryptEnumProviderTypesW(
4488 _In_ DWORD dwIndex,
4489 _Reserved_ DWORD *pdwReserved,
4490 _In_ DWORD dwFlags,
4491 _Out_ DWORD *pdwProvType,
4492 _Out_writes_bytes_to_opt_(*pcbTypeName, *pcbTypeName) LPWSTR szTypeName,
4493 _Inout_ DWORD *pcbTypeName);
4494
4495#define CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes)
4496
4497WINADVAPI
4498BOOL
4499WINAPI
4500CryptExportKey(
4501 _In_ HCRYPTKEY hKey,
4502 _In_ HCRYPTKEY hExpKey,
4503 _In_ DWORD dwBlobType,
4504 _In_ DWORD dwFlags,
4505 _Out_writes_bytes_to_opt_(*pdwDataLen, *pdwDataLen) BYTE *pbData,
4506 _Inout_ DWORD *pdwDataLen);
4507
4508WINADVAPI
4509BOOL
4510WINAPI
4511CryptGenKey(
4512 _In_ HCRYPTPROV,
4513 _In_ ALG_ID,
4514 _In_ DWORD,
4515 _Out_ HCRYPTKEY *);
4516
4517WINADVAPI
4518BOOL
4519WINAPI
4520CryptGetKeyParam(
4521 _In_ HCRYPTKEY hKey,
4522 _In_ DWORD dwParam,
4523 _Out_writes_bytes_to_opt_(*pdwDataLen, *pdwDataLen) BYTE *pbData,
4524 _Inout_ DWORD *pdwDataLen,
4525 _In_ DWORD dwFlags);
4526
4527WINADVAPI
4528BOOL
4529WINAPI
4530CryptGetHashParam(
4531 _In_ HCRYPTHASH hHash,
4532 _In_ DWORD dwParam,
4533 _Out_writes_bytes_to_opt_(*pdwDataLen, *pdwDataLen) BYTE *pbData,
4534 _Inout_ DWORD *pdwDataLen,
4535 _In_ DWORD dwFlags);
4536
4537WINADVAPI
4538BOOL
4539WINAPI
4540CryptGetProvParam(
4541 _In_ HCRYPTPROV hProv,
4542 _In_ DWORD dwParam,
4543 _Out_writes_bytes_to_opt_(*pdwDataLen, *pdwDataLen) BYTE *pbData,
4544 _Inout_ DWORD *pdwDataLen,
4545 _In_ DWORD dwFlags);
4546
4547_Success_(return != 0)
4548WINADVAPI
4549BOOL
4550WINAPI
4551CryptGetDefaultProviderA(
4552 _In_ DWORD dwProvType,
4553 _Reserved_ DWORD *pdwReserved,
4554 _In_ DWORD dwFlags,
4555 _Out_writes_bytes_to_opt_(*pcbProvName, *pcbProvName) LPSTR pszProvName,
4556 _Inout_ DWORD *pcbProvName);
4557
4558_Success_(return != 0)
4559WINADVAPI
4560BOOL
4561WINAPI
4562CryptGetDefaultProviderW(
4563 _In_ DWORD dwProvType,
4564 _Reserved_ DWORD *pdwReserved,
4565 _In_ DWORD dwFlags,
4566 _Out_writes_bytes_to_opt_(*pcbProvName, *pcbProvName) LPWSTR pszProvName,
4567 _Inout_ DWORD *pcbProvName);
4568
4569#define CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider)
4570
4571WINADVAPI BOOL WINAPI CryptGetUserKey(_In_ HCRYPTPROV, _In_ DWORD, _Out_ HCRYPTKEY *);
4572
4573WINADVAPI
4574BOOL
4575WINAPI
4576CryptHashData(
4577 _In_ HCRYPTHASH hHash,
4578 _In_reads_bytes_(dwDataLen) CONST BYTE *pbData,
4579 _In_ DWORD dwDataLen,
4580 _In_ DWORD dwFlags);
4581
4582WINADVAPI BOOL WINAPI CryptHashSessionKey(_In_ HCRYPTHASH, _In_ HCRYPTKEY, _In_ DWORD);
4583
4584WINADVAPI
4585BOOL
4586WINAPI
4587CryptImportKey(
4588 _In_ HCRYPTPROV hProv,
4589 _In_reads_bytes_(dwDataLen) CONST BYTE *pbData,
4590 _In_ DWORD dwDataLen,
4591 _In_ HCRYPTKEY hPubKey,
4592 _In_ DWORD dwFlags,
4593 _Out_ HCRYPTKEY *phKey);
4594
4595WINADVAPI BOOL WINAPI CryptReleaseContext(_In_ HCRYPTPROV, _In_ DWORD);
4596
4597WINADVAPI
4598BOOL
4599WINAPI
4600CryptSetHashParam(
4601 _In_ HCRYPTHASH,
4602 _In_ DWORD,
4603 _In_ CONST BYTE *,
4604 _In_ DWORD);
4605
4606WINADVAPI
4607BOOL
4608WINAPI
4609CryptSetKeyParam(
4610 _In_ HCRYPTKEY,
4611 _In_ DWORD,
4612 _In_ CONST BYTE *,
4613 _In_ DWORD);
4614
4615WINADVAPI BOOL WINAPI CryptSetProviderA(_In_ LPCSTR, _In_ DWORD);
4616WINADVAPI BOOL WINAPI CryptSetProviderW(_In_ LPCWSTR, _In_ DWORD);
4617
4618#define CryptSetProvider WINELIB_NAME_AW(CryptSetProvider)
4619
4620WINADVAPI
4621BOOL
4622WINAPI
4623CryptSetProviderExA(
4624 _In_ LPCSTR,
4625 _In_ DWORD,
4626 _Reserved_ DWORD *,
4627 _In_ DWORD);
4628
4629WINADVAPI
4630BOOL
4631WINAPI
4632CryptSetProviderExW(
4633 _In_ LPCWSTR,
4634 _In_ DWORD,
4635 _Reserved_ DWORD *,
4636 _In_ DWORD);
4637
4638#define CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx)
4639
4640WINADVAPI BOOL WINAPI CryptSetProvParam(_In_ HCRYPTPROV, _In_ DWORD, _In_ CONST BYTE *, _In_ DWORD);
4641
4642WINADVAPI
4643BOOL
4644WINAPI
4645CryptSignHashA(
4646 _In_ HCRYPTHASH hHash,
4647 _In_ DWORD dwKeySpec,
4648 _In_opt_ LPCSTR szDescription,
4649 _In_ DWORD dwFlags,
4650 _Out_writes_bytes_to_opt_(*pdwSigLen, *pdwSigLen) BYTE *pbSignature,
4651 _Inout_ DWORD *pdwSigLen);
4652
4653WINADVAPI
4654BOOL
4655WINAPI
4656CryptSignHashW(
4657 _In_ HCRYPTHASH hHash,
4658 _In_ DWORD dwKeySpec,
4659 _In_opt_ LPCWSTR szDescription,
4660 _In_ DWORD dwFlags,
4661 _Out_writes_bytes_to_opt_(*pdwSigLen, *pdwSigLen) BYTE *pbSignature,
4662 _Inout_ DWORD *pdwSigLen);
4663
4664#define CryptSignHash WINELIB_NAME_AW(CryptSignHash)
4665
4666WINADVAPI
4667BOOL
4668WINAPI
4669CryptVerifySignatureA(
4670 _In_ HCRYPTHASH hHash,
4671 _In_reads_bytes_(dwSigLen) CONST BYTE *pbSignature,
4672 _In_ DWORD dwSigLen,
4673 _In_ HCRYPTKEY hPubKey,
4674 _In_opt_ LPCSTR szDescription,
4675 _In_ DWORD dwFlags);
4676
4677WINADVAPI
4678BOOL
4679WINAPI
4680CryptVerifySignatureW(
4681 _In_ HCRYPTHASH hHash,
4682 _In_reads_bytes_(dwSigLen) CONST BYTE *pbSignature,
4683 _In_ DWORD dwSigLen,
4684 _In_ HCRYPTKEY hPubKey,
4685 _In_opt_ LPCWSTR szDescription,
4686 _In_ DWORD dwFlags);
4687
4688#define CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature)
4689
4690/* crypt32.dll functions */
4691LPVOID WINAPI CryptMemAlloc(_In_ ULONG cbSize) __WINE_ALLOC_SIZE(1);
4692LPVOID WINAPI CryptMemRealloc(_In_opt_ LPVOID pv, _In_ ULONG cbSize) __WINE_ALLOC_SIZE(2);
4693VOID WINAPI CryptMemFree(_In_opt_ LPVOID pv);
4694
4695_Success_(return != 0)
4696BOOL
4697WINAPI
4698CryptBinaryToStringA(
4699 _In_reads_bytes_(cbBinary) const BYTE *pbBinary,
4700 _In_ DWORD cbBinary,
4701 _In_ DWORD dwFlags,
4702 _Out_writes_to_opt_(*pcchString, *pcchString) LPSTR pszString,
4703 _Inout_ DWORD *pcchString);
4704
4705_Success_(return != 0)
4706BOOL
4707WINAPI
4708CryptBinaryToStringW(
4709 _In_reads_bytes_(cbBinary) const BYTE *pbBinary,
4710 _In_ DWORD cbBinary,
4711 _In_ DWORD dwFlags,
4712 _Out_writes_to_opt_(*pcchString, *pcchString) LPWSTR pszString,
4713 _Inout_ DWORD *pcchString);
4714
4715#define CryptBinaryToString WINELIB_NAME_AW(CryptBinaryToString)
4716
4717BOOL
4718WINAPI
4719CryptStringToBinaryA(
4720 _In_reads_(cchString) LPCSTR pszString,
4721 _In_ DWORD cchString,
4722 _In_ DWORD dwFlags,
4723 _Out_writes_bytes_to_opt_(*pcbBinary, *pcbBinary) BYTE *pbBinary,
4724 _Inout_ DWORD *pcbBinary,
4725 _Out_opt_ DWORD *pdwSkip,
4726 _Out_opt_ DWORD *pdwFlags);
4727
4728BOOL
4729WINAPI
4730CryptStringToBinaryW(
4731 _In_reads_(cchString) LPCWSTR pszString,
4732 _In_ DWORD cchString,
4733 _In_ DWORD dwFlags,
4734 _Out_writes_bytes_to_opt_(*pcbBinary, *pcbBinary) BYTE *pbBinary,
4735 _Inout_ DWORD *pcbBinary,
4736 _Out_opt_ DWORD *pdwSkip,
4737 _Out_opt_ DWORD *pdwFlags);
4738
4739#define CryptStringToBinary WINELIB_NAME_AW(CryptStringToBinary)
4740
4741BOOL
4742WINAPI
4743CryptCreateAsyncHandle(
4744 _In_ DWORD dwFlags,
4745 _Out_ PHCRYPTASYNC phAsync);
4746
4747BOOL
4748WINAPI
4749CryptSetAsyncParam(
4750 _In_ HCRYPTASYNC hAsync,
4751 _In_ LPSTR pszParamOid,
4752 _In_opt_ LPVOID pvParam,
4753 __callback PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);
4754
4755BOOL
4756WINAPI
4757CryptGetAsyncParam(
4758 _In_ HCRYPTASYNC hAsync,
4759 _In_ LPSTR pszParamOid,
4760 _Outptr_opt_result_maybenull_ LPVOID* ppvParam,
4761 _Outptr_opt_result_maybenull_ __callback PFN_CRYPT_ASYNC_PARAM_FREE_FUNC* ppfnFree);
4762
4763BOOL
4764WINAPI
4765CryptRegisterDefaultOIDFunction(
4766 _In_ DWORD,
4767 _In_ LPCSTR,
4768 _In_ DWORD,
4769 _In_ LPCWSTR);
4770
4771BOOL
4772WINAPI
4773CryptRegisterOIDFunction(
4774 _In_ DWORD,
4775 _In_ LPCSTR,
4776 _In_ LPCSTR,
4777 _In_opt_ LPCWSTR,
4778 _In_opt_ LPCSTR);
4779
4780BOOL
4781WINAPI
4782CryptGetOIDFunctionValue(
4783 _In_ DWORD dwEncodingType,
4784 _In_ LPCSTR pszFuncName,
4785 _In_ LPCSTR pszOID,
4786 _In_opt_ LPCWSTR pwszValueName,
4787 _Out_opt_ DWORD *pdwValueType,
4788 _Out_writes_bytes_to_opt_(*pcbValueData, *pcbValueData) BYTE *pbValueData,
4789 _Inout_opt_ DWORD *pcbValueData);
4790
4791BOOL
4792WINAPI
4793CryptSetOIDFunctionValue(
4794 _In_ DWORD dwEncodingType,
4795 _In_ LPCSTR pszFuncName,
4796 _In_ LPCSTR pszOID,
4797 _In_opt_ LPCWSTR pwszValueName,
4798 _In_ DWORD dwValueType,
4799 _In_reads_bytes_opt_(cbValueData) const BYTE *pbValueData,
4800 _In_ DWORD cbValueData);
4801
4802BOOL WINAPI CryptUnregisterDefaultOIDFunction(_In_ DWORD, _In_ LPCSTR, _In_ LPCWSTR);
4803BOOL WINAPI CryptUnregisterOIDFunction(_In_ DWORD, _In_ LPCSTR, _In_ LPCSTR);
4804
4805BOOL
4806WINAPI
4807CryptEnumOIDFunction(
4808 _In_ DWORD dwEncodingType,
4809 _In_opt_ LPCSTR pszFuncName,
4810 _In_opt_ LPCSTR pszOID,
4811 _In_ DWORD dwFlags,
4812 _Inout_opt_ void *pvArg,
4813 __callback PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);
4814
4815HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(_In_ LPCSTR, _In_ DWORD);
4816
4817_Success_(return != 0)
4818BOOL
4819WINAPI
4820CryptGetDefaultOIDDllList(
4821 _In_ HCRYPTOIDFUNCSET hFuncSet,
4822 _In_ DWORD dwEncodingType,
4823 _Out_writes_to_opt_(*pcchDllList, *pcchDllList) _Post_ _NullNull_terminated_ WCHAR *pwszDllList,
4824 _Inout_ DWORD *pcchDllList);
4825
4826_Success_(return != 0)
4827BOOL
4828WINAPI
4829CryptGetDefaultOIDFunctionAddress(
4830 _In_ HCRYPTOIDFUNCSET hFuncSet,
4831 _In_ DWORD dwEncodingType,
4832 _In_opt_ LPCWSTR pwszDll,
4833 _In_ DWORD dwFlags,
4834 _Outptr_ void **ppvFuncAddr,
4835 _Inout_ HCRYPTOIDFUNCADDR *phFuncAddr);
4836
4837_Success_(return != 0)
4838BOOL
4839WINAPI
4840CryptGetOIDFunctionAddress(
4841 _In_ HCRYPTOIDFUNCSET hFuncSet,
4842 _In_ DWORD dwEncodingType,
4843 _In_ LPCSTR pszOID,
4844 _In_ DWORD dwFlags,
4845 _Outptr_ void **ppvFuncAddr,
4846 _Out_ HCRYPTOIDFUNCADDR *phFuncAddr);
4847
4848BOOL
4849WINAPI
4850CryptFreeOIDFunctionAddress(
4851 _In_ HCRYPTOIDFUNCADDR hFuncAddr,
4852 _In_ DWORD dwFlags);
4853
4854BOOL
4855WINAPI
4856CryptInstallOIDFunctionAddress(
4857 _In_opt_ HMODULE hModule,
4858 _In_ DWORD dwEncodingType,
4859 _In_ LPCSTR pszFuncName,
4860 _In_ DWORD cFuncEntry,
4861 _In_reads_(cFuncEntry) const CRYPT_OID_FUNC_ENTRY rgFuncEntry[],
4862 _In_ DWORD dwFlags);
4863
4864BOOL
4865WINAPI
4866CryptInstallDefaultContext(
4867 _In_ HCRYPTPROV hCryptProv,
4868 _In_ DWORD dwDefaultType,
4869 _In_opt_ const void *pvDefaultPara,
4870 _In_ DWORD dwFlags,
4871 _Reserved_ void *pvReserved,
4872 _Out_ HCRYPTDEFAULTCONTEXT *phDefaultContext);
4873
4874BOOL
4875WINAPI
4876CryptUninstallDefaultContext(
4877 _In_opt_ HCRYPTDEFAULTCONTEXT hDefaultContext,
4878 _In_ DWORD dwFlags,
4879 _Reserved_ void *pvReserved);
4880
4881BOOL
4882WINAPI
4883CryptEnumOIDInfo(
4884 _In_ DWORD dwGroupId,
4885 _In_ DWORD dwFlags,
4886 _Inout_opt_ void *pvArg,
4887 __callback PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);
4888
4889PCCRYPT_OID_INFO
4890WINAPI
4891CryptFindOIDInfo(
4892 _In_ DWORD dwKeyType,
4893 _In_ void *pvKey,
4894 _In_ DWORD dwGroupId);
4895
4896BOOL WINAPI CryptRegisterOIDInfo(_In_ PCCRYPT_OID_INFO pInfo, _In_ DWORD dwFlags);
4897BOOL WINAPI CryptUnregisterOIDInfo(_In_ PCCRYPT_OID_INFO pInfo);
4898
4899LPCWSTR WINAPI CryptFindLocalizedName(_In_ LPCWSTR pwszCryptName);
4900
4901LPCSTR WINAPI CertAlgIdToOID(_In_ DWORD dwAlgId);
4902DWORD WINAPI CertOIDToAlgId(_In_ LPCSTR pszObjId);
4903
4904/* cert store functions */
4905_Must_inspect_result_
4906HCERTSTORE
4907WINAPI
4908CertOpenStore(
4909 _In_ LPCSTR lpszStoreProvider,
4910 _In_ DWORD dwEncodingType,
4911 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
4912 _In_ DWORD dwFlags,
4913 _In_opt_ const void *pvPara);
4914
4915HCERTSTORE
4916WINAPI
4917CertOpenSystemStoreA(
4918 _In_opt_ HCRYPTPROV_LEGACY hProv,
4919 _In_ LPCSTR szSubsystemProtocol);
4920
4921HCERTSTORE
4922WINAPI
4923CertOpenSystemStoreW(
4924 _In_opt_ HCRYPTPROV_LEGACY hProv,
4925 _In_ LPCWSTR szSubSystemProtocol);
4926
4927#define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore)
4928
4929PCCERT_CONTEXT
4930WINAPI
4931CertEnumCertificatesInStore(
4932 _In_ HCERTSTORE hCertStore,
4933 _In_opt_ PCCERT_CONTEXT pPrev);
4934
4935PCCRL_CONTEXT
4936WINAPI
4937CertEnumCRLsInStore(
4938 _In_ HCERTSTORE hCertStore,
4939 _In_opt_ PCCRL_CONTEXT pPrevCrlContext);
4940
4941PCCTL_CONTEXT
4942WINAPI
4943CertEnumCTLsInStore(
4944 _In_ HCERTSTORE hCertStore,
4945 _In_opt_ PCCTL_CONTEXT pPrevCtlContext);
4946
4947BOOL
4948WINAPI
4949CertEnumSystemStoreLocation(
4950 _In_ DWORD dwFlags,
4951 _Inout_opt_ void *pvArg,
4952 __callback PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
4953
4954BOOL
4955WINAPI
4956CertEnumSystemStore(
4957 _In_ DWORD dwFlags,
4958 _In_opt_ void *pvSystemStoreLocationPara,
4959 _Inout_opt_ void *pvArg,
4960 __callback PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
4961
4962BOOL
4963WINAPI
4964CertRegisterSystemStore(
4965 _In_ const void *pvSystemStore,
4966 _In_ DWORD dwFlags,
4967 _In_opt_ PCERT_SYSTEM_STORE_INFO pStoreInfo,
4968 _Reserved_ void *pvReserved);
4969
4970BOOL
4971WINAPI
4972CertUnregisterSystemStore(
4973 _In_ const void *pvSystemStore,
4974 _In_ DWORD dwFlags);
4975
4976BOOL
4977WINAPI
4978CertEnumPhysicalStore(
4979 _In_ const void *pvSystemStore,
4980 _In_ DWORD dwFlags,
4981 _Inout_opt_ void *pvArg,
4982 __callback PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
4983
4984BOOL
4985WINAPI
4986CertRegisterPhysicalStore(
4987 _In_ const void *pvSystemStore,
4988 _In_ DWORD dwFlags,
4989 _In_ LPCWSTR pwszStoreName,
4990 _In_ PCERT_PHYSICAL_STORE_INFO pStoreInfo,
4991 _Reserved_ void *pvReserved);
4992
4993BOOL
4994WINAPI
4995CertSaveStore(
4996 _In_ HCERTSTORE hCertStore,
4997 _In_ DWORD dwEncodingType,
4998 _In_ DWORD dwSaveAs,
4999 _In_ DWORD dwSaveTo,
5000 _Inout_ void *pvSaveToPara,
5001 _In_ DWORD dwFlags);
5002
5003BOOL
5004WINAPI
5005CertAddStoreToCollection(
5006 _In_ HCERTSTORE hCollectionStore,
5007 _In_opt_ HCERTSTORE hSiblingStore,
5008 _In_ DWORD dwUpdateFlags,
5009 _In_ DWORD dwPriority);
5010
5011void
5012WINAPI
5013CertRemoveStoreFromCollection(
5014 _In_ HCERTSTORE hCollectionStore,
5015 _In_ HCERTSTORE hSiblingStore);
5016
5017_Success_(return != 0)
5018BOOL
5019WINAPI
5020CertCreateCertificateChainEngine(
5021 _In_ PCERT_CHAIN_ENGINE_CONFIG pConfig,
5022 _Out_ HCERTCHAINENGINE *phChainEngine);
5023
5024BOOL WINAPI CertResyncCertificateChainEngine(_In_opt_ HCERTCHAINENGINE hChainEngine);
5025
5026VOID WINAPI CertFreeCertificateChainEngine(_In_opt_ HCERTCHAINENGINE hChainEngine);
5027
5028_Success_(return != 0)
5029BOOL
5030WINAPI
5031CertGetCertificateChain(
5032 _In_opt_ HCERTCHAINENGINE hChainEngine,
5033 _In_ PCCERT_CONTEXT pCertContext,
5034 _In_opt_ LPFILETIME pTime,
5035 _In_opt_ HCERTSTORE hAdditionalStore,
5036 _In_ PCERT_CHAIN_PARA pChainPara,
5037 _In_ DWORD dwFlags,
5038 _Reserved_ LPVOID pvReserved,
5039 _Out_ PCCERT_CHAIN_CONTEXT* ppChainContext);
5040
5041PCCERT_CHAIN_CONTEXT
5042WINAPI
5043CertDuplicateCertificateChain(
5044 _In_ PCCERT_CHAIN_CONTEXT pChainContext);
5045
5046VOID WINAPI CertFreeCertificateChain(_In_ PCCERT_CHAIN_CONTEXT pChainContext);
5047
5048PCCERT_CHAIN_CONTEXT
5049WINAPI
5050CertFindChainInStore(
5051 _In_ HCERTSTORE hCertStore,
5052 _In_ DWORD dwCertEncodingType,
5053 _In_ DWORD dwFindFlags,
5054 _In_ DWORD dwFindType,
5055 _In_opt_ const void *pvFindPara,
5056 _In_opt_ PCCERT_CHAIN_CONTEXT pPrevChainContext);
5057
5058BOOL
5059WINAPI
5060CertVerifyCertificateChainPolicy(
5061 _In_ LPCSTR pszPolicyOID,
5062 _In_ PCCERT_CHAIN_CONTEXT pChainContext,
5063 _In_ PCERT_CHAIN_POLICY_PARA pPolicyPara,
5064 _Inout_ PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
5065
5066DWORD
5067WINAPI
5068CertEnumCertificateContextProperties(
5069 _In_ PCCERT_CONTEXT pCertContext,
5070 _In_ DWORD dwPropId);
5071
5072BOOL
5073WINAPI
5074CertGetCertificateContextProperty(
5075 _In_ PCCERT_CONTEXT pCertContext,
5076 _In_ DWORD dwPropId,
5077 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) void *pvData,
5078 _Inout_ DWORD *pcbData);
5079
5080BOOL
5081WINAPI
5082CertSetCertificateContextProperty(
5083 _In_ PCCERT_CONTEXT pCertContext,
5084 _In_ DWORD dwPropId,
5085 _In_ DWORD dwFlags,
5086 _In_opt_ const void *pvData);
5087
5088DWORD
5089WINAPI
5090CertEnumCRLContextProperties(
5091 _In_ PCCRL_CONTEXT pCRLContext,
5092 _In_ DWORD dwPropId);
5093
5094BOOL
5095WINAPI
5096CertGetCRLContextProperty(
5097 _In_ PCCRL_CONTEXT pCrlContext,
5098 _In_ DWORD dwPropId,
5099 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) void *pvData,
5100 _Inout_ DWORD *pcbData);
5101
5102BOOL
5103WINAPI
5104CertSetCRLContextProperty(
5105 _In_ PCCRL_CONTEXT pCrlContext,
5106 _In_ DWORD dwPropId,
5107 _In_ DWORD dwFlags,
5108 _In_opt_ const void *pvData);
5109
5110DWORD
5111WINAPI
5112CertEnumCTLContextProperties(
5113 _In_ PCCTL_CONTEXT pCTLContext,
5114 _In_ DWORD dwPropId);
5115
5116BOOL
5117WINAPI
5118CertEnumSubjectInSortedCTL(
5119 _In_ PCCTL_CONTEXT pCtlContext,
5120 _Inout_ void **ppvNextSubject,
5121 _Out_opt_ PCRYPT_DER_BLOB pSubjectIdentifier,
5122 _Out_opt_ PCRYPT_DER_BLOB pEncodedAttributes);
5123
5124BOOL
5125WINAPI
5126CertGetCTLContextProperty(
5127 _In_ PCCTL_CONTEXT pCtlContext,
5128 _In_ DWORD dwPropId,
5129 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) void *pvData,
5130 _Inout_ DWORD *pcbData);
5131
5132BOOL
5133WINAPI
5134CertSetCTLContextProperty(
5135 _In_ PCCTL_CONTEXT pCtlContext,
5136 _In_ DWORD dwPropId,
5137 _In_ DWORD dwFlags,
5138 _In_opt_ const void *pvData);
5139
5140_Success_(return != 0)
5141BOOL
5142WINAPI
5143CertGetStoreProperty(
5144 _In_ HCERTSTORE hCertStore,
5145 _In_ DWORD dwPropId,
5146 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) void *pvData,
5147 _Inout_ DWORD *pcbData);
5148
5149BOOL
5150WINAPI
5151CertSetStoreProperty(
5152 _In_ HCERTSTORE hCertStore,
5153 _In_ DWORD dwPropId,
5154 _In_ DWORD dwFlags,
5155 _In_opt_ const void *pvData);
5156
5157BOOL
5158WINAPI
5159CertControlStore(
5160 _In_ HCERTSTORE hCertStore,
5161 _In_ DWORD dwFlags,
5162 _In_ DWORD dwCtrlType,
5163 _In_opt_ void const *pvCtrlPara);
5164
5165HCERTSTORE WINAPI CertDuplicateStore(_In_ HCERTSTORE hCertStore);
5166
5167BOOL WINAPI CertCloseStore(_In_opt_ HCERTSTORE hCertStore, _In_ DWORD dwFlags);
5168
5169BOOL WINAPI CertFreeCertificateContext(_In_opt_ PCCERT_CONTEXT pCertContext);
5170
5171BOOL WINAPI CertFreeCRLContext(_In_opt_ PCCRL_CONTEXT pCrlContext);
5172
5173BOOL WINAPI CertFreeCTLContext(_In_opt_ PCCTL_CONTEXT pCtlContext);
5174
5175_Success_(return != 0)
5176BOOL
5177WINAPI
5178CertAddCertificateContextToStore(
5179 _In_opt_ HCERTSTORE hCertStore,
5180 _In_ PCCERT_CONTEXT pCertContext,
5181 _In_ DWORD dwAddDisposition,
5182 _Outptr_opt_ PCCERT_CONTEXT *ppStoreContext);
5183
5184_Success_(return != 0)
5185BOOL
5186WINAPI
5187CertAddCRLContextToStore(
5188 _In_opt_ HCERTSTORE hCertStore,
5189 _In_ PCCRL_CONTEXT pCrlContext,
5190 _In_ DWORD dwAddDisposition,
5191 _Outptr_opt_ PCCRL_CONTEXT *ppStoreContext);
5192
5193_Success_(return != 0)
5194BOOL
5195WINAPI
5196CertAddCTLContextToStore(
5197 _In_opt_ HCERTSTORE hCertStore,
5198 _In_ PCCTL_CONTEXT pCtlContext,
5199 _In_ DWORD dwAddDisposition,
5200 _Outptr_opt_ PCCTL_CONTEXT *ppStoreContext);
5201
5202_Success_(return != 0)
5203BOOL
5204WINAPI
5205CertAddCertificateLinkToStore(
5206 _In_ HCERTSTORE hCertStore,
5207 _In_ PCCERT_CONTEXT pCertContext,
5208 _In_ DWORD dwAddDisposition,
5209 _Outptr_opt_ PCCERT_CONTEXT *ppStoreContext);
5210
5211_Success_(return != 0)
5212BOOL
5213WINAPI
5214CertAddCRLLinkToStore(
5215 _In_ HCERTSTORE hCertStore,
5216 _In_ PCCRL_CONTEXT pCrlContext,
5217 _In_ DWORD dwAddDisposition,
5218 _Outptr_opt_ PCCRL_CONTEXT *ppStoreContext);
5219
5220_Success_(return != 0)
5221BOOL
5222WINAPI
5223CertAddCTLLinkToStore(
5224 _In_ HCERTSTORE hCertStore,
5225 _In_ PCCTL_CONTEXT pCtlContext,
5226 _In_ DWORD dwAddDisposition,
5227 _Outptr_opt_ PCCTL_CONTEXT *ppStoreContext);
5228
5229_Success_(return != 0)
5230BOOL
5231WINAPI
5232CertAddEncodedCertificateToStore(
5233 _In_opt_ HCERTSTORE hCertStore,
5234 _In_ DWORD dwCertEncodingType,
5235 _In_reads_bytes_(cbCertEncoded) const BYTE *pbCertEncoded,
5236 _In_ DWORD cbCertEncoded,
5237 _In_ DWORD dwAddDisposition,
5238 _Outptr_opt_ PCCERT_CONTEXT *ppCertContext);
5239
5240BOOL
5241WINAPI
5242CertAddEncodedCertificateToSystemStoreA(
5243 _In_ LPCSTR szCertStoreName,
5244 _In_reads_bytes_(cbCertEncoded) const BYTE *pbCertEncoded,
5245 _In_ DWORD cbCertEncoded);
5246
5247BOOL
5248WINAPI
5249CertAddEncodedCertificateToSystemStoreW(
5250 _In_ LPCWSTR szCertStoreName,
5251 _In_reads_bytes_(cbCertEncoded) const BYTE *pbCertEncoded,
5252 _In_ DWORD cbCertEncoded);
5253
5254#define CertAddEncodedCertificateToSystemStore \
5255 WINELIB_NAME_AW(CertAddEncodedCertificateToSystemStore)
5256
5257_Success_(return != 0)
5258BOOL
5259WINAPI
5260CertAddEncodedCRLToStore(
5261 _In_opt_ HCERTSTORE hCertStore,
5262 _In_ DWORD dwCertEncodingType,
5263 _In_reads_bytes_(cbCrlEncoded) const BYTE *pbCrlEncoded,
5264 _In_ DWORD cbCrlEncoded,
5265 _In_ DWORD dwAddDisposition,
5266 _Outptr_opt_ PCCRL_CONTEXT *ppCrlContext);
5267
5268_Success_(return != 0)
5269BOOL
5270WINAPI
5271CertAddEncodedCTLToStore(
5272 _In_opt_ HCERTSTORE hCertStore,
5273 _In_ DWORD dwMsgAndCertEncodingType,
5274 _In_reads_bytes_(cbCtlEncoded) const BYTE *pbCtlEncoded,
5275 _In_ DWORD cbCtlEncoded,
5276 _In_ DWORD dwAddDisposition,
5277 _Outptr_opt_ PCCTL_CONTEXT *ppCtlContext);
5278
5279_Success_(return != 0)
5280BOOL
5281WINAPI
5282CertAddSerializedElementToStore(
5283 _In_opt_ HCERTSTORE hCertStore,
5284 _In_reads_bytes_(cbElement) const BYTE *pbElement,
5285 _In_ DWORD cbElement,
5286 _In_ DWORD dwAddDisposition,
5287 _In_ DWORD dwFlags,
5288 _In_ DWORD dwContextTypeFlags,
5289 _Out_opt_ DWORD *pdwContextType,
5290 _Outptr_opt_ const void **ppvContext);
5291
5292BOOL
5293WINAPI
5294CertCompareCertificate(
5295 _In_ DWORD dwCertEncodingType,
5296 _In_ PCERT_INFO pCertId1,
5297 _In_ PCERT_INFO pCertId2);
5298
5299BOOL
5300WINAPI
5301CertCompareCertificateName(
5302 _In_ DWORD dwCertEncodingType,
5303 _In_ PCERT_NAME_BLOB pCertName1,
5304 _In_ PCERT_NAME_BLOB pCertName2);
5305
5306BOOL
5307WINAPI
5308CertCompareIntegerBlob(
5309 _In_ PCRYPT_INTEGER_BLOB pInt1,
5310 _In_ PCRYPT_INTEGER_BLOB pInt2);
5311
5312BOOL
5313WINAPI
5314CertComparePublicKeyInfo(
5315 _In_ DWORD dwCertEncodingType,
5316 _In_ PCERT_PUBLIC_KEY_INFO pPublicKey1,
5317 _In_ PCERT_PUBLIC_KEY_INFO pPublicKey2);
5318
5319DWORD
5320WINAPI
5321CertGetPublicKeyLength(
5322 _In_ DWORD dwCertEncodingType,
5323 _In_ PCERT_PUBLIC_KEY_INFO pPublicKey);
5324
5325const void *
5326WINAPI
5327CertCreateContext(
5328 _In_ DWORD dwContextType,
5329 _In_ DWORD dwEncodingType,
5330 _In_reads_bytes_(cbEncoded) const BYTE *pbEncoded,
5331 _In_ DWORD cbEncoded,
5332 _In_ DWORD dwFlags,
5333 _In_opt_ PCERT_CREATE_CONTEXT_PARA pCreatePara);
5334
5335PCCERT_CONTEXT
5336WINAPI
5337CertCreateCertificateContext(
5338 _In_ DWORD dwCertEncodingType,
5339 _In_reads_bytes_(cbCertEncoded) const BYTE *pbCertEncoded,
5340 _In_ DWORD cbCertEncoded);
5341
5342PCCRL_CONTEXT
5343WINAPI
5344CertCreateCRLContext(
5345 _In_ DWORD dwCertEncodingType,
5346 _In_reads_bytes_(cbCrlEncoded) const BYTE *pbCrlEncoded,
5347 _In_ DWORD cbCrlEncoded);
5348
5349PCCTL_CONTEXT
5350WINAPI
5351CertCreateCTLContext(
5352 _In_ DWORD dwMsgAndCertEncodingType,
5353 _In_reads_bytes_(cbCtlEncoded) const BYTE *pbCtlEncoded,
5354 _In_ DWORD cbCtlEncoded);
5355
5356PCCERT_CONTEXT
5357WINAPI
5358CertCreateSelfSignCertificate(
5359 _In_opt_ HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv,
5360 _In_ PCERT_NAME_BLOB pSubjectIssuerBlob,
5361 _In_ DWORD dwFlags,
5362 _In_opt_ PCRYPT_KEY_PROV_INFO pKeyProvInfo,
5363 _In_opt_ PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
5364 _In_opt_ PSYSTEMTIME pStartTime,
5365 _In_opt_ PSYSTEMTIME pEndTime,
5366 _In_opt_ PCERT_EXTENSIONS pExtensions);
5367
5368BOOL WINAPI CertDeleteCertificateFromStore(_In_ PCCERT_CONTEXT pCertContext);
5369
5370BOOL WINAPI CertDeleteCRLFromStore(_In_ PCCRL_CONTEXT pCrlContext);
5371
5372BOOL WINAPI CertDeleteCTLFromStore(_In_ PCCTL_CONTEXT pCtlContext);
5373
5374PCCERT_CONTEXT
5375WINAPI
5376CertDuplicateCertificateContext(
5377 _In_opt_ PCCERT_CONTEXT pCertContext);
5378
5379PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(_In_opt_ PCCRL_CONTEXT pCrlContext);
5380
5381PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(_In_opt_ PCCTL_CONTEXT pCtlContext);
5382
5383PCCERT_CONTEXT
5384WINAPI
5385CertFindCertificateInStore(
5386 _In_ HCERTSTORE hCertStore,
5387 _In_ DWORD dwCertEncodingType,
5388 _In_ DWORD dwFindFlags,
5389 _In_ DWORD dwFindType,
5390 _In_opt_ const void *pvFindPara,
5391 _In_opt_ PCCERT_CONTEXT pPrevCertContext);
5392
5393PCCRL_CONTEXT
5394WINAPI
5395CertFindCRLInStore(
5396 _In_ HCERTSTORE hCertStore,
5397 _In_ DWORD dwCertEncodingType,
5398 _In_ DWORD dwFindFlags,
5399 _In_ DWORD dwFindType,
5400 _In_opt_ const void *pvFindPara,
5401 _In_opt_ PCCRL_CONTEXT pPrevCrlContext);
5402
5403PCCTL_CONTEXT
5404WINAPI
5405CertFindCTLInStore(
5406 _In_ HCERTSTORE hCertStore,
5407 _In_ DWORD dwMsgAndCertEncodingType,
5408 _In_ DWORD dwFindFlags,
5409 _In_ DWORD dwFindType,
5410 _In_opt_ const void *pvFindPara,
5411 _In_opt_ PCCTL_CONTEXT pPrevCtlContext);
5412
5413PCCERT_CONTEXT
5414WINAPI
5415CertGetIssuerCertificateFromStore(
5416 _In_ HCERTSTORE hCertStore,
5417 _In_ PCCERT_CONTEXT pSubjectContext,
5418 _In_opt_ PCCERT_CONTEXT pPrevIssuerContext,
5419 _Inout_ DWORD *pdwFlags);
5420
5421PCCERT_CONTEXT
5422WINAPI
5423CertGetSubjectCertificateFromStore(
5424 _In_ HCERTSTORE hCertStore,
5425 _In_ DWORD dwCertEncodingType,
5426 _In_ PCERT_INFO pCertId);
5427
5428PCCRL_CONTEXT
5429WINAPI
5430CertGetCRLFromStore(
5431 _In_ HCERTSTORE hCertStore,
5432 _In_opt_ PCCERT_CONTEXT pIssuerContext,
5433 _In_opt_ PCCRL_CONTEXT pPrevCrlContext,
5434 _Inout_ DWORD *pdwFlags);
5435
5436BOOL
5437WINAPI
5438CertSerializeCertificateStoreElement(
5439 _In_ PCCERT_CONTEXT pCertContext,
5440 _In_ DWORD dwFlags,
5441 _Out_writes_bytes_to_opt_(*pcbElement, *pcbElement) BYTE *pbElement,
5442 _Inout_ DWORD *pcbElement);
5443
5444BOOL
5445WINAPI
5446CertSerializeCRLStoreElement(
5447 _In_ PCCRL_CONTEXT pCrlContext,
5448 _In_ DWORD dwFlags,
5449 _Out_writes_bytes_to_opt_(*pcbElement, *pcbElement) BYTE *pbElement,
5450 _Inout_ DWORD *pcbElement);
5451
5452BOOL
5453WINAPI
5454CertSerializeCTLStoreElement(
5455 _In_ PCCTL_CONTEXT pCtlContext,
5456 _In_ DWORD dwFlags,
5457 _Out_writes_bytes_to_opt_(*pcbElement, *pcbElement) BYTE *pbElement,
5458 _Inout_ DWORD *pcbElement);
5459
5460BOOL
5461WINAPI
5462CertGetIntendedKeyUsage(
5463 _In_ DWORD dwCertEncodingType,
5464 _In_ PCERT_INFO pCertInfo,
5465 _Out_writes_bytes_all_(cbKeyUsage) BYTE *pbKeyUsage,
5466 _In_ DWORD cbKeyUsage);
5467
5468BOOL
5469WINAPI
5470CertGetEnhancedKeyUsage(
5471 _In_ PCCERT_CONTEXT pCertContext,
5472 _In_ DWORD dwFlags,
5473 _Out_writes_bytes_to_opt_(*pcbUsage, *pcbUsage) PCERT_ENHKEY_USAGE pUsage,
5474 _Inout_ DWORD *pcbUsage);
5475
5476BOOL
5477WINAPI
5478CertSetEnhancedKeyUsage(
5479 _In_ PCCERT_CONTEXT pCertContext,
5480 _In_opt_ PCERT_ENHKEY_USAGE pUsage);
5481
5482BOOL
5483WINAPI
5484CertAddEnhancedKeyUsageIdentifier(
5485 _In_ PCCERT_CONTEXT pCertContext,
5486 _In_ LPCSTR pszUsageIdentifier);
5487
5488BOOL
5489WINAPI
5490CertRemoveEnhancedKeyUsageIdentifier(
5491 _In_ PCCERT_CONTEXT pCertContext,
5492 _In_ LPCSTR pszUsageIdentifier);
5493
5494_Success_(return != 0)
5495BOOL
5496WINAPI
5497CertGetValidUsages(
5498 _In_ DWORD cCerts,
5499 _In_reads_(cCerts) PCCERT_CONTEXT *rghCerts,
5500 _Out_ int *cNumOIDs,
5501 _Out_writes_bytes_to_opt_(*pcbOIDs, *pcbOIDs) LPSTR *rghOIDs,
5502 _Inout_ DWORD *pcbOIDs);
5503
5504BOOL
5505WINAPI
5506CryptEncodeObject(
5507 _In_ DWORD dwCertEncodingType,
5508 _In_ LPCSTR lpszStructType,
5509 _In_ const void *pvStructInfo,
5510 _Out_writes_bytes_to_opt_(*pcbEncoded, *pcbEncoded) BYTE *pbEncoded,
5511 _Inout_ DWORD *pcbEncoded);
5512
5513BOOL
5514WINAPI
5515CryptEncodeObjectEx(
5516 _In_ DWORD dwCertEncodingType,
5517 _In_ LPCSTR lpszStructType,
5518 _In_ const void *pvStructInfo,
5519 _In_ DWORD dwFlags,
5520 _In_opt_ PCRYPT_ENCODE_PARA pEncodePara,
5521 _Out_opt_ void *pvEncoded,
5522 _Inout_ DWORD *pcbEncoded);
5523
5524BOOL
5525WINAPI
5526CryptDecodeObject(
5527 _In_ DWORD dwCertEncodingType,
5528 _In_ LPCSTR lpszStructType,
5529 _In_reads_bytes_(cbEncoded) const BYTE *pbEncoded,
5530 _In_ DWORD cbEncoded,
5531 _In_ DWORD dwFlags,
5532 _Out_writes_bytes_to_opt_(*pcbStructInfo, *pcbStructInfo) void *pvStructInfo,
5533 _Inout_ DWORD *pcbStructInfo);
5534
5535BOOL
5536WINAPI
5537CryptDecodeObjectEx(
5538 _In_ DWORD dwCertEncodingType,
5539 _In_ LPCSTR lpszStructType,
5540 _In_reads_bytes_(cbEncoded) const BYTE *pbEncoded,
5541 _In_ DWORD cbEncoded,
5542 _In_ DWORD dwFlags,
5543 _In_opt_ PCRYPT_DECODE_PARA pDecodePara,
5544 _Out_opt_ void *pvStructInfo,
5545 _Inout_ DWORD *pcbStructInfo);
5546
5547BOOL
5548WINAPI
5549CryptFormatObject(
5550 _In_ DWORD dwCertEncodingType,
5551 _In_ DWORD dwFormatType,
5552 _In_ DWORD dwFormatStrType,
5553 _In_opt_ void *pFormatStruct,
5554 _In_opt_ LPCSTR lpszStructType,
5555 _In_reads_bytes_(cbEncoded) const BYTE *pbEncoded,
5556 _In_ DWORD cbEncoded,
5557 _At_((WCHAR *) pbFormat, _Out_writes_bytes_to_opt_(*pcbFormat, *pcbFormat)) void *pbFormat,
5558 _Inout_ DWORD *pcbFormat);
5559
5560BOOL
5561WINAPI
5562CryptHashCertificate(
5563 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
5564 _In_ ALG_ID Algid,
5565 _In_ DWORD dwFlags,
5566 _In_reads_bytes_(cbEncoded) const BYTE *pbEncoded,
5567 _In_ DWORD cbEncoded,
5568 _Out_writes_bytes_to_opt_(*pcbComputedHash, *pcbComputedHash) BYTE *pbComputedHash,
5569 _Inout_ DWORD *pcbComputedHash);
5570
5571BOOL
5572WINAPI
5573CryptHashPublicKeyInfo(
5574 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
5575 _In_ ALG_ID Algid,
5576 _In_ DWORD dwFlags,
5577 _In_ DWORD dwCertEncodingType,
5578 _In_ PCERT_PUBLIC_KEY_INFO pInfo,
5579 _Out_writes_bytes_to_opt_(*pcbComputedHash, *pcbComputedHash) BYTE *pbComputedHash,
5580 _Inout_ DWORD *pcbComputedHash);
5581
5582BOOL
5583WINAPI
5584CryptHashToBeSigned(
5585 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
5586 _In_ DWORD dwCertEncodingType,
5587 _In_reads_bytes_(cbEncoded) const BYTE *pbEncoded,
5588 _In_ DWORD cbEncoded,
5589 _Out_writes_bytes_to_opt_(*pcbComputedHash, *pcbComputedHash) BYTE *pbComputedHash,
5590 _Inout_ DWORD *pcbComputedHash);
5591
5592BOOL
5593WINAPI
5594CryptQueryObject(
5595 _In_ DWORD dwObjectType,
5596 _In_ const void *pvObject,
5597 _In_ DWORD dwExpectedContentTypeFlags,
5598 _In_ DWORD dwExpectedFormatTypeFlags,
5599 _In_ DWORD dwFlags,
5600 _Out_opt_ DWORD *pdwMsgAndCertEncodingType,
5601 _Out_opt_ DWORD *pdwContentType,
5602 _Out_opt_ DWORD *pdwFormatType,
5603 _Out_opt_ HCERTSTORE *phCertStore,
5604 _Out_opt_ HCRYPTMSG *phMsg,
5605 _Outptr_opt_result_maybenull_ const void **ppvContext);
5606
5607BOOL
5608WINAPI
5609CryptSignCertificate(
5610 _In_opt_ HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
5611 _In_opt_ DWORD dwKeySpec,
5612 _In_ DWORD dwCertEncodingType,
5613 _In_reads_bytes_(cbEncodedToBeSigned) const BYTE *pbEncodedToBeSigned,
5614 _In_ DWORD cbEncodedToBeSigned,
5615 _In_ PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
5616 _In_opt_ const void *pvHashAuxInfo,
5617 _Out_writes_bytes_to_opt_(*pcbSignature, *pcbSignature) BYTE *pbSignature,
5618 _Inout_ DWORD *pcbSignature);
5619
5620BOOL
5621WINAPI
5622CryptSignAndEncodeCertificate(
5623 _In_opt_ HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
5624 _In_opt_ DWORD dwKeySpec,
5625 _In_ DWORD dwCertEncodingType,
5626 _In_ LPCSTR lpszStructType,
5627 _In_ const void *pvStructInfo,
5628 _In_ PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
5629 _In_opt_ const void *pvHashAuxInfo,
5630 _Out_writes_bytes_to_opt_(*pcbEncoded, *pcbEncoded) BYTE *pbEncoded,
5631 _Inout_ DWORD *pcbEncoded);
5632
5633_Must_inspect_result_
5634BOOL
5635WINAPI
5636CryptVerifyCertificateSignature(
5637 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
5638 _In_ DWORD dwCertEncodingType,
5639 _In_reads_bytes_(cbEncoded) const BYTE *pbEncoded,
5640 _In_ DWORD cbEncoded,
5641 _In_ PCERT_PUBLIC_KEY_INFO pPublicKey);
5642
5643_Must_inspect_result_
5644BOOL
5645WINAPI
5646CryptVerifyCertificateSignatureEx(
5647 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
5648 _In_ DWORD dwCertEncodingType,
5649 _In_ DWORD dwSubjectType,
5650 _In_ void *pvSubject,
5651 _In_ DWORD dwIssuerType,
5652 _In_opt_ void *pvIssuer,
5653 _In_ DWORD dwFlags,
5654 _Inout_opt_ void *pvExtra);
5655
5656PCRYPT_ATTRIBUTE
5657WINAPI
5658CertFindAttribute(
5659 _In_ LPCSTR pszObjId,
5660 _In_ DWORD cAttr,
5661 _In_reads_(cAttr) CRYPT_ATTRIBUTE rgAttr[]);
5662
5663PCERT_EXTENSION
5664WINAPI
5665CertFindExtension(
5666 _In_ LPCSTR pszObjId,
5667 _In_ DWORD cExtensions,
5668 _In_reads_(cExtensions) CERT_EXTENSION rgExtensions[]);
5669
5670PCERT_RDN_ATTR
5671WINAPI
5672CertFindRDNAttr(
5673 _In_ LPCSTR pszObjId,
5674 _In_ PCERT_NAME_INFO pName);
5675
5676BOOL
5677WINAPI
5678CertFindSubjectInSortedCTL(
5679 _In_ PCRYPT_DATA_BLOB pSubjectIdentifier,
5680 _In_ PCCTL_CONTEXT pCtlContext,
5681 _In_ DWORD dwFlags,
5682 _Reserved_ void *pvReserved,
5683 _Out_opt_ PCRYPT_DER_BLOB pEncodedAttributes);
5684
5685BOOL
5686WINAPI
5687CertIsRDNAttrsInCertificateName(
5688 _In_ DWORD dwCertEncodingType,
5689 _In_ DWORD dwFlags,
5690 _In_ PCERT_NAME_BLOB pCertName,
5691 _In_ PCERT_RDN pRDN);
5692
5693BOOL
5694WINAPI
5695CertIsValidCRLForCertificate(
5696 _In_ PCCERT_CONTEXT pCert,
5697 _In_ PCCRL_CONTEXT pCrl,
5698 _In_ DWORD dwFlags,
5699 _Reserved_ void *pvReserved);
5700
5701BOOL
5702WINAPI
5703CertFindCertificateInCRL(
5704 _In_ PCCERT_CONTEXT pCert,
5705 _In_ PCCRL_CONTEXT pCrlContext,
5706 _In_ DWORD dwFlags,
5707 _Reserved_ void *pvReserved,
5708 _Outptr_result_maybenull_ PCRL_ENTRY *ppCrlEntry);
5709
5710BOOL
5711WINAPI
5712CertVerifyCRLRevocation(
5713 _In_ DWORD dwCertEncodingType,
5714 _In_ PCERT_INFO pCertId,
5715 _In_ DWORD cCrlInfo,
5716 _In_reads_(cCrlInfo) PCRL_INFO rgpCrlInfo[]);
5717
5718BOOL
5719WINAPI
5720CertVerifySubjectCertificateContext(
5721 _In_ PCCERT_CONTEXT pSubject,
5722 _In_opt_ PCCERT_CONTEXT pIssuer,
5723 _Inout_ DWORD *pdwFlags);
5724
5725LONG
5726WINAPI
5727CertVerifyCRLTimeValidity(
5728 _In_opt_ LPFILETIME pTimeToVerify,
5729 _In_ PCRL_INFO pCrlInfo);
5730
5731LONG
5732WINAPI
5733CertVerifyTimeValidity(
5734 _In_opt_ LPFILETIME pTimeToVerify,
5735 _In_ PCERT_INFO pCertInfo);
5736
5737BOOL
5738WINAPI
5739CertVerifyValidityNesting(
5740 _In_ PCERT_INFO pSubjectInfo,
5741 _In_ PCERT_INFO pIssuerInfo);
5742
5743BOOL
5744WINAPI
5745CertVerifyCTLUsage(
5746 _In_ DWORD dwEncodingType,
5747 _In_ DWORD dwSubjectType,
5748 _In_ void *pvSubject,
5749 _In_ PCTL_USAGE pSubjectUsage,
5750 _In_ DWORD dwFlags,
5751 _In_opt_ PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,
5752 _Inout_ PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);
5753
5754BOOL
5755WINAPI
5756CertVerifyRevocation(
5757 _In_ DWORD dwEncodingType,
5758 _In_ DWORD dwRevType,
5759 _In_ DWORD cContext,
5760 _In_reads_(cContext) PVOID rgpvContext[],
5761 _In_ DWORD dwFlags,
5762 _In_opt_ PCERT_REVOCATION_PARA pRevPara,
5763 _Inout_ PCERT_REVOCATION_STATUS pRevStatus);
5764
5765BOOL
5766WINAPI
5767CryptExportPublicKeyInfo(
5768 _In_ HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
5769 _In_opt_ DWORD dwKeySpec,
5770 _In_ DWORD dwCertEncodingType,
5771 _Out_writes_bytes_to_opt_(*pcbInfo, *pcbInfo) PCERT_PUBLIC_KEY_INFO pInfo,
5772 _Inout_ DWORD *pcbInfo);
5773
5774BOOL
5775WINAPI
5776CryptExportPublicKeyInfoEx(
5777 _In_ HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
5778 _In_opt_ DWORD dwKeySpec,
5779 _In_ DWORD dwCertEncodingType,
5780 _In_opt_ LPSTR pszPublicKeyObjId,
5781 _In_ DWORD dwFlags,
5782 _In_opt_ void *pvAuxInfo,
5783 _Out_writes_bytes_to_opt_(*pcbInfo, *pcbInfo) PCERT_PUBLIC_KEY_INFO pInfo,
5784 _Inout_ DWORD *pcbInfo);
5785
5786BOOL
5787WINAPI
5788CryptImportPublicKeyInfo(
5789 _In_ HCRYPTPROV hCryptProv,
5790 _In_ DWORD dwCertEncodingType,
5791 _In_ PCERT_PUBLIC_KEY_INFO pInfo,
5792 _Out_ HCRYPTKEY *phKey);
5793
5794BOOL
5795WINAPI
5796CryptImportPublicKeyInfoEx(
5797 _In_ HCRYPTPROV hCryptProv,
5798 _In_ DWORD dwCertEncodingType,
5799 _In_ PCERT_PUBLIC_KEY_INFO pInfo,
5800 _In_ ALG_ID aiKeyAlg,
5801 _In_ DWORD dwFlags,
5802 _In_opt_ void *pvAuxInfo,
5803 _Out_ HCRYPTKEY *phKey);
5804
5805BOOL
5806WINAPI
5807CryptAcquireCertificatePrivateKey(
5808 _In_ PCCERT_CONTEXT pCert,
5809 _In_ DWORD dwFlags,
5810 _In_opt_ void *pvParameters,
5811 _Out_ HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProvOrNCryptKey,
5812 _Out_opt_ DWORD *pdwKeySpec,
5813 _Out_opt_ BOOL *pfCallerFreeProvOrNCryptKey);
5814
5815BOOL
5816WINAPI
5817CryptFindCertificateKeyProvInfo(
5818 _In_ PCCERT_CONTEXT pCert,
5819 _In_ DWORD dwFlags,
5820 _Reserved_ void *pvReserved);
5821
5822BOOL WINAPI CryptProtectData( DATA_BLOB* pDataIn, LPCWSTR szDataDescr,
5823 DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
5824 CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
5825
5826BOOL WINAPI CryptUnprotectData( DATA_BLOB* pDataIn, LPWSTR* ppszDataDescr,
5827 DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
5828 CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
5829
5830DWORD
5831WINAPI
5832CertGetNameStringA(
5833 _In_ PCCERT_CONTEXT pCertContext,
5834 _In_ DWORD dwType,
5835 _In_ DWORD dwFlags,
5836 _In_opt_ void *pvTypePara,
5837 _Out_writes_to_opt_(cchNameString, return) LPSTR pszNameString,
5838 _In_ DWORD cchNameString);
5839
5840DWORD
5841WINAPI
5842CertGetNameStringW(
5843 _In_ PCCERT_CONTEXT pCertContext,
5844 _In_ DWORD dwType,
5845 _In_ DWORD dwFlags,
5846 _In_opt_ void *pvTypePara,
5847 _Out_writes_to_opt_(cchNameString, return) LPWSTR pszNameString,
5848 _In_ DWORD cchNameString);
5849
5850#define CertGetNameString WINELIB_NAME_AW(CertGetNameString)
5851
5852DWORD
5853WINAPI
5854CertRDNValueToStrA(
5855 _In_ DWORD dwValueType,
5856 _In_ PCERT_RDN_VALUE_BLOB pValue,
5857 _Out_writes_to_opt_(csz, return) LPSTR psz,
5858 _In_ DWORD csz);
5859
5860DWORD
5861WINAPI
5862CertRDNValueToStrW(
5863 _In_ DWORD dwValueType,
5864 _In_ PCERT_RDN_VALUE_BLOB pValue,
5865 _Out_writes_to_opt_(csz, return) LPWSTR psz,
5866 _In_ DWORD csz);
5867
5868#define CertRDNValueToStr WINELIB_NAME_AW(CertRDNValueToStr)
5869
5870DWORD
5871WINAPI
5872CertNameToStrA(
5873 _In_ DWORD dwCertEncodingType,
5874 _In_ PCERT_NAME_BLOB pName,
5875 _In_ DWORD dwStrType,
5876 _Out_writes_to_opt_(csz, return) LPSTR psz,
5877 _In_ DWORD csz);
5878
5879DWORD
5880WINAPI
5881CertNameToStrW(
5882 _In_ DWORD dwCertEncodingType,
5883 _In_ PCERT_NAME_BLOB pName,
5884 _In_ DWORD dwStrType,
5885 _Out_writes_to_opt_(csz, return) LPWSTR psz,
5886 _In_ DWORD csz);
5887
5888#define CertNameToStr WINELIB_NAME_AW(CertNameToStr)
5889
5890BOOL
5891WINAPI
5892CertStrToNameA(
5893 _In_ DWORD dwCertEncodingType,
5894 _In_ LPCSTR pszX500,
5895 _In_ DWORD dwStrType,
5896 _Reserved_ void *pvReserved,
5897 _Out_writes_bytes_to_opt_(*pcbEncoded, *pcbEncoded) BYTE *pbEncoded,
5898 _Inout_ DWORD *pcbEncoded,
5899 _Outptr_opt_result_maybenull_ LPCSTR *ppszError);
5900
5901BOOL
5902WINAPI
5903CertStrToNameW(
5904 _In_ DWORD dwCertEncodingType,
5905 _In_ LPCWSTR pszX500,
5906 _In_ DWORD dwStrType,
5907 _Reserved_ void *pvReserved,
5908 _Out_writes_bytes_to_opt_(*pcbEncoded, *pcbEncoded) BYTE *pbEncoded,
5909 _Inout_ DWORD *pcbEncoded,
5910 _Outptr_opt_result_maybenull_ LPCWSTR *ppszError);
5911
5912#define CertStrToName WINELIB_NAME_AW(CertStrToName)
5913
5914DWORD
5915WINAPI
5916CryptMsgCalculateEncodedLength(
5917 _In_ DWORD dwMsgEncodingType,
5918 _In_ DWORD dwFlags,
5919 _In_ DWORD dwMsgType,
5920 _In_ void const *pvMsgEncodeInfo,
5921 _In_opt_ LPSTR pszInnerContentObjID,
5922 _In_ DWORD cbData);
5923
5924BOOL WINAPI CryptMsgClose(_In_opt_ HCRYPTMSG hCryptMsg);
5925
5926BOOL
5927WINAPI
5928CryptMsgControl(
5929 _In_ HCRYPTMSG hCryptMsg,
5930 _In_ DWORD dwFlags,
5931 _In_ DWORD dwCtrlType,
5932 _In_opt_ void const *pvCtrlPara);
5933
5934BOOL
5935WINAPI
5936CryptMsgCountersign(
5937 _In_ HCRYPTMSG hCryptMsg,
5938 _In_ DWORD dwIndex,
5939 _In_ DWORD cCountersigners,
5940 _In_reads_(cCountersigners) PCMSG_SIGNER_ENCODE_INFO rgCountersigners);
5941
5942BOOL
5943WINAPI
5944CryptMsgCountersignEncoded(
5945 _In_ DWORD dwEncodingType,
5946 _In_reads_bytes_(cbSignerInfo) PBYTE pbSignerInfo,
5947 _In_ DWORD cbSignerInfo,
5948 _In_ DWORD cCountersigners,
5949 _In_reads_(cCountersigners) PCMSG_SIGNER_ENCODE_INFO rgCountersigners,
5950 _Out_writes_bytes_to_opt_(*pcbCountersignature, *pcbCountersignature) PBYTE pbCountersignature,
5951 _Inout_ PDWORD pcbCountersignature);
5952
5953HCRYPTMSG WINAPI CryptMsgDuplicate(_In_opt_ HCRYPTMSG hCryptMsg);
5954
5955BOOL
5956WINAPI
5957CryptMsgEncodeAndSignCTL(
5958 _In_ DWORD dwMsgEncodingType,
5959 _In_ PCTL_INFO pCtlInfo,
5960 _In_ PCMSG_SIGNED_ENCODE_INFO pSignInfo,
5961 _In_ DWORD dwFlags,
5962 _Out_writes_bytes_to_opt_(*pcbEncoded, *pcbEncoded) BYTE *pbEncoded,
5963 _Inout_ DWORD *pcbEncoded);
5964
5965_Success_(return == 0)
5966BOOL
5967WINAPI
5968CryptMsgGetAndVerifySigner(
5969 _In_ HCRYPTMSG hCryptMsg,
5970 _In_ DWORD cSignerStore,
5971 _In_reads_opt_(cSignerStore) HCERTSTORE *rghSignerStore,
5972 _In_ DWORD dwFlags,
5973 _Outptr_opt_ PCCERT_CONTEXT *ppSigner,
5974 _Inout_opt_ DWORD *pdwSignerIndex);
5975
5976BOOL
5977WINAPI
5978CryptMsgGetParam(
5979 _In_ HCRYPTMSG hCryptMsg,
5980 _In_ DWORD dwParamType,
5981 _In_ DWORD dwIndex,
5982 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) void *pvData,
5983 _Inout_ DWORD *pcbData);
5984
5985HCRYPTMSG
5986WINAPI
5987CryptMsgOpenToDecode(
5988 _In_ DWORD dwMsgEncodingType,
5989 _In_ DWORD dwFlags,
5990 _In_ DWORD dwMsgType,
5991 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
5992 _Reserved_ PCERT_INFO pRecipientInfo,
5993 _In_opt_ PCMSG_STREAM_INFO pStreamInfo);
5994
5995HCRYPTMSG
5996WINAPI
5997CryptMsgOpenToEncode(
5998 _In_ DWORD dwMsgEncodingType,
5999 _In_ DWORD dwFlags,
6000 _In_ DWORD dwMsgType,
6001 _In_ void const *pvMsgEncodeInfo,
6002 _In_opt_ LPSTR pszInnerContentObjID,
6003 _In_opt_ PCMSG_STREAM_INFO pStreamInfo);
6004
6005BOOL
6006WINAPI
6007CryptMsgSignCTL(
6008 _In_ DWORD dwMsgEncodingType,
6009 _In_reads_bytes_(cbCtlContent) BYTE *pbCtlContent,
6010 _In_ DWORD cbCtlContent,
6011 _In_ PCMSG_SIGNED_ENCODE_INFO pSignInfo,
6012 _In_ DWORD dwFlags,
6013 _Out_writes_bytes_to_opt_(*pcbEncoded, *pcbEncoded) BYTE *pbEncoded,
6014 _Inout_ DWORD *pcbEncoded);
6015
6016BOOL
6017WINAPI
6018CryptMsgUpdate(
6019 _In_ HCRYPTMSG hCryptMsg,
6020 _In_reads_bytes_opt_(cbData) const BYTE *pbData,
6021 _In_ DWORD cbData,
6022 _In_ BOOL fFinal);
6023
6024BOOL
6025WINAPI
6026CryptMsgVerifyCountersignatureEncoded(
6027 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
6028 _In_ DWORD dwEncodingType,
6029 _In_reads_bytes_(cbSignerInfo) PBYTE pbSignerInfo,
6030 _In_ DWORD cbSignerInfo,
6031 _In_reads_bytes_(cbSignerInfoCountersignature) PBYTE pbSignerInfoCountersignature,
6032 _In_ DWORD cbSignerInfoCountersignature,
6033 _In_ PCERT_INFO pciCountersigner);
6034
6035BOOL
6036WINAPI
6037CryptMsgVerifyCountersignatureEncodedEx(
6038 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
6039 _In_ DWORD dwEncodingType,
6040 _In_reads_bytes_(cbSignerInfo) PBYTE pbSignerInfo,
6041 _In_ DWORD cbSignerInfo,
6042 _In_reads_bytes_(cbSignerInfoCountersignature) PBYTE pbSignerInfoCountersignature,
6043 _In_ DWORD cbSignerInfoCountersignature,
6044 _In_ DWORD dwSignerType,
6045 _In_ void *pvSigner,
6046 _In_ DWORD dwFlags,
6047 _Inout_opt_ void *pvExtra);
6048
6049BOOL
6050WINAPI
6051CryptSignMessage(
6052 _In_ PCRYPT_SIGN_MESSAGE_PARA pSignPara,
6053 _In_ BOOL fDetachedSignature,
6054 _In_ DWORD cToBeSigned,
6055 _In_reads_opt_(cToBeSigned) const BYTE *rgpbToBeSigned[],
6056 _In_reads_(cToBeSigned) DWORD rgcbToBeSigned[],
6057 _Out_writes_bytes_to_opt_(*pcbSignedBlob, *pcbSignedBlob) BYTE *pbSignedBlob,
6058 _Inout_ DWORD *pcbSignedBlob);
6059
6060BOOL
6061WINAPI
6062CryptSignMessageWithKey(
6063 _In_ PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara,
6064 _In_reads_bytes_(cbToBeSigned) const BYTE *pbToBeSigned,
6065 _In_ DWORD cbToBeSigned,
6066 _Out_writes_bytes_to_opt_(*pcbSignedBlob, *pcbSignedBlob) BYTE *pbSignedBlob,
6067 _Inout_ DWORD *pcbSignedBlob);
6068
6069BOOL
6070WINAPI
6071CryptVerifyMessageSignature(
6072 _In_ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
6073 _In_ DWORD dwSignerIndex,
6074 _In_reads_bytes_(cbSignedBlob) const BYTE *pbSignedBlob,
6075 _In_ DWORD cbSignedBlob,
6076 _Out_writes_bytes_to_opt_(*pcbDecoded, *pcbDecoded) BYTE *pbDecoded,
6077 _Inout_opt_ DWORD *pcbDecoded,
6078 _Outptr_opt_result_maybenull_ PCCERT_CONTEXT *ppSignerCert);
6079
6080BOOL
6081WINAPI
6082CryptVerifyMessageSignatureWithKey(
6083 _In_ PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,
6084 _In_opt_ PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,
6085 _In_reads_bytes_(cbSignedBlob) const BYTE *pbSignedBlob,
6086 _In_ DWORD cbSignedBlob,
6087 _Out_writes_bytes_to_opt_(*pcbDecoded, *pcbDecoded) BYTE *pbDecoded,
6088 _Inout_opt_ DWORD *pcbDecoded);
6089
6090BOOL
6091WINAPI
6092CryptVerifyDetachedMessageSignature(
6093 _In_ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
6094 _In_ DWORD dwSignerIndex,
6095 _In_reads_bytes_(cbDetachedSignBlob) const BYTE *pbDetachedSignBlob,
6096 _In_ DWORD cbDetachedSignBlob,
6097 _In_ DWORD cToBeSigned,
6098 _In_reads_(cToBeSigned) const BYTE *rgpbToBeSigned[],
6099 _In_reads_(cToBeSigned) DWORD rgcbToBeSigned[],
6100 _Outptr_opt_result_maybenull_ PCCERT_CONTEXT *ppSignerCert);
6101
6102LONG
6103WINAPI
6104CryptGetMessageSignerCount(
6105 _In_ DWORD dwMsgEncodingType,
6106 _In_reads_bytes_(cbSignedBlob) const BYTE *pbSignedBlob,
6107 _In_ DWORD cbSignedBlob);
6108
6109BOOL
6110WINAPI
6111CryptEncryptMessage(
6112 _In_ PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
6113 _In_ DWORD cRecipientCert,
6114 _In_reads_(cRecipientCert) PCCERT_CONTEXT rgpRecipientCert[],
6115 _In_reads_bytes_opt_(cbToBeEncrypted) const BYTE *pbToBeEncrypted,
6116 _In_ DWORD cbToBeEncrypted,
6117 _Out_writes_bytes_to_opt_(*pcbEncryptedBlob, *pcbEncryptedBlob) BYTE *pbEncryptedBlob,
6118 _Inout_ DWORD *pcbEncryptedBlob);
6119
6120BOOL
6121WINAPI
6122CryptDecryptMessage(
6123 _In_ PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
6124 _In_reads_bytes_(cbEncryptedBlob) const BYTE *pbEncryptedBlob,
6125 _In_ DWORD cbEncryptedBlob,
6126 _Out_writes_bytes_to_opt_(*pcbDecrypted, *pcbDecrypted) BYTE *pbDecrypted,
6127 _Inout_opt_ DWORD *pcbDecrypted,
6128 _Outptr_opt_result_maybenull_ PCCERT_CONTEXT *ppXchgCert);
6129
6130BOOL
6131WINAPI
6132CryptSignAndEncryptMessage(
6133 _In_ PCRYPT_SIGN_MESSAGE_PARA pSignPara,
6134 _In_ PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
6135 _In_ DWORD cRecipientCert,
6136 _In_reads_(cRecipientCert) PCCERT_CONTEXT rgpRecipientCert[],
6137 _In_reads_bytes_(cbToBeSignedAndEncrypted) const BYTE *pbToBeSignedAndEncrypted,
6138 _In_ DWORD cbToBeSignedAndEncrypted,
6139 _Out_writes_bytes_to_opt_(*pcbSignedAndEncryptedBlob, *pcbSignedAndEncryptedBlob) BYTE *pbSignedAndEncryptedBlob,
6140 _Inout_ DWORD *pcbSignedAndEncryptedBlob);
6141
6142BOOL
6143WINAPI
6144CryptDecryptAndVerifyMessageSignature(
6145 _In_ PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
6146 _In_ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
6147 _In_ DWORD dwSignerIndex,
6148 _In_reads_bytes_(cbEncryptedBlob) const BYTE *pbEncryptedBlob,
6149 _In_ DWORD cbEncryptedBlob,
6150 _Out_writes_bytes_to_opt_(*pcbDecrypted, *pcbDecrypted) BYTE *pbDecrypted,
6151 _Inout_opt_ DWORD *pcbDecrypted,
6152 _Outptr_opt_result_maybenull_ PCCERT_CONTEXT *ppXchgCert,
6153 _Outptr_opt_result_maybenull_ PCCERT_CONTEXT *ppSignerCert);
6154
6155HCERTSTORE
6156WINAPI
6157CryptGetMessageCertificates(
6158 _In_ DWORD dwMsgAndCertEncodingType,
6159 _In_opt_ HCRYPTPROV_LEGACY hCryptProv,
6160 _In_ DWORD dwFlags,
6161 _In_reads_bytes_(cbSignedBlob) const BYTE *pbSignedBlob,
6162 _In_ DWORD cbSignedBlob);
6163
6164BOOL
6165WINAPI
6166CryptDecodeMessage(
6167 _In_ DWORD dwMsgTypeFlags,
6168 _In_opt_ PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
6169 _In_opt_ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
6170 _In_ DWORD dwSignerIndex,
6171 _In_reads_bytes_(cbEncodedBlob) const BYTE *pbEncodedBlob,
6172 _In_ DWORD cbEncodedBlob,
6173 _In_ DWORD dwPrevInnerContentType,
6174 _Out_opt_ DWORD *pdwMsgType,
6175 _Out_opt_ DWORD *pdwInnerContentType,
6176 _Out_writes_bytes_to_opt_(*pcbDecoded, *pcbDecoded) BYTE *pbDecoded,
6177 _Inout_opt_ DWORD *pcbDecoded,
6178 _Outptr_opt_result_maybenull_ PCCERT_CONTEXT *ppXchgCert,
6179 _Outptr_opt_result_maybenull_ PCCERT_CONTEXT *ppSignerCert);
6180
6181BOOL
6182WINAPI
6183CryptHashMessage(
6184 _In_ PCRYPT_HASH_MESSAGE_PARA pHashPara,
6185 _In_ BOOL fDetachedHash,
6186 _In_ DWORD cToBeHashed,
6187 _In_reads_(cToBeHashed) const BYTE *rgpbToBeHashed[],
6188 _In_reads_(cToBeHashed) DWORD rgcbToBeHashed[],
6189 _Out_writes_bytes_to_opt_(*pcbHashedBlob, *pcbHashedBlob) BYTE *pbHashedBlob,
6190 _Inout_opt_ DWORD *pcbHashedBlob,
6191 _Out_writes_bytes_to_opt_(*pcbComputedHash, *pcbComputedHash) BYTE *pbComputedHash,
6192 _Inout_opt_ DWORD *pcbComputedHash);
6193
6194BOOL
6195WINAPI
6196CryptVerifyMessageHash(
6197 _In_ PCRYPT_HASH_MESSAGE_PARA pHashPara,
6198 _In_reads_bytes_(cbHashedBlob) BYTE *pbHashedBlob,
6199 _In_ DWORD cbHashedBlob,
6200 _Out_writes_bytes_to_opt_(*pcbToBeHashed, *pcbToBeHashed) BYTE *pbToBeHashed,
6201 _Inout_opt_ DWORD *pcbToBeHashed,
6202 _Out_writes_bytes_to_opt_(*pcbComputedHash, *pcbComputedHash) BYTE *pbComputedHash,
6203 _Inout_opt_ DWORD *pcbComputedHash);
6204
6205BOOL
6206WINAPI
6207CryptVerifyDetachedMessageHash(
6208 _In_ PCRYPT_HASH_MESSAGE_PARA pHashPara,
6209 _In_reads_bytes_(cbDetachedHashBlob) BYTE *pbDetachedHashBlob,
6210 _In_ DWORD cbDetachedHashBlob,
6211 _In_ DWORD cToBeHashed,
6212 _In_reads_(cToBeHashed) const BYTE *rgpbToBeHashed[],
6213 _In_reads_(cToBeHashed) DWORD rgcbToBeHashed[],
6214 _Out_writes_bytes_to_opt_(*pcbComputedHash, *pcbComputedHash) BYTE *pbComputedHash,
6215 _Inout_opt_ DWORD *pcbComputedHash);
6216
6217/* PFX functions */
6218HCERTSTORE
6219WINAPI
6220PFXImportCertStore(
6221 _In_ CRYPT_DATA_BLOB *pPFX,
6222 _In_ LPCWSTR szPassword,
6223 _In_ DWORD dwFlags);
6224
6225BOOL WINAPI PFXIsPFXBlob(_In_ CRYPT_DATA_BLOB *pPFX);
6226
6227BOOL
6228WINAPI
6229PFXVerifyPassword(
6230 _In_ CRYPT_DATA_BLOB *pPFX,
6231 _In_ LPCWSTR szPassword,
6232 _In_ DWORD dwFlags);
6233
6234BOOL
6235WINAPI
6236PFXExportCertStoreEx(
6237 _In_ HCERTSTORE hStore,
6238 _Inout_ CRYPT_DATA_BLOB* pPFX,
6239 _In_ LPCWSTR szPassword,
6240 _In_ void* pvPara,
6241 _In_ DWORD dwFlags);
6242
6243BOOL
6244WINAPI
6245PFXExportCertStore(
6246 _In_ HCERTSTORE hStore,
6247 _Inout_ CRYPT_DATA_BLOB* pPFX,
6248 _In_ LPCWSTR szPassword,
6249 _In_ DWORD dwFlags);
6250
6251BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
6252 DWORD dwFlags);
6253
6254/* cryptnet.dll functions */
6255BOOL WINAPI CryptCancelAsyncRetrieval(_In_opt_ HCRYPTASYNC hAsyncRetrieval);
6256
6257BOOL
6258WINAPI
6259CryptGetObjectUrl(
6260 _In_ LPCSTR pszUrlOid,
6261 _In_ LPVOID pvPara,
6262 _In_ DWORD dwFlags,
6263 _Out_writes_bytes_to_opt_(*pcbUrlArray, *pcbUrlArray) PCRYPT_URL_ARRAY pUrlArray,
6264 _Inout_ DWORD* pcbUrlArray,
6265 _Out_writes_bytes_to_opt_(*pcbUrlInfo, *pcbUrlInfo) PCRYPT_URL_INFO pUrlInfo,
6266 _Inout_opt_ DWORD* pcbUrlInfo,
6267 _Reserved_ LPVOID pvReserved);
6268
6269_Success_(return != 0)
6270BOOL
6271WINAPI
6272CryptGetTimeValidObject(
6273 _In_ LPCSTR pszTimeValidOid,
6274 _In_ void *pvPara,
6275 _In_ PCCERT_CONTEXT pIssuer,
6276 _In_opt_ LPFILETIME pftValidFor,
6277 _In_ DWORD dwFlags,
6278 _In_ DWORD dwTimeout,
6279 _Outptr_opt_ void **ppvObject,
6280 _In_opt_ PCRYPT_CREDENTIALS pCredentials,
6281 _Inout_opt_ void *pvReserved);
6282
6283BOOL
6284WINAPI
6285CryptFlushTimeValidObject(
6286 _In_ LPCSTR pszFlushTimeValidOid,
6287 _In_ void *pvPara,
6288 _In_ PCCERT_CONTEXT pIssuer,
6289 _In_ DWORD dwFlags,
6290 _Reserved_ void *pvReserved);
6291
6292BOOL
6293WINAPI
6294CryptInstallCancelRetrieval(
6295 __callback PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel,
6296 _In_opt_ const void *pvArg,
6297 _In_ DWORD dwFlags,
6298 _Reserved_ void *pvReserved);
6299
6300BOOL
6301WINAPI
6302CryptUninstallCancelRetrieval(
6303 _In_ DWORD dwFlags,
6304 _Reserved_ void *pvReserved);
6305
6306_Success_(return != 0)
6307BOOL
6308WINAPI
6309CryptRetrieveObjectByUrlA(
6310 _In_ LPCSTR pszUrl,
6311 _In_opt_ LPCSTR pszObjectOid,
6312 _In_ DWORD dwRetrievalFlags,
6313 _In_ DWORD dwTimeout,
6314 _Outptr_ LPVOID* ppvObject,
6315 _In_opt_ HCRYPTASYNC hAsyncRetrieve,
6316 _In_opt_ PCRYPT_CREDENTIALS pCredentials,
6317 _In_opt_ LPVOID pvVerify,
6318 _Inout_opt_ PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
6319
6320_Success_(return != 0)
6321BOOL
6322WINAPI
6323CryptRetrieveObjectByUrlW(
6324 _In_ LPCWSTR pszUrl,
6325 _In_opt_ LPCSTR pszObjectOid,
6326 _In_ DWORD dwRetrievalFlags,
6327 _In_ DWORD dwTimeout,
6328 _Outptr_ LPVOID* ppvObject,
6329 _In_opt_ HCRYPTASYNC hAsyncRetrieve,
6330 _In_opt_ PCRYPT_CREDENTIALS pCredentials,
6331 _In_opt_ LPVOID pvVerify,
6332 _Inout_opt_ PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
6333
6334#define CryptRetrieveObjectByUrl WINELIB_NAME_AW(CryptRetrieveObjectByUrl)
6335
6336/* Not found in crypt32.dll but in softpub.dll */
6337HRESULT
6338WINAPI
6339FindCertsByIssuer(
6340 _Out_writes_bytes_to_opt_(*pcbCertChains, *pcbCertChains) PCERT_CHAIN pCertChains,
6341 _Inout_ DWORD *pcbCertChains,
6342 _Out_ DWORD *pcCertChains,
6343 _In_reads_bytes_opt_(cbEncodedIssuerName) BYTE* pbEncodedIssuerName,
6344 _In_ DWORD cbEncodedIssuerName,
6345 _In_opt_ LPCWSTR pwszPurpose,
6346 _In_ DWORD dwKeySpec);
6347
6348#ifdef _MSC_VER
6349#pragma warning(pop)
6350#endif
6351#else
6352/* advapi32.dll */
6353WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD);
6354WINADVAPI BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *, LPCWSTR, LPCWSTR, DWORD, DWORD);
6355#define CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext)
6356WINADVAPI BOOL WINAPI CryptGenRandom (HCRYPTPROV, DWORD, BYTE *);
6357WINADVAPI BOOL WINAPI CryptContextAddRef (HCRYPTPROV, DWORD *, DWORD);
6358WINADVAPI BOOL WINAPI CryptCreateHash (HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH *);
6359WINADVAPI BOOL WINAPI CryptDecrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *);
6360WINADVAPI BOOL WINAPI CryptDeriveKey (HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY *);
6361WINADVAPI BOOL WINAPI CryptDestroyHash (HCRYPTHASH);
6362WINADVAPI BOOL WINAPI CryptDestroyKey (HCRYPTKEY);
6363WINADVAPI BOOL WINAPI CryptDuplicateKey (HCRYPTKEY, DWORD *, DWORD, HCRYPTKEY *);
6364WINADVAPI BOOL WINAPI CryptDuplicateHash (HCRYPTHASH, DWORD *, DWORD, HCRYPTHASH *);
6365WINADVAPI BOOL WINAPI CryptEncrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *, DWORD);
6366WINADVAPI BOOL WINAPI CryptEnumProvidersA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);
6367WINADVAPI BOOL WINAPI CryptEnumProvidersW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);
6368#define CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders)
6369WINADVAPI BOOL WINAPI CryptEnumProviderTypesA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);
6370WINADVAPI BOOL WINAPI CryptEnumProviderTypesW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);
6371#define CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes)
6372WINADVAPI BOOL WINAPI CryptExportKey (HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, BYTE *, DWORD *);
6373WINADVAPI BOOL WINAPI CryptGenKey (HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY *);
6374WINADVAPI BOOL WINAPI CryptGetKeyParam (HCRYPTKEY, DWORD, BYTE *, DWORD *, DWORD);
6375WINADVAPI BOOL WINAPI CryptGetHashParam (HCRYPTHASH, DWORD, BYTE *, DWORD *, DWORD);
6376WINADVAPI BOOL WINAPI CryptGetProvParam (HCRYPTPROV, DWORD, BYTE *, DWORD *, DWORD);
6377WINADVAPI BOOL WINAPI CryptGetDefaultProviderA (DWORD, DWORD *, DWORD, LPSTR, DWORD *);
6378WINADVAPI BOOL WINAPI CryptGetDefaultProviderW (DWORD, DWORD *, DWORD, LPWSTR, DWORD *);
6379#define CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider)
6380WINADVAPI BOOL WINAPI CryptGetUserKey (HCRYPTPROV, DWORD, HCRYPTKEY *);
6381WINADVAPI BOOL WINAPI CryptHashData (HCRYPTHASH, const BYTE *, DWORD, DWORD);
6382WINADVAPI BOOL WINAPI CryptHashSessionKey (HCRYPTHASH, HCRYPTKEY, DWORD);
6383WINADVAPI BOOL WINAPI CryptImportKey (HCRYPTPROV, const BYTE *, DWORD, HCRYPTKEY, DWORD, HCRYPTKEY *);
6384WINADVAPI BOOL WINAPI CryptReleaseContext (HCRYPTPROV, DWORD);
6385WINADVAPI BOOL WINAPI CryptSetHashParam (HCRYPTHASH, DWORD, const BYTE *, DWORD);
6386WINADVAPI BOOL WINAPI CryptSetKeyParam (HCRYPTKEY, DWORD, const BYTE *, DWORD);
6387WINADVAPI BOOL WINAPI CryptSetProviderA (LPCSTR, DWORD);
6388WINADVAPI BOOL WINAPI CryptSetProviderW (LPCWSTR, DWORD);
6389#define CryptSetProvider WINELIB_NAME_AW(CryptSetProvider)
6390WINADVAPI BOOL WINAPI CryptSetProviderExA (LPCSTR, DWORD, DWORD *, DWORD);
6391WINADVAPI BOOL WINAPI CryptSetProviderExW (LPCWSTR, DWORD, DWORD *, DWORD);
6392#define CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx)
6393WINADVAPI BOOL WINAPI CryptSetProvParam (HCRYPTPROV, DWORD, const BYTE *, DWORD);
6394WINADVAPI BOOL WINAPI CryptSignHashA (HCRYPTHASH, DWORD, LPCSTR, DWORD, BYTE *, DWORD *);
6395WINADVAPI BOOL WINAPI CryptSignHashW (HCRYPTHASH, DWORD, LPCWSTR, DWORD, BYTE *, DWORD *);
6396#define CryptSignHash WINELIB_NAME_AW(CryptSignHash)
6397WINADVAPI BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCSTR, DWORD);
6398WINADVAPI BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCWSTR, DWORD);
6399#define CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature)
6400
6401/* crypt32.dll functions */
6402LPVOID WINAPI CryptMemAlloc(_In_ ULONG cbSize) __WINE_ALLOC_SIZE(1);
6403LPVOID WINAPI CryptMemRealloc(_In_opt_ LPVOID pv, _In_ ULONG cbSize) __WINE_ALLOC_SIZE(2);
6404VOID WINAPI CryptMemFree(_In_opt_ LPVOID pv);
6405WINCRYPT32API VOID WINAPI CryptMemFree(LPVOID pv);
6406WINCRYPT32API LPVOID WINAPI CryptMemAlloc(ULONG cbSize) __WINE_ALLOC_SIZE(1) __WINE_DEALLOC(CryptMemFree) __WINE_MALLOC;
6407WINCRYPT32API LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize) __WINE_ALLOC_SIZE(2) __WINE_DEALLOC(CryptMemFree);
6408
6409WINCRYPT32API BOOL WINAPI CryptBinaryToStringA(const BYTE *pbBinary,
6410 DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString);
6411WINCRYPT32API BOOL WINAPI CryptBinaryToStringW(const BYTE *pbBinary,
6412 DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString);
6413#define CryptBinaryToString WINELIB_NAME_AW(CryptBinaryToString)
6414
6415WINCRYPT32API BOOL WINAPI CryptStringToBinaryA(LPCSTR pszString,
6416 DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
6417 DWORD *pdwSkip, DWORD *pdwFlags);
6418WINCRYPT32API BOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString,
6419 DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
6420 DWORD *pdwSkip, DWORD *pdwFlags);
6421#define CryptStringToBinary WINELIB_NAME_AW(CryptStringToBinary)
6422
6423WINCRYPT32API BOOL WINAPI CryptCreateAsyncHandle(DWORD dwFlags, PHCRYPTASYNC phAsync);
6424WINCRYPT32API BOOL WINAPI CryptSetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,
6425 LPVOID pvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);
6426WINCRYPT32API BOOL WINAPI CryptGetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,
6427 LPVOID *ppvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree);
6428WINCRYPT32API BOOL WINAPI CryptCloseAsyncHandle(HCRYPTASYNC hAsync);
6429
6430WINCRYPT32API BOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD,LPCSTR,DWORD,LPCWSTR);
6431WINCRYPT32API BOOL WINAPI CryptRegisterOIDFunction(DWORD,LPCSTR,LPCSTR,LPCWSTR,LPCSTR);
6432WINCRYPT32API BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
6433 LPCSTR pszOID, LPCWSTR szValueName, DWORD *pdwValueType,
6434 BYTE *pbValueData, DWORD *pcbValueData);
6435WINCRYPT32API BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
6436 LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType,
6437 const BYTE *pbValueData, DWORD cbValueData);
6438WINCRYPT32API BOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD,LPCSTR,LPCWSTR);
6439WINCRYPT32API BOOL WINAPI CryptUnregisterOIDFunction(DWORD,LPCSTR,LPCSTR);
6440WINCRYPT32API BOOL WINAPI CryptEnumOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName,
6441 LPCSTR pszOID, DWORD dwFlags, void *pvArg,
6442 PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);
6443WINCRYPT32API HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR,DWORD);
6444WINCRYPT32API BOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet,
6445 DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList);
6446WINCRYPT32API BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
6447 DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr,
6448 HCRYPTOIDFUNCADDR *phFuncAddr);
6449WINCRYPT32API BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
6450 DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr,
6451 HCRYPTOIDFUNCADDR *phFuncAddr);
6452WINCRYPT32API BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr,
6453 DWORD dwFlags);
6454WINCRYPT32API BOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule,
6455 DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry,
6456 const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags);
6457WINCRYPT32API BOOL WINAPI CryptInstallDefaultContext(HCRYPTPROV hCryptProv,
6458 DWORD dwDefaultType, const void *pvDefaultPara, DWORD dwFlags,
6459 void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext);
6460WINCRYPT32API BOOL WINAPI CryptUninstallDefaultContext(HCRYPTDEFAULTCONTEXT hDefaultContext,
6461 DWORD dwFlags, void *pvReserved);
6462
6463WINCRYPT32API BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg,
6464 PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);
6465WINCRYPT32API PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,
6466 DWORD dwGroupId);
6467WINCRYPT32API BOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo, DWORD dwFlags);
6468WINCRYPT32API BOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO pInfo);
6469
6470WINCRYPT32API LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName);
6471
6472WINCRYPT32API LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId);
6473WINCRYPT32API DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId);
6474
6475/* cert store functions */
6476WINCRYPT32API HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType,
6477 HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara);
6478
6479WINCRYPT32API HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv,
6480 LPCSTR szSubSystemProtocol);
6481WINCRYPT32API HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv,
6482 LPCWSTR szSubSystemProtocol);
6483#define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore)
6484
6485WINCRYPT32API PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore,
6486 PCCERT_CONTEXT pPrev);
6487
6488WINCRYPT32API PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore,
6489 PCCRL_CONTEXT pPrev);
6490
6491WINCRYPT32API PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore,
6492 PCCTL_CONTEXT pPrev);
6493
6494WINCRYPT32API BOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags, void *pvArg,
6495 PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
6496
6497WINCRYPT32API BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara,
6498 void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
6499
6500WINCRYPT32API BOOL WINAPI CertRegisterSystemStore(const void *store, DWORD flags,
6501 CERT_SYSTEM_STORE_INFO *info, void *reserved);
6502
6503WINCRYPT32API BOOL WINAPI CertUnregisterSystemStore(const void *store, DWORD flags);
6504
6505WINCRYPT32API BOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
6506 void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
6507
6508WINCRYPT32API BOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
6509 LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved);
6510
6511WINCRYPT32API BOOL WINAPI CertUnregisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
6512 LPCWSTR pwszStoreName);
6513
6514WINCRYPT32API BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
6515 DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags);
6516
6517WINCRYPT32API BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,
6518 HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority);
6519
6520WINCRYPT32API void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore,
6521 HCERTSTORE hSiblingStore);
6522
6523WINCRYPT32API BOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig,
6524 HCERTCHAINENGINE *phChainEngine);
6525
6526WINCRYPT32API BOOL WINAPI CertResyncCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
6527
6528WINCRYPT32API VOID WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
6529
6530WINCRYPT32API BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,
6531 PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore,
6532 PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved,
6533 PCCERT_CHAIN_CONTEXT *ppChainContext);
6534
6535WINCRYPT32API PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain(
6536 PCCERT_CHAIN_CONTEXT pChainContext);
6537
6538WINCRYPT32API VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext);
6539
6540WINCRYPT32API PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore,
6541 DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
6542 const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext);
6543
6544WINCRYPT32API BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID,
6545 PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara,
6546 PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
6547
6548WINCRYPT32API DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext,
6549 DWORD dwPropId);
6550
6551WINCRYPT32API BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
6552 DWORD dwPropId, void *pvData, DWORD *pcbData);
6553
6554WINCRYPT32API BOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
6555 DWORD dwPropId, DWORD dwFlags, const void *pvData);
6556
6557WINCRYPT32API DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext,
6558 DWORD dwPropId);
6559
6560WINCRYPT32API BOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCRLContext,
6561 DWORD dwPropId, void *pvData, DWORD *pcbData);
6562
6563WINCRYPT32API BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext,
6564 DWORD dwPropId, DWORD dwFlags, const void *pvData);
6565
6566WINCRYPT32API DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCTLContext,
6567 DWORD dwPropId);
6568
6569WINCRYPT32API BOOL WINAPI CertEnumSubjectInSortedCTL(PCCTL_CONTEXT pCTLContext,
6570 void **ppvNextSubject, PCRYPT_DER_BLOB pSubjectIdentifier,
6571 PCRYPT_DER_BLOB pEncodedAttributes);
6572
6573WINCRYPT32API BOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCTLContext,
6574 DWORD dwPropId, void *pvData, DWORD *pcbData);
6575
6576WINCRYPT32API BOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCTLContext,
6577 DWORD dwPropId, DWORD dwFlags, const void *pvData);
6578
6579WINCRYPT32API BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
6580 void *pvData, DWORD *pcbData);
6581
6582WINCRYPT32API BOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
6583 DWORD dwFlags, const void *pvData);
6584
6585WINCRYPT32API BOOL WINAPI CertControlStore(HCERTSTORE hCertStore, DWORD dwFlags,
6586 DWORD dwCtrlType, void const *pvCtrlPara);
6587
6588WINCRYPT32API HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore);
6589
6590WINCRYPT32API BOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags );
6591
6592WINCRYPT32API BOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext );
6593
6594WINCRYPT32API BOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext );
6595
6596WINCRYPT32API BOOL WINAPI CertFreeCTLContext( PCCTL_CONTEXT pCtlContext );
6597
6598WINCRYPT32API BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,
6599 PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,
6600 PCCERT_CONTEXT *ppStoreContext);
6601
6602WINCRYPT32API BOOL WINAPI CertAddCRLContextToStore( HCERTSTORE hCertStore,
6603 PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
6604 PCCRL_CONTEXT *ppStoreContext );
6605
6606WINCRYPT32API BOOL WINAPI CertAddCTLContextToStore( HCERTSTORE hCertStore,
6607 PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,
6608 PCCTL_CONTEXT *ppStoreContext );
6609
6610WINCRYPT32API BOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore,
6611 PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,
6612 PCCERT_CONTEXT *ppStoreContext);
6613
6614WINCRYPT32API BOOL WINAPI CertAddCRLLinkToStore(HCERTSTORE hCertStore,
6615 PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
6616 PCCRL_CONTEXT *ppStoreContext);
6617
6618WINCRYPT32API BOOL WINAPI CertAddCTLLinkToStore(HCERTSTORE hCertStore,
6619 PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,
6620 PCCTL_CONTEXT *ppStoreContext);
6621
6622WINCRYPT32API BOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore,
6623 DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded,
6624 DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext);
6625
6626WINCRYPT32API BOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR pszCertStoreName,
6627 const BYTE *pbCertEncoded, DWORD cbCertEncoded);
6628WINCRYPT32API BOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR pszCertStoreName,
6629 const BYTE *pbCertEncoded, DWORD cbCertEncoded);
6630#define CertAddEncodedCertificateToSystemStore \
6631 WINELIB_NAME_AW(CertAddEncodedCertificateToSystemStore)
6632
6633WINCRYPT32API BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore,
6634 DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded,
6635 DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext);
6636
6637WINCRYPT32API BOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore,
6638 DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded,
6639 DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext);
6640
6641WINCRYPT32API BOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore,
6642 const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags,
6643 DWORD dwContextTypeFlags, DWORD *pdwContentType, const void **ppvContext);
6644
6645WINCRYPT32API BOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType,
6646 PCERT_INFO pCertId1, PCERT_INFO pCertId2);
6647WINCRYPT32API BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType,
6648 PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2);
6649WINCRYPT32API BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1,
6650 PCRYPT_INTEGER_BLOB pInt2);
6651WINCRYPT32API BOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType,
6652 PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2);
6653WINCRYPT32API DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType,
6654 PCERT_PUBLIC_KEY_INFO pPublicKey);
6655
6656WINCRYPT32API const void * WINAPI CertCreateContext(DWORD dwContextType, DWORD dwEncodingType,
6657 const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
6658 PCERT_CREATE_CONTEXT_PARA pCreatePara);
6659
6660WINCRYPT32API PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,
6661 const BYTE *pbCertEncoded, DWORD cbCertEncoded);
6662
6663WINCRYPT32API PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType,
6664 const BYTE* pbCrlEncoded, DWORD cbCrlEncoded);
6665
6666WINCRYPT32API PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,
6667 const BYTE *pbCtlEncoded, DWORD cbCtlEncoded);
6668
6669WINCRYPT32API PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv,
6670 PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags,
6671 PCRYPT_KEY_PROV_INFO pKeyProvInfo,
6672 PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime,
6673 PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions);
6674
6675WINCRYPT32API BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext);
6676
6677WINCRYPT32API BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext);
6678
6679WINCRYPT32API BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext);
6680
6681WINCRYPT32API PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(
6682 PCCERT_CONTEXT pCertContext);
6683
6684WINCRYPT32API PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext);
6685
6686WINCRYPT32API PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext);
6687
6688WINCRYPT32API PCCERT_CONTEXT WINAPI CertFindCertificateInStore( HCERTSTORE hCertStore,
6689 DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
6690 const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext );
6691
6692WINCRYPT32API PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore,
6693 DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
6694 const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext);
6695
6696WINCRYPT32API PCCTL_CONTEXT WINAPI CertFindCTLInStore(HCERTSTORE hCertStore,
6697 DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
6698 const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext);
6699
6700WINCRYPT32API PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore,
6701 PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext,
6702 DWORD *pdwFlags);
6703
6704WINCRYPT32API PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore,
6705 DWORD dwCertEncodingType, PCERT_INFO pCertId);
6706
6707WINCRYPT32API PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore,
6708 PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags);
6709
6710WINCRYPT32API BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,
6711 DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
6712
6713WINCRYPT32API BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,
6714 DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
6715
6716WINCRYPT32API BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,
6717 DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
6718
6719WINCRYPT32API BOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType,
6720 PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage);
6721
6722WINCRYPT32API BOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, DWORD dwFlags,
6723 PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage);
6724WINCRYPT32API BOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext,
6725 PCERT_ENHKEY_USAGE pUsage);
6726WINCRYPT32API BOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,
6727 LPCSTR pszUsageIdentifier);
6728WINCRYPT32API BOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,
6729 LPCSTR pszUsageIdentifier);
6730WINCRYPT32API BOOL WINAPI CertGetValidUsages(DWORD cCerts, PCCERT_CONTEXT *rghCerts,
6731 int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs);
6732
6733WINCRYPT32API BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,
6734 const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
6735WINCRYPT32API BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
6736 const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara,
6737 void *pvEncoded, DWORD *pcbEncoded);
6738
6739WINCRYPT32API BOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,
6740 const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo,
6741 DWORD *pcbStructInfo);
6742WINCRYPT32API BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
6743 const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
6744 PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo);
6745
6746WINCRYPT32API BOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType, DWORD dwFormatType,
6747 DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType,
6748 const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat);
6749
6750WINCRYPT32API BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,
6751 DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,
6752 DWORD *pcbComputedHash);
6753
6754WINCRYPT32API BOOL WINAPI CryptHashCertificate2(LPCWSTR pwszCNGHashAlgid, DWORD dwFlags,
6755 void *pvReserved, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,
6756 DWORD *pcbComputedHash);
6757
6758WINCRYPT32API BOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,
6759 DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo,
6760 BYTE *pbComputedHash, DWORD *pcbComputedHash);
6761
6762WINCRYPT32API BOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType,
6763 const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,
6764 DWORD *pcbComputedHash);
6765
6766WINCRYPT32API BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void* pvObject,
6767 DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags,
6768 DWORD dwFlags, DWORD* pdwMsgAndCertEncodingType, DWORD* pdwContentType,
6769 DWORD* pdwFormatType, HCERTSTORE* phCertStore, HCRYPTMSG* phMsg,
6770 const void** ppvContext);
6771
6772WINCRYPT32API BOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
6773 DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned,
6774 DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
6775 const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature);
6776
6777WINCRYPT32API BOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv,
6778 DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType,
6779 const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
6780 const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
6781
6782WINCRYPT32API BOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV_LEGACY hCryptProv,
6783 DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded,
6784 PCERT_PUBLIC_KEY_INFO pPublicKey);
6785
6786WINCRYPT32API BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv,
6787 DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject,
6788 DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved);
6789
6790WINCRYPT32API PCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId, DWORD cAttr,
6791 CRYPT_ATTRIBUTE rgAttr[]);
6792WINCRYPT32API PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions,
6793 CERT_EXTENSION rgExtensions[]);
6794WINCRYPT32API PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName);
6795
6796WINCRYPT32API BOOL WINAPI CertFindSubjectInSortedCTL(PCRYPT_DATA_BLOB pSubjectIdentifier,
6797 PCCTL_CONTEXT pCtlContext, DWORD dwFlags, void *pvReserved,
6798 PCRYPT_DER_BLOB pEncodedAttributes);
6799
6800WINCRYPT32API BOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType,
6801 DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN);
6802
6803WINCRYPT32API BOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert,
6804 PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved);
6805WINCRYPT32API BOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert,
6806 PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved,
6807 PCRL_ENTRY *ppCrlEntry);
6808WINCRYPT32API BOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType,
6809 PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[]);
6810
6811WINCRYPT32API BOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject,
6812 PCCERT_CONTEXT pIssuer, DWORD *pdwFlags);
6813
6814WINCRYPT32API LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify,
6815 PCRL_INFO pCrlInfo);
6816WINCRYPT32API LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify,
6817 PCERT_INFO pCertInfo);
6818WINCRYPT32API BOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo,
6819 PCERT_INFO pIssuerInfo);
6820
6821WINCRYPT32API BOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType, DWORD dwSubjectType,
6822 void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags,
6823 PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,
6824 PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);
6825
6826WINCRYPT32API BOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType, DWORD dwRevType,
6827 DWORD cContext, PVOID rgpvContext[], DWORD dwFlags,
6828 PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus);
6829
6830WINCRYPT32API BOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
6831 DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
6832WINCRYPT32API BOOL WINAPI CryptExportPublicKeyInfoEx(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
6833 DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags,
6834 void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
6835WINCRYPT32API BOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv,
6836 DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey);
6837WINCRYPT32API BOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv,
6838 DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg,
6839 DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey);
6840WINCRYPT32API BOOL WINAPI CryptImportPublicKeyInfoEx2(DWORD dwCertEncodingType,
6841 PCERT_PUBLIC_KEY_INFO pInfo, DWORD dwFlags, void *pvAuxInfo,
6842 BCRYPT_KEY_HANDLE *phKey);
6843
6844WINCRYPT32API BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert,
6845 DWORD dwFlags, void *pvReserved, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProv, DWORD *pdwKeySpec,
6846 BOOL *pfCallerFreeProv);
6847
6848WINCRYPT32API BOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert,
6849 DWORD dwFlags, void *pvReserved);
6850
6851WINCRYPT32API BOOL WINAPI CryptProtectData( DATA_BLOB* pDataIn, LPCWSTR szDataDescr,
6852 DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
6853 CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
6854
6855WINCRYPT32API BOOL WINAPI CryptUnprotectData( DATA_BLOB* pDataIn, LPWSTR* ppszDataDescr,
6856 DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
6857 CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
6858
6859WINCRYPT32API BOOL WINAPI CryptProtectMemory(void *pData, DWORD cbData, DWORD dwFlags);
6860WINCRYPT32API BOOL WINAPI CryptUnprotectMemory(void *pData, DWORD cbData, DWORD dwFlags);
6861
6862WINCRYPT32API DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType,
6863 DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString);
6864WINCRYPT32API DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType,
6865 DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString);
6866#define CertGetNameString WINELIB_NAME_AW(CertGetNameString)
6867
6868WINCRYPT32API DWORD WINAPI CertRDNValueToStrA(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
6869 LPSTR psz, DWORD csz);
6870WINCRYPT32API DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
6871 LPWSTR psz, DWORD csz);
6872#define CertRDNValueToStr WINELIB_NAME_AW(CertRDNValueToStr)
6873
6874WINCRYPT32API DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
6875 DWORD dwStrType, LPSTR psz, DWORD csz);
6876WINCRYPT32API DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
6877 DWORD dwStrType, LPWSTR psz, DWORD csz);
6878#define CertNameToStr WINELIB_NAME_AW(CertNameToStr)
6879
6880WINCRYPT32API BOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500,
6881 DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,
6882 LPCSTR *ppszError);
6883WINCRYPT32API BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500,
6884 DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,
6885 LPCWSTR *ppszError);
6886#define CertStrToName WINELIB_NAME_AW(CertStrToName)
6887
6888WINCRYPT32API DWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType,
6889 DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo,
6890 LPSTR pszInnerContentObjID, DWORD cbData);
6891
6892WINCRYPT32API BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg);
6893
6894WINCRYPT32API BOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags,
6895 DWORD dwCtrlType, const void *pvCtrlPara);
6896
6897WINCRYPT32API BOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg, DWORD dwIndex,
6898 DWORD dwCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners);
6899
6900WINCRYPT32API BOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType, PBYTE pbSignerInfo,
6901 DWORD cbSignerInfo, DWORD cCountersigners,
6902 PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature,
6903 PDWORD pcbCountersignature);
6904
6905WINCRYPT32API HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg);
6906
6907WINCRYPT32API BOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType,
6908 PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,
6909 BYTE *pbEncoded, DWORD *pcbEncoded);
6910
6911WINCRYPT32API BOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg, DWORD cSignerStore,
6912 HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner,
6913 DWORD *pdwSignerIndex);
6914
6915WINCRYPT32API BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
6916 DWORD dwIndex, void *pvData, DWORD *pcbData);
6917
6918WINCRYPT32API HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags,
6919 DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo,
6920 PCMSG_STREAM_INFO pStreamInfo);
6921
6922WINCRYPT32API HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags,
6923 DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID,
6924 PCMSG_STREAM_INFO pStreamInfo);
6925
6926WINCRYPT32API BOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType, BYTE *pbCtlContent,
6927 DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,
6928 BYTE *pbEncoded, DWORD *pcbEncoded);
6929
6930WINCRYPT32API BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData,
6931 DWORD cbData, BOOL fFinal);
6932
6933WINCRYPT32API BOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV_LEGACY hCryptProv,
6934 DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,
6935 PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,
6936 PCERT_INFO pciCountersigner);
6937
6938WINCRYPT32API BOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV_LEGACY hCryptProv,
6939 DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,
6940 PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,
6941 DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvReserved);
6942
6943WINCRYPT32API BOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,
6944 BOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[],
6945 DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
6946WINCRYPT32API BOOL WINAPI CryptSignMessageWithKey(PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara,
6947 const BYTE *pbToBeSigned, DWORD cbToBeSigned, BYTE *pbSignedBlob,
6948 DWORD *pcbSignedBlob);
6949
6950WINCRYPT32API BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
6951 DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob,
6952 BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert);
6953WINCRYPT32API BOOL WINAPI CryptVerifyMessageSignatureWithKey(
6954 PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,
6955 PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, const BYTE *pbSignedBlob,
6956 DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded);
6957
6958WINCRYPT32API BOOL WINAPI CryptVerifyDetachedMessageSignature(
6959 PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
6960 const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned,
6961 const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[],
6962 PCCERT_CONTEXT *ppSignerCert);
6963WINCRYPT32API LONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType,
6964 const BYTE *pbSignedBlob, DWORD cbSignedBlob);
6965
6966WINCRYPT32API BOOL WINAPI CryptEncryptMessage(PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
6967 DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[],
6968 const BYTE *pbToBeEncrypted, DWORD cbToBeEncrypted, BYTE *pbEncryptedBlob,
6969 DWORD *pcbEncryptedBlob);
6970WINCRYPT32API BOOL WINAPI CryptDecryptMessage(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
6971 const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,
6972 DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert);
6973
6974WINCRYPT32API BOOL WINAPI CryptSignAndEncryptMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,
6975 PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert,
6976 PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeSignedAndEncrypted,
6977 DWORD cbToBeSignedAndEncrypted, BYTE *pbSignedAndEncryptedBlob,
6978 DWORD *pcbSignedAndEncryptedBlob);
6979WINCRYPT32API BOOL WINAPI CryptDecryptAndVerifyMessageSignature(
6980 PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
6981 PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
6982 const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,
6983 DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
6984
6985WINCRYPT32API HCERTSTORE WINAPI CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType,
6986 HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const BYTE *pbSignedBlob,
6987 DWORD cbSignedBlob);
6988
6989WINCRYPT32API BOOL WINAPI CryptDecodeMessage(DWORD dwMsgTypeFlags,
6990 PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
6991 PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
6992 const BYTE *pbEncodedBlob, DWORD cbEncodedBlob, DWORD dwPrevInnerContentType,
6993 DWORD *pdwMsgType, DWORD *pdwInnerContentType, BYTE *pbDecoded,
6994 DWORD *pcbDecoded, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
6995
6996WINCRYPT32API BOOL WINAPI CryptHashMessage(PCRYPT_HASH_MESSAGE_PARA pHashPara,
6997 BOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[],
6998 DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob,
6999 BYTE *pbComputedHash, DWORD *pcbComputedHash);
7000WINCRYPT32API BOOL WINAPI CryptVerifyMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,
7001 BYTE *pbHashedBlob, DWORD cbHashedBlob, BYTE *pbToBeHashed,
7002 DWORD *pcbToBeHashed, BYTE *pbComputedHash, DWORD *pcbComputedHash);
7003WINCRYPT32API BOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,
7004 BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed,
7005 const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash,
7006 DWORD *pcbComputedHash);
7007
7008/* PFX functions */
7009WINCRYPT32API HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
7010 DWORD dwFlags);
7011WINCRYPT32API BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX);
7012WINCRYPT32API BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
7013 DWORD dwFlags);
7014WINCRYPT32API BOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
7015 LPCWSTR szPassword, void *pvReserved, DWORD dwFlags);
7016WINCRYPT32API BOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
7017 LPCWSTR szPassword, DWORD dwFlags);
7018
7019/* cryptnet.dll functions */
7020BOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval);
7021
7022BOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags,
7023 PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo,
7024 DWORD *pcbUrlInfo, LPVOID pvReserved);
7025
7026BOOL WINAPI CryptGetTimeValidObject(LPCSTR pszTimeValidOid, void *pvPara,
7027 PCCERT_CONTEXT pIssuer, LPFILETIME pftValidFor, DWORD dwFlags, DWORD dwTimeout,
7028 void **ppvObject, PCRYPT_CREDENTIALS pCredentials, void *pvReserved);
7029
7030BOOL WINAPI CryptFlushTimeValidObject(LPCSTR pszFlushTimeValidOid, void *pvPara,
7031 PCCERT_CONTEXT pIssuer, DWORD dwFlags, void *pvReserved);
7032
7033BOOL WINAPI CryptInstallCancelRetrieval(PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel,
7034 const void *pvArg, DWORD dwFlags, void *pvReserved);
7035
7036BOOL WINAPI CryptUninstallCancelRetrieval(DWORD dwFlags, void *pvReserved);
7037
7038BOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszURL, LPCSTR pszObjectOid,
7039 DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,
7040 HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,
7041 PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
7042BOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszURL, LPCSTR pszObjectOid,
7043 DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,
7044 HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,
7045 PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
7046#define CryptRetrieveObjectByUrl WINELIB_NAME_AW(CryptRetrieveObjectByUrl)
7047
7048/* Not found in crypt32.dll but in softpub.dll */
7049HRESULT WINAPI FindCertsByIssuer(PCERT_CHAIN pCertChains, DWORD *pcbCertChains,
7050 DWORD *pcCertChains, BYTE* pbEncodedIssuerName, DWORD cbEncodedIssuerName,
7051 LPCWSTR pwszPurpose, DWORD dwKeySpec);
7052#endif
7053
7054#ifdef __cplusplus
7055}
7056#endif
7057
7058#endif