This file is indexed.

/usr/include/x86_64-linux-gnu/winpr/schannel.h is in libwinpr-dev 1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
/**
 * WinPR: Windows Portable Runtime
 * Schannel Security Package
 *
 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef WINPR_SSPI_SCHANNEL_H
#define WINPR_SSPI_SCHANNEL_H

#include <winpr/sspi.h>
#include <winpr/crypto.h>

#ifdef _WIN32

#include <schannel.h>

#else

#define SCHANNEL_NAME_A		"Schannel"
#define SCHANNEL_NAME_W		L"Schannel"

#ifdef _UNICODE
#define SCHANNEL_NAME	SCHANNEL_NAME_W
#else
#define SCHANNEL_NAME	SCHANNEL_NAME_A
#endif

#define SECPKG_ATTR_SUPPORTED_ALGS		86
#define SECPKG_ATTR_CIPHER_STRENGTHS		87
#define SECPKG_ATTR_SUPPORTED_PROTOCOLS		88

typedef struct _SecPkgCred_SupportedAlgs
{
	DWORD cSupportedAlgs;
	ALG_ID* palgSupportedAlgs;
} SecPkgCred_SupportedAlgs, *PSecPkgCred_SupportedAlgs;

typedef struct _SecPkgCred_CipherStrengths
{
	DWORD dwMinimumCipherStrength;
	DWORD dwMaximumCipherStrength;
} SecPkgCred_CipherStrengths, *PSecPkgCred_CipherStrengths;

typedef struct _SecPkgCred_SupportedProtocols
{
	DWORD grbitProtocol;
} SecPkgCred_SupportedProtocols, *PSecPkgCred_SupportedProtocols;

enum eTlsSignatureAlgorithm
{
	TlsSignatureAlgorithm_Anonymous = 0,
	TlsSignatureAlgorithm_Rsa = 1,
	TlsSignatureAlgorithm_Dsa = 2,
	TlsSignatureAlgorithm_Ecdsa = 3
};

enum eTlsHashAlgorithm
{
	TlsHashAlgorithm_None = 0,
	TlsHashAlgorithm_Md5 = 1,
	TlsHashAlgorithm_Sha1 = 2,
	TlsHashAlgorithm_Sha224 = 3,
	TlsHashAlgorithm_Sha256 = 4,
	TlsHashAlgorithm_Sha384 = 5,
	TlsHashAlgorithm_Sha512 = 6
};

#define SCH_CRED_V1			0x00000001
#define SCH_CRED_V2			0x00000002
#define SCH_CRED_VERSION		0x00000002
#define SCH_CRED_V3			0x00000003
#define SCHANNEL_CRED_VERSION		0x00000004

struct _HMAPPER;

typedef struct _SCHANNEL_CRED
{
	DWORD dwVersion;
	DWORD cCreds;
	PCCERT_CONTEXT* paCred;
	HCERTSTORE hRootStore;

	DWORD cMappers;
	struct _HMAPPER **aphMappers;

	DWORD cSupportedAlgs;
	ALG_ID* palgSupportedAlgs;

	DWORD grbitEnabledProtocols;
	DWORD dwMinimumCipherStrength;
	DWORD dwMaximumCipherStrength;
	DWORD dwSessionLifespan;
	DWORD dwFlags;
	DWORD dwCredFormat;
} SCHANNEL_CRED, *PSCHANNEL_CRED;

#define SCH_CRED_FORMAT_CERT_CONTEXT		0x00000000
#define SCH_CRED_FORMAT_CERT_HASH		0x00000001
#define SCH_CRED_FORMAT_CERT_HASH_STORE		0x00000002

#define SCH_CRED_MAX_STORE_NAME_SIZE		128
#define SCH_CRED_MAX_SUPPORTED_ALGS		256
#define SCH_CRED_MAX_SUPPORTED_CERTS		100

typedef struct _SCHANNEL_CERT_HASH
{
	DWORD dwLength;
	DWORD dwFlags;
	HCRYPTPROV hProv;
	BYTE ShaHash[20];
} SCHANNEL_CERT_HASH, *PSCHANNEL_CERT_HASH;

typedef struct _SCHANNEL_CERT_HASH_STORE
{
    DWORD dwLength;
    DWORD dwFlags;
    HCRYPTPROV hProv;
    BYTE ShaHash[20];
    WCHAR pwszStoreName[SCH_CRED_MAX_STORE_NAME_SIZE];
} SCHANNEL_CERT_HASH_STORE, *PSCHANNEL_CERT_HASH_STORE;

#define SCH_MACHINE_CERT_HASH				0x00000001

#define SCH_CRED_NO_SYSTEM_MAPPER			0x00000002
#define SCH_CRED_NO_SERVERNAME_CHECK			0x00000004
#define SCH_CRED_MANUAL_CRED_VALIDATION			0x00000008
#define SCH_CRED_NO_DEFAULT_CREDS			0x00000010
#define SCH_CRED_AUTO_CRED_VALIDATION			0x00000020
#define SCH_CRED_USE_DEFAULT_CREDS			0x00000040
#define SCH_CRED_DISABLE_RECONNECTS			0x00000080

#define SCH_CRED_REVOCATION_CHECK_END_CERT		0x00000100
#define SCH_CRED_REVOCATION_CHECK_CHAIN			0x00000200
#define SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT	0x00000400
#define SCH_CRED_IGNORE_NO_REVOCATION_CHECK		0x00000800
#define SCH_CRED_IGNORE_REVOCATION_OFFLINE		0x00001000

#define SCH_CRED_RESTRICTED_ROOTS			0x00002000
#define SCH_CRED_REVOCATION_CHECK_CACHE_ONLY		0x00004000
#define SCH_CRED_CACHE_ONLY_URL_RETRIEVAL		0x00008000

#define SCH_CRED_MEMORY_STORE_CERT			0x00010000

#define SCH_CRED_CACHE_ONLY_URL_RETRIEVAL_ON_CREATE	0x00020000

#define SCH_SEND_ROOT_CERT				0x00040000
#define SCH_CRED_SNI_CREDENTIAL				0x00080000
#define SCH_CRED_SNI_ENABLE_OCSP			0x00100000
#define SCH_SEND_AUX_RECORD				0x00200000

#define SCHANNEL_RENEGOTIATE		0
#define SCHANNEL_SHUTDOWN		1
#define SCHANNEL_ALERT			2
#define SCHANNEL_SESSION		3

typedef struct _SCHANNEL_ALERT_TOKEN
{
	DWORD dwTokenType;
	DWORD dwAlertType;
	DWORD dwAlertNumber;
} SCHANNEL_ALERT_TOKEN;

#define TLS1_ALERT_WARNING			1
#define TLS1_ALERT_FATAL			2

#define TLS1_ALERT_CLOSE_NOTIFY			0
#define TLS1_ALERT_UNEXPECTED_MESSAGE		10
#define TLS1_ALERT_BAD_RECORD_MAC		20
#define TLS1_ALERT_DECRYPTION_FAILED		21
#define TLS1_ALERT_RECORD_OVERFLOW		22
#define TLS1_ALERT_DECOMPRESSION_FAIL		30
#define TLS1_ALERT_HANDSHAKE_FAILURE		40
#define TLS1_ALERT_BAD_CERTIFICATE		42
#define TLS1_ALERT_UNSUPPORTED_CERT		43
#define TLS1_ALERT_CERTIFICATE_REVOKED		44
#define TLS1_ALERT_CERTIFICATE_EXPIRED		45
#define TLS1_ALERT_CERTIFICATE_UNKNOWN		46
#define TLS1_ALERT_ILLEGAL_PARAMETER		47
#define TLS1_ALERT_UNKNOWN_CA			48
#define TLS1_ALERT_ACCESS_DENIED		49
#define TLS1_ALERT_DECODE_ERROR			50
#define TLS1_ALERT_DECRYPT_ERROR		51
#define TLS1_ALERT_EXPORT_RESTRICTION		60
#define TLS1_ALERT_PROTOCOL_VERSION		70
#define TLS1_ALERT_INSUFFIENT_SECURITY		71
#define TLS1_ALERT_INTERNAL_ERROR		80
#define TLS1_ALERT_USER_CANCELED		90
#define TLS1_ALERT_NO_RENEGOTIATION		100
#define TLS1_ALERT_UNSUPPORTED_EXT		110

#define SSL_SESSION_ENABLE_RECONNECTS		1
#define SSL_SESSION_DISABLE_RECONNECTS		2

typedef struct _SCHANNEL_SESSION_TOKEN
{
	DWORD dwTokenType;
	DWORD dwFlags;
} SCHANNEL_SESSION_TOKEN;

typedef struct _SCHANNEL_CLIENT_SIGNATURE
{
	DWORD cbLength;
	ALG_ID aiHash;
	DWORD cbHash;
	BYTE HashValue[36];
	BYTE CertThumbprint[20];
} SCHANNEL_CLIENT_SIGNATURE, *PSCHANNEL_CLIENT_SIGNATURE;

#define SP_PROT_SSL3_SERVER		0x00000010
#define SP_PROT_SSL3_CLIENT		0x00000020
#define SP_PROT_SSL3			(SP_PROT_SSL3_SERVER | SP_PROT_SSL3_CLIENT)

#define SP_PROT_TLS1_SERVER		0x00000040
#define SP_PROT_TLS1_CLIENT		0x00000080
#define SP_PROT_TLS1			(SP_PROT_TLS1_SERVER | SP_PROT_TLS1_CLIENT)

#define SP_PROT_SSL3TLS1_CLIENTS	(SP_PROT_TLS1_CLIENT | SP_PROT_SSL3_CLIENT)
#define SP_PROT_SSL3TLS1_SERVERS	(SP_PROT_TLS1_SERVER | SP_PROT_SSL3_SERVER)
#define SP_PROT_SSL3TLS1		(SP_PROT_SSL3 | SP_PROT_TLS1)

#define SP_PROT_UNI_SERVER		0x40000000
#define SP_PROT_UNI_CLIENT		0x80000000
#define SP_PROT_UNI			(SP_PROT_UNI_SERVER | SP_PROT_UNI_CLIENT)

#define SP_PROT_ALL			0xFFFFFFFF
#define SP_PROT_NONE			0
#define SP_PROT_CLIENTS			(SP_PROT_SSL3_CLIENT | SP_PROT_UNI_CLIENT | SP_PROT_TLS1_CLIENT)
#define SP_PROT_SERVERS			(SP_PROT_SSL3_SERVER | SP_PROT_UNI_SERVER | SP_PROT_TLS1_SERVER)

#define SP_PROT_TLS1_0_SERVER		SP_PROT_TLS1_SERVER
#define SP_PROT_TLS1_0_CLIENT		SP_PROT_TLS1_CLIENT
#define SP_PROT_TLS1_0			(SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_0_CLIENT)

#define SP_PROT_TLS1_1_SERVER		0x00000100
#define SP_PROT_TLS1_1_CLIENT		0x00000200
#define SP_PROT_TLS1_1			(SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_1_CLIENT)

#define SP_PROT_TLS1_2_SERVER		0x00000400
#define SP_PROT_TLS1_2_CLIENT		0x00000800
#define SP_PROT_TLS1_2			(SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_2_CLIENT)

#define SP_PROT_DTLS_SERVER		0x00010000
#define SP_PROT_DTLS_CLIENT		0x00020000
#define SP_PROT_DTLS			(SP_PROT_DTLS_SERVER | SP_PROT_DTLS_CLIENT)

#define SP_PROT_DTLS1_0_SERVER		SP_PROT_DTLS_SERVER
#define SP_PROT_DTLS1_0_CLIENT		SP_PROT_DTLS_CLIENT
#define SP_PROT_DTLS1_0			(SP_PROT_DTLS1_0_SERVER | SP_PROT_DTLS1_0_CLIENT)

#define SP_PROT_DTLS1_X_SERVER		SP_PROT_DTLS1_0_SERVER

#define SP_PROT_DTLS1_X_CLIENT		SP_PROT_DTLS1_0_CLIENT

#define SP_PROT_DTLS1_X			(SP_PROT_DTLS1_X_SERVER | SP_PROT_DTLS1_X_CLIENT)

#define SP_PROT_TLS1_1PLUS_SERVER	(SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER)
#define SP_PROT_TLS1_1PLUS_CLIENT	(SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT)

#define SP_PROT_TLS1_1PLUS		(SP_PROT_TLS1_1PLUS_SERVER | SP_PROT_TLS1_1PLUS_CLIENT)

#define SP_PROT_TLS1_X_SERVER		(SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER)
#define SP_PROT_TLS1_X_CLIENT		(SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT)
#define SP_PROT_TLS1_X			(SP_PROT_TLS1_X_SERVER | SP_PROT_TLS1_X_CLIENT)

#define SP_PROT_SSL3TLS1_X_CLIENTS	(SP_PROT_TLS1_X_CLIENT | SP_PROT_SSL3_CLIENT)
#define SP_PROT_SSL3TLS1_X_SERVERS	(SP_PROT_TLS1_X_SERVER | SP_PROT_SSL3_SERVER)
#define SP_PROT_SSL3TLS1_X		(SP_PROT_SSL3 | SP_PROT_TLS1_X)

#define SP_PROT_X_CLIENTS		(SP_PROT_CLIENTS | SP_PROT_TLS1_X_CLIENT | SP_PROT_DTLS1_X_CLIENT)
#define SP_PROT_X_SERVERS		(SP_PROT_SERVERS | SP_PROT_TLS1_X_SERVER | SP_PROT_DTLS1_X_SERVER )

#endif

#endif /* WINPR_SSPI_SCHANNEL_H */