Reactos
at master 7058 lines 264 kB view raw
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