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