1526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/*
2526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * TLSv1 server - internal structures
3526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Copyright (c) 2006-2007, Jouni Malinen <j@w1.fi>
4526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *
5526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This program is free software; you can redistribute it and/or modify
6526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * it under the terms of the GNU General Public License version 2 as
7526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * published by the Free Software Foundation.
8526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *
9526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD
10526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * license.
11526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *
12526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * See README and COPYING for more details.
13526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
14526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
15526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifndef TLSV1_SERVER_I_H
16526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define TLSV1_SERVER_I_H
17526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
18526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct tlsv1_server {
19526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	enum {
20526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		CLIENT_HELLO, SERVER_HELLO, SERVER_CERTIFICATE,
21526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		SERVER_KEY_EXCHANGE, SERVER_CERTIFICATE_REQUEST,
22526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		SERVER_HELLO_DONE, CLIENT_CERTIFICATE, CLIENT_KEY_EXCHANGE,
23526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		CERTIFICATE_VERIFY, CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
24526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
25526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		ESTABLISHED, FAILED
26526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	} state;
27526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
28526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	struct tlsv1_record_layer rl;
29526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
30526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u8 session_id[TLS_SESSION_ID_MAX_LEN];
31526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	size_t session_id_len;
32526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u8 client_random[TLS_RANDOM_LEN];
33526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u8 server_random[TLS_RANDOM_LEN];
34526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u8 master_secret[TLS_MASTER_SECRET_LEN];
35526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
36526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u8 alert_level;
37526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u8 alert_description;
38526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
39526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	struct crypto_public_key *client_rsa_key;
40526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
41526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	struct tls_verify_hash verify;
42526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
43526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define MAX_CIPHER_COUNT 30
44526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u16 cipher_suites[MAX_CIPHER_COUNT];
45526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	size_t num_cipher_suites;
46526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
47526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u16 cipher_suite;
48526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
49526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	struct tlsv1_credentials *cred;
50526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
51526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	int verify_peer;
52526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u16 client_version;
53526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
54526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u8 *session_ticket;
55526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	size_t session_ticket_len;
56526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
57526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	tlsv1_server_session_ticket_cb session_ticket_cb;
58526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	void *session_ticket_cb_ctx;
59526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
60526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	int use_session_ticket;
61526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
62526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	u8 *dh_secret;
63526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	size_t dh_secret_len;
64526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
65526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
66526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
67526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid tlsv1_server_alert(struct tlsv1_server *conn, u8 level, u8 description);
68526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint tlsv1_server_derive_keys(struct tlsv1_server *conn,
69526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			     const u8 *pre_master_secret,
70526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			     size_t pre_master_secret_len);
71526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtu8 * tlsv1_server_handshake_write(struct tlsv1_server *conn, size_t *out_len);
72526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtu8 * tlsv1_server_send_alert(struct tlsv1_server *conn, u8 level,
73526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			     u8 description, size_t *out_len);
74526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint tlsv1_server_process_handshake(struct tlsv1_server *conn, u8 ct,
75526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt				   const u8 *buf, size_t *len);
76526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
77526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* TLSV1_SERVER_I_H */
78