schannel.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef __SCHANNEL_H__
  7. #define __SCHANNEL_H__
  8. #include <_mingw_unicode.h>
  9. #include <wincrypt.h>
  10. #define UNISP_NAME_A "Microsoft Unified Security Protocol Provider"
  11. #define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider"
  12. #define SSL2SP_NAME_A "Microsoft SSL 2.0"
  13. #define SSL2SP_NAME_W L"Microsoft SSL 2.0"
  14. #define SSL3SP_NAME_A "Microsoft SSL 3.0"
  15. #define SSL3SP_NAME_W L"Microsoft SSL 3.0"
  16. #define TLS1SP_NAME_A "Microsoft TLS 1.0"
  17. #define TLS1SP_NAME_W L"Microsoft TLS 1.0"
  18. #define PCT1SP_NAME_A "Microsoft PCT 1.0"
  19. #define PCT1SP_NAME_W L"Microsoft PCT 1.0"
  20. #define SCHANNEL_NAME_A "Schannel"
  21. #define SCHANNEL_NAME_W L"Schannel"
  22. #define DEFAULT_TLS_SSP_NAME_A "Default TLS SSP"
  23. #define DEFAULT_TLS_SSP_NAME_W L"Default TLS SSP"
  24. #define UNISP_NAME __MINGW_NAME_UAW(UNISP_NAME)
  25. #define PCT1SP_NAME __MINGW_NAME_UAW(PCT1SP_NAME)
  26. #define SSL2SP_NAME __MINGW_NAME_UAW(SSL2SP_NAME)
  27. #define SSL3SP_NAME __MINGW_NAME_UAW(SSL3SP_NAME)
  28. #define TLS1SP_NAME __MINGW_NAME_UAW(TLS1SP_NAME)
  29. #define SCHANNEL_NAME __MINGW_NAME_UAW(SCHANNEL_NAME)
  30. #define DEFAULT_TLS_SSP_NAME __MINGW_NAME_UAW(DEFAULT_TLS_SSP_NAME_W)
  31. typedef enum _eTlsSignatureAlgorithm {
  32. TlsSignatureAlgorithm_Anonymous = 0,
  33. TlsSignatureAlgorithm_Rsa = 1,
  34. TlsSignatureAlgorithm_Dsa = 2,
  35. TlsSignatureAlgorithm_Ecdsa = 3
  36. } eTlsSignatureAlgorithm;
  37. typedef enum _eTlsHashAlgorithm {
  38. TlsHashAlgorithm_None = 0,
  39. TlsHashAlgorithm_Md5 = 1,
  40. TlsHashAlgorithm_Sha1 = 2,
  41. TlsHashAlgorithm_Sha224 = 3,
  42. TlsHashAlgorithm_Sha256 = 4,
  43. TlsHashAlgorithm_Sha384 = 5,
  44. TlsHashAlgorithm_Sha512 = 6
  45. } eTlsHashAlgorithm;
  46. #define UNISP_RPC_ID 14
  47. #define SECPKG_ATTR_ISSUER_LIST 0x50
  48. #define SECPKG_ATTR_REMOTE_CRED 0x51
  49. #define SECPKG_ATTR_LOCAL_CRED 0x52
  50. #define SECPKG_ATTR_REMOTE_CERT_CONTEXT 0x53
  51. #define SECPKG_ATTR_LOCAL_CERT_CONTEXT 0x54
  52. #define SECPKG_ATTR_ROOT_STORE 0x55
  53. #define SECPKG_ATTR_SUPPORTED_ALGS 0x56
  54. #define SECPKG_ATTR_CIPHER_STRENGTHS 0x57
  55. #define SECPKG_ATTR_SUPPORTED_PROTOCOLS 0x58
  56. #define SECPKG_ATTR_ISSUER_LIST_EX 0x59
  57. #define SECPKG_ATTR_CONNECTION_INFO 0x5a
  58. #define SECPKG_ATTR_EAP_KEY_BLOCK 0x5b
  59. #define SECPKG_ATTR_MAPPED_CRED_ATTR 0x5c
  60. #define SECPKG_ATTR_SESSION_INFO 0x5d
  61. #define SECPKG_ATTR_APP_DATA 0x5e
  62. #define SECPKG_ATTR_REMOTE_CERTIFICATES 0x5F
  63. #define SECPKG_ATTR_CLIENT_CERT_POLICY 0x60
  64. #define SECPKG_ATTR_CC_POLICY_RESULT 0x61
  65. #define SECPKG_ATTR_USE_NCRYPT 0x62
  66. #define SECPKG_ATTR_LOCAL_CERT_INFO 0x63
  67. #define SECPKG_ATTR_CIPHER_INFO 0x64
  68. #define SECPKG_ATTR_EAP_PRF_INFO 0x65
  69. #define SECPKG_ATTR_SUPPORTED_SIGNATURES 0x66
  70. #define SECPKG_ATTR_REMOTE_CERT_CHAIN 0x67
  71. #define SECPKG_ATTR_UI_INFO 0x68
  72. #define SECPKG_ATTR_EARLY_START 0x69
  73. #define SECPKG_ATTR_KEYING_MATERIAL_INFO 0x6a
  74. #define SECPKG_ATTR_KEYING_MATERIAL 0x6b
  75. #define SECPKG_ATTR_SRTP_PARAMETERS 0x6c
  76. #define SECPKG_ATTR_TOKEN_BINDING 0x6d
  77. #define SECPKG_ATTR_CONNECTION_INFO_EX 0x6e
  78. #define SECPKG_ATTR_KEYING_MATERIAL_TOKEN_BINDING 0x6f
  79. #define SECPKG_ATTR_KEYING_MATERIAL_INPROC 0x70
  80. typedef struct _SecPkgContext_IssuerListInfo {
  81. DWORD cbIssuerList;
  82. PBYTE pIssuerList;
  83. } SecPkgContext_IssuerListInfo,*PSecPkgContext_IssuerListInfo;
  84. typedef struct _SecPkgContext_RemoteCredentialInfo {
  85. DWORD cbCertificateChain;
  86. PBYTE pbCertificateChain;
  87. DWORD cCertificates;
  88. DWORD fFlags;
  89. DWORD dwBits;
  90. } SecPkgContext_RemoteCredentialInfo,*PSecPkgContext_RemoteCredentialInfo;
  91. typedef SecPkgContext_RemoteCredentialInfo SecPkgContext_RemoteCredenitalInfo,*PSecPkgContext_RemoteCredenitalInfo;
  92. #define RCRED_STATUS_NOCRED 0x00000000
  93. #define RCRED_CRED_EXISTS 0x00000001
  94. #define RCRED_STATUS_UNKNOWN_ISSUER 0x00000002
  95. typedef struct _SecPkgContext_LocalCredentialInfo {
  96. DWORD cbCertificateChain;
  97. PBYTE pbCertificateChain;
  98. DWORD cCertificates;
  99. DWORD fFlags;
  100. DWORD dwBits;
  101. } SecPkgContext_LocalCredentialInfo,*PSecPkgContext_LocalCredentialInfo;
  102. typedef SecPkgContext_LocalCredentialInfo SecPkgContext_LocalCredenitalInfo,*PSecPkgContext_LocalCredenitalInfo;
  103. #define LCRED_STATUS_NOCRED 0x00000000
  104. #define LCRED_CRED_EXISTS 0x00000001
  105. #define LCRED_STATUS_UNKNOWN_ISSUER 0x00000002
  106. typedef unsigned int ALG_ID;
  107. typedef struct _SecPkgCred_SupportedAlgs {
  108. DWORD cSupportedAlgs;
  109. ALG_ID *palgSupportedAlgs;
  110. } SecPkgCred_SupportedAlgs,*PSecPkgCred_SupportedAlgs;
  111. typedef struct _SecPkgCred_CipherStrengths {
  112. DWORD dwMinimumCipherStrength;
  113. DWORD dwMaximumCipherStrength;
  114. } SecPkgCred_CipherStrengths,*PSecPkgCred_CipherStrengths;
  115. typedef struct _SecPkgCred_SupportedProtocols {
  116. DWORD grbitProtocol;
  117. } SecPkgCred_SupportedProtocols,*PSecPkgCred_SupportedProtocols;
  118. typedef struct _SecPkgCred_ClientCertPolicy {
  119. DWORD dwFlags;
  120. GUID guidPolicyId;
  121. DWORD dwCertFlags;
  122. DWORD dwUrlRetrievalTimeout;
  123. WINBOOL fCheckRevocationFreshnessTime;
  124. DWORD dwRevocationFreshnessTime;
  125. WINBOOL fOmitUsageCheck;
  126. LPWSTR pwszSslCtlStoreName;
  127. LPWSTR pwszSslCtlIdentifier;
  128. } SecPkgCred_ClientCertPolicy, *PSecPkgCred_ClientCertPolicy;
  129. typedef struct _SecPkgContext_ClientCertPolicyResult {
  130. HRESULT dwPolicyResult;
  131. GUID guidPolicyId;
  132. } SecPkgContext_ClientCertPolicyResult, *PSecPkgContext_ClientCertPolicyResult;
  133. typedef struct _SecPkgContext_IssuerListInfoEx {
  134. PCERT_NAME_BLOB aIssuers;
  135. DWORD cIssuers;
  136. } SecPkgContext_IssuerListInfoEx,*PSecPkgContext_IssuerListInfoEx;
  137. typedef struct _SecPkgContext_ConnectionInfo {
  138. DWORD dwProtocol;
  139. ALG_ID aiCipher;
  140. DWORD dwCipherStrength;
  141. ALG_ID aiHash;
  142. DWORD dwHashStrength;
  143. ALG_ID aiExch;
  144. DWORD dwExchStrength;
  145. } SecPkgContext_ConnectionInfo,*PSecPkgContext_ConnectionInfo;
  146. #define SZ_ALG_MAX_SIZE 64
  147. #define SECPKGCONTEXT_CONNECTION_INFO_EX_V1 1
  148. typedef struct _SecPkgContext_ConnectionInfoEx {
  149. DWORD dwVersion;
  150. DWORD dwProtocol;
  151. WCHAR szCipher[SZ_ALG_MAX_SIZE];
  152. DWORD dwCipherStrength;
  153. WCHAR szHash[SZ_ALG_MAX_SIZE];
  154. DWORD dwHashStrength;
  155. WCHAR szExchange[SZ_ALG_MAX_SIZE];
  156. DWORD dwExchStrength;
  157. } SecPkgContext_ConnectionInfoEx, *PSecPkgContext_ConnectionInfoEx;
  158. #define SECPKGCONTEXT_CIPHERINFO_V1 1
  159. typedef struct _SecPkgContext_CipherInfo {
  160. DWORD dwVersion;
  161. DWORD dwProtocol;
  162. DWORD dwCipherSuite;
  163. DWORD dwBaseCipherSuite;
  164. WCHAR szCipherSuite[SZ_ALG_MAX_SIZE];
  165. WCHAR szCipher[SZ_ALG_MAX_SIZE];
  166. DWORD dwCipherLen;
  167. DWORD dwCipherBlockLen;
  168. WCHAR szHash[SZ_ALG_MAX_SIZE];
  169. DWORD dwHashLen;
  170. WCHAR szExchange[SZ_ALG_MAX_SIZE];
  171. DWORD dwMinExchangeLen;
  172. DWORD dwMaxExchangeLen;
  173. WCHAR szCertificate[SZ_ALG_MAX_SIZE];
  174. DWORD dwKeyType;
  175. } SecPkgContext_CipherInfo, *PSecPkgContext_CipherInfo;
  176. typedef struct _SecPkgContext_EapKeyBlock {
  177. BYTE rgbKeys[128];
  178. BYTE rgbIVs[64];
  179. } SecPkgContext_EapKeyBlock,*PSecPkgContext_EapKeyBlock;
  180. typedef struct _SecPkgContext_MappedCredAttr {
  181. DWORD dwAttribute;
  182. PVOID pvBuffer;
  183. } SecPkgContext_MappedCredAttr,*PSecPkgContext_MappedCredAttr;
  184. #define SSL_SESSION_RECONNECT 1
  185. typedef struct _SecPkgContext_SessionInfo {
  186. DWORD dwFlags;
  187. DWORD cbSessionId;
  188. BYTE rgbSessionId[32];
  189. } SecPkgContext_SessionInfo,*PSecPkgContext_SessionInfo;
  190. typedef struct _SecPkgContext_SessionAppData {
  191. DWORD dwFlags;
  192. DWORD cbAppData;
  193. PBYTE pbAppData;
  194. } SecPkgContext_SessionAppData,*PSecPkgContext_SessionAppData;
  195. typedef struct _SecPkgContext_EapPrfInfo {
  196. DWORD dwVersion;
  197. DWORD cbPrfData;
  198. PBYTE pbPrfData;
  199. } SecPkgContext_EapPrfInfo, *PSecPkgContext_EapPrfInfo;
  200. typedef struct _SecPkgContext_SupportedSignatures {
  201. WORD cSignatureAndHashAlgorithms;
  202. WORD *pSignatureAndHashAlgorithms;
  203. } SecPkgContext_SupportedSignatures, *PSecPkgContext_SupportedSignatures;
  204. typedef struct _SecPkgContext_Certificates {
  205. DWORD cCertificates;
  206. DWORD cbCertificateChain;
  207. PBYTE pbCertificateChain;
  208. } SecPkgContext_Certificates, *PSecPkgContext_Certificates;
  209. typedef struct _SecPkgContext_CertInfo {
  210. DWORD dwVersion;
  211. DWORD cbSubjectName;
  212. LPWSTR pwszSubjectName;
  213. DWORD cbIssuerName;
  214. LPWSTR pwszIssuerName;
  215. DWORD dwKeySize;
  216. } SecPkgContext_CertInfo, *PSecPkgContext_CertInfo;
  217. #define KERN_CONTEXT_CERT_INFO_V1 0x00000000
  218. typedef struct _SecPkgContext_UiInfo {
  219. HWND hParentWindow;
  220. } SecPkgContext_UiInfo, *PSecPkgContext_UiInfo;
  221. typedef struct _SecPkgContext_EarlyStart {
  222. DWORD dwEarlyStartFlags;
  223. } SecPkgContext_EarlyStart, *PSecPkgContext_EarlyStart;
  224. #define ENABLE_TLS_CLIENT_EARLY_START 0x00000001
  225. typedef struct _SecPkgContext_KeyingMaterialInfo {
  226. WORD cbLabel;
  227. LPSTR pszLabel;
  228. WORD cbContextValue;
  229. PBYTE pbContextValue;
  230. DWORD cbKeyingMaterial;
  231. } SecPkgContext_KeyingMaterialInfo, *PSecPkgContext_KeyingMaterialInfo;
  232. typedef struct _SecPkgContext_KeyingMaterial {
  233. DWORD cbKeyingMaterial;
  234. PBYTE pbKeyingMaterial;
  235. } SecPkgContext_KeyingMaterial, *PSecPkgContext_KeyingMaterial;
  236. typedef struct _SecPkgContext_KeyingMaterial_Inproc {
  237. WORD cbLabel;
  238. LPSTR pszLabel;
  239. WORD cbContextValue;
  240. PBYTE pbContextValue;
  241. DWORD cbKeyingMaterial;
  242. PBYTE pbKeyingMaterial;
  243. } SecPkgContext_KeyingMaterial_Inproc, *PSecPkgContext_KeyingMaterial_Inproc;
  244. typedef struct _SecPkgContext_SrtpParameters {
  245. WORD ProtectionProfile;
  246. BYTE MasterKeyIdentifierSize;
  247. PBYTE MasterKeyIdentifier;
  248. } SecPkgContext_SrtpParameters, *PSecPkgContext_SrtpParameters;
  249. typedef struct _SecPkgContext_TokenBinding {
  250. BYTE MajorVersion;
  251. BYTE MinorVersion;
  252. WORD KeyParametersSize;
  253. PBYTE KeyParameters;
  254. } SecPkgContext_TokenBinding, *PSecPkgContext_TokenBinding;
  255. #define SCH_CRED_V1 0x00000001
  256. #define SCH_CRED_V2 0x00000002
  257. #define SCH_CRED_VERSION 0x00000002
  258. #define SCH_CRED_V3 0x00000003
  259. #define SCHANNEL_CRED_VERSION 0x00000004
  260. #define SCH_CREDENTIALS_VERSION 0x00000005
  261. struct _HMAPPER;
  262. typedef struct _SCHANNEL_CRED {
  263. DWORD dwVersion;
  264. DWORD cCreds;
  265. PCCERT_CONTEXT *paCred;
  266. HCERTSTORE hRootStore;
  267. DWORD cMappers;
  268. struct _HMAPPER **aphMappers;
  269. DWORD cSupportedAlgs;
  270. ALG_ID *palgSupportedAlgs;
  271. DWORD grbitEnabledProtocols;
  272. DWORD dwMinimumCipherStrength;
  273. DWORD dwMaximumCipherStrength;
  274. DWORD dwSessionLifespan;
  275. DWORD dwFlags;
  276. DWORD dwCredFormat;
  277. } SCHANNEL_CRED,*PSCHANNEL_CRED;
  278. #ifdef SCHANNEL_USE_BLACKLISTS
  279. typedef enum _eTlsAlgorithmUsage {
  280. TlsParametersCngAlgUsageKeyExchange,
  281. TlsParametersCngAlgUsageSignature,
  282. TlsParametersCngAlgUsageCipher,
  283. TlsParametersCngAlgUsageDigest,
  284. TlsParametersCngAlgUsageCertSig
  285. } eTlsAlgorithmUsage;
  286. typedef struct _CRYPTO_SETTINGS {
  287. eTlsAlgorithmUsage eAlgorithmUsage;
  288. UNICODE_STRING strCngAlgId;
  289. DWORD cChainingModes;
  290. PUNICODE_STRING rgstrChainingModes;
  291. DWORD dwMinBitLength;
  292. DWORD dwMaxBitLength;
  293. } CRYPTO_SETTINGS, *PCRYPTO_SETTINGS;
  294. typedef struct _TLS_PARAMETERS {
  295. DWORD cAlpnIds;
  296. PUNICODE_STRING rgstrAlpnIds;
  297. DWORD grbitDisabledProtocols;
  298. DWORD cDisabledCrypto;
  299. PCRYPTO_SETTINGS pDisabledCrypto;
  300. DWORD dwFlags;
  301. } TLS_PARAMETERS, *PTLS_PARAMETERS;
  302. #define TLS_PARAMS_OPTIONAL 0x00000001
  303. typedef struct _SCH_CREDENTIALS {
  304. DWORD dwVersion;
  305. DWORD dwCredFormat;
  306. DWORD cCreds;
  307. PCCERT_CONTEXT *paCred;
  308. HCERTSTORE hRootStore;
  309. DWORD cMappers;
  310. struct _HMAPPER **aphMappers;
  311. DWORD dwSessionLifespan;
  312. DWORD dwFlags;
  313. DWORD cTlsParameters;
  314. PTLS_PARAMETERS pTlsParameters;
  315. } SCH_CREDENTIALS, *PSCH_CREDENTIALS;
  316. #define SCH_CRED_MAX_SUPPORTED_PARAMETERS 16
  317. #define SCH_CRED_MAX_SUPPORTED_ALPN_IDS 16
  318. #define SCH_CRED_MAX_SUPPORTED_CRYPTO_SETTINGS 16
  319. #define SCH_CRED_MAX_SUPPORTED_CHAINING_MODES 16
  320. #endif /* SCHANNEL_USE_BLACKLISTS */
  321. typedef struct _SEND_GENERIC_TLS_EXTENSION {
  322. WORD ExtensionType;
  323. WORD HandshakeType;
  324. DWORD Flags;
  325. WORD BufferSize;
  326. UCHAR Buffer[ANYSIZE_ARRAY];
  327. } SEND_GENERIC_TLS_EXTENSION, *PSEND_GENERIC_TLS_EXTENSION;
  328. typedef struct _TLS_EXTENSION_SUBSCRIPTION {
  329. WORD ExtensionType;
  330. WORD HandshakeType;
  331. } TLS_EXTENSION_SUBSCRIPTION, *PTLS_EXTENSION_SUBSCRIPTION;
  332. typedef struct _SUBSCRIBE_GENERIC_TLS_EXTENSION {
  333. DWORD Flags;
  334. DWORD SubscriptionsCount;
  335. TLS_EXTENSION_SUBSCRIPTION Subscriptions[ANYSIZE_ARRAY];
  336. } SUBSCRIBE_GENERIC_TLS_EXTENSION, *PSUBSCRIBE_GENERIC_TLS_EXTENSION;
  337. #define SCH_MAX_EXT_SUBSCRIPTIONS 2
  338. #define SCH_CRED_FORMAT_CERT_CONTEXT 0x00000000
  339. #define SCH_CRED_FORMAT_CERT_HASH 0x00000001
  340. #define SCH_CRED_FORMAT_CERT_HASH_STORE 0x00000002
  341. #define SCH_CRED_MAX_STORE_NAME_SIZE 128
  342. #define SCH_CRED_MAX_SUPPORTED_ALGS 256
  343. #define SCH_CRED_MAX_SUPPORTED_CERTS 100
  344. typedef struct _SCHANNEL_CERT_HASH {
  345. DWORD dwLength;
  346. DWORD dwFlags;
  347. HCRYPTPROV hProv;
  348. BYTE ShaHash[20];
  349. } SCHANNEL_CERT_HASH,*PSCHANNEL_CERT_HASH;
  350. typedef struct _SCHANNEL_CERT_HASH_STORE {
  351. DWORD dwLength;
  352. DWORD dwFlags;
  353. HCRYPTPROV hProv;
  354. BYTE ShaHash[20];
  355. WCHAR pwszStoreName[SCH_CRED_MAX_STORE_NAME_SIZE];
  356. } SCHANNEL_CERT_HASH_STORE, *PSCHANNEL_CERT_HASH_STORE;
  357. #define SCH_MACHINE_CERT_HASH 0x00000001
  358. #define SCH_CRED_NO_SYSTEM_MAPPER 0x00000002
  359. #define SCH_CRED_NO_SERVERNAME_CHECK 0x00000004
  360. #define SCH_CRED_MANUAL_CRED_VALIDATION 0x00000008
  361. #define SCH_CRED_NO_DEFAULT_CREDS 0x00000010
  362. #define SCH_CRED_AUTO_CRED_VALIDATION 0x00000020
  363. #define SCH_CRED_USE_DEFAULT_CREDS 0x00000040
  364. #define SCH_CRED_DISABLE_RECONNECTS 0x00000080
  365. #define SCH_CRED_REVOCATION_CHECK_END_CERT 0x00000100
  366. #define SCH_CRED_REVOCATION_CHECK_CHAIN 0x00000200
  367. #define SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00000400
  368. #define SCH_CRED_IGNORE_NO_REVOCATION_CHECK 0x00000800
  369. #define SCH_CRED_IGNORE_REVOCATION_OFFLINE 0x00001000
  370. #define SCH_CRED_RESTRICTED_ROOTS 0x00002000
  371. #define SCH_CRED_REVOCATION_CHECK_CACHE_ONLY 0x00004000
  372. #define SCH_CRED_CACHE_ONLY_URL_RETRIEVAL 0x00008000
  373. #define SCH_CRED_MEMORY_STORE_CERT 0x00010000
  374. #define SCH_CRED_CACHE_ONLY_URL_RETRIEVAL_ON_CREATE 0x00020000
  375. #define SCH_SEND_ROOT_CERT 0x00040000
  376. #define SCH_CRED_SNI_CREDENTIAL 0x00080000
  377. #define SCH_CRED_SNI_ENABLE_OCSP 0x00100000
  378. #define SCH_SEND_AUX_RECORD 0x00200000
  379. #define SCH_USE_STRONG_CRYPTO 0x00400000
  380. #define SCH_USE_PRESHAREDKEY_ONLY 0x00800000
  381. #define SCH_USE_DTLS_ONLY 0x01000000
  382. #define SCH_ALLOW_NULL_ENCRYPTION 0x02000000
  383. #define SCHANNEL_RENEGOTIATE 0
  384. #define SCHANNEL_SHUTDOWN 1
  385. #define SCHANNEL_ALERT 2
  386. #define SCHANNEL_SESSION 3
  387. typedef struct _SCHANNEL_ALERT_TOKEN {
  388. DWORD dwTokenType;
  389. DWORD dwAlertType;
  390. DWORD dwAlertNumber;
  391. } SCHANNEL_ALERT_TOKEN;
  392. #define TLS1_ALERT_WARNING 1
  393. #define TLS1_ALERT_FATAL 2
  394. #define TLS1_ALERT_CLOSE_NOTIFY 0
  395. #define TLS1_ALERT_UNEXPECTED_MESSAGE 10
  396. #define TLS1_ALERT_BAD_RECORD_MAC 20
  397. #define TLS1_ALERT_DECRYPTION_FAILED 21
  398. #define TLS1_ALERT_RECORD_OVERFLOW 22
  399. #define TLS1_ALERT_DECOMPRESSION_FAIL 30
  400. #define TLS1_ALERT_HANDSHAKE_FAILURE 40
  401. #define TLS1_ALERT_BAD_CERTIFICATE 42
  402. #define TLS1_ALERT_UNSUPPORTED_CERT 43
  403. #define TLS1_ALERT_CERTIFICATE_REVOKED 44
  404. #define TLS1_ALERT_CERTIFICATE_EXPIRED 45
  405. #define TLS1_ALERT_CERTIFICATE_UNKNOWN 46
  406. #define TLS1_ALERT_ILLEGAL_PARAMETER 47
  407. #define TLS1_ALERT_UNKNOWN_CA 48
  408. #define TLS1_ALERT_ACCESS_DENIED 49
  409. #define TLS1_ALERT_DECODE_ERROR 50
  410. #define TLS1_ALERT_DECRYPT_ERROR 51
  411. #define TLS1_ALERT_EXPORT_RESTRICTION 60
  412. #define TLS1_ALERT_PROTOCOL_VERSION 70
  413. #define TLS1_ALERT_INSUFFIENT_SECURITY 71
  414. #define TLS1_ALERT_INTERNAL_ERROR 80
  415. #define TLS1_ALERT_USER_CANCELED 90
  416. #define TLS1_ALERT_NO_RENEGOTIATION 100
  417. #define TLS1_ALERT_UNSUPPORTED_EXT 110
  418. #define TLS1_ALERT_UNKNOWN_PSK_IDENTITY 115
  419. #define TLS1_ALERT_NO_APP_PROTOCOL 120
  420. #define SSL_SESSION_ENABLE_RECONNECTS 1
  421. #define SSL_SESSION_DISABLE_RECONNECTS 2
  422. typedef struct _SCHANNEL_SESSION_TOKEN {
  423. DWORD dwTokenType;
  424. DWORD dwFlags;
  425. } SCHANNEL_SESSION_TOKEN;
  426. typedef struct _SCHANNEL_CLIENT_SIGNATURE {
  427. DWORD cbLength;
  428. ALG_ID aiHash;
  429. DWORD cbHash;
  430. BYTE HashValue[36];
  431. BYTE CertThumbprint[20];
  432. } SCHANNEL_CLIENT_SIGNATURE, *PSCHANNEL_CLIENT_SIGNATURE;
  433. #define CERT_SCHANNEL_IIS_PRIVATE_KEY_PROP_ID (CERT_FIRST_USER_PROP_ID + 0)
  434. #define CERT_SCHANNEL_IIS_PASSWORD_PROP_ID (CERT_FIRST_USER_PROP_ID + 1)
  435. #define CERT_SCHANNEL_SGC_CERTIFICATE_PROP_ID (CERT_FIRST_USER_PROP_ID + 2)
  436. #define SP_PROT_PCT1_SERVER 0x00000001
  437. #define SP_PROT_PCT1_CLIENT 0x00000002
  438. #define SP_PROT_PCT1 (SP_PROT_PCT1_SERVER | SP_PROT_PCT1_CLIENT)
  439. #define SP_PROT_SSL2_SERVER 0x00000004
  440. #define SP_PROT_SSL2_CLIENT 0x00000008
  441. #define SP_PROT_SSL2 (SP_PROT_SSL2_SERVER | SP_PROT_SSL2_CLIENT)
  442. #define SP_PROT_SSL3_SERVER 0x00000010
  443. #define SP_PROT_SSL3_CLIENT 0x00000020
  444. #define SP_PROT_SSL3 (SP_PROT_SSL3_SERVER | SP_PROT_SSL3_CLIENT)
  445. #define SP_PROT_TLS1_SERVER 0x00000040
  446. #define SP_PROT_TLS1_CLIENT 0x00000080
  447. #define SP_PROT_TLS1 (SP_PROT_TLS1_SERVER | SP_PROT_TLS1_CLIENT)
  448. #define SP_PROT_SSL3TLS1_CLIENTS (SP_PROT_TLS1_CLIENT | SP_PROT_SSL3_CLIENT)
  449. #define SP_PROT_SSL3TLS1_SERVERS (SP_PROT_TLS1_SERVER | SP_PROT_SSL3_SERVER)
  450. #define SP_PROT_SSL3TLS1 (SP_PROT_SSL3 | SP_PROT_TLS1)
  451. #define SP_PROT_UNI_SERVER 0x40000000
  452. #define SP_PROT_UNI_CLIENT 0x80000000
  453. #define SP_PROT_UNI (SP_PROT_UNI_SERVER | SP_PROT_UNI_CLIENT)
  454. #define SP_PROT_ALL 0xffffffff
  455. #define SP_PROT_NONE 0
  456. #define SP_PROT_CLIENTS (SP_PROT_PCT1_CLIENT | SP_PROT_SSL2_CLIENT | SP_PROT_SSL3_CLIENT | SP_PROT_UNI_CLIENT | SP_PROT_TLS1_CLIENT)
  457. #define SP_PROT_SERVERS (SP_PROT_PCT1_SERVER | SP_PROT_SSL2_SERVER | SP_PROT_SSL3_SERVER | SP_PROT_UNI_SERVER | SP_PROT_TLS1_SERVER)
  458. #define SP_PROT_TLS1_0_SERVER SP_PROT_TLS1_SERVER
  459. #define SP_PROT_TLS1_0_CLIENT SP_PROT_TLS1_CLIENT
  460. #define SP_PROT_TLS1_0 (SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_0_CLIENT)
  461. #define SP_PROT_TLS1_1_SERVER 0x00000100
  462. #define SP_PROT_TLS1_1_CLIENT 0x00000200
  463. #define SP_PROT_TLS1_1 (SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_1_CLIENT)
  464. #define SP_PROT_TLS1_2_SERVER 0x00000400
  465. #define SP_PROT_TLS1_2_CLIENT 0x00000800
  466. #define SP_PROT_TLS1_2 (SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_2_CLIENT)
  467. #define SP_PROT_TLS1_3_SERVER 0x00001000
  468. #define SP_PROT_TLS1_3_CLIENT 0x00002000
  469. #define SP_PROT_TLS1_3 (SP_PROT_TLS1_3_SERVER | SP_PROT_TLS1_3_CLIENT)
  470. #define SP_PROT_DTLS_SERVER 0x00010000
  471. #define SP_PROT_DTLS_CLIENT 0x00020000
  472. #define SP_PROT_DTLS (SP_PROT_DTLS_SERVER | SP_PROT_DTLS_CLIENT )
  473. #define SP_PROT_DTLS1_0_SERVER SP_PROT_DTLS_SERVER
  474. #define SP_PROT_DTLS1_0_CLIENT SP_PROT_DTLS_CLIENT
  475. #define SP_PROT_DTLS1_0 (SP_PROT_DTLS1_0_SERVER | SP_PROT_DTLS1_0_CLIENT)
  476. #define SP_PROT_DTLS1_2_SERVER 0x00040000
  477. #define SP_PROT_DTLS1_2_CLIENT 0x00080000
  478. #define SP_PROT_DTLS1_2 (SP_PROT_DTLS1_2_SERVER | SP_PROT_DTLS1_2_CLIENT)
  479. #define SP_PROT_DTLS1_X_SERVER (SP_PROT_DTLS1_0_SERVER | SP_PROT_DTLS1_2_SERVER)
  480. #define SP_PROT_DTLS1_X_CLIENT (SP_PROT_DTLS1_0_CLIENT | SP_PROT_DTLS1_2_CLIENT)
  481. #define SP_PROT_DTLS1_X (SP_PROT_DTLS1_X_SERVER | SP_PROT_DTLS1_X_CLIENT)
  482. #define SP_PROT_TLS1_1PLUS_SERVER (SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_3_SERVER)
  483. #define SP_PROT_TLS1_1PLUS_CLIENT (SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_3_CLIENT)
  484. #define SP_PROT_TLS1_1PLUS (SP_PROT_TLS1_1PLUS_SERVER | SP_PROT_TLS1_1PLUS_CLIENT)
  485. #define SP_PROT_TLS1_3PLUS_SERVER SP_PROT_TLS1_3_SERVER
  486. #define SP_PROT_TLS1_3PLUS_CLIENT SP_PROT_TLS1_3_CLIENT
  487. #define SP_PROT_TLS1_3PLUS (SP_PROT_TLS1_3PLUS_SERVER | SP_PROT_TLS1_3PLUS_CLIENT)
  488. #define SP_PROT_TLS1_X_SERVER (SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_3_SERVER)
  489. #define SP_PROT_TLS1_X_CLIENT (SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_3_CLIENT)
  490. #define SP_PROT_TLS1_X (SP_PROT_TLS1_X_SERVER | SP_PROT_TLS1_X_CLIENT)
  491. #define SP_PROT_SSL3TLS1_X_CLIENTS (SP_PROT_TLS1_X_CLIENT | SP_PROT_SSL3_CLIENT)
  492. #define SP_PROT_SSL3TLS1_X_SERVERS (SP_PROT_TLS1_X_SERVER | SP_PROT_SSL3_SERVER)
  493. #define SP_PROT_SSL3TLS1_X (SP_PROT_SSL3 | SP_PROT_TLS1_X)
  494. #define SP_PROT_X_CLIENTS (SP_PROT_CLIENTS | SP_PROT_TLS1_X_CLIENT | SP_PROT_DTLS1_X_CLIENT )
  495. #define SP_PROT_X_SERVERS (SP_PROT_SERVERS | SP_PROT_TLS1_X_SERVER | SP_PROT_DTLS1_X_SERVER )
  496. typedef WINBOOL (*SSL_EMPTY_CACHE_FN_A)(LPSTR pszTargetName,DWORD dwFlags);
  497. WINBOOL SslEmptyCacheA(LPSTR pszTargetName,DWORD dwFlags);
  498. typedef WINBOOL (*SSL_EMPTY_CACHE_FN_W)(LPWSTR pszTargetName,DWORD dwFlags);
  499. WINBOOL SslEmptyCacheW(LPWSTR pszTargetName,DWORD dwFlags);
  500. #define SSL_EMPTY_CACHE_FN __MINGW_NAME_UAW(SSL_EMPTY_CACHE_FN)
  501. #define SslEmptyCache __MINGW_NAME_AW(SslEmptyCache)
  502. typedef struct _SSL_CREDENTIAL_CERTIFICATE {
  503. DWORD cbPrivateKey;
  504. PBYTE pPrivateKey;
  505. DWORD cbCertificate;
  506. PBYTE pCertificate;
  507. PSTR pszPassword;
  508. } SSL_CREDENTIAL_CERTIFICATE,*PSSL_CREDENTIAL_CERTIFICATE;
  509. #define SCHANNEL_SECRET_TYPE_CAPI 0x00000001
  510. #define SCHANNEL_SECRET_PRIVKEY 0x00000002
  511. #define SCH_CRED_X509_CERTCHAIN 0x00000001
  512. #define SCH_CRED_X509_CAPI 0x00000002
  513. #define SCH_CRED_CERT_CONTEXT 0x00000003
  514. struct _HMAPPER;
  515. typedef struct _SCH_CRED {
  516. DWORD dwVersion;
  517. DWORD cCreds;
  518. PVOID *paSecret;
  519. PVOID *paPublic;
  520. DWORD cMappers;
  521. struct _HMAPPER **aphMappers;
  522. } SCH_CRED,*PSCH_CRED;
  523. typedef struct _SCH_CRED_SECRET_CAPI {
  524. DWORD dwType;
  525. HCRYPTPROV hProv;
  526. } SCH_CRED_SECRET_CAPI,*PSCH_CRED_SECRET_CAPI;
  527. typedef struct _SCH_CRED_SECRET_PRIVKEY {
  528. DWORD dwType;
  529. PBYTE pPrivateKey;
  530. DWORD cbPrivateKey;
  531. PSTR pszPassword;
  532. } SCH_CRED_SECRET_PRIVKEY,*PSCH_CRED_SECRET_PRIVKEY;
  533. typedef struct _SCH_CRED_PUBLIC_CERTCHAIN {
  534. DWORD dwType;
  535. DWORD cbCertChain;
  536. PBYTE pCertChain;
  537. } SCH_CRED_PUBLIC_CERTCHAIN,*PSCH_CRED_PUBLIC_CERTCHAIN;
  538. typedef struct _SCH_CRED_PUBLIC_CAPI {
  539. DWORD dwType;
  540. HCRYPTPROV hProv;
  541. } SCH_CRED_PUBLIC_CAPI,*PSCH_CRED_PUBLIC_CAPI;
  542. typedef struct _PctPublicKey {
  543. DWORD Type;
  544. DWORD cbKey;
  545. UCHAR pKey[1];
  546. } PctPublicKey;
  547. typedef struct _X509Certificate {
  548. DWORD Version;
  549. DWORD SerialNumber[4];
  550. ALG_ID SignatureAlgorithm;
  551. FILETIME ValidFrom;
  552. FILETIME ValidUntil;
  553. PSTR pszIssuer;
  554. PSTR pszSubject;
  555. PctPublicKey *pPublicKey;
  556. } X509Certificate,*PX509Certificate;
  557. WINBOOL SslGenerateKeyPair(PSSL_CREDENTIAL_CERTIFICATE pCerts,PSTR pszDN,PSTR pszPassword,DWORD Bits);
  558. VOID SslGenerateRandomBits(PUCHAR pRandomData,LONG cRandomData);
  559. WINBOOL SslCrackCertificate(PUCHAR pbCertificate,DWORD cbCertificate,DWORD dwFlags,PX509Certificate *ppCertificate);
  560. VOID SslFreeCertificate(PX509Certificate pCertificate);
  561. DWORD WINAPI SslGetMaximumKeySize(DWORD Reserved);
  562. WINBOOL SslGetDefaultIssuers(PBYTE pbIssuers,DWORD *pcbIssuers);
  563. #define SSL_CRACK_CERTIFICATE_NAME TEXT("SslCrackCertificate")
  564. #define SSL_FREE_CERTIFICATE_NAME TEXT("SslFreeCertificate")
  565. typedef WINBOOL (WINAPI *SSL_CRACK_CERTIFICATE_FN)(PUCHAR pbCertificate,DWORD cbCertificate,WINBOOL VerifySignature,PX509Certificate *ppCertificate);
  566. typedef VOID (WINAPI *SSL_FREE_CERTIFICATE_FN)(PX509Certificate pCertificate);
  567. typedef SECURITY_STATUS (WINAPI *SslGetServerIdentityFn)(PBYTE ClientHello, DWORD ClientHelloSize, PBYTE *ServerIdentity, PDWORD ServerIdentitySize, DWORD Flags);
  568. SECURITY_STATUS WINAPI SslGetServerIdentity(PBYTE ClientHello, DWORD ClientHelloSize, PBYTE *ServerIdentity, PDWORD ServerIdentitySize, DWORD Flags);
  569. #if NTDDI_VERSION >= NTDDI_WIN10_19H1
  570. typedef struct _SCH_EXTENSION_DATA {
  571. WORD ExtensionType;
  572. const BYTE *pExtData;
  573. DWORD cbExtData;
  574. }SCH_EXTENSION_DATA;
  575. typedef enum _SchGetExtensionsOptions {
  576. SCH_EXTENSIONS_OPTIONS_NONE = 0x0,
  577. SCH_NO_RECORD_HEADER = 0x1
  578. }SchGetExtensionsOptions;
  579. typedef SECURITY_STATUS (WINAPI *SslGetExtensionsFn)(const BYTE *clientHello, DWORD clientHelloByteSize, SCH_EXTENSION_DATA *genericExtensions, BYTE genericExtensionsCount, DWORD *bytesToRead, SchGetExtensionsOptions flags);
  580. SECURITY_STATUS WINAPI SslGetExtensions(const BYTE *clientHello, DWORD clientHelloByteSize, SCH_EXTENSION_DATA *genericExtensions, BYTE genericExtensionsCount, DWORD *bytesToRead, SchGetExtensionsOptions flags);
  581. #endif /* NTDDI_VERSION >= NTDDI_WIN10_19H1 */
  582. #endif /* __SCHANNEL_H__ */