00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 #ifndef MBEDTLS_PLATFORM_H
00052 #define MBEDTLS_PLATFORM_H
00053
00054 #if !defined(MBEDTLS_CONFIG_FILE)
00055 #include "config.h"
00056 #else
00057 #include MBEDTLS_CONFIG_FILE
00058 #endif
00059
00060 #if defined(MBEDTLS_HAVE_TIME)
00061 #include "platform_time.h"
00062 #endif
00063
00064 #ifdef __cplusplus
00065 extern "C" {
00066 #endif
00067
00076 #if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS)
00077 #include <stdio.h>
00078 #include <stdlib.h>
00079 #include <time.h>
00080 #if !defined(MBEDTLS_PLATFORM_STD_SNPRINTF)
00081 #if defined(_WIN32)
00082 #define MBEDTLS_PLATFORM_STD_SNPRINTF mbedtls_platform_win32_snprintf
00083 #else
00084 #define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf
00085 #endif
00086 #endif
00087 #if !defined(MBEDTLS_PLATFORM_STD_PRINTF)
00088 #define MBEDTLS_PLATFORM_STD_PRINTF printf
00089 #endif
00090 #if !defined(MBEDTLS_PLATFORM_STD_FPRINTF)
00091 #define MBEDTLS_PLATFORM_STD_FPRINTF fprintf
00092 #endif
00093 #if !defined(MBEDTLS_PLATFORM_STD_CALLOC)
00094 #define MBEDTLS_PLATFORM_STD_CALLOC calloc
00095 #endif
00096 #if !defined(MBEDTLS_PLATFORM_STD_FREE)
00097 #define MBEDTLS_PLATFORM_STD_FREE free
00098 #endif
00099 #if !defined(MBEDTLS_PLATFORM_STD_EXIT)
00100 #define MBEDTLS_PLATFORM_STD_EXIT exit
00101 #endif
00102 #if !defined(MBEDTLS_PLATFORM_STD_TIME)
00103 #define MBEDTLS_PLATFORM_STD_TIME time
00104 #endif
00105 #if !defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS)
00106 #define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS EXIT_SUCCESS
00107 #endif
00108 #if !defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE)
00109 #define MBEDTLS_PLATFORM_STD_EXIT_FAILURE EXIT_FAILURE
00110 #endif
00111 #if defined(MBEDTLS_FS_IO)
00112 #if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ)
00113 #define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read
00114 #endif
00115 #if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE)
00116 #define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write
00117 #endif
00118 #if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_FILE)
00119 #define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile"
00120 #endif
00121 #endif
00122 #else
00123 #if defined(MBEDTLS_PLATFORM_STD_MEM_HDR)
00124 #include MBEDTLS_PLATFORM_STD_MEM_HDR
00125 #endif
00126 #endif
00127
00128
00129
00130
00131
00132
00133
00134 #if defined(MBEDTLS_PLATFORM_MEMORY)
00135 #if defined(MBEDTLS_PLATFORM_FREE_MACRO) && \
00136 defined(MBEDTLS_PLATFORM_CALLOC_MACRO)
00137 #define mbedtls_free MBEDTLS_PLATFORM_FREE_MACRO
00138 #define mbedtls_calloc MBEDTLS_PLATFORM_CALLOC_MACRO
00139 #else
00140
00141 #include <stddef.h>
00142 extern void * (*mbedtls_calloc)( size_t n, size_t size );
00143 extern void (*mbedtls_free)( void *ptr );
00144
00153 int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ),
00154 void (*free_func)( void * ) );
00155 #endif
00156 #else
00157 #define mbedtls_free free
00158 #define mbedtls_calloc calloc
00159 #endif
00160
00161
00162
00163
00164 #if defined(MBEDTLS_PLATFORM_FPRINTF_ALT)
00165
00166 #include <stdio.h>
00167 extern int (*mbedtls_fprintf)( FILE *stream, const char *format, ... );
00168
00176 int mbedtls_platform_set_fprintf( int (*fprintf_func)( FILE *stream, const char *,
00177 ... ) );
00178 #else
00179 #if defined(MBEDTLS_PLATFORM_FPRINTF_MACRO)
00180 #define mbedtls_fprintf MBEDTLS_PLATFORM_FPRINTF_MACRO
00181 #else
00182 #define mbedtls_fprintf fprintf
00183 #endif
00184 #endif
00185
00186
00187
00188
00189 #if defined(MBEDTLS_PLATFORM_PRINTF_ALT)
00190 extern int (*mbedtls_printf)( const char *format, ... );
00191
00200 int mbedtls_platform_set_printf( int (*printf_func)( const char *, ... ) );
00201 #else
00202 #if defined(MBEDTLS_PLATFORM_PRINTF_MACRO)
00203 #define mbedtls_printf MBEDTLS_PLATFORM_PRINTF_MACRO
00204 #else
00205 #define mbedtls_printf printf
00206 #endif
00207 #endif
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218 #if defined(_WIN32)
00219
00220 int mbedtls_platform_win32_snprintf( char *s, size_t n, const char *fmt, ... );
00221 #endif
00222
00223 #if defined(MBEDTLS_PLATFORM_SNPRINTF_ALT)
00224 extern int (*mbedtls_snprintf)( char * s, size_t n, const char * format, ... );
00225
00234 int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n,
00235 const char * format, ... ) );
00236 #else
00237 #if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO)
00238 #define mbedtls_snprintf MBEDTLS_PLATFORM_SNPRINTF_MACRO
00239 #else
00240 #define mbedtls_snprintf MBEDTLS_PLATFORM_STD_SNPRINTF
00241 #endif
00242 #endif
00243
00244
00245
00246
00247 #if defined(MBEDTLS_PLATFORM_EXIT_ALT)
00248 extern void (*mbedtls_exit)( int status );
00249
00258 int mbedtls_platform_set_exit( void (*exit_func)( int status ) );
00259 #else
00260 #if defined(MBEDTLS_PLATFORM_EXIT_MACRO)
00261 #define mbedtls_exit MBEDTLS_PLATFORM_EXIT_MACRO
00262 #else
00263 #define mbedtls_exit exit
00264 #endif
00265 #endif
00266
00267
00268
00269
00270 #if defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS)
00271 #define MBEDTLS_EXIT_SUCCESS MBEDTLS_PLATFORM_STD_EXIT_SUCCESS
00272 #else
00273 #define MBEDTLS_EXIT_SUCCESS 0
00274 #endif
00275 #if defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE)
00276 #define MBEDTLS_EXIT_FAILURE MBEDTLS_PLATFORM_STD_EXIT_FAILURE
00277 #else
00278 #define MBEDTLS_EXIT_FAILURE 1
00279 #endif
00280
00281
00282
00283
00284
00285
00286
00287 #if defined(MBEDTLS_ENTROPY_NV_SEED)
00288 #if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) && defined(MBEDTLS_FS_IO)
00289
00290 int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len );
00291 int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len );
00292 #endif
00293
00294 #if defined(MBEDTLS_PLATFORM_NV_SEED_ALT)
00295 extern int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len );
00296 extern int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len );
00297
00307 int mbedtls_platform_set_nv_seed(
00308 int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ),
00309 int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len )
00310 );
00311 #else
00312 #if defined(MBEDTLS_PLATFORM_NV_SEED_READ_MACRO) && \
00313 defined(MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO)
00314 #define mbedtls_nv_seed_read MBEDTLS_PLATFORM_NV_SEED_READ_MACRO
00315 #define mbedtls_nv_seed_write MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO
00316 #else
00317 #define mbedtls_nv_seed_read mbedtls_platform_std_nv_seed_read
00318 #define mbedtls_nv_seed_write mbedtls_platform_std_nv_seed_write
00319 #endif
00320 #endif
00321 #endif
00322
00323 #if !defined(MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT)
00324
00331 typedef struct {
00332 char dummy;
00333 }
00334 mbedtls_platform_context;
00335
00336 #else
00337 #include "platform_alt.h"
00338 #endif
00339
00355 int mbedtls_platform_setup( mbedtls_platform_context *ctx );
00369 void mbedtls_platform_teardown( mbedtls_platform_context *ctx );
00370
00371 #ifdef __cplusplus
00372 }
00373 #endif
00374
00375 #endif