• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * \file entropy_poll.h
3  *
4  * \brief Platform-specific and custom entropy polling functions
5  */
6 /*
7  *  Copyright The Mbed TLS Contributors
8  *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
9  *
10  *  This file is provided under the Apache License 2.0, or the
11  *  GNU General Public License v2.0 or later.
12  *
13  *  **********
14  *  Apache License 2.0:
15  *
16  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
17  *  not use this file except in compliance with the License.
18  *  You may obtain a copy of the License at
19  *
20  *  http://www.apache.org/licenses/LICENSE-2.0
21  *
22  *  Unless required by applicable law or agreed to in writing, software
23  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
24  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25  *  See the License for the specific language governing permissions and
26  *  limitations under the License.
27  *
28  *  **********
29  *
30  *  **********
31  *  GNU General Public License v2.0 or later:
32  *
33  *  This program is free software; you can redistribute it and/or modify
34  *  it under the terms of the GNU General Public License as published by
35  *  the Free Software Foundation; either version 2 of the License, or
36  *  (at your option) any later version.
37  *
38  *  This program is distributed in the hope that it will be useful,
39  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
40  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
41  *  GNU General Public License for more details.
42  *
43  *  You should have received a copy of the GNU General Public License along
44  *  with this program; if not, write to the Free Software Foundation, Inc.,
45  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
46  *
47  *  **********
48  */
49 #ifndef MBEDTLS_ENTROPY_POLL_H
50 #define MBEDTLS_ENTROPY_POLL_H
51 
52 #if !defined(MBEDTLS_CONFIG_FILE)
53 #include "config.h"
54 #else
55 #include MBEDTLS_CONFIG_FILE
56 #endif
57 
58 #include <stddef.h>
59 
60 #ifdef __cplusplus
61 extern "C" {
62 #endif
63 
64 /*
65  * Default thresholds for built-in sources, in bytes
66  */
67 #define MBEDTLS_ENTROPY_MIN_PLATFORM     32     /**< Minimum for platform source    */
68 #define MBEDTLS_ENTROPY_MIN_HAVEGE       32     /**< Minimum for HAVEGE             */
69 #define MBEDTLS_ENTROPY_MIN_HARDCLOCK     4     /**< Minimum for mbedtls_timing_hardclock()        */
70 #if !defined(MBEDTLS_ENTROPY_MIN_HARDWARE)
71 #define MBEDTLS_ENTROPY_MIN_HARDWARE     32     /**< Minimum for the hardware source */
72 #endif
73 
74 /**
75  * \brief           Entropy poll callback that provides 0 entropy.
76  */
77 #if defined(MBEDTLS_TEST_NULL_ENTROPY)
78     int mbedtls_null_entropy_poll( void *data,
79                                 unsigned char *output, size_t len, size_t *olen );
80 #endif
81 
82 #if !defined(MBEDTLS_NO_PLATFORM_ENTROPY)
83 /**
84  * \brief           Platform-specific entropy poll callback
85  */
86 int mbedtls_platform_entropy_poll( void *data,
87                            unsigned char *output, size_t len, size_t *olen );
88 #endif
89 
90 #if defined(MBEDTLS_HAVEGE_C)
91 /**
92  * \brief           HAVEGE based entropy poll callback
93  *
94  * Requires an HAVEGE state as its data pointer.
95  */
96 int mbedtls_havege_poll( void *data,
97                  unsigned char *output, size_t len, size_t *olen );
98 #endif
99 
100 #if defined(MBEDTLS_TIMING_C)
101 /**
102  * \brief           mbedtls_timing_hardclock-based entropy poll callback
103  */
104 int mbedtls_hardclock_poll( void *data,
105                     unsigned char *output, size_t len, size_t *olen );
106 #endif
107 
108 #if defined(MBEDTLS_ENTROPY_HARDWARE_ALT)
109 /**
110  * \brief           Entropy poll callback for a hardware source
111  *
112  * \warning         This is not provided by mbed TLS!
113  *                  See \c MBEDTLS_ENTROPY_HARDWARE_ALT in config.h.
114  *
115  * \note            This must accept NULL as its first argument.
116  */
117 int mbedtls_hardware_poll( void *data,
118                            unsigned char *output, size_t len, size_t *olen );
119 #endif
120 
121 #if defined(MBEDTLS_ENTROPY_NV_SEED)
122 /**
123  * \brief           Entropy poll callback for a non-volatile seed file
124  *
125  * \note            This must accept NULL as its first argument.
126  */
127 int mbedtls_nv_seed_poll( void *data,
128                           unsigned char *output, size_t len, size_t *olen );
129 #endif
130 
131 #ifdef __cplusplus
132 }
133 #endif
134 
135 #endif /* entropy_poll.h */
136