blob: 42946b1bf1a4bcb1c41926d77e330aad86916658 [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é-Gonnard0c0f11f2015-05-20 09:55:50 +020028#include "aes.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{
43 unsigned char key_name[16]; /*!< name to quickly reject bad tickets */
44 mbedtls_aes_context enc; /*!< encryption context */
45 mbedtls_aes_context dec; /*!< decryption context */
46 unsigned char mac_key[16]; /*!< authentication key */
47
48 uint32_t ticket_lifetime; /*!< lifetime of tickets in seconds */
49
50 /** Callback for getting (pseudo-)random numbers */
51 int (*f_rng)(void *, unsigned char *, size_t);
52 void *p_rng; /*!< context for the RNG function */
Manuel Pégourié-Gonnard0849a0a2015-05-20 11:34:54 +020053
54#if defined(MBEDTLS_THREADING_C)
55 mbedtls_threading_mutex_t mutex;
56#endif
Manuel Pégourié-Gonnardd59675d2015-05-19 15:28:00 +020057}
58mbedtls_ssl_ticket_context;
59
60/**
61 * \brief Initialize a ticket context.
62 * (Just make it ready for mbedtls_ssl_ticket_setup()
63 * or mbedtls_ssl_ticket_free().)
64 *
65 * \param ctx Context to be initialized
66 */
67void mbedtls_ssl_ticket_init( mbedtls_ssl_ticket_context *ctx );
68
69/**
70 * \brief Prepare context to be actually used
71 *
72 * \param ctx Context to be set up
73 * \param f_rng RNG callback function
74 * \param p_rng RNG callback context
75 * \param lifetime Tickets lifetime in seconds
76 *
77 * \return 0 is successful,
78 * or a specific MBEDTLS_ERR_XXX error code
79 */
80int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx,
81 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng,
82 uint32_t lifetime );
83
84/**
85 * \brief Implementation of the ticket write callback
86 *
87 * \note See \c mbedlts_ssl_ticket_write_t for description
88 */
89mbedtls_ssl_ticket_write_t mbedtls_ssl_ticket_write;
90
91/**
92 * \brief Implementation of the ticket parse callback
93 *
94 * \note See \c mbedlts_ssl_ticket_parse_t for description
95 */
96mbedtls_ssl_ticket_parse_t mbedtls_ssl_ticket_parse;
97
98/**
99 * \brief Free a context's content and zeroize it.
100 *
101 * \param ctx Context to be cleaned up
102 */
103void mbedtls_ssl_ticket_free( mbedtls_ssl_ticket_context *ctx );
Manuel Pégourié-Gonnardfd6d8972015-05-15 12:09:00 +0200104
105#ifdef __cplusplus
106}
107#endif
108
109#endif /* ssl_ticket.h */