2 * TLSv1 client - internal structures
3 * Copyright (c) 2006-2011, Jouni Malinen <j@w1.fi>
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
9 #ifndef TLSV1_CLIENT_I_H
10 #define TLSV1_CLIENT_I_H
14 CLIENT_HELLO
, SERVER_HELLO
, SERVER_CERTIFICATE
,
15 SERVER_KEY_EXCHANGE
, SERVER_CERTIFICATE_REQUEST
,
16 SERVER_HELLO_DONE
, CLIENT_KEY_EXCHANGE
, CHANGE_CIPHER_SPEC
,
17 SERVER_CHANGE_CIPHER_SPEC
, SERVER_FINISHED
, ACK_FINISHED
,
21 struct tlsv1_record_layer rl
;
23 u8 session_id
[TLS_SESSION_ID_MAX_LEN
];
24 size_t session_id_len
;
25 u8 client_random
[TLS_RANDOM_LEN
];
26 u8 server_random
[TLS_RANDOM_LEN
];
27 u8 master_secret
[TLS_MASTER_SECRET_LEN
];
32 unsigned int certificate_requested
:1;
33 unsigned int session_resumed
:1;
34 unsigned int session_ticket_included
:1;
35 unsigned int use_session_ticket
:1;
36 unsigned int disable_time_checks
:1;
37 unsigned int cert_in_cb
:1;
39 struct crypto_public_key
*server_rsa_key
;
41 struct tls_verify_hash verify
;
43 #define MAX_CIPHER_COUNT 30
44 u16 cipher_suites
[MAX_CIPHER_COUNT
];
45 size_t num_cipher_suites
;
47 u16 prev_cipher_suite
;
50 size_t client_hello_ext_len
;
52 /* The prime modulus used for Diffie-Hellman */
55 /* The generator used for Diffie-Hellman */
58 /* The server's Diffie-Hellman public value */
62 struct tlsv1_credentials
*cred
;
64 tlsv1_client_session_ticket_cb session_ticket_cb
;
65 void *session_ticket_cb_ctx
;
67 struct wpabuf
*partial_input
;
69 void (*event_cb
)(void *ctx
, enum tls_event ev
,
70 union tls_event_data
*data
);
75 void tls_alert(struct tlsv1_client
*conn
, u8 level
, u8 description
);
76 void tlsv1_client_free_dh(struct tlsv1_client
*conn
);
77 int tls_derive_pre_master_secret(u8
*pre_master_secret
);
78 int tls_derive_keys(struct tlsv1_client
*conn
,
79 const u8
*pre_master_secret
, size_t pre_master_secret_len
);
80 u8
* tls_send_client_hello(struct tlsv1_client
*conn
, size_t *out_len
);
81 u8
* tlsv1_client_send_alert(struct tlsv1_client
*conn
, u8 level
,
82 u8 description
, size_t *out_len
);
83 u8
* tlsv1_client_handshake_write(struct tlsv1_client
*conn
, size_t *out_len
,
85 int tlsv1_client_process_handshake(struct tlsv1_client
*conn
, u8 ct
,
86 const u8
*buf
, size_t *len
,
87 u8
**out_data
, size_t *out_len
);
89 #endif /* TLSV1_CLIENT_I_H */