blob: 201849e9503754b4b549de853da31d6f93f44ab0 [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/**
Manuel Pégourié-Gonnard887674a2015-05-25 11:00:19 +020039 * \brief Information for session ticket protection
40 */
41typedef struct
42{
43 unsigned char name[4]; /*!< random key identifier */
44 uint32_t generation_time; /*!< key generation timestamp (seconds) */
45 mbedtls_cipher_context_t ctx; /*!< context for auth enc/decryption */
46}
47mbedtls_ssl_ticket_key;
48
49/**
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020050 * \brief Context for session ticket handling functions
51 */
52typedef struct
53{
Manuel Pégourié-Gonnard887674a2015-05-25 11:00:19 +020054 mbedtls_ssl_ticket_key keys[2]; /*!< ticket protection keys */
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020055
56 uint32_t ticket_lifetime; /*!< lifetime of tickets in seconds */
57
58 /** Callback for getting (pseudo-)random numbers */
59 int (*f_rng)(void *, unsigned char *, size_t);
60 void *p_rng; /*!< context for the RNG function */
Manuel Pégourié-Gonnard0849a0a2015-05-20 11:34:54 +020061
62#if defined(MBEDTLS_THREADING_C)
63 mbedtls_threading_mutex_t mutex;
64#endif
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020065}
66mbedtls_ssl_ticket_context;
67
68/**
69 * \brief Initialize a ticket context.
70 * (Just make it ready for mbedtls_ssl_ticket_setup()
71 * or mbedtls_ssl_ticket_free().)
72 *
73 * \param ctx Context to be initialized
74 */
75void mbedtls_ssl_ticket_init( mbedtls_ssl_ticket_context *ctx );
76
77/**
78 * \brief Prepare context to be actually used
79 *
80 * \param ctx Context to be set up
81 * \param f_rng RNG callback function
82 * \param p_rng RNG callback context
Manuel Pégourié-Gonnarda0adc1b2015-05-25 10:35:16 +020083 * \param cipher AEAD cipher to use for ticket protection, eg
84 * MBEDTLS_CIPHER_AES_256_GCM or MBEDTLS_CIPHER_AES_256_CCM.
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020085 * \param lifetime Tickets lifetime in seconds
86 *
Manuel Pégourié-Gonnarda0adc1b2015-05-25 10:35:16 +020087 * \note It is highly recommended to select a cipher that is at
88 * least as strong as the the strongest ciphersuite
89 * supported. Usually that means a 256-bit key.
90 *
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020091 * \return 0 is successful,
92 * or a specific MBEDTLS_ERR_XXX error code
93 */
94int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx,
95 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng,
Manuel Pégourié-Gonnarda0adc1b2015-05-25 10:35:16 +020096 mbedtls_cipher_type_t cipher,
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020097 uint32_t lifetime );
98
99/**
100 * \brief Implementation of the ticket write callback
101 *
102 * \note See \c mbedlts_ssl_ticket_write_t for description
103 */
104mbedtls_ssl_ticket_write_t mbedtls_ssl_ticket_write;
105
106/**
107 * \brief Implementation of the ticket parse callback
108 *
109 * \note See \c mbedlts_ssl_ticket_parse_t for description
110 */
111mbedtls_ssl_ticket_parse_t mbedtls_ssl_ticket_parse;
112
113/**
114 * \brief Free a context's content and zeroize it.
115 *
116 * \param ctx Context to be cleaned up
117 */
118void mbedtls_ssl_ticket_free( mbedtls_ssl_ticket_context *ctx );
Manuel Pégourié-Gonnardfd6d8972015-05-15 12:09:00 +0200119
120#ifdef __cplusplus
121}
122#endif
123
124#endif /* ssl_ticket.h */