1 // Copyright © 2015, Peter Atashian
2 // Licensed under the MIT License <LICENSE.md>
3 //! Public Definitions for SCHANNEL Security Provider
4 pub const UNISP_NAME: &'static str = "Microsoft Unified Security Protocol Provider";
5 pub const SSL2SP_NAME: &'static str = "Microsoft SSL 2.0";
6 pub const SSL3SP_NAME: &'static str = "Microsoft SSL 3.0";
7 pub const TLS1SP_NAME: &'static str = "Microsoft TLS 1.0";
8 pub const PCT1SP_NAME: &'static str = "Microsoft PCT 1.0";
9 pub const SCHANNEL_NAME: &'static str = "Schannel";
10 ENUM!{enum eTlsSignatureAlgorithm {
11     TlsSignatureAlgorithm_Anonymous = 0,
12     TlsSignatureAlgorithm_Rsa = 1,
13     TlsSignatureAlgorithm_Dsa = 2,
14     TlsSignatureAlgorithm_Ecdsa = 3,
15 }}
16 ENUM!{enum eTlsHashAlgorithm {
17     TlsHashAlgorithm_None = 0,
18     TlsHashAlgorithm_Md5 = 1,
19     TlsHashAlgorithm_Sha1 = 2,
20     TlsHashAlgorithm_Sha224 = 3,
21     TlsHashAlgorithm_Sha256 = 4,
22     TlsHashAlgorithm_Sha384 = 5,
23     TlsHashAlgorithm_Sha512 = 6,
24 }}
25 pub const UNISP_RPC_ID: ::DWORD = 14;
26 STRUCT!{struct SecPkgContext_RemoteCredentialInfo {
27     cbCertificateChain: ::DWORD,
28     pbCertificateChain: ::PBYTE,
29     cCertificates: ::DWORD,
30     fFlags: ::DWORD,
31     dwBits: ::DWORD,
32 }}
33 pub type PSecPkgContext_RemoteCredentialInfo = *mut SecPkgContext_RemoteCredentialInfo;
34 pub type SecPkgContext_RemoteCredenitalInfo = SecPkgContext_RemoteCredentialInfo;
35 pub type PSecPkgContext_RemoteCredenitalInfo = *mut SecPkgContext_RemoteCredentialInfo;
36 pub const RCRED_STATUS_NOCRED: ::DWORD = 0x00000000;
37 pub const RCRED_CRED_EXISTS: ::DWORD = 0x00000001;
38 pub const RCRED_STATUS_UNKNOWN_ISSUER: ::DWORD = 0x00000002;
39 STRUCT!{struct SecPkgContext_LocalCredentialInfo {
40     cbCertificateChain: ::DWORD,
41     pbCertificateChain: ::PBYTE,
42     cCertificates: ::DWORD,
43     fFlags: ::DWORD,
44     dwBits: ::DWORD,
45 }}
46 pub type PSecPkgContext_LocalCredentialInfo = *mut SecPkgContext_LocalCredentialInfo;
47 pub type SecPkgContext_LocalCredenitalInfo = SecPkgContext_LocalCredentialInfo;
48 pub type PSecPkgContext_LocalCredenitalInfo = *mut SecPkgContext_LocalCredentialInfo;
49 pub const LCRED_STATUS_NOCRED: ::DWORD = 0x00000000;
50 pub const LCRED_CRED_EXISTS: ::DWORD = 0x00000001;
51 pub const LCRED_STATUS_UNKNOWN_ISSUER: ::DWORD = 0x00000002;
52 STRUCT!{struct SecPkgContext_ClientCertPolicyResult {
53     dwPolicyResult: ::HRESULT,
54     guidPolicyId: ::GUID,
55 }}
56 pub type PSecPkgContext_ClientCertPolicyResult = *mut SecPkgContext_ClientCertPolicyResult;
57 STRUCT!{struct SecPkgContext_IssuerListInfoEx {
58     aIssuers: ::PCERT_NAME_BLOB,
59     cIssuers: ::DWORD,
60 }}
61 pub type PSecPkgContext_IssuerListInfoEx = *mut SecPkgContext_IssuerListInfoEx;
62 STRUCT!{struct SecPkgContext_ConnectionInfo {
63     dwProtocol: ::DWORD,
64     aiCipher: ::ALG_ID,
65     dwCipherStrength: ::DWORD,
66     aiHash: ::ALG_ID,
67     dwHashStrength: ::DWORD,
68     aiExch: ::ALG_ID,
69     dwExchStrength: ::DWORD,
70 }}
71 pub type PSecPkgContext_ConnectionInfo = *mut SecPkgContext_ConnectionInfo;
72 pub const SZ_ALG_MAX_SIZE: usize = 64;
73 pub const SECPKGCONTEXT_CIPHERINFO_V1: ::DWORD = 1;
74 STRUCT!{nodebug struct SecPkgContext_CipherInfo {
75     dwVersion: ::DWORD,
76     dwProtocol: ::DWORD,
77     dwCipherSuite: ::DWORD,
78     dwBaseCipherSuite: ::DWORD,
79     szCipherSuite: [::WCHAR; SZ_ALG_MAX_SIZE],
80     szCipher: [::WCHAR; SZ_ALG_MAX_SIZE],
81     dwCipherLen: ::DWORD,
82     dwCipherBlockLen: ::DWORD,
83     szHash: [::WCHAR; SZ_ALG_MAX_SIZE],
84     dwHashLen: ::DWORD,
85     szExchange: [::WCHAR; SZ_ALG_MAX_SIZE],
86     dwMinExchangeLen: ::DWORD,
87     dwMaxExchangeLen: ::DWORD,
88     szCertificate: [::WCHAR; SZ_ALG_MAX_SIZE],
89     dwKeyType: ::DWORD,
90 }}
91 pub type PSecPkgContext_CipherInfo = *mut SecPkgContext_CipherInfo;
92 STRUCT!{nodebug struct SecPkgContext_EapKeyBlock {
93     rgbKeys: [::BYTE; 128],
94     rgbIVs: [::BYTE; 64],
95 }}
96 pub type PSecPkgContext_EapKeyBlock = *mut SecPkgContext_EapKeyBlock;
97 STRUCT!{struct SecPkgContext_MappedCredAttr {
98     dwAttribute: ::DWORD,
99     pvBuffer: ::PVOID,
100 }}
101 pub type PSecPkgContext_MappedCredAttr = *mut SecPkgContext_MappedCredAttr;
102 pub const SSL_SESSION_RECONNECT: ::DWORD = 1;
103 STRUCT!{struct SecPkgContext_SessionInfo {
104     dwFlags: ::DWORD,
105     cbSessionId: ::DWORD,
106     rgbSessionId: [::BYTE; 32],
107 }}
108 pub type PSecPkgContext_SessionInfo = *mut SecPkgContext_SessionInfo;
109 STRUCT!{struct SecPkgContext_SessionAppData {
110     dwFlags: ::DWORD,
111     cbAppData: ::DWORD,
112     pbAppData: ::PBYTE,
113 }}
114 pub type PSecPkgContext_SessionAppData = *mut SecPkgContext_SessionAppData;
115 STRUCT!{struct SecPkgContext_EapPrfInfo {
116     dwVersion: ::DWORD,
117     cbPrfData: ::DWORD,
118     pbPrfData: ::PBYTE,
119 }}
120 pub type PSecPkgContext_EapPrfInfo = *mut SecPkgContext_EapPrfInfo;
121 STRUCT!{struct SecPkgContext_SupportedSignatures {
122     cSignatureAndHashAlgorithms: ::WORD,
123     pSignatureAndHashAlgorithms: *mut ::WORD,
124 }}
125 pub type PSecPkgContext_SupportedSignatures = *mut SecPkgContext_SupportedSignatures;
126 STRUCT!{struct SecPkgContext_Certificates {
127     cCertificates: ::DWORD,
128     cbCertificateChain: ::DWORD,
129     pbCertificateChain: ::PBYTE,
130 }}
131 pub type PSecPkgContext_Certificates = *mut SecPkgContext_Certificates;
132 STRUCT!{struct SecPkgContext_CertInfo {
133     dwVersion: ::DWORD,
134     cbSubjectName: ::DWORD,
135     pwszSubjectName: ::LPWSTR,
136     cbIssuerName: ::DWORD,
137     pwszIssuerName: ::LPWSTR,
138     dwKeySize: ::DWORD,
139 }}
140 pub type PSecPkgContext_CertInfo = *mut SecPkgContext_CertInfo;
141 pub const KERN_CONTEXT_CERT_INFO_V1: ::DWORD = 0x00000000;
142 STRUCT!{struct SecPkgContext_UiInfo {
143     hParentWindow: ::HWND,
144 }}
145 pub type PSecPkgContext_UiInfo = *mut SecPkgContext_UiInfo;
146 STRUCT!{struct SecPkgContext_EarlyStart {
147     dwEarlyStartFlags: ::DWORD,
148 }}
149 pub type PSecPkgContext_EarlyStart = *mut SecPkgContext_EarlyStart;
150 pub const ENABLE_TLS_CLIENT_EARLY_START: ::DWORD = 0x00000001;
151 pub const SCH_CRED_V1: ::DWORD = 0x00000001;
152 pub const SCH_CRED_V2: ::DWORD = 0x00000002;
153 pub const SCH_CRED_VERSION: ::DWORD = 0x00000002;
154 pub const SCH_CRED_V3: ::DWORD = 0x00000003;
155 pub const SCHANNEL_CRED_VERSION: ::DWORD = 0x00000004;
156 pub enum _HMAPPER {}
157 STRUCT!{struct SCHANNEL_CRED {
158     dwVersion: ::DWORD,
159     cCreds: ::DWORD,
160     paCred: *mut ::PCCERT_CONTEXT,
161     hRootStore: ::HCERTSTORE,
162     cMappers: ::DWORD,
163     aphMappers: *mut *mut _HMAPPER,
164     cSupportedAlgs: ::DWORD,
165     palgSupportedAlgs: *mut ::ALG_ID,
166     grbitEnabledProtocols: ::DWORD,
167     dwMinimumCipherStrength: ::DWORD,
168     dwMaximumCipherStrength: ::DWORD,
169     dwSessionLifespan: ::DWORD,
170     dwFlags: ::DWORD,
171     dwCredFormat: ::DWORD,
172 }}
173 pub type PSCHANNEL_CRED = *mut SCHANNEL_CRED;
174 pub const SCH_CRED_FORMAT_CERT_CONTEXT: ::DWORD = 0x00000000;
175 pub const SCH_CRED_FORMAT_CERT_HASH: ::DWORD = 0x00000001;
176 pub const SCH_CRED_FORMAT_CERT_HASH_STORE: ::DWORD = 0x00000002;
177 pub const SCH_CRED_MAX_STORE_NAME_SIZE: usize = 128;
178 pub const SCH_CRED_MAX_SUPPORTED_ALGS: ::DWORD = 256;
179 pub const SCH_CRED_MAX_SUPPORTED_CERTS: ::DWORD = 100;
180 STRUCT!{struct SCHANNEL_CERT_HASH {
181     dwLength: ::DWORD,
182     dwFlags: ::DWORD,
183     hProv: ::HCRYPTPROV,
184     ShaHash: [::BYTE; 20],
185 }}
186 pub type PSCHANNEL_CERT_HASH = *mut SCHANNEL_CERT_HASH;
187 STRUCT!{nodebug struct SCHANNEL_CERT_HASH_STORE {
188     dwLength: ::DWORD,
189     dwFlags: ::DWORD,
190     hProv: ::HCRYPTPROV,
191     ShaHash: [::BYTE; 20],
192     pwszStoreName: [::WCHAR; SCH_CRED_MAX_STORE_NAME_SIZE],
193 }}
194 pub type PSCHANNEL_CERT_HASH_STORE = *mut SCHANNEL_CERT_HASH_STORE;
195 pub const SCH_MACHINE_CERT_HASH: ::DWORD = 0x00000001;
196 pub const SCH_CRED_NO_SYSTEM_MAPPER: ::DWORD = 0x00000002;
197 pub const SCH_CRED_NO_SERVERNAME_CHECK: ::DWORD = 0x00000004;
198 pub const SCH_CRED_MANUAL_CRED_VALIDATION: ::DWORD = 0x00000008;
199 pub const SCH_CRED_NO_DEFAULT_CREDS: ::DWORD = 0x00000010;
200 pub const SCH_CRED_AUTO_CRED_VALIDATION: ::DWORD = 0x00000020;
201 pub const SCH_CRED_USE_DEFAULT_CREDS: ::DWORD = 0x00000040;
202 pub const SCH_CRED_DISABLE_RECONNECTS: ::DWORD = 0x00000080;
203 pub const SCH_CRED_REVOCATION_CHECK_END_CERT: ::DWORD = 0x00000100;
204 pub const SCH_CRED_REVOCATION_CHECK_CHAIN: ::DWORD = 0x00000200;
205 pub const SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT: ::DWORD = 0x00000400;
206 pub const SCH_CRED_IGNORE_NO_REVOCATION_CHECK: ::DWORD = 0x00000800;
207 pub const SCH_CRED_IGNORE_REVOCATION_OFFLINE: ::DWORD = 0x00001000;
208 pub const SCH_CRED_RESTRICTED_ROOTS: ::DWORD = 0x00002000;
209 pub const SCH_CRED_REVOCATION_CHECK_CACHE_ONLY: ::DWORD = 0x00004000;
210 pub const SCH_CRED_CACHE_ONLY_URL_RETRIEVAL: ::DWORD = 0x00008000;
211 pub const SCH_CRED_MEMORY_STORE_CERT: ::DWORD = 0x00010000;
212 pub const SCH_CRED_CACHE_ONLY_URL_RETRIEVAL_ON_CREATE: ::DWORD = 0x00020000;
213 pub const SCH_SEND_ROOT_CERT: ::DWORD = 0x00040000;
214 pub const SCH_CRED_SNI_CREDENTIAL: ::DWORD = 0x00080000;
215 pub const SCH_CRED_SNI_ENABLE_OCSP: ::DWORD = 0x00100000;
216 pub const SCH_SEND_AUX_RECORD: ::DWORD = 0x00200000;
217 pub const SCH_USE_STRONG_CRYPTO: ::DWORD = 0x00400000;
218 pub const SCHANNEL_RENEGOTIATE: ::DWORD = 0;
219 pub const SCHANNEL_SHUTDOWN: ::DWORD = 1;
220 pub const SCHANNEL_ALERT: ::DWORD = 2;
221 pub const SCHANNEL_SESSION: ::DWORD = 3;
222 STRUCT!{struct SCHANNEL_ALERT_TOKEN {
223     dwTokenType: ::DWORD,
224     dwAlertType: ::DWORD,
225     dwAlertNumber: ::DWORD,
226 }}
227 pub const TLS1_ALERT_WARNING: ::DWORD = 1;
228 pub const TLS1_ALERT_FATAL: ::DWORD = 2;
229 pub const TLS1_ALERT_CLOSE_NOTIFY: ::DWORD = 0;
230 pub const TLS1_ALERT_UNEXPECTED_MESSAGE: ::DWORD = 10;
231 pub const TLS1_ALERT_BAD_RECORD_MAC: ::DWORD = 20;
232 pub const TLS1_ALERT_DECRYPTION_FAILED: ::DWORD = 21;
233 pub const TLS1_ALERT_RECORD_OVERFLOW: ::DWORD = 22;
234 pub const TLS1_ALERT_DECOMPRESSION_FAIL: ::DWORD = 30;
235 pub const TLS1_ALERT_HANDSHAKE_FAILURE: ::DWORD = 40;
236 pub const TLS1_ALERT_BAD_CERTIFICATE: ::DWORD = 42;
237 pub const TLS1_ALERT_UNSUPPORTED_CERT: ::DWORD = 43;
238 pub const TLS1_ALERT_CERTIFICATE_REVOKED: ::DWORD = 44;
239 pub const TLS1_ALERT_CERTIFICATE_EXPIRED: ::DWORD = 45;
240 pub const TLS1_ALERT_CERTIFICATE_UNKNOWN: ::DWORD = 46;
241 pub const TLS1_ALERT_ILLEGAL_PARAMETER: ::DWORD = 47;
242 pub const TLS1_ALERT_UNKNOWN_CA: ::DWORD = 48;
243 pub const TLS1_ALERT_ACCESS_DENIED: ::DWORD = 49;
244 pub const TLS1_ALERT_DECODE_ERROR: ::DWORD = 50;
245 pub const TLS1_ALERT_DECRYPT_ERROR: ::DWORD = 51;
246 pub const TLS1_ALERT_EXPORT_RESTRICTION: ::DWORD = 60;
247 pub const TLS1_ALERT_PROTOCOL_VERSION: ::DWORD = 70;
248 pub const TLS1_ALERT_INSUFFIENT_SECURITY: ::DWORD = 71;
249 pub const TLS1_ALERT_INTERNAL_ERROR: ::DWORD = 80;
250 pub const TLS1_ALERT_USER_CANCELED: ::DWORD = 90;
251 pub const TLS1_ALERT_NO_RENEGOTIATION: ::DWORD = 100;
252 pub const TLS1_ALERT_UNSUPPORTED_EXT: ::DWORD = 110;
253 pub const TLS1_ALERT_NO_APP_PROTOCOL: ::DWORD = 120;
254 pub const SSL_SESSION_ENABLE_RECONNECTS: ::DWORD = 1;
255 pub const SSL_SESSION_DISABLE_RECONNECTS: ::DWORD = 2;
256 STRUCT!{struct SCHANNEL_SESSION_TOKEN {
257     dwTokenType: ::DWORD,
258     dwFlags: ::DWORD,
259 }}
260 STRUCT!{nodebug struct SCHANNEL_CLIENT_SIGNATURE {
261     cbLength: ::DWORD,
262     aiHash: ::ALG_ID,
263     cbHash: ::DWORD,
264     HashValue: [::BYTE; 36],
265     CertThumbprint: [::BYTE; 20],
266 }}
267 pub type PSCHANNEL_CLIENT_SIGNATURE = *mut SCHANNEL_CLIENT_SIGNATURE;
268 pub const SP_PROT_PCT1_SERVER: ::DWORD = 0x00000001;
269 pub const SP_PROT_PCT1_CLIENT: ::DWORD = 0x00000002;
270 pub const SP_PROT_PCT1: ::DWORD = SP_PROT_PCT1_SERVER | SP_PROT_PCT1_CLIENT;
271 pub const SP_PROT_SSL2_SERVER: ::DWORD = 0x00000004;
272 pub const SP_PROT_SSL2_CLIENT: ::DWORD = 0x00000008;
273 pub const SP_PROT_SSL2: ::DWORD = SP_PROT_SSL2_SERVER | SP_PROT_SSL2_CLIENT;
274 pub const SP_PROT_SSL3_SERVER: ::DWORD = 0x00000010;
275 pub const SP_PROT_SSL3_CLIENT: ::DWORD = 0x00000020;
276 pub const SP_PROT_SSL3: ::DWORD = SP_PROT_SSL3_SERVER | SP_PROT_SSL3_CLIENT;
277 pub const SP_PROT_TLS1_SERVER: ::DWORD = 0x00000040;
278 pub const SP_PROT_TLS1_CLIENT: ::DWORD = 0x00000080;
279 pub const SP_PROT_TLS1: ::DWORD = SP_PROT_TLS1_SERVER | SP_PROT_TLS1_CLIENT;
280 pub const SP_PROT_SSL3TLS1_CLIENTS: ::DWORD = SP_PROT_TLS1_CLIENT | SP_PROT_SSL3_CLIENT;
281 pub const SP_PROT_SSL3TLS1_SERVERS: ::DWORD = SP_PROT_TLS1_SERVER | SP_PROT_SSL3_SERVER;
282 pub const SP_PROT_SSL3TLS1: ::DWORD = SP_PROT_SSL3 | SP_PROT_TLS1;
283 pub const SP_PROT_UNI_SERVER: ::DWORD = 0x40000000;
284 pub const SP_PROT_UNI_CLIENT: ::DWORD = 0x80000000;
285 pub const SP_PROT_UNI: ::DWORD = SP_PROT_UNI_SERVER | SP_PROT_UNI_CLIENT;
286 pub const SP_PROT_ALL: ::DWORD = 0xffffffff;
287 pub const SP_PROT_NONE: ::DWORD = 0;
288 pub const SP_PROT_CLIENTS: ::DWORD = SP_PROT_PCT1_CLIENT | SP_PROT_SSL2_CLIENT
289     | SP_PROT_SSL3_CLIENT | SP_PROT_UNI_CLIENT | SP_PROT_TLS1_CLIENT;
290 pub const SP_PROT_SERVERS: ::DWORD = SP_PROT_PCT1_SERVER | SP_PROT_SSL2_SERVER
291     | SP_PROT_SSL3_SERVER | SP_PROT_UNI_SERVER | SP_PROT_TLS1_SERVER;
292 pub const SP_PROT_TLS1_0_SERVER: ::DWORD = SP_PROT_TLS1_SERVER;
293 pub const SP_PROT_TLS1_0_CLIENT: ::DWORD = SP_PROT_TLS1_CLIENT;
294 pub const SP_PROT_TLS1_0: ::DWORD = SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_0_CLIENT;
295 pub const SP_PROT_TLS1_1_SERVER: ::DWORD = 0x00000100;
296 pub const SP_PROT_TLS1_1_CLIENT: ::DWORD = 0x00000200;
297 pub const SP_PROT_TLS1_1: ::DWORD = SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_1_CLIENT;
298 pub const SP_PROT_TLS1_2_SERVER: ::DWORD = 0x00000400;
299 pub const SP_PROT_TLS1_2_CLIENT: ::DWORD = 0x00000800;
300 pub const SP_PROT_TLS1_2: ::DWORD = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_2_CLIENT;
301 pub const SP_PROT_DTLS_SERVER: ::DWORD = 0x00010000;
302 pub const SP_PROT_DTLS_CLIENT: ::DWORD = 0x00020000;
303 pub const SP_PROT_DTLS: ::DWORD = SP_PROT_DTLS_SERVER | SP_PROT_DTLS_CLIENT;
304 pub const SP_PROT_DTLS1_0_SERVER: ::DWORD = SP_PROT_DTLS_SERVER;
305 pub const SP_PROT_DTLS1_0_CLIENT: ::DWORD = SP_PROT_DTLS_CLIENT;
306 pub const SP_PROT_DTLS1_0: ::DWORD = SP_PROT_DTLS1_0_SERVER | SP_PROT_DTLS1_0_CLIENT;
307 pub const SP_PROT_DTLS1_X_SERVER: ::DWORD = SP_PROT_DTLS1_0_SERVER;
308 pub const SP_PROT_DTLS1_X_CLIENT: ::DWORD = SP_PROT_DTLS1_0_CLIENT;
309 pub const SP_PROT_DTLS1_X: ::DWORD = SP_PROT_DTLS1_X_SERVER | SP_PROT_DTLS1_X_CLIENT;
310 pub const SP_PROT_TLS1_1PLUS_SERVER: ::DWORD = SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER;
311 pub const SP_PROT_TLS1_1PLUS_CLIENT: ::DWORD = SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT;
312 pub const SP_PROT_TLS1_1PLUS: ::DWORD = SP_PROT_TLS1_1PLUS_SERVER | SP_PROT_TLS1_1PLUS_CLIENT;
313 pub const SP_PROT_TLS1_X_SERVER: ::DWORD = SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_1_SERVER
314     | SP_PROT_TLS1_2_SERVER;
315 pub const SP_PROT_TLS1_X_CLIENT: ::DWORD = SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_1_CLIENT
316     | SP_PROT_TLS1_2_CLIENT;
317 pub const SP_PROT_TLS1_X: ::DWORD = SP_PROT_TLS1_X_SERVER | SP_PROT_TLS1_X_CLIENT;
318 pub const SP_PROT_SSL3TLS1_X_CLIENTS: ::DWORD = SP_PROT_TLS1_X_CLIENT | SP_PROT_SSL3_CLIENT;
319 pub const SP_PROT_SSL3TLS1_X_SERVERS: ::DWORD = SP_PROT_TLS1_X_SERVER | SP_PROT_SSL3_SERVER;
320 pub const SP_PROT_SSL3TLS1_X: ::DWORD = SP_PROT_SSL3 | SP_PROT_TLS1_X;
321 pub const SP_PROT_X_CLIENTS: ::DWORD = SP_PROT_CLIENTS | SP_PROT_TLS1_X_CLIENT
322     | SP_PROT_DTLS1_X_CLIENT;
323 pub const SP_PROT_X_SERVERS: ::DWORD = SP_PROT_SERVERS | SP_PROT_TLS1_X_SERVER
324     | SP_PROT_DTLS1_X_SERVER;
325 //716
326 pub const SCHANNEL_SECRET_TYPE_CAPI: ::DWORD = 0x00000001;
327 pub const SCHANNEL_SECRET_PRIVKEY: ::DWORD = 0x00000002;
328 pub const SCH_CRED_X509_CERTCHAIN: ::DWORD = 0x00000001;
329 pub const SCH_CRED_X509_CAPI: ::DWORD = 0x00000002;
330 pub const SCH_CRED_CERT_CONTEXT: ::DWORD = 0x00000003;
331 //838
332 pub const SSL_CRACK_CERTIFICATE_NAME: &'static str = "SslCrackCertificate";
333 pub const SSL_FREE_CERTIFICATE_NAME: &'static str = "SslFreeCertificate";
334