2 * TLSv1 client - internal structures
3 * Copyright (c) 2006-2007, Jouni Malinen <j@w1.fi>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
9 * Alternatively, this software may be distributed under the terms of BSD
12 * See README and COPYING for more details.
15 #ifndef TLSV1_CLIENT_I_H
16 #define TLSV1_CLIENT_I_H
20 CLIENT_HELLO
, SERVER_HELLO
, SERVER_CERTIFICATE
,
21 SERVER_KEY_EXCHANGE
, SERVER_CERTIFICATE_REQUEST
,
22 SERVER_HELLO_DONE
, CLIENT_KEY_EXCHANGE
, CHANGE_CIPHER_SPEC
,
23 SERVER_CHANGE_CIPHER_SPEC
, SERVER_FINISHED
, ACK_FINISHED
,
27 struct tlsv1_record_layer rl
;
29 u8 session_id
[TLS_SESSION_ID_MAX_LEN
];
30 size_t session_id_len
;
31 u8 client_random
[TLS_RANDOM_LEN
];
32 u8 server_random
[TLS_RANDOM_LEN
];
33 u8 master_secret
[TLS_MASTER_SECRET_LEN
];
38 unsigned int certificate_requested
:1;
39 unsigned int session_resumed
:1;
40 unsigned int session_ticket_included
:1;
41 unsigned int use_session_ticket
:1;
43 struct crypto_public_key
*server_rsa_key
;
45 struct tls_verify_hash verify
;
47 #define MAX_CIPHER_COUNT 30
48 u16 cipher_suites
[MAX_CIPHER_COUNT
];
49 size_t num_cipher_suites
;
51 u16 prev_cipher_suite
;
54 size_t client_hello_ext_len
;
56 /* The prime modulus used for Diffie-Hellman */
59 /* The generator used for Diffie-Hellman */
62 /* The server's Diffie-Hellman public value */
66 struct tlsv1_credentials
*cred
;
68 tlsv1_client_session_ticket_cb session_ticket_cb
;
69 void *session_ticket_cb_ctx
;
73 void tls_alert(struct tlsv1_client
*conn
, u8 level
, u8 description
);
74 void tlsv1_client_free_dh(struct tlsv1_client
*conn
);
75 int tls_derive_pre_master_secret(u8
*pre_master_secret
);
76 int tls_derive_keys(struct tlsv1_client
*conn
,
77 const u8
*pre_master_secret
, size_t pre_master_secret_len
);
78 u8
* tls_send_client_hello(struct tlsv1_client
*conn
, size_t *out_len
);
79 u8
* tlsv1_client_send_alert(struct tlsv1_client
*conn
, u8 level
,
80 u8 description
, size_t *out_len
);
81 u8
* tlsv1_client_handshake_write(struct tlsv1_client
*conn
, size_t *out_len
,
83 int tlsv1_client_process_handshake(struct tlsv1_client
*conn
, u8 ct
,
84 const u8
*buf
, size_t *len
,
85 u8
**out_data
, size_t *out_len
);
87 #endif /* TLSV1_CLIENT_I_H */