blob: 42842c5186176430c189723cdc770e523cad6302 [file] [log] [blame]
Manuel Pégourié-Gonnardfd6d8972015-05-15 12:09:00 +02001/**
2 * \file ssl_ticket.h
3 *
4 * \brief TLS server ticket callbacks implementation
5 *
6 * Copyright (C) 2015, ARM Limited, All Rights Reserved
7 *
8 * This file is part of mbed TLS (https://tls.mbed.org)
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License along
21 * with this program; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 */
24#ifndef MBEDTLS_SSL_TICKET_H
25#define MBEDTLS_SSL_TICKET_H
26
27#include "ssl.h"
Manuel Pégourié-Gonnard1041a392015-05-20 19:59:39 +020028#include "cipher.h"
Manuel Pégourié-Gonnardfd6d8972015-05-15 12:09:00 +020029
Manuel Pégourié-Gonnard0849a0a2015-05-20 11:34:54 +020030#if defined(MBEDTLS_THREADING_C)
31#include "threading.h"
32#endif
33
Manuel Pégourié-Gonnardfd6d8972015-05-15 12:09:00 +020034#ifdef __cplusplus
35extern "C" {
36#endif
37
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020038/**
39 * \brief Context for session ticket handling functions
40 */
41typedef struct
42{
Manuel Pégourié-Gonnard1041a392015-05-20 19:59:39 +020043 unsigned char key_name[4]; /*!< name to quickly reject bad tickets */
44 mbedtls_cipher_context_t cipher;/*!< cipher context */
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020045
46 uint32_t ticket_lifetime; /*!< lifetime of tickets in seconds */
47
48 /** Callback for getting (pseudo-)random numbers */
49 int (*f_rng)(void *, unsigned char *, size_t);
50 void *p_rng; /*!< context for the RNG function */
Manuel Pégourié-Gonnard0849a0a2015-05-20 11:34:54 +020051
52#if defined(MBEDTLS_THREADING_C)
53 mbedtls_threading_mutex_t mutex;
54#endif
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020055}
56mbedtls_ssl_ticket_context;
57
58/**
59 * \brief Initialize a ticket context.
60 * (Just make it ready for mbedtls_ssl_ticket_setup()
61 * or mbedtls_ssl_ticket_free().)
62 *
63 * \param ctx Context to be initialized
64 */
65void mbedtls_ssl_ticket_init( mbedtls_ssl_ticket_context *ctx );
66
67/**
68 * \brief Prepare context to be actually used
69 *
70 * \param ctx Context to be set up
71 * \param f_rng RNG callback function
72 * \param p_rng RNG callback context
73 * \param lifetime Tickets lifetime in seconds
74 *
75 * \return 0 is successful,
76 * or a specific MBEDTLS_ERR_XXX error code
77 */
78int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx,
79 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng,
80 uint32_t lifetime );
81
82/**
83 * \brief Implementation of the ticket write callback
84 *
85 * \note See \c mbedlts_ssl_ticket_write_t for description
86 */
87mbedtls_ssl_ticket_write_t mbedtls_ssl_ticket_write;
88
89/**
90 * \brief Implementation of the ticket parse callback
91 *
92 * \note See \c mbedlts_ssl_ticket_parse_t for description
93 */
94mbedtls_ssl_ticket_parse_t mbedtls_ssl_ticket_parse;
95
96/**
97 * \brief Free a context's content and zeroize it.
98 *
99 * \param ctx Context to be cleaned up
100 */
101void mbedtls_ssl_ticket_free( mbedtls_ssl_ticket_context *ctx );
Manuel Pégourié-Gonnardfd6d8972015-05-15 12:09:00 +0200102
103#ifdef __cplusplus
104}
105#endif
106
107#endif /* ssl_ticket.h */