blob: 093682a2f525e32e4523c7a8ea2949739d202272 [file] [log] [blame]
Paul Bakker0a597072012-09-25 21:55:46 +00001/**
2 * \file ssl_cache.h
3 *
4 * \brief SSL session cache implementation
5 *
Manuel Pégourié-Gonnarda658a402015-01-23 09:45:19 +00006 * Copyright (C) 2006-2013, ARM Limited, All Rights Reserved
Paul Bakker0a597072012-09-25 21:55:46 +00007 *
Manuel Pégourié-Gonnard967a2a52015-01-22 14:28:16 +00008 * This file is part of mbed TLS (http://www.polarssl.org)
Paul Bakker0a597072012-09-25 21:55:46 +00009 * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
10 *
Paul Bakker0a597072012-09-25 21:55:46 +000011 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License along
22 * with this program; if not, write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 */
25#ifndef POLARSSL_SSL_CACHE_H
26#define POLARSSL_SSL_CACHE_H
27
28#include "ssl.h"
29
Paul Bakkerc5598842013-09-28 15:01:27 +020030#if defined(POLARSSL_THREADING_C)
31#include "threading.h"
32#endif
33
Paul Bakker088c5c52014-04-25 11:11:10 +020034/**
35 * \name SECTION: Module settings
36 *
37 * The configuration options you can set for this module are in this section.
38 * Either change them in config.h or define them on the compiler command line.
39 * \{
40 */
41
42#if !defined(SSL_CACHE_DEFAULT_TIMEOUT)
Paul Bakkerba26e9e2012-10-23 22:18:28 +000043#define SSL_CACHE_DEFAULT_TIMEOUT 86400 /*!< 1 day */
Paul Bakker088c5c52014-04-25 11:11:10 +020044#endif
45
46#if !defined(SSL_CACHE_DEFAULT_MAX_ENTRIES)
Paul Bakkerba26e9e2012-10-23 22:18:28 +000047#define SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /*!< Maximum entries in cache */
Paul Bakker088c5c52014-04-25 11:11:10 +020048#endif
49
50/* \} name SECTION: Module settings */
Paul Bakker0a597072012-09-25 21:55:46 +000051
52#ifdef __cplusplus
53extern "C" {
54#endif
55
56typedef struct _ssl_cache_context ssl_cache_context;
57typedef struct _ssl_cache_entry ssl_cache_entry;
58
59/**
60 * \brief This structure is used for storing cache entries
61 */
62struct _ssl_cache_entry
63{
Paul Bakkerfa9b1002013-07-03 15:31:03 +020064#if defined(POLARSSL_HAVE_TIME)
Paul Bakker0a597072012-09-25 21:55:46 +000065 time_t timestamp; /*!< entry timestamp */
Paul Bakkerfa9b1002013-07-03 15:31:03 +020066#endif
Paul Bakker0a597072012-09-25 21:55:46 +000067 ssl_session session; /*!< entry session */
Paul Bakker7c6b2c32013-09-16 13:49:26 +020068#if defined(POLARSSL_X509_CRT_PARSE_C)
Paul Bakkere81beda2013-03-06 17:40:46 +010069 x509_buf peer_cert; /*!< entry peer_cert */
Paul Bakkered27a042013-04-18 22:46:23 +020070#endif
Paul Bakker0a597072012-09-25 21:55:46 +000071 ssl_cache_entry *next; /*!< chain pointer */
72};
73
74/**
75 * \brief Cache context
76 */
77struct _ssl_cache_context
78{
Paul Bakkerba26e9e2012-10-23 22:18:28 +000079 ssl_cache_entry *chain; /*!< start of the chain */
80 int timeout; /*!< cache entry timeout */
81 int max_entries; /*!< maximum entries */
Paul Bakkerc5598842013-09-28 15:01:27 +020082#if defined(POLARSSL_THREADING_C)
83 threading_mutex_t mutex; /*!< mutex */
84#endif
Paul Bakker0a597072012-09-25 21:55:46 +000085};
86
87/**
88 * \brief Initialize an SSL cache context
89 *
90 * \param cache SSL cache context
91 */
92void ssl_cache_init( ssl_cache_context *cache );
93
94/**
95 * \brief Cache get callback implementation
Paul Bakkerc5598842013-09-28 15:01:27 +020096 * (Thread-safe if POLARSSL_THREADING_C is enabled)
Paul Bakker0a597072012-09-25 21:55:46 +000097 *
98 * \param data SSL cache context
99 * \param session session to retrieve entry for
100 */
101int ssl_cache_get( void *data, ssl_session *session );
102
103/**
104 * \brief Cache set callback implementation
Paul Bakkerc5598842013-09-28 15:01:27 +0200105 * (Thread-safe if POLARSSL_THREADING_C is enabled)
Paul Bakker0a597072012-09-25 21:55:46 +0000106 *
107 * \param data SSL cache context
108 * \param session session to store entry for
109 */
110int ssl_cache_set( void *data, const ssl_session *session );
111
Paul Bakkerfa9b1002013-07-03 15:31:03 +0200112#if defined(POLARSSL_HAVE_TIME)
Paul Bakker0a597072012-09-25 21:55:46 +0000113/**
114 * \brief Set the cache timeout
115 * (Default: SSL_CACHE_DEFAULT_TIMEOUT (1 day))
116 *
117 * A timeout of 0 indicates no timeout.
118 *
119 * \param cache SSL cache context
Manuel Pégourié-Gonnard274a12e2014-02-20 21:32:08 +0100120 * \param timeout cache entry timeout in seconds
Paul Bakker0a597072012-09-25 21:55:46 +0000121 */
122void ssl_cache_set_timeout( ssl_cache_context *cache, int timeout );
Paul Bakkerfa9b1002013-07-03 15:31:03 +0200123#endif /* POLARSSL_HAVE_TIME */
Paul Bakker0a597072012-09-25 21:55:46 +0000124
125/**
Paul Bakkerba26e9e2012-10-23 22:18:28 +0000126 * \brief Set the cache timeout
127 * (Default: SSL_CACHE_DEFAULT_MAX_ENTRIES (50))
128 *
129 * \param cache SSL cache context
130 * \param max cache entry maximum
131 */
132void ssl_cache_set_max_entries( ssl_cache_context *cache, int max );
133
134/**
Paul Bakker0a597072012-09-25 21:55:46 +0000135 * \brief Free referenced items in a cache context and clear memory
136 *
137 * \param cache SSL cache context
138 */
139void ssl_cache_free( ssl_cache_context *cache );
140
141#ifdef __cplusplus
142}
143#endif
144
145#endif /* ssl_cache.h */