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