blob: 3612a92eba5e8d547056984c318b55b6f3c1fcc8 [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
Manuel Pégourié-Gonnarda0adc1b2015-05-25 10:35:16 +020073 * \param cipher AEAD cipher to use for ticket protection, eg
74 * MBEDTLS_CIPHER_AES_256_GCM or MBEDTLS_CIPHER_AES_256_CCM.
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020075 * \param lifetime Tickets lifetime in seconds
76 *
Manuel Pégourié-Gonnarda0adc1b2015-05-25 10:35:16 +020077 * \note It is highly recommended to select a cipher that is at
78 * least as strong as the the strongest ciphersuite
79 * supported. Usually that means a 256-bit key.
80 *
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020081 * \return 0 is successful,
82 * or a specific MBEDTLS_ERR_XXX error code
83 */
84int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx,
85 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng,
Manuel Pégourié-Gonnarda0adc1b2015-05-25 10:35:16 +020086 mbedtls_cipher_type_t cipher,
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020087 uint32_t lifetime );
88
89/**
90 * \brief Implementation of the ticket write callback
91 *
92 * \note See \c mbedlts_ssl_ticket_write_t for description
93 */
94mbedtls_ssl_ticket_write_t mbedtls_ssl_ticket_write;
95
96/**
97 * \brief Implementation of the ticket parse callback
98 *
99 * \note See \c mbedlts_ssl_ticket_parse_t for description
100 */
101mbedtls_ssl_ticket_parse_t mbedtls_ssl_ticket_parse;
102
103/**
104 * \brief Free a context's content and zeroize it.
105 *
106 * \param ctx Context to be cleaned up
107 */
108void mbedtls_ssl_ticket_free( mbedtls_ssl_ticket_context *ctx );
Manuel Pégourié-Gonnardfd6d8972015-05-15 12:09:00 +0200109
110#ifdef __cplusplus
111}
112#endif
113
114#endif /* ssl_ticket.h */