aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/thirdparty/vschannel/vschannel.h
blob: 0338645c58f6818d73151e747b2cfbc5a4feea42 (plain)
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
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock.h>
#include <wincrypt.h>
#include <wintrust.h>
#include <schannel.h>

#define SECURITY_WIN32
#include <security.h>
#include <sspi.h>

#define vsc_init_resp_buff_size 44000

#define IO_BUFFER_SIZE  0x10000

#define TLS_MAX_BUFSIZ      32768

// Define here to be sure
#define SP_PROT_TLS1_2_CLIENT 0x00000800

typedef struct TlsContext TlsContext;

TlsContext new_tls_context();

static void vschannel_init(TlsContext *tls_ctx);

static void vschannel_cleanup(TlsContext *tls_ctx);

static INT request(TlsContext *tls_ctx, INT iport, LPWSTR host, CHAR *req, CHAR **out);

static SECURITY_STATUS https_make_request(TlsContext *tls_ctx, CHAR *req, CHAR **out, int *length);

static INT connect_to_server(TlsContext *tls_ctx, LPWSTR host, INT port_number);

static LONG disconnect_from_server(TlsContext *tls_ctx);

static SECURITY_STATUS perform_client_handshake(TlsContext *tls_ctx, LPWSTR host, SecBuffer *pExtraData);

static SECURITY_STATUS client_handshake_loop(TlsContext *tls_ctx, BOOL fDoInitialRead, SecBuffer *pExtraData);

static DWORD verify_server_certificate(PCCERT_CONTEXT  pServerCert, LPWSTR host, DWORD dwCertFlags);

static SECURITY_STATUS create_credentials(TlsContext *tls_ctx);

static void get_new_client_credentials(TlsContext *tls_ctx);