blob: 037e1c31125712912a249830e31034e42451cdeb [file] [log] [blame]
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +02001/**
2 * \file ssl_cookie.h
3 *
4 * \brief DTLS cookie callbacks implementation
5 *
Manuel Pégourié-Gonnard6fb81872015-07-27 11:11:48 +02006 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +02007 * SPDX-License-Identifier: Apache-2.0
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License"); you may
10 * not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
17 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020020 *
Manuel Pégourié-Gonnarde4d48902015-03-06 13:40:52 +000021 * This file is part of mbed TLS (https://tls.mbed.org)
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020022 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020023#ifndef MBEDTLS_SSL_COOKIE_H
24#define MBEDTLS_SSL_COOKIE_H
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020025
26#include "ssl.h"
27
Manuel Pégourié-Gonnard2a84dfd2015-05-28 15:48:09 +020028#if defined(MBEDTLS_THREADING_C)
29#include "threading.h"
30#endif
31
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020032/**
33 * \name SECTION: Module settings
34 *
35 * The configuration options you can set for this module are in this section.
36 * Either change them in config.h or define them on the compiler command line.
37 * \{
38 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020039#ifndef MBEDTLS_SSL_COOKIE_TIMEOUT
40#define MBEDTLS_SSL_COOKIE_TIMEOUT 60 /**< Default expiration delay of DTLS cookies, in seconds if HAVE_TIME, or in number of cookies issued */
Manuel Pégourié-Gonnardbef8f092014-07-23 23:40:29 +020041#endif
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020042
43/* \} name SECTION: Module settings */
44
45#ifdef __cplusplus
46extern "C" {
47#endif
48
49/**
50 * \brief Context for the default cookie functions.
51 */
52typedef struct
53{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020054 mbedtls_md_context_t hmac_ctx; /*!< context for the HMAC portion */
55#if !defined(MBEDTLS_HAVE_TIME)
Manuel Pégourié-Gonnardbef8f092014-07-23 23:40:29 +020056 unsigned long serial; /*!< serial number for expiration */
Manuel Pégourié-Gonnarde9030812014-07-23 21:29:11 +020057#endif
Manuel Pégourié-Gonnardbef8f092014-07-23 23:40:29 +020058 unsigned long timeout; /*!< timeout delay, in seconds if HAVE_TIME,
59 or in number of tickets issued */
60
Manuel Pégourié-Gonnard2a84dfd2015-05-28 15:48:09 +020061#if defined(MBEDTLS_THREADING_C)
62 mbedtls_threading_mutex_t mutex;
63#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020064} mbedtls_ssl_cookie_ctx;
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020065
66/**
67 * \brief Initialize cookie context
68 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020069void mbedtls_ssl_cookie_init( mbedtls_ssl_cookie_ctx *ctx );
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020070
71/**
72 * \brief Setup cookie context (generate keys)
73 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020074int mbedtls_ssl_cookie_setup( mbedtls_ssl_cookie_ctx *ctx,
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020075 int (*f_rng)(void *, unsigned char *, size_t),
76 void *p_rng );
77
78/**
Manuel Pégourié-Gonnardbef8f092014-07-23 23:40:29 +020079 * \brief Set expiration delay for cookies
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020080 * (Default MBEDTLS_SSL_COOKIE_TIMEOUT)
Manuel Pégourié-Gonnardbef8f092014-07-23 23:40:29 +020081 *
82 * \param ctx Cookie contex
83 * \param delay Delay, in seconds if HAVE_TIME, or in number of cookies
84 * issued in the meantime.
85 * 0 to disable expiration (NOT recommended)
86 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020087void mbedtls_ssl_cookie_set_timeout( mbedtls_ssl_cookie_ctx *ctx, unsigned long delay );
Manuel Pégourié-Gonnardbef8f092014-07-23 23:40:29 +020088
89/**
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020090 * \brief Free cookie context
91 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020092void mbedtls_ssl_cookie_free( mbedtls_ssl_cookie_ctx *ctx );
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020093
94/**
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020095 * \brief Generate cookie, see \c mbedtls_ssl_cookie_write_t
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020096 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020097mbedtls_ssl_cookie_write_t mbedtls_ssl_cookie_write;
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +020098
99/**
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200100 * \brief Verify cookie, see \c mbedtls_ssl_cookie_write_t
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +0200101 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200102mbedtls_ssl_cookie_check_t mbedtls_ssl_cookie_check;
Manuel Pégourié-Gonnard232edd42014-07-23 16:56:27 +0200103
104#ifdef __cplusplus
105}
106#endif
107
108#endif /* ssl_cookie.h */