18dbcf02cSchristos /* 262a52023Schristos * TLS v1.0/v1.1/v1.2 client (RFC 2246, RFC 4346, RFC 5246) 3*0d69f216Schristos * Copyright (c) 2006-2019, Jouni Malinen <j@w1.fi> 48dbcf02cSchristos * 562a52023Schristos * This software may be distributed under the terms of the BSD license. 662a52023Schristos * See README for more details. 78dbcf02cSchristos */ 88dbcf02cSchristos 98dbcf02cSchristos #ifndef TLSV1_CLIENT_H 108dbcf02cSchristos #define TLSV1_CLIENT_H 118dbcf02cSchristos 128dbcf02cSchristos #include "tlsv1_cred.h" 138dbcf02cSchristos 148dbcf02cSchristos struct tlsv1_client; 158dbcf02cSchristos 168dbcf02cSchristos int tlsv1_client_global_init(void); 178dbcf02cSchristos void tlsv1_client_global_deinit(void); 188dbcf02cSchristos struct tlsv1_client * tlsv1_client_init(void); 198dbcf02cSchristos void tlsv1_client_deinit(struct tlsv1_client *conn); 208dbcf02cSchristos int tlsv1_client_established(struct tlsv1_client *conn); 218dbcf02cSchristos int tlsv1_client_prf(struct tlsv1_client *conn, const char *label, 22*0d69f216Schristos const u8 *context, size_t context_len, 238dbcf02cSchristos int server_random_first, u8 *out, size_t out_len); 248dbcf02cSchristos u8 * tlsv1_client_handshake(struct tlsv1_client *conn, 258dbcf02cSchristos const u8 *in_data, size_t in_len, 268dbcf02cSchristos size_t *out_len, u8 **appl_data, 2762a52023Schristos size_t *appl_data_len, int *need_more_data); 288dbcf02cSchristos int tlsv1_client_encrypt(struct tlsv1_client *conn, 298dbcf02cSchristos const u8 *in_data, size_t in_len, 308dbcf02cSchristos u8 *out_data, size_t out_len); 3162a52023Schristos struct wpabuf * tlsv1_client_decrypt(struct tlsv1_client *conn, 328dbcf02cSchristos const u8 *in_data, size_t in_len, 3362a52023Schristos int *need_more_data); 348dbcf02cSchristos int tlsv1_client_get_cipher(struct tlsv1_client *conn, char *buf, 358dbcf02cSchristos size_t buflen); 368dbcf02cSchristos int tlsv1_client_shutdown(struct tlsv1_client *conn); 378dbcf02cSchristos int tlsv1_client_resumed(struct tlsv1_client *conn); 388dbcf02cSchristos int tlsv1_client_hello_ext(struct tlsv1_client *conn, int ext_type, 398dbcf02cSchristos const u8 *data, size_t data_len); 40928750b6Schristos int tlsv1_client_get_random(struct tlsv1_client *conn, struct tls_random *data); 418dbcf02cSchristos int tlsv1_client_get_keyblock_size(struct tlsv1_client *conn); 428dbcf02cSchristos int tlsv1_client_set_cipher_list(struct tlsv1_client *conn, u8 *ciphers); 438dbcf02cSchristos int tlsv1_client_set_cred(struct tlsv1_client *conn, 448dbcf02cSchristos struct tlsv1_credentials *cred); 45928750b6Schristos void tlsv1_client_set_flags(struct tlsv1_client *conn, unsigned int flags); 468dbcf02cSchristos 478dbcf02cSchristos typedef int (*tlsv1_client_session_ticket_cb) 488dbcf02cSchristos (void *ctx, const u8 *ticket, size_t len, const u8 *client_random, 498dbcf02cSchristos const u8 *server_random, u8 *master_secret); 508dbcf02cSchristos 518dbcf02cSchristos void tlsv1_client_set_session_ticket_cb(struct tlsv1_client *conn, 528dbcf02cSchristos tlsv1_client_session_ticket_cb cb, 538dbcf02cSchristos void *ctx); 548dbcf02cSchristos 55928750b6Schristos void tlsv1_client_set_cb(struct tlsv1_client *conn, 56928750b6Schristos void (*event_cb)(void *ctx, enum tls_event ev, 57928750b6Schristos union tls_event_data *data), 58928750b6Schristos void *cb_ctx, 59928750b6Schristos int cert_in_cb); 60928750b6Schristos int tlsv1_client_get_version(struct tlsv1_client *conn, char *buf, 61928750b6Schristos size_t buflen); 62928750b6Schristos 638dbcf02cSchristos #endif /* TLSV1_CLIENT_H */ 64