blob: 6ab68bb5a55090d46ea611c704844cef225e0a02 [file] [log] [blame]
Janos Follath96cfd7a2024-08-22 18:30:06 +01001/** Support for path tracking in optionally safe bignum functions
2 *
3 * The functions are called when an optionally safe path is taken and logs it with a single
4 * variable. This variable is at any time in one of three states:
5 * - MBEDTLS_MPI_IS_TEST: No optionally safe path has been taken since the last reset
6 * - MBEDTLS_MPI_IS_SECRET: Only safe paths were teken since the last reset
7 * - MBEDTLS_MPI_IS_PUBLIC: At least one unsafe path has been taken since the last reset
8 *
9 * Using a simple global variable to track execution path. Making it work with multithreading
10 * doesn't worth the effort as multithreaded tests add little to no value here.
11 */
12/*
13 * Copyright The Mbed TLS Contributors
14 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
15 */
16
17#ifndef BIGNUM_CODEPATH_CHECK_H
18#define BIGNUM_CODEPATH_CHECK_H
19
20#include "bignum_core.h"
21
22#if defined(MBEDTLS_TEST_HOOKS) && !defined(MBEDTLS_THREADING_C)
23
24extern int mbedtls_codepath_check;
25
26/**
27 * \brief Setup the codepath test hooks used by optionally safe bignum functions to signal
28 * the path taken.
29 */
30void mbedtls_codepath_test_hooks_setup(void);
31
32/**
33 * \brief Teardown the codepath test hooks used by optionally safe bignum functions to
34 * signal the path taken.
35 */
36void mbedtls_codepath_test_hooks_teardown(void);
37
38/**
39 * \brief Reset the state of the codepath to the initial state.
40 */
41static inline void mbedtls_codepath_reset(void)
42{
43 mbedtls_codepath_check = MBEDTLS_MPI_IS_TEST;
44}
45
46#endif /* MBEDTLS_TEST_HOOKS && !MBEDTLS_THREADING_C */
47
48#endif /* BIGNUM_CODEPATH_CHECK_H */