ssl_cache.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /**
  2. * \file ssl_cache.h
  3. *
  4. * \brief SSL session cache implementation
  5. */
  6. /*
  7. * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
  8. * SPDX-License-Identifier: Apache-2.0
  9. *
  10. * Licensed under the Apache License, Version 2.0 (the "License"); you may
  11. * not use this file except in compliance with the License.
  12. * You may obtain a copy of the License at
  13. *
  14. * http://www.apache.org/licenses/LICENSE-2.0
  15. *
  16. * Unless required by applicable law or agreed to in writing, software
  17. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  18. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  19. * See the License for the specific language governing permissions and
  20. * limitations under the License.
  21. *
  22. * This file is part of mbed TLS (https://tls.mbed.org)
  23. */
  24. #ifndef MBEDTLS_SSL_CACHE_H
  25. #define MBEDTLS_SSL_CACHE_H
  26. #include "ssl.h"
  27. #if defined(MBEDTLS_THREADING_C)
  28. #include "threading.h"
  29. #endif
  30. /**
  31. * \name SECTION: Module settings
  32. *
  33. * The configuration options you can set for this module are in this section.
  34. * Either change them in config.h or define them on the compiler command line.
  35. * \{
  36. */
  37. #if !defined(MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT)
  38. #define MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT 86400 /*!< 1 day */
  39. #endif
  40. #if !defined(MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES)
  41. #define MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /*!< Maximum entries in cache */
  42. #endif
  43. /* \} name SECTION: Module settings */
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47. typedef struct mbedtls_ssl_cache_context mbedtls_ssl_cache_context;
  48. typedef struct mbedtls_ssl_cache_entry mbedtls_ssl_cache_entry;
  49. /**
  50. * \brief This structure is used for storing cache entries
  51. */
  52. struct mbedtls_ssl_cache_entry
  53. {
  54. #if defined(MBEDTLS_HAVE_TIME)
  55. mbedtls_time_t timestamp; /*!< entry timestamp */
  56. #endif
  57. mbedtls_ssl_session session; /*!< entry session */
  58. #if defined(MBEDTLS_X509_CRT_PARSE_C)
  59. mbedtls_x509_buf peer_cert; /*!< entry peer_cert */
  60. #endif
  61. mbedtls_ssl_cache_entry *next; /*!< chain pointer */
  62. };
  63. /**
  64. * \brief Cache context
  65. */
  66. struct mbedtls_ssl_cache_context
  67. {
  68. mbedtls_ssl_cache_entry *chain; /*!< start of the chain */
  69. int timeout; /*!< cache entry timeout */
  70. int max_entries; /*!< maximum entries */
  71. #if defined(MBEDTLS_THREADING_C)
  72. mbedtls_threading_mutex_t mutex; /*!< mutex */
  73. #endif
  74. };
  75. /**
  76. * \brief Initialize an SSL cache context
  77. *
  78. * \param cache SSL cache context
  79. */
  80. void mbedtls_ssl_cache_init( mbedtls_ssl_cache_context *cache );
  81. /**
  82. * \brief Cache get callback implementation
  83. * (Thread-safe if MBEDTLS_THREADING_C is enabled)
  84. *
  85. * \param data SSL cache context
  86. * \param session session to retrieve entry for
  87. */
  88. int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session );
  89. /**
  90. * \brief Cache set callback implementation
  91. * (Thread-safe if MBEDTLS_THREADING_C is enabled)
  92. *
  93. * \param data SSL cache context
  94. * \param session session to store entry for
  95. */
  96. int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session );
  97. #if defined(MBEDTLS_HAVE_TIME)
  98. /**
  99. * \brief Set the cache timeout
  100. * (Default: MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT (1 day))
  101. *
  102. * A timeout of 0 indicates no timeout.
  103. *
  104. * \param cache SSL cache context
  105. * \param timeout cache entry timeout in seconds
  106. */
  107. void mbedtls_ssl_cache_set_timeout( mbedtls_ssl_cache_context *cache, int timeout );
  108. #endif /* MBEDTLS_HAVE_TIME */
  109. /**
  110. * \brief Set the maximum number of cache entries
  111. * (Default: MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES (50))
  112. *
  113. * \param cache SSL cache context
  114. * \param max cache entry maximum
  115. */
  116. void mbedtls_ssl_cache_set_max_entries( mbedtls_ssl_cache_context *cache, int max );
  117. /**
  118. * \brief Free referenced items in a cache context and clear memory
  119. *
  120. * \param cache SSL cache context
  121. */
  122. void mbedtls_ssl_cache_free( mbedtls_ssl_cache_context *cache );
  123. #ifdef __cplusplus
  124. }
  125. #endif
  126. #endif /* ssl_cache.h */