source: azure_iot_hub_mbedtls/trunk/mbedtls-2.16.1/include/mbedtls/platform.h@ 398

Last change on this file since 398 was 398, checked in by coas-nagasima, 5 years ago

mbedTLS版Azure IoT Hub接続サンプルのソースコードを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 12.5 KB
Line 
1/**
2 * \file platform.h
3 *
4 * \brief This file contains the definitions and functions of the
5 * Mbed TLS platform abstraction layer.
6 *
7 * The platform abstraction layer removes the need for the library
8 * to directly link to standard C library functions or operating
9 * system services, making the library easier to port and embed.
10 * Application developers and users of the library can provide their own
11 * implementations of these functions, or implementations specific to
12 * their platform, which can be statically linked to the library or
13 * dynamically configured at runtime.
14 */
15/*
16 * Copyright (C) 2006-2018, Arm Limited (or its affiliates), All Rights Reserved
17 * SPDX-License-Identifier: Apache-2.0
18 *
19 * Licensed under the Apache License, Version 2.0 (the "License"); you may
20 * not use this file except in compliance with the License.
21 * You may obtain a copy of the License at
22 *
23 * http://www.apache.org/licenses/LICENSE-2.0
24 *
25 * Unless required by applicable law or agreed to in writing, software
26 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
27 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28 * See the License for the specific language governing permissions and
29 * limitations under the License.
30 *
31 * This file is part of Mbed TLS (https://tls.mbed.org)
32 */
33#ifndef MBEDTLS_PLATFORM_H
34#define MBEDTLS_PLATFORM_H
35
36#if !defined(MBEDTLS_CONFIG_FILE)
37#include "config.h"
38#else
39#include MBEDTLS_CONFIG_FILE
40#endif
41
42#if defined(MBEDTLS_HAVE_TIME)
43#include "platform_time.h"
44#endif
45
46#define MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED -0x0070 /**< Hardware accelerator failed */
47#define MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED -0x0072 /**< The requested feature is not supported by the platform */
48
49#ifdef __cplusplus
50extern "C" {
51#endif
52
53/**
54 * \name SECTION: Module settings
55 *
56 * The configuration options you can set for this module are in this section.
57 * Either change them in config.h or define them on the compiler command line.
58 * \{
59 */
60
61#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS)
62#include <stdio.h>
63#include <stdlib.h>
64#include <time.h>
65#if !defined(MBEDTLS_PLATFORM_STD_SNPRINTF)
66#if defined(_WIN32)
67#define MBEDTLS_PLATFORM_STD_SNPRINTF mbedtls_platform_win32_snprintf /**< The default \c snprintf function to use. */
68#else
69#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< The default \c snprintf function to use. */
70#endif
71#endif
72#if !defined(MBEDTLS_PLATFORM_STD_PRINTF)
73#define MBEDTLS_PLATFORM_STD_PRINTF printf /**< The default \c printf function to use. */
74#endif
75#if !defined(MBEDTLS_PLATFORM_STD_FPRINTF)
76#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< The default \c fprintf function to use. */
77#endif
78#if !defined(MBEDTLS_PLATFORM_STD_CALLOC)
79#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< The default \c calloc function to use. */
80#endif
81#if !defined(MBEDTLS_PLATFORM_STD_FREE)
82#define MBEDTLS_PLATFORM_STD_FREE free /**< The default \c free function to use. */
83#endif
84#if !defined(MBEDTLS_PLATFORM_STD_EXIT)
85#define MBEDTLS_PLATFORM_STD_EXIT exit /**< The default \c exit function to use. */
86#endif
87#if !defined(MBEDTLS_PLATFORM_STD_TIME)
88#define MBEDTLS_PLATFORM_STD_TIME time /**< The default \c time function to use. */
89#endif
90#if !defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS)
91#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS EXIT_SUCCESS /**< The default exit value to use. */
92#endif
93#if !defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE)
94#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE EXIT_FAILURE /**< The default exit value to use. */
95#endif
96#if defined(MBEDTLS_FS_IO)
97#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ)
98#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read
99#endif
100#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE)
101#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write
102#endif
103#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_FILE)
104#define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile"
105#endif
106#endif /* MBEDTLS_FS_IO */
107#else /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */
108#if defined(MBEDTLS_PLATFORM_STD_MEM_HDR)
109#include MBEDTLS_PLATFORM_STD_MEM_HDR
110#endif
111#endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */
112
113
114/* \} name SECTION: Module settings */
115
116/*
117 * The function pointers for calloc and free.
118 */
119#if defined(MBEDTLS_PLATFORM_MEMORY)
120#if defined(MBEDTLS_PLATFORM_FREE_MACRO) && \
121 defined(MBEDTLS_PLATFORM_CALLOC_MACRO)
122#define mbedtls_free MBEDTLS_PLATFORM_FREE_MACRO
123#define mbedtls_calloc MBEDTLS_PLATFORM_CALLOC_MACRO
124#else
125/* For size_t */
126#include <stddef.h>
127extern void *mbedtls_calloc( size_t n, size_t size );
128extern void mbedtls_free( void *ptr );
129
130/**
131 * \brief This function dynamically sets the memory-management
132 * functions used by the library, during runtime.
133 *
134 * \param calloc_func The \c calloc function implementation.
135 * \param free_func The \c free function implementation.
136 *
137 * \return \c 0.
138 */
139int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ),
140 void (*free_func)( void * ) );
141#endif /* MBEDTLS_PLATFORM_FREE_MACRO && MBEDTLS_PLATFORM_CALLOC_MACRO */
142#else /* !MBEDTLS_PLATFORM_MEMORY */
143#define mbedtls_free free
144#define mbedtls_calloc calloc
145#endif /* MBEDTLS_PLATFORM_MEMORY && !MBEDTLS_PLATFORM_{FREE,CALLOC}_MACRO */
146
147/*
148 * The function pointers for fprintf
149 */
150#if defined(MBEDTLS_PLATFORM_FPRINTF_ALT)
151/* We need FILE * */
152#include <stdio.h>
153extern int (*mbedtls_fprintf)( FILE *stream, const char *format, ... );
154
155/**
156 * \brief This function dynamically configures the fprintf
157 * function that is called when the
158 * mbedtls_fprintf() function is invoked by the library.
159 *
160 * \param fprintf_func The \c fprintf function implementation.
161 *
162 * \return \c 0.
163 */
164int mbedtls_platform_set_fprintf( int (*fprintf_func)( FILE *stream, const char *,
165 ... ) );
166#else
167#if defined(MBEDTLS_PLATFORM_FPRINTF_MACRO)
168#define mbedtls_fprintf MBEDTLS_PLATFORM_FPRINTF_MACRO
169#else
170#define mbedtls_fprintf fprintf
171#endif /* MBEDTLS_PLATFORM_FPRINTF_MACRO */
172#endif /* MBEDTLS_PLATFORM_FPRINTF_ALT */
173
174/*
175 * The function pointers for printf
176 */
177#if defined(MBEDTLS_PLATFORM_PRINTF_ALT)
178extern int (*mbedtls_printf)( const char *format, ... );
179
180/**
181 * \brief This function dynamically configures the snprintf
182 * function that is called when the mbedtls_snprintf()
183 * function is invoked by the library.
184 *
185 * \param printf_func The \c printf function implementation.
186 *
187 * \return \c 0 on success.
188 */
189int mbedtls_platform_set_printf( int (*printf_func)( const char *, ... ) );
190#else /* !MBEDTLS_PLATFORM_PRINTF_ALT */
191#if defined(MBEDTLS_PLATFORM_PRINTF_MACRO)
192#define mbedtls_printf MBEDTLS_PLATFORM_PRINTF_MACRO
193#else
194#define mbedtls_printf printf
195#endif /* MBEDTLS_PLATFORM_PRINTF_MACRO */
196#endif /* MBEDTLS_PLATFORM_PRINTF_ALT */
197
198/*
199 * The function pointers for snprintf
200 *
201 * The snprintf implementation should conform to C99:
202 * - it *must* always correctly zero-terminate the buffer
203 * (except when n == 0, then it must leave the buffer untouched)
204 * - however it is acceptable to return -1 instead of the required length when
205 * the destination buffer is too short.
206 */
207#if defined(_WIN32)
208/* For Windows (inc. MSYS2), we provide our own fixed implementation */
209int mbedtls_platform_win32_snprintf( char *s, size_t n, const char *fmt, ... );
210#endif
211
212#if defined(MBEDTLS_PLATFORM_SNPRINTF_ALT)
213extern int (*mbedtls_snprintf)( char * s, size_t n, const char * format, ... );
214
215/**
216 * \brief This function allows configuring a custom
217 * \c snprintf function pointer.
218 *
219 * \param snprintf_func The \c snprintf function implementation.
220 *
221 * \return \c 0 on success.
222 */
223int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n,
224 const char * format, ... ) );
225#else /* MBEDTLS_PLATFORM_SNPRINTF_ALT */
226#if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO)
227#define mbedtls_snprintf MBEDTLS_PLATFORM_SNPRINTF_MACRO
228#else
229#define mbedtls_snprintf MBEDTLS_PLATFORM_STD_SNPRINTF
230#endif /* MBEDTLS_PLATFORM_SNPRINTF_MACRO */
231#endif /* MBEDTLS_PLATFORM_SNPRINTF_ALT */
232
233/*
234 * The function pointers for exit
235 */
236#if defined(MBEDTLS_PLATFORM_EXIT_ALT)
237extern void (*mbedtls_exit)( int status );
238
239/**
240 * \brief This function dynamically configures the exit
241 * function that is called when the mbedtls_exit()
242 * function is invoked by the library.
243 *
244 * \param exit_func The \c exit function implementation.
245 *
246 * \return \c 0 on success.
247 */
248int mbedtls_platform_set_exit( void (*exit_func)( int status ) );
249#else
250#if defined(MBEDTLS_PLATFORM_EXIT_MACRO)
251#define mbedtls_exit MBEDTLS_PLATFORM_EXIT_MACRO
252#else
253#define mbedtls_exit exit
254#endif /* MBEDTLS_PLATFORM_EXIT_MACRO */
255#endif /* MBEDTLS_PLATFORM_EXIT_ALT */
256
257/*
258 * The default exit values
259 */
260#if defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS)
261#define MBEDTLS_EXIT_SUCCESS MBEDTLS_PLATFORM_STD_EXIT_SUCCESS
262#else
263#define MBEDTLS_EXIT_SUCCESS 0
264#endif
265#if defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE)
266#define MBEDTLS_EXIT_FAILURE MBEDTLS_PLATFORM_STD_EXIT_FAILURE
267#else
268#define MBEDTLS_EXIT_FAILURE 1
269#endif
270
271/*
272 * The function pointers for reading from and writing a seed file to
273 * Non-Volatile storage (NV) in a platform-independent way
274 *
275 * Only enabled when the NV seed entropy source is enabled
276 */
277#if defined(MBEDTLS_ENTROPY_NV_SEED)
278#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) && defined(MBEDTLS_FS_IO)
279/* Internal standard platform definitions */
280int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len );
281int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len );
282#endif
283
284#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT)
285extern int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len );
286extern int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len );
287
288/**
289 * \brief This function allows configuring custom seed file writing and
290 * reading functions.
291 *
292 * \param nv_seed_read_func The seed reading function implementation.
293 * \param nv_seed_write_func The seed writing function implementation.
294 *
295 * \return \c 0 on success.
296 */
297int mbedtls_platform_set_nv_seed(
298 int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ),
299 int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len )
300 );
301#else
302#if defined(MBEDTLS_PLATFORM_NV_SEED_READ_MACRO) && \
303 defined(MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO)
304#define mbedtls_nv_seed_read MBEDTLS_PLATFORM_NV_SEED_READ_MACRO
305#define mbedtls_nv_seed_write MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO
306#else
307#define mbedtls_nv_seed_read mbedtls_platform_std_nv_seed_read
308#define mbedtls_nv_seed_write mbedtls_platform_std_nv_seed_write
309#endif
310#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */
311#endif /* MBEDTLS_ENTROPY_NV_SEED */
312
313#if !defined(MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT)
314
315/**
316 * \brief The platform context structure.
317 *
318 * \note This structure may be used to assist platform-specific
319 * setup or teardown operations.
320 */
321typedef struct mbedtls_platform_context
322{
323 char dummy; /**< A placeholder member, as empty structs are not portable. */
324}
325mbedtls_platform_context;
326
327#else
328#include "platform_alt.h"
329#endif /* !MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT */
330
331/**
332 * \brief This function performs any platform-specific initialization
333 * operations.
334 *
335 * \note This function should be called before any other library functions.
336 *
337 * Its implementation is platform-specific, and unless
338 * platform-specific code is provided, it does nothing.
339 *
340 * \note The usage and necessity of this function is dependent on the platform.
341 *
342 * \param ctx The platform context.
343 *
344 * \return \c 0 on success.
345 */
346int mbedtls_platform_setup( mbedtls_platform_context *ctx );
347/**
348 * \brief This function performs any platform teardown operations.
349 *
350 * \note This function should be called after every other Mbed TLS module
351 * has been correctly freed using the appropriate free function.
352 *
353 * Its implementation is platform-specific, and unless
354 * platform-specific code is provided, it does nothing.
355 *
356 * \note The usage and necessity of this function is dependent on the platform.
357 *
358 * \param ctx The platform context.
359 *
360 */
361void mbedtls_platform_teardown( mbedtls_platform_context *ctx );
362
363#ifdef __cplusplus
364}
365#endif
366
367#endif /* platform.h */
Note: See TracBrowser for help on using the repository browser.