blob: 80dcd2b0d44d88d8630ceb3569fd07703216d254 [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é-Gonnard1e9c4db2015-05-25 14:07:08 +020055 unsigned char active; /*!< index of the currently active key */
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020056
57 uint32_t ticket_lifetime; /*!< lifetime of tickets in seconds */
58
59 /** Callback for getting (pseudo-)random numbers */
60 int (*f_rng)(void *, unsigned char *, size_t);
61 void *p_rng; /*!< context for the RNG function */
Manuel Pégourié-Gonnard0849a0a2015-05-20 11:34:54 +020062
63#if defined(MBEDTLS_THREADING_C)
64 mbedtls_threading_mutex_t mutex;
65#endif
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020066}
67mbedtls_ssl_ticket_context;
68
69/**
70 * \brief Initialize a ticket context.
71 * (Just make it ready for mbedtls_ssl_ticket_setup()
72 * or mbedtls_ssl_ticket_free().)
73 *
74 * \param ctx Context to be initialized
75 */
76void mbedtls_ssl_ticket_init( mbedtls_ssl_ticket_context *ctx );
77
78/**
79 * \brief Prepare context to be actually used
80 *
81 * \param ctx Context to be set up
82 * \param f_rng RNG callback function
83 * \param p_rng RNG callback context
Manuel Pégourié-Gonnarda0adc1b2015-05-25 10:35:16 +020084 * \param cipher AEAD cipher to use for ticket protection, eg
85 * MBEDTLS_CIPHER_AES_256_GCM or MBEDTLS_CIPHER_AES_256_CCM.
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020086 * \param lifetime Tickets lifetime in seconds
87 *
Manuel Pégourié-Gonnarda0adc1b2015-05-25 10:35:16 +020088 * \note It is highly recommended to select a cipher that is at
89 * least as strong as the the strongest ciphersuite
90 * supported. Usually that means a 256-bit key.
91 *
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020092 * \return 0 is successful,
93 * or a specific MBEDTLS_ERR_XXX error code
94 */
95int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx,
96 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng,
Manuel Pégourié-Gonnarda0adc1b2015-05-25 10:35:16 +020097 mbedtls_cipher_type_t cipher,
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020098 uint32_t lifetime );
99
100/**
101 * \brief Implementation of the ticket write callback
102 *
103 * \note See \c mbedlts_ssl_ticket_write_t for description
104 */
105mbedtls_ssl_ticket_write_t mbedtls_ssl_ticket_write;
106
107/**
108 * \brief Implementation of the ticket parse callback
109 *
110 * \note See \c mbedlts_ssl_ticket_parse_t for description
111 */
112mbedtls_ssl_ticket_parse_t mbedtls_ssl_ticket_parse;
113
114/**
115 * \brief Free a context's content and zeroize it.
116 *
117 * \param ctx Context to be cleaned up
118 */
119void mbedtls_ssl_ticket_free( mbedtls_ssl_ticket_context *ctx );
Manuel Pégourié-Gonnardfd6d8972015-05-15 12:09:00 +0200120
121#ifdef __cplusplus
122}
123#endif
124
125#endif /* ssl_ticket.h */