blob: e68ebc3c7e2c44c24d36ef769e6f694a9760228e [file] [log] [blame]
Paul Bakker747a83a2014-02-01 22:50:07 +01001/**
2 * \file platform.h
3 *
Rose Zadik332658d2018-01-25 22:02:53 +00004 * \brief The Mbed TLS platform abstraction layer.
Darryl Greena40a1012018-01-05 15:33:17 +00005 */
6/*
Rose Zadik332658d2018-01-25 22:02:53 +00007 * Copyright (C) 2006-2018, Arm Limited (or its affiliates), All Rights Reserved
Bence Szépkúti4e9f7122020-06-05 13:02:18 +02008 * 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:
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +020015 *
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.
Paul Bakker747a83a2014-02-01 22:50:07 +010027 *
Bence Szépkúti4e9f7122020-06-05 13:02:18 +020028 * **********
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 *
Rose Zadik332658d2018-01-25 22:02:53 +000049 * This file is part of Mbed TLS (https://tls.mbed.org)
Paul Bakker747a83a2014-02-01 22:50:07 +010050 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020051#ifndef MBEDTLS_PLATFORM_H
52#define MBEDTLS_PLATFORM_H
Paul Bakker747a83a2014-02-01 22:50:07 +010053
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020054#if !defined(MBEDTLS_CONFIG_FILE)
Paul Bakker747a83a2014-02-01 22:50:07 +010055#include "config.h"
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020056#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020057#include MBEDTLS_CONFIG_FILE
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020058#endif
Paul Bakker747a83a2014-02-01 22:50:07 +010059
Simon Butcherb5b6af22016-07-13 14:46:18 +010060#if defined(MBEDTLS_HAVE_TIME)
Ron Eldordf9b93e2017-05-14 16:17:33 +030061#include "platform_time.h"
Simon Butcherb5b6af22016-07-13 14:46:18 +010062#endif
63
Paul Bakker747a83a2014-02-01 22:50:07 +010064#ifdef __cplusplus
65extern "C" {
66#endif
67
Paul Bakker088c5c52014-04-25 11:11:10 +020068/**
69 * \name SECTION: Module settings
70 *
71 * The configuration options you can set for this module are in this section.
72 * Either change them in config.h or define them on the compiler command line.
73 * \{
74 */
75
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020076#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS)
Rich Evans00ab4702015-02-06 13:43:58 +000077#include <stdio.h>
Paul Bakkera9066cf2014-02-05 15:13:04 +010078#include <stdlib.h>
Simon Butcher3fe6cd32016-04-26 19:51:29 +010079#include <time.h>
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020080#if !defined(MBEDTLS_PLATFORM_STD_SNPRINTF)
Manuel Pégourié-Gonnard6c0c8e02015-06-22 10:23:34 +020081#if defined(_WIN32)
Rose Zadik332658d2018-01-25 22:02:53 +000082#define MBEDTLS_PLATFORM_STD_SNPRINTF mbedtls_platform_win32_snprintf /**< The default \c snprintf function to use. */
Manuel Pégourié-Gonnard6c0c8e02015-06-22 10:23:34 +020083#else
Rose Zadik332658d2018-01-25 22:02:53 +000084#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< The default \c snprintf function to use. */
Rich Evans46b0a8d2015-01-30 10:47:32 +000085#endif
Manuel Pégourié-Gonnard6c0c8e02015-06-22 10:23:34 +020086#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020087#if !defined(MBEDTLS_PLATFORM_STD_PRINTF)
Rose Zadik332658d2018-01-25 22:02:53 +000088#define MBEDTLS_PLATFORM_STD_PRINTF printf /**< The default \c printf function to use. */
Paul Bakker088c5c52014-04-25 11:11:10 +020089#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020090#if !defined(MBEDTLS_PLATFORM_STD_FPRINTF)
Rose Zadik332658d2018-01-25 22:02:53 +000091#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< The default \c fprintf function to use. */
Paul Bakker088c5c52014-04-25 11:11:10 +020092#endif
Manuel Pégourié-Gonnardb9ef1182015-05-26 16:15:20 +020093#if !defined(MBEDTLS_PLATFORM_STD_CALLOC)
Rose Zadik332658d2018-01-25 22:02:53 +000094#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< The default \c calloc function to use. */
Paul Bakker088c5c52014-04-25 11:11:10 +020095#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020096#if !defined(MBEDTLS_PLATFORM_STD_FREE)
Rose Zadik332658d2018-01-25 22:02:53 +000097#define MBEDTLS_PLATFORM_STD_FREE free /**< The default \c free function to use. */
Paul Bakker088c5c52014-04-25 11:11:10 +020098#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020099#if !defined(MBEDTLS_PLATFORM_STD_EXIT)
Rose Zadik332658d2018-01-25 22:02:53 +0000100#define MBEDTLS_PLATFORM_STD_EXIT exit /**< The default \c exit function to use. */
Janos Follath91947442016-03-18 13:49:27 +0000101#endif
SimonBd5800b72016-04-26 07:43:27 +0100102#if !defined(MBEDTLS_PLATFORM_STD_TIME)
Rose Zadik332658d2018-01-25 22:02:53 +0000103#define MBEDTLS_PLATFORM_STD_TIME time /**< The default \c time function to use. */
SimonBd5800b72016-04-26 07:43:27 +0100104#endif
Janos Follath91947442016-03-18 13:49:27 +0000105#if !defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS)
Rose Zadik332658d2018-01-25 22:02:53 +0000106#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS EXIT_SUCCESS /**< The default exit value to use. */
Janos Follath91947442016-03-18 13:49:27 +0000107#endif
108#if !defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE)
Rose Zadik332658d2018-01-25 22:02:53 +0000109#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE EXIT_FAILURE /**< The default exit value to use. */
Rich Evansc39cb492015-01-30 12:01:34 +0000110#endif
Paul Bakkera9c321c2016-06-01 11:44:12 +0100111#if defined(MBEDTLS_FS_IO)
Paul Bakkere021a4b2016-06-01 11:25:44 +0100112#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ)
113#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read
114#endif
115#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE)
116#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write
117#endif
118#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_FILE)
119#define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile"
120#endif
Paul Bakkera9c321c2016-06-01 11:44:12 +0100121#endif /* MBEDTLS_FS_IO */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200122#else /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */
123#if defined(MBEDTLS_PLATFORM_STD_MEM_HDR)
124#include MBEDTLS_PLATFORM_STD_MEM_HDR
Manuel Pégourié-Gonnardeb82a742014-04-02 13:43:48 +0200125#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200126#endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */
Paul Bakker088c5c52014-04-25 11:11:10 +0200127
Paul Bakkere021a4b2016-06-01 11:25:44 +0100128
Paul Bakker088c5c52014-04-25 11:11:10 +0200129/* \} name SECTION: Module settings */
Paul Bakker747a83a2014-02-01 22:50:07 +0100130
131/*
Manuel Pégourié-Gonnardb9ef1182015-05-26 16:15:20 +0200132 * The function pointers for calloc and free
Paul Bakker747a83a2014-02-01 22:50:07 +0100133 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200134#if defined(MBEDTLS_PLATFORM_MEMORY)
135#if defined(MBEDTLS_PLATFORM_FREE_MACRO) && \
Manuel Pégourié-Gonnardb9ef1182015-05-26 16:15:20 +0200136 defined(MBEDTLS_PLATFORM_CALLOC_MACRO)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200137#define mbedtls_free MBEDTLS_PLATFORM_FREE_MACRO
Manuel Pégourié-Gonnardb9ef1182015-05-26 16:15:20 +0200138#define mbedtls_calloc MBEDTLS_PLATFORM_CALLOC_MACRO
Rich Evans401bb902015-02-10 12:28:15 +0000139#else
Manuel Pégourié-Gonnard7ee5ddd2015-06-03 10:33:55 +0100140/* For size_t */
141#include <stddef.h>
Manuel Pégourié-Gonnardb9ef1182015-05-26 16:15:20 +0200142extern void * (*mbedtls_calloc)( size_t n, size_t size );
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200143extern void (*mbedtls_free)( void *ptr );
Paul Bakkerdefc0ca2014-02-04 17:30:24 +0100144
145/**
Rose Zadik332658d2018-01-25 22:02:53 +0000146 * \brief This function allows configuring custom memory-management functions.
Paul Bakkerdefc0ca2014-02-04 17:30:24 +0100147 *
Rose Zadik332658d2018-01-25 22:02:53 +0000148 * \param calloc_func The \c calloc function implementation.
149 * \param free_func The \c free function implementation.
Paul Bakkerdefc0ca2014-02-04 17:30:24 +0100150 *
Rose Zadik332658d2018-01-25 22:02:53 +0000151 * \return \c 0.
Paul Bakkerdefc0ca2014-02-04 17:30:24 +0100152 */
Manuel Pégourié-Gonnardb9ef1182015-05-26 16:15:20 +0200153int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ),
Paul Bakkerdefc0ca2014-02-04 17:30:24 +0100154 void (*free_func)( void * ) );
Manuel Pégourié-Gonnardb9ef1182015-05-26 16:15:20 +0200155#endif /* MBEDTLS_PLATFORM_FREE_MACRO && MBEDTLS_PLATFORM_CALLOC_MACRO */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200156#else /* !MBEDTLS_PLATFORM_MEMORY */
157#define mbedtls_free free
Manuel Pégourié-Gonnardb9ef1182015-05-26 16:15:20 +0200158#define mbedtls_calloc calloc
159#endif /* MBEDTLS_PLATFORM_MEMORY && !MBEDTLS_PLATFORM_{FREE,CALLOC}_MACRO */
Paul Bakker747a83a2014-02-01 22:50:07 +0100160
161/*
162 * The function pointers for fprintf
163 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200164#if defined(MBEDTLS_PLATFORM_FPRINTF_ALT)
Manuel Pégourié-Gonnard7ee5ddd2015-06-03 10:33:55 +0100165/* We need FILE * */
166#include <stdio.h>
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200167extern int (*mbedtls_fprintf)( FILE *stream, const char *format, ... );
Paul Bakker747a83a2014-02-01 22:50:07 +0100168
Rich Evansc39cb492015-01-30 12:01:34 +0000169/**
Rose Zadik332658d2018-01-25 22:02:53 +0000170 * \brief This function allows configuring a custom \p fprintf function pointer.
Rich Evansc39cb492015-01-30 12:01:34 +0000171 *
Rose Zadik332658d2018-01-25 22:02:53 +0000172 * \param fprintf_func The \c fprintf function implementation.
Rich Evansc39cb492015-01-30 12:01:34 +0000173 *
Rose Zadik332658d2018-01-25 22:02:53 +0000174 * \return \c 0.
Rich Evansc39cb492015-01-30 12:01:34 +0000175 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200176int mbedtls_platform_set_fprintf( int (*fprintf_func)( FILE *stream, const char *,
Paul Bakker747a83a2014-02-01 22:50:07 +0100177 ... ) );
178#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200179#if defined(MBEDTLS_PLATFORM_FPRINTF_MACRO)
180#define mbedtls_fprintf MBEDTLS_PLATFORM_FPRINTF_MACRO
Rich Evans16f8cd82015-02-06 16:14:34 +0000181#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200182#define mbedtls_fprintf fprintf
183#endif /* MBEDTLS_PLATFORM_FPRINTF_MACRO */
184#endif /* MBEDTLS_PLATFORM_FPRINTF_ALT */
Rich Evansc39cb492015-01-30 12:01:34 +0000185
186/*
Rich Evans16f8cd82015-02-06 16:14:34 +0000187 * The function pointers for printf
188 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200189#if defined(MBEDTLS_PLATFORM_PRINTF_ALT)
190extern int (*mbedtls_printf)( const char *format, ... );
Rich Evans16f8cd82015-02-06 16:14:34 +0000191
192/**
Rose Zadik332658d2018-01-25 22:02:53 +0000193 * \brief This function allows configuring a custom \c printf function
194 * pointer.
Rich Evans16f8cd82015-02-06 16:14:34 +0000195 *
Rose Zadik332658d2018-01-25 22:02:53 +0000196 * \param printf_func The \c printf function implementation.
Rich Evans16f8cd82015-02-06 16:14:34 +0000197 *
Rose Zadik332658d2018-01-25 22:02:53 +0000198 * \return \c 0 on success.
Rich Evans16f8cd82015-02-06 16:14:34 +0000199 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200200int mbedtls_platform_set_printf( int (*printf_func)( const char *, ... ) );
201#else /* !MBEDTLS_PLATFORM_PRINTF_ALT */
202#if defined(MBEDTLS_PLATFORM_PRINTF_MACRO)
203#define mbedtls_printf MBEDTLS_PLATFORM_PRINTF_MACRO
Rich Evans16f8cd82015-02-06 16:14:34 +0000204#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200205#define mbedtls_printf printf
206#endif /* MBEDTLS_PLATFORM_PRINTF_MACRO */
207#endif /* MBEDTLS_PLATFORM_PRINTF_ALT */
Rich Evans16f8cd82015-02-06 16:14:34 +0000208
209/*
210 * The function pointers for snprintf
Manuel Pégourié-Gonnard6c0c8e02015-06-22 10:23:34 +0200211 *
212 * The snprintf implementation should conform to C99:
213 * - it *must* always correctly zero-terminate the buffer
214 * (except when n == 0, then it must leave the buffer untouched)
215 * - however it is acceptable to return -1 instead of the required length when
216 * the destination buffer is too short.
Rich Evans16f8cd82015-02-06 16:14:34 +0000217 */
Manuel Pégourié-Gonnard6c0c8e02015-06-22 10:23:34 +0200218#if defined(_WIN32)
219/* For Windows (inc. MSYS2), we provide our own fixed implementation */
220int mbedtls_platform_win32_snprintf( char *s, size_t n, const char *fmt, ... );
221#endif
222
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200223#if defined(MBEDTLS_PLATFORM_SNPRINTF_ALT)
224extern int (*mbedtls_snprintf)( char * s, size_t n, const char * format, ... );
Rich Evans16f8cd82015-02-06 16:14:34 +0000225
226/**
Rose Zadik332658d2018-01-25 22:02:53 +0000227 * \brief This function allows configuring a custom \c snprintf function
228 * pointer.
Rich Evans16f8cd82015-02-06 16:14:34 +0000229 *
Rose Zadik332658d2018-01-25 22:02:53 +0000230 * \param snprintf_func The \c snprintf function implementation.
Rich Evans16f8cd82015-02-06 16:14:34 +0000231 *
Rose Zadik332658d2018-01-25 22:02:53 +0000232 * \return \c 0 on success.
Rich Evans16f8cd82015-02-06 16:14:34 +0000233 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200234int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n,
Rich Evans16f8cd82015-02-06 16:14:34 +0000235 const char * format, ... ) );
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200236#else /* MBEDTLS_PLATFORM_SNPRINTF_ALT */
237#if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO)
238#define mbedtls_snprintf MBEDTLS_PLATFORM_SNPRINTF_MACRO
Rich Evans16f8cd82015-02-06 16:14:34 +0000239#else
Azim Khan26838602018-03-23 18:34:35 +0000240#define mbedtls_snprintf MBEDTLS_PLATFORM_STD_SNPRINTF
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200241#endif /* MBEDTLS_PLATFORM_SNPRINTF_MACRO */
242#endif /* MBEDTLS_PLATFORM_SNPRINTF_ALT */
Rich Evans16f8cd82015-02-06 16:14:34 +0000243
244/*
Rich Evansc39cb492015-01-30 12:01:34 +0000245 * The function pointers for exit
246 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200247#if defined(MBEDTLS_PLATFORM_EXIT_ALT)
248extern void (*mbedtls_exit)( int status );
Rich Evansc39cb492015-01-30 12:01:34 +0000249
250/**
Rose Zadik332658d2018-01-25 22:02:53 +0000251 * \brief This function allows configuring a custom \c exit function
252 * pointer.
Rich Evansc39cb492015-01-30 12:01:34 +0000253 *
Rose Zadik332658d2018-01-25 22:02:53 +0000254 * \param exit_func The \c exit function implementation.
Rich Evansc39cb492015-01-30 12:01:34 +0000255 *
Rose Zadik332658d2018-01-25 22:02:53 +0000256 * \return \c 0 on success.
Rich Evansc39cb492015-01-30 12:01:34 +0000257 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200258int mbedtls_platform_set_exit( void (*exit_func)( int status ) );
Rich Evansc39cb492015-01-30 12:01:34 +0000259#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200260#if defined(MBEDTLS_PLATFORM_EXIT_MACRO)
261#define mbedtls_exit MBEDTLS_PLATFORM_EXIT_MACRO
Rich Evans16f8cd82015-02-06 16:14:34 +0000262#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200263#define mbedtls_exit exit
264#endif /* MBEDTLS_PLATFORM_EXIT_MACRO */
265#endif /* MBEDTLS_PLATFORM_EXIT_ALT */
Paul Bakker747a83a2014-02-01 22:50:07 +0100266
Janos Follath91947442016-03-18 13:49:27 +0000267/*
268 * The default exit values
269 */
270#if defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS)
271#define MBEDTLS_EXIT_SUCCESS MBEDTLS_PLATFORM_STD_EXIT_SUCCESS
272#else
273#define MBEDTLS_EXIT_SUCCESS 0
274#endif
275#if defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE)
276#define MBEDTLS_EXIT_FAILURE MBEDTLS_PLATFORM_STD_EXIT_FAILURE
277#else
278#define MBEDTLS_EXIT_FAILURE 1
279#endif
280
SimonBd5800b72016-04-26 07:43:27 +0100281/*
Paul Bakkere021a4b2016-06-01 11:25:44 +0100282 * The function pointers for reading from and writing a seed file to
283 * Non-Volatile storage (NV) in a platform-independent way
284 *
285 * Only enabled when the NV seed entropy source is enabled
286 */
287#if defined(MBEDTLS_ENTROPY_NV_SEED)
288#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) && defined(MBEDTLS_FS_IO)
289/* Internal standard platform definitions */
290int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len );
291int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len );
292#endif
293
294#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT)
295extern int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len );
296extern int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len );
297
298/**
Rose Zadik332658d2018-01-25 22:02:53 +0000299 * \brief This function allows configuring custom seed file writing and
300 * reading functions.
Paul Bakkere021a4b2016-06-01 11:25:44 +0100301 *
Rose Zadik332658d2018-01-25 22:02:53 +0000302 * \param nv_seed_read_func The seed reading function implementation.
303 * \param nv_seed_write_func The seed writing function implementation.
Paul Bakkere021a4b2016-06-01 11:25:44 +0100304 *
Rose Zadik332658d2018-01-25 22:02:53 +0000305 * \return \c 0 on success.
Paul Bakkere021a4b2016-06-01 11:25:44 +0100306 */
307int mbedtls_platform_set_nv_seed(
308 int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ),
309 int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len )
310 );
311#else
312#if defined(MBEDTLS_PLATFORM_NV_SEED_READ_MACRO) && \
313 defined(MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO)
314#define mbedtls_nv_seed_read MBEDTLS_PLATFORM_NV_SEED_READ_MACRO
315#define mbedtls_nv_seed_write MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO
316#else
317#define mbedtls_nv_seed_read mbedtls_platform_std_nv_seed_read
318#define mbedtls_nv_seed_write mbedtls_platform_std_nv_seed_write
319#endif
320#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */
321#endif /* MBEDTLS_ENTROPY_NV_SEED */
322
Andres Amaya Garciad91f99f2017-07-18 10:23:04 +0100323#if !defined(MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT)
Andres Amaya Garcia3c8a39d2017-07-12 11:25:17 +0100324
Andres Amaya Garcia64b02cd2017-07-12 11:32:40 +0100325/**
Rose Zadik332658d2018-01-25 22:02:53 +0000326 * \brief The platform context structure.
Andres Amaya Garcia64b02cd2017-07-12 11:32:40 +0100327 *
328 * \note This structure may be used to assist platform-specific
Rose Zadik332658d2018-01-25 22:02:53 +0000329 * setup or teardown operations.
Andres Amaya Garcia64b02cd2017-07-12 11:32:40 +0100330 */
331typedef struct {
Rose Zadik332658d2018-01-25 22:02:53 +0000332 char dummy; /**< Placeholder member, as empty structs are not portable. */
Andres Amaya Garcia64b02cd2017-07-12 11:32:40 +0100333}
334mbedtls_platform_context;
335
Andres Amaya Garcia2a6f39c2017-07-07 13:03:23 +0100336#else
337#include "platform_alt.h"
Andres Amaya Garciad91f99f2017-07-18 10:23:04 +0100338#endif /* !MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT */
Andres Amaya Garcia2a6f39c2017-07-07 13:03:23 +0100339
340/**
Rose Zadik332658d2018-01-25 22:02:53 +0000341 * \brief This function performs any platform initialization operations.
Andres Amaya Garcia2a6f39c2017-07-07 13:03:23 +0100342 *
Rose Zadik332658d2018-01-25 22:02:53 +0000343 * \param ctx The Mbed TLS context.
Andres Amaya Garcia2a6f39c2017-07-07 13:03:23 +0100344 *
Rose Zadik332658d2018-01-25 22:02:53 +0000345 * \return \c 0 on success.
Andres Amaya Garcia2a6f39c2017-07-07 13:03:23 +0100346 *
Rose Zadik332658d2018-01-25 22:02:53 +0000347 * \note This function is intended to allow platform-specific initialization,
Simon Butcherd3be27a2017-07-21 02:08:00 +0200348 * and should be called before any other library functions. Its
Rose Zadik332658d2018-01-25 22:02:53 +0000349 * implementation is platform-specific, and unless
350 * platform-specific code is provided, it does nothing.
Simon Butcherd3be27a2017-07-21 02:08:00 +0200351 *
Rose Zadik332658d2018-01-25 22:02:53 +0000352 * Its use and whether it is necessary to call it is dependent on the
Simon Butcherd3be27a2017-07-21 02:08:00 +0200353 * platform.
Andres Amaya Garcia2a6f39c2017-07-07 13:03:23 +0100354 */
355int mbedtls_platform_setup( mbedtls_platform_context *ctx );
356/**
Rose Zadik332658d2018-01-25 22:02:53 +0000357 * \brief This function performs any platform teardown operations.
Andres Amaya Garcia2a6f39c2017-07-07 13:03:23 +0100358 *
Rose Zadik332658d2018-01-25 22:02:53 +0000359 * \param ctx The Mbed TLS context.
Andres Amaya Garcia2a6f39c2017-07-07 13:03:23 +0100360 *
Rose Zadik332658d2018-01-25 22:02:53 +0000361 * \note This function should be called after every other Mbed TLS module
362 * has been correctly freed using the appropriate free function.
363 * Its implementation is platform-specific, and unless
364 * platform-specific code is provided, it does nothing.
Simon Butcherd3be27a2017-07-21 02:08:00 +0200365 *
Rose Zadik332658d2018-01-25 22:02:53 +0000366 * Its use and whether it is necessary to call it is dependent on the
Simon Butcherd3be27a2017-07-21 02:08:00 +0200367 * platform.
Andres Amaya Garcia2a6f39c2017-07-07 13:03:23 +0100368 */
369void mbedtls_platform_teardown( mbedtls_platform_context *ctx );
370
Paul Bakker747a83a2014-02-01 22:50:07 +0100371#ifdef __cplusplus
372}
373#endif
374
375#endif /* platform.h */