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