1184610Salfred/*
2184610Salfred * TLSv1 server - internal structures
3184610Salfred * Copyright (c) 2006-2007, Jouni Malinen <j@w1.fi>
4184610Salfred *
5184610Salfred * This software may be distributed under the terms of the BSD license.
6184610Salfred * See README for more details.
7184610Salfred */
8184610Salfred
9184610Salfred#ifndef TLSV1_SERVER_I_H
10184610Salfred#define TLSV1_SERVER_I_H
11184610Salfred
12184610Salfredstruct tlsv1_server {
13184610Salfred	enum {
14184610Salfred		CLIENT_HELLO, SERVER_HELLO, SERVER_CERTIFICATE,
15184610Salfred		SERVER_KEY_EXCHANGE, SERVER_CERTIFICATE_REQUEST,
16184610Salfred		SERVER_HELLO_DONE, CLIENT_CERTIFICATE, CLIENT_KEY_EXCHANGE,
17184610Salfred		CERTIFICATE_VERIFY, CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
18184610Salfred		SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
19184610Salfred		ESTABLISHED, FAILED
20184610Salfred	} state;
21184610Salfred
22184610Salfred	struct tlsv1_record_layer rl;
23184610Salfred
24184610Salfred	u8 session_id[TLS_SESSION_ID_MAX_LEN];
25184610Salfred	size_t session_id_len;
26184610Salfred	u8 client_random[TLS_RANDOM_LEN];
27184610Salfred	u8 server_random[TLS_RANDOM_LEN];
28184610Salfred	u8 master_secret[TLS_MASTER_SECRET_LEN];
29184610Salfred
30184610Salfred	u8 alert_level;
31184610Salfred	u8 alert_description;
32184610Salfred
33184610Salfred	struct crypto_public_key *client_rsa_key;
34184610Salfred
35184610Salfred	struct tls_verify_hash verify;
36184610Salfred
37184610Salfred#define MAX_CIPHER_COUNT 30
38184610Salfred	u16 cipher_suites[MAX_CIPHER_COUNT];
39184610Salfred	size_t num_cipher_suites;
40184610Salfred
41184610Salfred	u16 cipher_suite;
42184610Salfred
43184610Salfred	struct tlsv1_credentials *cred;
44184610Salfred
45184610Salfred	int verify_peer;
46184610Salfred	u16 client_version;
47194677Sthompsa
48194677Sthompsa	u8 *session_ticket;
49194677Sthompsa	size_t session_ticket_len;
50194677Sthompsa
51194677Sthompsa	tlsv1_server_session_ticket_cb session_ticket_cb;
52194677Sthompsa	void *session_ticket_cb_ctx;
53194677Sthompsa
54194677Sthompsa	int use_session_ticket;
55194677Sthompsa
56194677Sthompsa	u8 *dh_secret;
57194677Sthompsa	size_t dh_secret_len;
58194677Sthompsa};
59194677Sthompsa
60194677Sthompsa
61194677Sthompsavoid tlsv1_server_alert(struct tlsv1_server *conn, u8 level, u8 description);
62194677Sthompsaint tlsv1_server_derive_keys(struct tlsv1_server *conn,
63194677Sthompsa			     const u8 *pre_master_secret,
64194677Sthompsa			     size_t pre_master_secret_len);
65194677Sthompsau8 * tlsv1_server_handshake_write(struct tlsv1_server *conn, size_t *out_len);
66188942Sthompsau8 * tlsv1_server_send_alert(struct tlsv1_server *conn, u8 level,
67194677Sthompsa			     u8 description, size_t *out_len);
68194677Sthompsaint tlsv1_server_process_handshake(struct tlsv1_server *conn, u8 ct,
69188942Sthompsa				   const u8 *buf, size_t *len);
70194677Sthompsa
71184610Salfred#endif /* TLSV1_SERVER_I_H */
72194228Sthompsa