wincrypt.h 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097
  1. /*
  2. * Copyright (C) 2002 Travis Michielsen
  3. *
  4. * This library is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with this library; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  17. */
  18. #ifndef __WINE_WINCRYPT_H
  19. #define __WINE_WINCRYPT_H
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. /* some typedefs for function parameters */
  24. typedef unsigned int ALG_ID;
  25. typedef unsigned long HCRYPTPROV;
  26. typedef unsigned long HCRYPTKEY;
  27. typedef unsigned long HCRYPTHASH;
  28. typedef void *HCERTSTORE;
  29. typedef void *HCRYPTMSG;
  30. /* CSP Structs */
  31. typedef struct _PROV_ENUMALGS {
  32. ALG_ID aiAlgid;
  33. DWORD dwBitLen;
  34. DWORD dwNameLen;
  35. CHAR szName[20];
  36. } PROV_ENUMALGS;
  37. typedef struct _PROV_ENUMALGS_EX {
  38. ALG_ID aiAlgid;
  39. DWORD dwDefaultLen;
  40. DWORD dwMinLen;
  41. DWORD dwMaxLen;
  42. DWORD dwProtocols;
  43. DWORD dwNameLen;
  44. CHAR szName[20];
  45. DWORD dwLongNameLen;
  46. CHAR szLongName[40];
  47. } PROV_ENUMALGS_EX;
  48. #define SCHANNEL_MAC_KEY 0
  49. #define SCHANNEL_ENC_KEY 1
  50. typedef struct _SCHANNEL_ALG {
  51. DWORD dwUse;
  52. ALG_ID Algid;
  53. DWORD cBits;
  54. DWORD dwFlags;
  55. DWORD dwReserved;
  56. } SCHANNEL_ALG, *PSCHANNEL_ALG;
  57. typedef struct _HMAC_INFO {
  58. ALG_ID HashAlgid;
  59. BYTE* pbInnerString;
  60. DWORD cbInnerString;
  61. BYTE* pbOuterString;
  62. DWORD cbOuterString;
  63. } HMAC_INFO, *PHMAC_INFO;
  64. typedef struct _CRYPTOAPI_BLOB {
  65. DWORD cbData;
  66. BYTE* pbData;
  67. } CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
  68. CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB,
  69. CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
  70. CERT_NAME_BLOB, *PCERT_NAME_BLOB,
  71. CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
  72. CERT_BLOB, *PCERT_BLOB,
  73. CRL_BLOB, *PCRL_BLOB,
  74. DATA_BLOB, *PDATA_BLOB,
  75. CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB,
  76. CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB,
  77. CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
  78. CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
  79. CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
  80. typedef struct _CRYPTPROTECT_PROMPTSTRUCT{
  81. DWORD cbSize;
  82. DWORD dwPromptFlags;
  83. HWND hwndApp;
  84. LPCWSTR szPrompt;
  85. } CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;
  86. typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
  87. LPSTR pszObjId;
  88. CRYPT_OBJID_BLOB Parameters;
  89. } CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
  90. typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
  91. LPSTR pszObjId;
  92. CRYPT_OBJID_BLOB Value;
  93. } CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
  94. typedef struct _PUBLICKEYSTRUC {
  95. BYTE bType;
  96. BYTE bVersion;
  97. WORD reserved;
  98. ALG_ID aiKeyAlg;
  99. } BLOBHEADER, PUBLICKEYSTRUC;
  100. typedef struct _RSAPUBKEY {
  101. DWORD magic;
  102. DWORD bitlen;
  103. DWORD pubexp;
  104. } RSAPUBKEY;
  105. typedef struct _CRYPT_BIT_BLOB {
  106. DWORD cbData;
  107. BYTE *pbData;
  108. DWORD cUnusedBits;
  109. } CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
  110. typedef struct _CERT_PUBLIC_KEY_INFO {
  111. CRYPT_ALGORITHM_IDENTIFIER Algorithm;
  112. CRYPT_BIT_BLOB PublicKey;
  113. } CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
  114. typedef struct _CERT_EXTENSION {
  115. LPSTR pszObjId;
  116. BOOL fCritical;
  117. CRYPT_OBJID_BLOB Value;
  118. } CERT_EXTENSION, *PCERT_EXTENSION;
  119. typedef struct _CERT_INFO {
  120. DWORD dwVersion;
  121. CRYPT_INTEGER_BLOB SerialNumber;
  122. CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
  123. CERT_NAME_BLOB Issuer;
  124. FILETIME NotBefore;
  125. FILETIME NotAfter;
  126. CERT_NAME_BLOB Subject;
  127. CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
  128. CRYPT_BIT_BLOB IssuerUniqueId;
  129. CRYPT_BIT_BLOB SubjectUniqueId;
  130. DWORD cExtension;
  131. PCERT_EXTENSION rgExtension;
  132. } CERT_INFO, *PCERT_INFO;
  133. typedef struct _CERT_CONTEXT {
  134. DWORD dwCertEncodingType;
  135. BYTE *pbCertEncoded;
  136. DWORD cbCertEncoded;
  137. PCERT_INFO pCertInfo;
  138. HCERTSTORE hCertStore;
  139. } CERT_CONTEXT, *PCERT_CONTEXT;
  140. typedef const CERT_CONTEXT *PCCERT_CONTEXT;
  141. typedef struct _CRL_ENTRY {
  142. CRYPT_INTEGER_BLOB SerialNumber;
  143. FILETIME RevocationDate;
  144. DWORD cExtension;
  145. PCERT_EXTENSION rgExtension;
  146. } CRL_ENTRY, *PCRL_ENTRY;
  147. typedef struct _CRL_INFO {
  148. DWORD dwVersion;
  149. CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
  150. CERT_NAME_BLOB Issuer;
  151. FILETIME ThisUpdate;
  152. FILETIME NextUpdate;
  153. DWORD cCRLEntry;
  154. PCRL_ENTRY rgCRLEntry;
  155. DWORD cExtension;
  156. PCERT_EXTENSION rgExtension;
  157. } CRL_INFO, *PCRL_INFO;
  158. typedef struct _CRL_CONTEXT {
  159. DWORD dwCertEncodingType;
  160. BYTE *pbCrlEncoded;
  161. DWORD cbCrlEncoded;
  162. PCRL_INFO pCrlInfo;
  163. HCERTSTORE hCertStore;
  164. } CRL_CONTEXT, *PCRL_CONTEXT;
  165. typedef const CRL_CONTEXT *PCCRL_CONTEXT;
  166. typedef struct _VTableProvStruc {
  167. DWORD Version;
  168. FARPROC pFuncVerifyImage;
  169. FARPROC pFuncReturnhWnd;
  170. DWORD dwProvType;
  171. BYTE *pbContextInfo;
  172. DWORD cbContextInfo;
  173. LPSTR pszProvName;
  174. } VTableProvStruc, *PVTableProvStruc;
  175. typedef struct _CRYPT_ATTRIBUTE {
  176. LPSTR pszObjId;
  177. DWORD cValue;
  178. CRYPT_DATA_BLOB rgValue;
  179. } CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
  180. typedef struct _CRYPT_ATTRIBUTES {
  181. DWORD cAttr;
  182. PCRYPT_ATTRIBUTE rgAttr;
  183. } CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
  184. typedef struct _CTL_USAGE {
  185. DWORD cUsageIdentifier;
  186. LPSTR *rgpszUsageIdentifier;
  187. } CTL_USAGE, *PCTL_USAGE, CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
  188. typedef struct _CTL_ENTRY {
  189. CRYPT_DATA_BLOB SubjectIdentifier;
  190. DWORD cAttribute;
  191. PCRYPT_ATTRIBUTE rgAttribute;
  192. } CTL_ENTRY, *PCTL_ENTRY;
  193. typedef struct _CTL_INFO {
  194. DWORD dwVersion;
  195. CTL_USAGE SubjectUsage;
  196. CRYPT_DATA_BLOB ListIdentifier;
  197. CRYPT_INTEGER_BLOB SequenceNumber;
  198. FILETIME ThisUpdate;
  199. FILETIME NextUpdate;
  200. CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
  201. DWORD cCTLEntry;
  202. PCTL_ENTRY rgCTLEntry;
  203. DWORD cExtension;
  204. PCERT_EXTENSION rgExtension;
  205. } CTL_INFO, *PCTL_INFO;
  206. typedef struct _CTL_CONTEXT {
  207. DWORD dwMsgAndCertEncodingType;
  208. BYTE *pbCtlEncoded;
  209. DWORD cbCtlEncoded;
  210. PCTL_INFO pCtlInfo;
  211. HCERTSTORE hCertStore;
  212. HCRYPTMSG hCryptMsg;
  213. BYTE *pbCtlContext;
  214. DWORD cbCtlContext;
  215. } CTL_CONTEXT, *PCTL_CONTEXT;
  216. typedef const CTL_CONTEXT *PCCTL_CONTEXT;
  217. typedef struct _CMSG_SIGNER_INFO {
  218. DWORD dwVersion;
  219. CERT_NAME_BLOB Issuer;
  220. CRYPT_INTEGER_BLOB SerialNumber;
  221. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  222. CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
  223. CRYPT_DATA_BLOB EncryptedHash;
  224. CRYPT_ATTRIBUTES AuthAttrs;
  225. CRYPT_ATTRIBUTES UnauthAttrs;
  226. } CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO;
  227. typedef struct _CERT_REVOCATION_CRL_INFO {
  228. DWORD cbSize;
  229. PCCRL_CONTEXT pBaseCrlContext;
  230. PCCRL_CONTEXT pDeltaCrlContext;
  231. PCRL_ENTRY pCrlEntry;
  232. BOOL fDeltaCrlEntry;
  233. } CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
  234. typedef struct _CERT_REVOCATION_INFO {
  235. DWORD cbSize;
  236. DWORD dwRevocationResult;
  237. LPCSTR pszRevocationOid;
  238. LPVOID pvOidSpecificInfo;
  239. BOOL fHasFreshnessTime;
  240. DWORD dwFreshnessTime;
  241. PCERT_REVOCATION_CRL_INFO pCrlInfo;
  242. } CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
  243. typedef struct _CERT_TRUST_LIST_INFO {
  244. DWORD cbSize;
  245. PCTL_ENTRY pCtlEntry;
  246. PCCTL_CONTEXT pCtlContext;
  247. } CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
  248. typedef struct _CERT_TRUST_STATUS {
  249. DWORD dwErrorStatus;
  250. DWORD dwInfoStatus;
  251. } CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
  252. typedef struct _CERT_CHAIN_ELEMENT {
  253. DWORD cbSize;
  254. PCCERT_CONTEXT pCertContext;
  255. CERT_TRUST_STATUS TrustStatus;
  256. PCERT_REVOCATION_INFO pRevocationInfo;
  257. PCERT_ENHKEY_USAGE pIssuanceUsage;
  258. PCERT_ENHKEY_USAGE pApplicationUsage;
  259. LPCWSTR pwszExtendedErrorInfo;
  260. } CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
  261. typedef struct _CERT_SIMPLE_CHAIN {
  262. DWORD cbSize;
  263. CERT_TRUST_STATUS TrustStatus;
  264. DWORD cElement;
  265. PCERT_CHAIN_ELEMENT *rgpElement;
  266. PCERT_TRUST_LIST_INFO pTrustListInfo;
  267. BOOL fHasRevocationFreshnessTime;
  268. DWORD dwRevocationFreshnessTime;
  269. } CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
  270. typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
  271. typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;
  272. struct _CERT_CHAIN_CONTEXT {
  273. DWORD cbSize;
  274. CERT_TRUST_STATUS TrustStatus;
  275. DWORD cChain;
  276. PCERT_SIMPLE_CHAIN *rgpChain;
  277. DWORD cLowerQualityChainContext;
  278. PCCERT_CHAIN_CONTEXT *rgbLowerQualityChainContext;
  279. BOOL fHasRevocationFreshnessTime;
  280. DWORD dwRevocationFreshnessTime;
  281. };
  282. typedef struct _CERT_CHAIN_POLICY_PARA {
  283. DWORD cbSize;
  284. DWORD dwFlags;
  285. void *pvExtraPolicyPara;
  286. } CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
  287. typedef struct _CERT_CHAIN_POLICY_STATUS {
  288. DWORD cbSize;
  289. DWORD dwError;
  290. LONG lChainIndex;
  291. LONG lElementIndex;
  292. void *pvExtraPolicyStatus;
  293. } CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;
  294. typedef struct _CERT_SYSTEM_STORE_INFO {
  295. DWORD cbSize;
  296. } CERT_SYSTEM_STORE_INFO, *PCERT_SYSTEM_STORE_INFO;
  297. typedef struct _CERT_PHYSICAL_STORE_INFO {
  298. DWORD cbSize;
  299. LPSTR pszOpenStoreProvider;
  300. DWORD dwOpenEncodingType;
  301. DWORD dwOpenFlags;
  302. CRYPT_DATA_BLOB OpenParameters;
  303. DWORD dwFlags;
  304. DWORD dwPriority;
  305. } CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO;
  306. typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {
  307. union {
  308. HKEY hKeyBase;
  309. VOID *pvBase;
  310. } DUMMYUNIONNAME;
  311. union {
  312. void *pvSystemStore;
  313. LPCSTR pszSystemStore;
  314. LPCWSTR pwszSystemStore;
  315. } DUMMYUNIONNAME2;
  316. } CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA;
  317. typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(
  318. LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg);
  319. typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore,
  320. DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved,
  321. void *pvArg);
  322. typedef BOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore,
  323. DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo,
  324. void *pvReserved, void *pvArg);
  325. /* Algorithm IDs */
  326. #define GET_ALG_CLASS(x) (x & (7 << 13))
  327. #define GET_ALG_TYPE(x) (x & (15 << 9))
  328. #define GET_ALG_SID(x) (x & (511))
  329. /* Algorithm Classes */
  330. #define ALG_CLASS_ANY (0)
  331. #define ALG_CLASS_SIGNATURE (1 << 13)
  332. #define ALG_CLASS_MSG_ENCRYPT (2 << 13)
  333. #define ALG_CLASS_DATA_ENCRYPT (3 << 13)
  334. #define ALG_CLASS_HASH (4 << 13)
  335. #define ALG_CLASS_KEY_EXCHANGE (5 << 13)
  336. /* Algorithm types */
  337. #define ALG_TYPE_ANY (0)
  338. #define ALG_TYPE_DSS (1 << 9)
  339. #define ALG_TYPE_RSA (2 << 9)
  340. #define ALG_TYPE_BLOCK (3 << 9)
  341. #define ALG_TYPE_STREAM (4 << 9)
  342. #define ALG_TYPE_DH (5 << 9)
  343. #define ALG_TYPE_SECURECHANNEL (6 << 9)
  344. /* SIDs */
  345. #define ALG_SID_ANY (0)
  346. /* RSA SIDs */
  347. #define ALG_SID_RSA_ANY 0
  348. #define ALG_SID_RSA_PKCS 1
  349. #define ALG_SID_RSA_MSATWORK 2
  350. #define ALG_SID_RSA_ENTRUST 3
  351. #define ALG_SID_RSA_PGP 4
  352. /* DSS SIDs */
  353. #define ALG_SID_DSS_ANY 0
  354. #define ALG_SID_DSS_PKCS 1
  355. #define ALG_SID_DSS_DMS 2
  356. /* DES SIDs */
  357. #define ALG_SID_DES 1
  358. #define ALG_SID_3DES 3
  359. #define ALG_SID_DESX 4
  360. #define ALG_SID_IDEA 5
  361. #define ALG_SID_CAST 6
  362. #define ALG_SID_SAFERSK64 7
  363. #define ALG_SID_SAFERSK128 8
  364. #define ALG_SID_3DES_112 9
  365. /* RC2 SIDs */
  366. #define ALG_SID_RC4 1
  367. #define ALG_SID_RC2 2
  368. #define ALG_SID_SEAL 2
  369. /* Hash SIDs */
  370. #define ALG_SID_MD2 1
  371. #define ALG_SID_MD4 2
  372. #define ALG_SID_MD5 3
  373. #define ALG_SID_SHA 4
  374. #define ALG_SID_MAC 5
  375. #define ALG_SID_RIPEMD 6
  376. #define ALG_SID_RIPEMD160 7
  377. #define ALG_SID_SSL3SHAMD5 8
  378. #define ALG_SID_HMAC 9
  379. #define ALG_SID_TLS1PRF 10
  380. /* SCHANNEL SIDs */
  381. #define ALG_SID_SSL3_MASTER 1
  382. #define ALG_SID_SCHANNEL_MASTER_HASH 2
  383. #define ALG_SID_SCHANNEL_MAC_KEY 3
  384. #define ALG_SID_PCT1_MASTER 4
  385. #define ALG_SID_SSL2_MASTER 5
  386. #define ALG_SID_TLS1_MASTER 6
  387. #define ALG_SID_SCHANNEL_ENC_KEY 7
  388. /* Algorithm Definitions */
  389. #define CALG_MD2 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2)
  390. #define CALG_MD4 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4)
  391. #define CALG_MD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5)
  392. #define CALG_SHA (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA)
  393. #define CALG_MAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC)
  394. #define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)
  395. #define CALG_HMAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC)
  396. #define CALG_TLS1PRF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF)
  397. #define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
  398. #define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY)
  399. #define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
  400. #define CALG_DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES)
  401. #define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2)
  402. #define CALG_3DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES)
  403. #define CALG_3DES_112 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES_112)
  404. #define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4)
  405. #define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL)
  406. #define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER)
  407. #define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH)
  408. #define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY)
  409. #define CALG_SCHANNEL_ENC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY)
  410. #define CALG_PCT1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_PCT1_MASTER)
  411. #define CALG_SSL2_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL2_MASTER)
  412. #define CALG_TLS1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_TLS1_MASTER)
  413. /* Protocol Flags */
  414. #define CRYPT_FLAG_PCT1 0x0001
  415. #define CRYPT_FLAG_SSL2 0x0002
  416. #define CRYPT_FLAG_SSL3 0x0004
  417. #define CRYPT_FLAG_TLS1 0x0008
  418. #define CRYPT_FLAG_IPSEC 0x0010
  419. #define CRYPT_FLAG_SIGNING 0x0020
  420. /* Provider names */
  421. #define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0"
  422. #if defined(__GNUC__)
  423. # define MS_DEF_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  424. 'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
  425. 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
  426. #elif defined(_MSC_VER)
  427. # define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0"
  428. #else
  429. static const WCHAR MS_DEF_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  430. 'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
  431. 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
  432. #endif
  433. #define MS_DEF_PROV WINELIB_NAME_AW(MS_DEF_PROV_)
  434. #define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0"
  435. #if defined(__GNUC__)
  436. # define MS_ENHANCED_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  437. 'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
  438. 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
  439. #elif defined(_MSC_VER)
  440. # define MS_ENHANCED_PROV_W L"Microsoft Enhanced Cryptographic Provider v1.0"
  441. #else
  442. static const WCHAR MS_ENHANCED_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  443. 'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
  444. 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
  445. #endif
  446. #define MS_ENHANCED_PROV WINELIB_NAME_AW(MS_ENHANCED_PROV_)
  447. #define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider"
  448. #if defined(__GNUC__)
  449. # define MS_STRONG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  450. 'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
  451. 'P','r','o','v','i','d','e','r',0 }
  452. #elif defined(_MSC_VER)
  453. # define MS_STRONG_PROV_W L"Microsoft Strong Cryptographic Provider"
  454. #else
  455. static const WCHAR MS_STRONG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  456. 'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
  457. 'P','r','o','v','i','d','e','r',0 };
  458. #endif
  459. #define MS_STRONG_PROV WINELIB_NAME_AW(MS_STRONG_PROV_)
  460. #define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider"
  461. #if defined(__GNUC__)
  462. # define MS_DEF_RSA_SIG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  463. 'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ', \
  464. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
  465. #elif defined(_MSC_VER)
  466. # define MS_DEF_RSA_SIG_PROV_W L"Microsoft RSA Signature Cryptographic Provider"
  467. #else
  468. static const WCHAR MS_DEF_RSA_SIG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  469. 'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ',
  470. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
  471. #endif
  472. #define MS_DEF_RSA_SIG_PROV WINELIB_NAME_AW(MS_DEF_RSA_SIG_PROV_)
  473. #define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider"
  474. #if defined(__GNUC__)
  475. # define MS_DEF_RSA_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  476. 'R','S','A',' ','S','C','h','a','n','n','e','l',' ', \
  477. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
  478. #elif defined(_MSC_VER)
  479. # define MS_DEF_RSA_SCHANNEL_PROV_W L"Microsoft RSA SChannel Cryptographic Provider"
  480. #else
  481. static const WCHAR MS_DEF_RSA_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  482. 'R','S','A',' ','S','C','h','a','n','n','e','l',' ',
  483. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
  484. #endif
  485. #define MS_DEF_RSA_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_RSA_SCHANNEL_PROV_)
  486. #define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider"
  487. #if defined(__GNUC__)
  488. # define MS_DEF_DSS_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  489. 'B','a','s','e',' ','D','S','S',' ', \
  490. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
  491. #elif defined(_MSC_VER)
  492. # define MS_DEF_DSS_PROV_W L"Microsoft Base DSS Cryptographic Provider"
  493. #else
  494. static const WCHAR MS_DEF_DSS_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  495. 'B','a','s','e',' ','D','S','S',' ',
  496. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
  497. #endif
  498. #define MS_DEF_DSS_PROV WINELIB_NAME_AW(MS_DEF_DSS_PROV_)
  499. #define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
  500. #if defined(__GNUC__)
  501. # define MS_DEF_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  502. 'B','a','s','e',' ','D','S','S',' ','a','n','d',' ', \
  503. 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
  504. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
  505. #elif defined(_MSC_VER)
  506. # define MS_DEF_DSS_DH_PROV_W L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
  507. #else
  508. static const WCHAR MS_DEF_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  509. 'B','a','s','e',' ','D','S','S',' ','a','n','d',' ',
  510. 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
  511. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
  512. #endif
  513. #define MS_DEF_DSS_DH_PROV WINELIB_NAME_AW(MS_DEF_DSS_DH_PROV_)
  514. #define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
  515. #if defined(__GNUC__)
  516. # define MS_ENH_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  517. 'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ', \
  518. 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
  519. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
  520. #elif defined(_MSC_VER)
  521. # define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
  522. #else
  523. static const WCHAR MS_ENH_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  524. 'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ',
  525. 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
  526. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
  527. #endif
  528. #define MS_ENH_DSS_DH_PROV WINELIB_NAME_AW(MS_ENH_DSS_DH_PROV_)
  529. #define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider"
  530. #if defined(__GNUC__)
  531. # define MS_DEF_DH_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  532. 'D','H',' ','S','C','h','a','n','n','e','l',' ', \
  533. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
  534. #elif defined(_MSC_VER)
  535. # define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider"
  536. #else
  537. static const WCHAR MS_DEF_DH_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  538. 'D','H',' ','S','C','h','a','n','n','e','l',' ',
  539. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
  540. #endif
  541. #define MS_DEF_DH_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_DH_SCHANNEL_PROV_)
  542. #define MS_SCARD_PROV_A "Microsoft Base Smart Card Cryptographic Provider"
  543. #if defined(__GNUC__)
  544. # define MS_SCARD_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
  545. 'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ', \
  546. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
  547. #elif defined(_MSC_VER)
  548. # define MS_SCARD_PROV_W L"Microsoft Base Smart Card Cryptographic Provider"
  549. #else
  550. static const WCHAR MS_SCARD_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
  551. 'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ',
  552. 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
  553. #endif
  554. #define MS_SCARD_PROV WINELIB_NAME_AW(MS_SCARD_PROV_)
  555. /* Key Specs*/
  556. #define AT_KEYEXCHANGE 1
  557. #define AT_SIGNATURE 2
  558. /* Provider Types */
  559. #define PROV_RSA_FULL 1
  560. #define PROV_RSA_SIG 2
  561. #define PROV_DSS 3
  562. #define PROV_FORTEZZA 4
  563. #define PROV_MS_EXCHANGE 5
  564. #define PROV_SSL 6
  565. #define PROV_RSA_SCHANNEL 12
  566. #define PROV_DSS_DH 13
  567. #define PROV_EC_ECDSA_SIG 14
  568. #define PROV_EC_ECNRA_SIG 15
  569. #define PROV_EC_ECDSA_FULL 16
  570. #define PROV_EC_ECNRA_FULL 17
  571. #define PROV_DH_SCHANNEL 18
  572. #define PROV_SPYRUS_LYNKS 20
  573. #define PROV_RNG 21
  574. #define PROV_INTEL_SEC 22
  575. #define PROV_REPLACE_OWF 23
  576. #define PROV_RSA_AES 24
  577. /* FLAGS Section */
  578. /* Provider Parameters */
  579. #define PP_ENUMALGS 1
  580. #define PP_ENUMCONTAINERS 2
  581. #define PP_IMPTYPE 3
  582. #define PP_NAME 4
  583. #define PP_VERSION 5
  584. #define PP_CONTAINER 6
  585. #define CRYPT_FIRST 1
  586. #define CRYPT_NEXT 2
  587. #define CRYPT_IMPL_HARDWARE 1
  588. #define CRYPT_IMPL_SOFTWARE 2
  589. #define CRYPT_IMPL_MIXED 3
  590. #define CRYPT_IMPL_UNKNOWN 4
  591. /* CryptAcquireContext */
  592. #define CRYPT_VERIFYCONTEXT 0xF0000000
  593. #define CRYPT_NEWKEYSET 0x00000008
  594. #define CRYPT_DELETEKEYSET 0x00000010
  595. #define CRYPT_MACHINE_KEYSET 0x00000020
  596. #define CRYPT_SILENT 0x00000040
  597. /* Crypt{Get|Set}Provider */
  598. #define CRYPT_MACHINE_DEFAULT 0x00000001
  599. #define CRYPT_USER_DEFAULT 0x00000002
  600. #define CRYPT_DELETE_DEFAULT 0x00000004
  601. /* Crypt{Get/Set}ProvParam */
  602. #define PP_CLIENT_HWND 1
  603. #define PP_ENUMALGS 1
  604. #define PP_ENUMCONTAINERS 2
  605. #define PP_IMPTYPE 3
  606. #define PP_NAME 4
  607. #define PP_VERSION 5
  608. #define PP_CONTAINER 6
  609. #define PP_CHANGE_PASSWORD 7
  610. #define PP_KEYSET_SEC_DESCR 8
  611. #define PP_KEY_TYPE_SUBTYPE 10
  612. #define PP_CONTEXT_INFO 11
  613. #define PP_KEYEXCHANGE_KEYSIZE 12
  614. #define PP_SIGNATURE_KEYSIZE 13
  615. #define PP_KEYEXCHANGE_ALG 14
  616. #define PP_SIGNATURE_ALG 15
  617. #define PP_PROVTYPE 16
  618. #define PP_KEYSTORAGE 17
  619. #define PP_SYM_KEYSIZE 19
  620. #define PP_SESSION_KEYSIZE 20
  621. #define PP_UI_PROMPT 21
  622. #define PP_ENUMALGS_EX 22
  623. #define PP_DELETEKEY 24
  624. #define PP_ENUMMANDROOTS 25
  625. #define PP_ENUMELECTROOTS 26
  626. #define PP_KEYSET_TYPE 27
  627. #define PP_ADMIN_PIN 31
  628. #define PP_KEYEXCHANGE_PIN 32
  629. #define PP_SIGNATURE_PIN 33
  630. #define PP_SIG_KEYSIZE_INC 34
  631. #define PP_KEYX_KEYSIZE_INC 35
  632. #define PP_UNIQUE_CONTAINER 36
  633. #define PP_SGC_INFO 37
  634. #define PP_USE_HARDWARE_RNG 38
  635. #define PP_KEYSPEC 39
  636. #define PP_ENUMEX_SIGNING_PROT 40
  637. /* Crypt{Get/Set}KeyParam */
  638. #define KP_IV 1
  639. #define KP_SALT 2
  640. #define KP_PADDING 3
  641. #define KP_MODE 4
  642. #define KP_MODE_BITS 5
  643. #define KP_PERMISSIONS 6
  644. #define KP_ALGID 7
  645. #define KP_BLOCKLEN 8
  646. #define KP_KEYLEN 9
  647. #define KP_SALT_EX 10
  648. #define KP_P 11
  649. #define KP_G 12
  650. #define KP_Q 13
  651. #define KP_X 14
  652. #define KP_Y 15
  653. #define KP_RA 16
  654. #define KP_RB 17
  655. #define KP_INFO 18
  656. #define KP_EFFECTIVE_KEYLEN 19
  657. #define KP_SCHANNEL_ALG 20
  658. #define KP_CLIENT_RANDOM 21
  659. #define KP_SERVER_RANDOM 22
  660. #define KP_RP 23
  661. #define KP_PRECOMP_MD5 24
  662. #define KP_PRECOMP_SHA 25
  663. #define KP_CERTIFICATE 26
  664. #define KP_CLEAR_KEY 27
  665. #define KP_PUB_EX_LEN 28
  666. #define KP_PUB_EX_VAL 29
  667. #define KP_KEYVAL 30
  668. #define KP_ADMIN_PIN 31
  669. #define KP_KEYEXCHANGE_PIN 32
  670. #define KP_SIGNATURE_PIN 33
  671. #define KP_PREHASH 34
  672. /* CryptSignHash/CryptVerifySignature */
  673. #define CRYPT_NOHASHOID 0x00000001
  674. #define CRYPT_TYPE2_FORMAT 0x00000002
  675. #define CRYPT_X931_FORMAT 0x00000004
  676. /* Crypt{Get,Set}HashParam */
  677. #define HP_ALGID 0x0001
  678. #define HP_HASHVAL 0x0002
  679. #define HP_HASHSIZE 0x0004
  680. #define HP_HMAC_INFO 0x0005
  681. #define HP_TLS1PRF_LABEL 0x0006
  682. #define HP_TLS1PRF_SEED 0x0007
  683. /* Crypt{Get,Set}KeyParam */
  684. #define CRYPT_MODE_CBC 1
  685. #define CRYPT_MODE_ECB 2
  686. #define CRYPT_MODE_OFB 3
  687. #define CRYPT_MODE_CFB 4
  688. #define CRYPT_ENCRYPT 0x0001
  689. #define CRYPT_DECRYPT 0x0002
  690. #define CRYPT_EXPORT 0x0004
  691. #define CRYPT_READ 0x0008
  692. #define CRYPT_WRITE 0x0010
  693. #define CRYPT_MAC 0x0020
  694. /* Crypt*Key */
  695. #define CRYPT_EXPORTABLE 0x00000001
  696. #define CRYPT_USER_PROTECTED 0x00000002
  697. #define CRYPT_CREATE_SALT 0x00000004
  698. #define CRYPT_UPDATE_KEY 0x00000008
  699. #define CRYPT_NO_SALT 0x00000010
  700. #define CRYPT_PREGEN 0x00000040
  701. #define CRYPT_SERVER 0x00000400
  702. #define CRYPT_ARCHIVABLE 0x00004000
  703. /* CryptExportKey */
  704. #define CRYPT_SSL2_FALLBACK 0x00000002
  705. #define CRYPT_DESTROYKEY 0x00000004
  706. #define CRYPT_OAEP 0x00000040
  707. /* CryptHashSessionKey */
  708. #define CRYPT_LITTLE_ENDIAN 0x00000001
  709. /* Blob Types */
  710. #define SIMPLEBLOB 0x1
  711. #define PUBLICKEYBLOB 0x6
  712. #define PRIVATEKEYBLOB 0x7
  713. #define PLAINTEXTKEYBLOB 0x8
  714. #define OPAQUEKEYBLOB 0x9
  715. #define PUBLICKEYBLOBEX 0xA
  716. #define SYMMETRICWRAPKEYBLOB 0xB
  717. #define CUR_BLOB_VERSION 2
  718. /* cert store provider types */
  719. #define CERT_STORE_PROV_MSG ((LPCSTR)1)
  720. #define CERT_STORE_PROV_MEMORY ((LPCSTR)2)
  721. #define CERT_STORE_PROV_FILE ((LPCSTR)3)
  722. #define CERT_STORE_PROV_REG ((LPCSTR)4)
  723. #define CERT_STORE_PROV_PKCS7 ((LPCSTR)5)
  724. #define CERT_STORE_PROV_SERIALIZED ((LPCSTR)6)
  725. #define CERT_STORE_PROV_FILENAME_A ((LPCSTR)7)
  726. #define CERT_STORE_PROV_FILENAME_W ((LPCSTR)8)
  727. #define CERT_STORE_PROV_SYSTEM_A ((LPCSTR)9)
  728. #define CERT_STORE_PROV_SYSTEM_W ((LPCSTR)10)
  729. #define CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W
  730. #define CERT_STORE_PROV_COLLECTION ((LPCSTR)11)
  731. #define CERT_STORE_PROV_SYSTEM_REGISTRY_A ((LPCSTR)12)
  732. #define CERT_STORE_PROV_SYSTEM_REGISTRY_W ((LPCSTR)13)
  733. #define CERT_STORE_PROV_SYSTEM_REGISTRY CERT_STORE_PROV_SYSTEM_REGISTRY_W
  734. #define CERT_STORE_PROV_PHYSICAL_W ((LPCSTR)14)
  735. #define CERT_STORE_PROV_PHYSICAL CERT_STORE_PROV_PHYSICAL_W
  736. #define CERT_STORE_PROV_SMART_CARD_W ((LPCSTR)15)
  737. #define CERT_STORE_PROV_SMART_CARD CERT_STORE_PROV_SMART_CARD_W
  738. #define CERT_STORE_PROV_LDAP_W ((LPCSTR)16)
  739. #define CERT_STORE_PROV_LDAP CERT_STORE_PROV_LDAP_W
  740. #define sz_CERT_STORE_PROV_MEMORY "Memory"
  741. #define sz_CERT_STORE_PROV_FILENAME_W "File"
  742. #define sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W
  743. #define sz_CERT_STORE_PROV_SYSTEM_W "System"
  744. #define sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W
  745. #define sz_CERT_STORE_PROV_PKCS7 "PKCS7"
  746. #define sz_CERT_STORE_PROV_SERIALIZED "Serialized"
  747. #define sz_CERT_STORE_PROV_COLLECTION "Collection"
  748. #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
  749. #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
  750. #define sz_CERT_STORE_PROV_PHYSICAL_W "Physical"
  751. #define sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W
  752. #define sz_CERT_STORE_PROV_SMART_CARD_W "SmartCard"
  753. #define sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W
  754. #define sz_CERT_STORE_PROV_LDAP_W "Ldap"
  755. #define sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W
  756. /* types for CertOpenStore dwEncodingType */
  757. #define X509_ASN_ENCODING 0x00000001
  758. #define X509_NDR_ENCODING 0x00000002
  759. #define PKCS_7_ASN_ENCODING 0x00010000
  760. #define PKCS_7_NDR_ENCODING 0x00020000
  761. /* system store locations */
  762. #define CERT_SYSTEM_STORE_LOCATION_MASK 0x00ff0000
  763. #define CERT_SYSTEM_STORE_LOCATION_SHIFT 16
  764. /* system store location ids */
  765. /* hkcu */
  766. #define CERT_SYSTEM_STORE_CURRENT_USER_ID 1
  767. /* hklm */
  768. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID 2
  769. /* hklm\Software\Microsoft\Cryptography\Services */
  770. #define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID 4
  771. #define CERT_SYSTEM_STORE_SERVICES_ID 5
  772. /* HKEY_USERS */
  773. #define CERT_SYSTEM_STORE_USERS_ID 6
  774. /* hkcu\Software\Microsoft\Policies\Microsoft\SystemCertificates */
  775. #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID 7
  776. /* hklm\Software\Microsoft\Policies\Microsoft\SystemCertificates */
  777. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8
  778. /* hklm\Software\Microsoft\EnterpriseCertificates */
  779. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID 9
  780. /* system store location values */
  781. #define CERT_SYSTEM_STORE_CURRENT_USER \
  782. (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  783. #define CERT_SYSTEM_STORE_LOCAL_MACHINE \
  784. (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  785. #define CERT_SYSTEM_STORE_CURRENT_SERVICE \
  786. (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  787. #define CERT_SYSTEM_STORE_SERVICE \
  788. (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  789. #define CERT_SYSTEM_STORE_USERS \
  790. (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  791. #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY \
  792. (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  793. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY \
  794. (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  795. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE \
  796. (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  797. /* flags for CertOpenStore dwFlags */
  798. #define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x00000001
  799. #define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x00000002
  800. #define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x00000004
  801. #define CERT_STORE_DELETE_FLAG 0x00000010
  802. #define CERT_STORE_UNSAFE_PHYSICAL_FLAG 0x00000020
  803. #define CERT_STORE_SHARE_STORE_FLAG 0x00000040
  804. #define CERT_STORE_SHARE_CONTEXT_FLAG 0x00000080
  805. #define CERT_STORE_MANIFOLD_FLAG 0x00000100
  806. #define CERT_STORE_ENUM_ARCHIVED_FLAG 0x00000200
  807. #define CERT_STORE_UPDATE_KEYID_FLAG 0x00000400
  808. #define CERT_STORE_BACKUP_RESTORE_FLAG 0x00000800
  809. #define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x00001000
  810. #define CERT_STORE_CREATE_NEW_FLAG 0x00002000
  811. #define CERT_STORE_OPEN_EXISTING_FLAG 0x00004000
  812. #define CERT_STORE_READONLY_FLAG 0x00008000
  813. /* physical store dwFlags, also used by CertAddStoreToCollection as
  814. * dwUpdateFlags
  815. */
  816. #define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1
  817. #define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2
  818. #define CERT_PHYSICAL_STORE_REMOVE_OPEN_DISABLE_FLAG 0x4
  819. #define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8
  820. /* dwFlag values for CertEnumPhysicalStore callback */
  821. #define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1
  822. /* predefined store names */
  823. #if defined(__GNUC__)
  824. # define CERT_PHYSICAL_STORE_DEFAULT_NAME (const WCHAR[])\
  825. {'.','D','e','f','a','u','l','t','0'}
  826. # define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME (const WCHAR[])\
  827. {'.','G','r','o','u','p','P','o','l','i','c','y',0}
  828. # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME (const WCHAR[])\
  829. {'.','L','o','c','a','l','M','a','c','h','i','n','e',0}
  830. # define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME (const WCHAR[])\
  831. {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0}
  832. # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME (const WCHAR[])\
  833. {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',\
  834. 'P','o','l','i','c','y',0}
  835. # define CERT_PHYSICAL_STORE_ENTERPRISE_NAME (const WCHAR[])\
  836. {'.','E','n','t','e','r','p','r','i','s','e',0}
  837. # define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME (const WCHAR[])\
  838. {'.','A','u','t','h','R','o','o','t',0}
  839. #elif defined(_MSC_VER)
  840. # define CERT_PHYSICAL_STORE_DEFAULT_NAME \
  841. L".Default"
  842. # define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME \
  843. L".GroupPolicy"
  844. # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME \
  845. L".LocalMachine"
  846. # define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME \
  847. L".UserCertificate"
  848. # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME \
  849. L".LocalMachineGroupPolicy"
  850. # define CERT_PHYSICAL_STORE_ENTERPRISE_NAME \
  851. L".Enterprise"
  852. # define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME \
  853. L".AuthRoot"
  854. #else
  855. static const WCHAR CERT_PHYSICAL_STORE_DEFAULT_NAME[] =
  856. {'.','D','e','f','a','u','l','t','0'};
  857. static const WCHAR CERT_PHYSICAL_STORE_GROUP_POLICY_NAME[] =
  858. {'.','G','r','o','u','p','P','o','l','i','c','y',0};
  859. static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME[] =
  860. {'.','L','o','c','a','l','M','a','c','h','i','n','e',0};
  861. static const WCHAR CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME[] =
  862. {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0};
  863. static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME[] =
  864. {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',
  865. 'P','o','l','i','c','y',0};
  866. static const WCHAR CERT_PHYSICAL_STORE_ENTERPRISE_NAME[] =
  867. {'.','E','n','t','e','r','p','r','i','s','e',0};
  868. static const WCHAR CERT_PHYSICAL_STORE_AUTH_ROOT_NAME[] =
  869. {'.','A','u','t','h','R','o','o','t',0};
  870. #endif
  871. /* cert system store flags */
  872. #define CERT_SYSTEM_STORE_MASK 0xffff0000
  873. #define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000
  874. /* CertFindChainInStore dwFindType types */
  875. #define CERT_CHAIN_FIND_BY_ISSUER 1
  876. /* function declarations */
  877. /* advapi32.dll */
  878. BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *phProv, LPCSTR pszContainer,
  879. LPCSTR pszProvider, DWORD dwProvType,
  880. DWORD dwFlags);
  881. BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *phProv, LPCWSTR pszContainer,
  882. LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags);
  883. #define CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext)
  884. BOOL WINAPI CryptGenRandom (HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer);
  885. BOOL WINAPI CryptContextAddRef (HCRYPTPROV hProv, DWORD *pdwReserved, DWORD dwFlags);
  886. BOOL WINAPI CryptCreateHash (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey,
  887. DWORD dwFlags, HCRYPTHASH *phHash);
  888. BOOL WINAPI CryptDecrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final,
  889. DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
  890. BOOL WINAPI CryptDeriveKey (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseData,
  891. DWORD dwFlags, HCRYPTKEY *phKey);
  892. BOOL WINAPI CryptDestroyHash (HCRYPTHASH hHash);
  893. BOOL WINAPI CryptDestroyKey (HCRYPTKEY hKey);
  894. BOOL WINAPI CryptDuplicateKey (HCRYPTKEY hKey, DWORD *pdwReserved, DWORD dwFlags, HCRYPTKEY *phKey);
  895. BOOL WINAPI CryptDuplicateHash (HCRYPTHASH hHash, DWORD *pdwReserved,
  896. DWORD dwFlags, HCRYPTHASH *phHash);
  897. BOOL WINAPI CryptEncrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final,
  898. DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen);
  899. BOOL WINAPI CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved,
  900. DWORD dwFlags, DWORD *pdwProvType, LPSTR pszProvName, DWORD *pcbProvName);
  901. BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
  902. DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszProvName, DWORD *pcbProvName);
  903. #define CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders)
  904. BOOL WINAPI CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved,
  905. DWORD dwFlags, DWORD *pdwProvType, LPSTR pszTypeName, DWORD *pcbTypeName);
  906. BOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved,
  907. DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszTypeName, DWORD *pcbTypeName);
  908. #define CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes)
  909. BOOL WINAPI CryptExportKey (HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType,
  910. DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
  911. BOOL WINAPI CryptGenKey (HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey);
  912. BOOL WINAPI CryptGetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData,
  913. DWORD *pdwDataLen, DWORD dwFlags);
  914. BOOL WINAPI CryptGetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData,
  915. DWORD *pdwDataLen, DWORD dwFlags);
  916. BOOL WINAPI CryptGetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData,
  917. DWORD *pdwDataLen, DWORD dwFlags);
  918. BOOL WINAPI CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved,
  919. DWORD dwFlags, LPSTR pszProvName, DWORD *pcbProvName);
  920. BOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved,
  921. DWORD dwFlags, LPWSTR pszProvName, DWORD *pcbProvName);
  922. #define CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider)
  923. BOOL WINAPI CryptGetUserKey (HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey);
  924. BOOL WINAPI CryptHashData (HCRYPTHASH hHash, BYTE *pbData, DWORD dwDataLen, DWORD dwFlags);
  925. BOOL WINAPI CryptHashSessionKey (HCRYPTHASH hHash, HCRYPTKEY hKey, DWORD dwFlags);
  926. BOOL WINAPI CryptImportKey (HCRYPTPROV hProv, BYTE *pbData, DWORD dwDataLen,
  927. HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey);
  928. BOOL WINAPI CryptRegisterOIDFunction(DWORD,LPCSTR,LPCSTR,LPCWSTR,LPCSTR);
  929. BOOL WINAPI CryptReleaseContext (HCRYPTPROV hProv, DWORD dwFlags);
  930. BOOL WINAPI CryptSignHashA (HCRYPTHASH hHash, DWORD dwKeySpec, LPCSTR sDescription,
  931. DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen);
  932. BOOL WINAPI CryptSignHashW (HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription,
  933. DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen);
  934. #define CryptSignHash WINELIB_NAME_AW(CryptSignHash)
  935. BOOL WINAPI CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD dwFlags);
  936. BOOL WINAPI CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD dwFlags);
  937. BOOL WINAPI CryptSetProviderA (LPCSTR pszProvName, DWORD dwProvType);
  938. BOOL WINAPI CryptSetProviderW (LPCWSTR pszProvName, DWORD dwProvType);
  939. #define CryptSetProvider WINELIB_NAME_AW(CryptSetProvider)
  940. BOOL WINAPI CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags);
  941. BOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags);
  942. #define CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx)
  943. BOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD dwFlags);
  944. BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH hHash, BYTE *pbSignature, DWORD dwSigLen,
  945. HCRYPTKEY hPubKey, LPCSTR sDescription, DWORD dwFlags);
  946. BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, BYTE *pbSignature, DWORD dwSigLen,
  947. HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags);
  948. #define CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature)
  949. /* cert store functions */
  950. HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType,
  951. HCRYPTPROV hCryptProv, DWORD dwFlags, const void *pvPara);
  952. HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV hProv,
  953. LPCSTR szSubSystemProtocol);
  954. HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV hProv,
  955. LPCWSTR szSubSystemProtocol);
  956. #define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore)
  957. PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrev);
  958. BOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags, void *pvArg,
  959. PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
  960. BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara,
  961. void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
  962. BOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
  963. void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
  964. BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
  965. DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags);
  966. PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType,
  967. const BYTE* pbCrlEncoded, DWORD cbCrlEncoded);
  968. BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,
  969. HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority);
  970. void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore,
  971. HCERTSTORE hSiblingStore);
  972. PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore,
  973. DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
  974. const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext);
  975. BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID,
  976. PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara,
  977. PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
  978. BOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags );
  979. BOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext );
  980. #ifdef __cplusplus
  981. }
  982. #endif
  983. #endif