mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2025-03-24 22:35:15 +00:00
Introduce platform-layer functions for reading/writing seed from NV
Introduces mbedtls_nv_seed_read() and mbedtls_nv_seed_write(). The platform-layer functions are only available when MBEDTLS_ENTROPY_NV_SEED is enabled.
This commit is contained in:
parent
9fa2e86d93
commit
e021a4be13
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* \brief Consistency checks for configuration options
|
* \brief Consistency checks for configuration options
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
* Copyright (C) 2006-2016, ARM Limited, All Rights Reserved
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
@ -357,6 +357,38 @@
|
||||||
#error "MBEDTLS_PLATFORM_STD_SNPRINTF defined, but not all prerequisites"
|
#error "MBEDTLS_PLATFORM_STD_SNPRINTF defined, but not all prerequisites"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_ENTROPY_NV_SEED) &&\
|
||||||
|
( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_ENTROPY_C) )
|
||||||
|
#error "MBEDTLS_ENTROPY_NV_SEED defined, but not all prerequisites"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT) &&\
|
||||||
|
!defined(MBEDTLS_ENTROPY_NV_SEED)
|
||||||
|
#error "MBEDTLS_PLATFORM_NV_SEED_ALT defined, but not all prerequisites"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ) &&\
|
||||||
|
!defined(MBEDTLS_PLATFORM_NV_SEED_ALT)
|
||||||
|
#error "MBEDTLS_PLATFORM_STD_NV_SEED_READ defined, but not all prerequisites"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE) &&\
|
||||||
|
!defined(MBEDTLS_PLATFORM_NV_SEED_ALT)
|
||||||
|
#error "MBEDTLS_PLATFORM_STD_NV_SEED_WRITE defined, but not all prerequisites"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PLATFORM_NV_SEED_READ_MACRO) &&\
|
||||||
|
( defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ) ||\
|
||||||
|
defined(MBEDTLS_PLATFORM_NV_SEED_ALT) )
|
||||||
|
#error "MBEDTLS_PLATFORM_NV_SEED_READ_MACRO and MBEDTLS_PLATFORM_STD_NV_SEED_READ cannot be defined simultaneously"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO) &&\
|
||||||
|
( defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE) ||\
|
||||||
|
defined(MBEDTLS_PLATFORM_NV_SEED_ALT) )
|
||||||
|
#error "MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO and MBEDTLS_PLATFORM_STD_NV_SEED_WRITE cannot be defined simultaneously"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_RSA_C) && ( !defined(MBEDTLS_BIGNUM_C) || \
|
#if defined(MBEDTLS_RSA_C) && ( !defined(MBEDTLS_BIGNUM_C) || \
|
||||||
!defined(MBEDTLS_OID_C) )
|
!defined(MBEDTLS_OID_C) )
|
||||||
#error "MBEDTLS_RSA_C defined, but not all prerequisites"
|
#error "MBEDTLS_RSA_C defined, but not all prerequisites"
|
||||||
|
|
|
@ -156,6 +156,7 @@
|
||||||
//#define MBEDTLS_PLATFORM_FPRINTF_ALT
|
//#define MBEDTLS_PLATFORM_FPRINTF_ALT
|
||||||
//#define MBEDTLS_PLATFORM_PRINTF_ALT
|
//#define MBEDTLS_PLATFORM_PRINTF_ALT
|
||||||
//#define MBEDTLS_PLATFORM_SNPRINTF_ALT
|
//#define MBEDTLS_PLATFORM_SNPRINTF_ALT
|
||||||
|
//#define MBEDTLS_PLATFORM_NV_SEED_ALT
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \def MBEDTLS_DEPRECATED_WARNING
|
* \def MBEDTLS_DEPRECATED_WARNING
|
||||||
|
@ -799,6 +800,25 @@
|
||||||
*/
|
*/
|
||||||
//#define MBEDTLS_ENTROPY_FORCE_SHA256
|
//#define MBEDTLS_ENTROPY_FORCE_SHA256
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \def MBEDTLS_ENTROPY_NV_SEED
|
||||||
|
*
|
||||||
|
* Enable the non-volatile (NV) seed file-based entropy source.
|
||||||
|
* (Also enables the NV seed read/write functions in the platform layer)
|
||||||
|
*
|
||||||
|
* This is crucial (if not required) on systems that do not have a
|
||||||
|
* cryptographic entropy source (in hardware or kernel) available.
|
||||||
|
*
|
||||||
|
* Requires: MBEDTLS_ENTROPY_C, MBEDTLS_PLATFORM_C
|
||||||
|
*
|
||||||
|
* Note: If you use the default implementation functions that read a seedfile
|
||||||
|
* with regular fopen(), please make sure you make a seedfile with the
|
||||||
|
* proper name (defined in MBEDTLS_PLATFORM_STD_NV_SEED_FILE) and at
|
||||||
|
* least MBEDTLS_ENTROPY_BLOCK_SIZE bytes in size that can be read from
|
||||||
|
* and written to or you will get an entropy source error!
|
||||||
|
*/
|
||||||
|
//#define MBEDTLS_ENTROPY_NV_SEED
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \def MBEDTLS_MEMORY_DEBUG
|
* \def MBEDTLS_MEMORY_DEBUG
|
||||||
*
|
*
|
||||||
|
@ -2473,6 +2493,9 @@
|
||||||
//#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< Default snprintf to use, can be undefined */
|
//#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< Default snprintf to use, can be undefined */
|
||||||
//#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS 0 /**< Default exit value to use, can be undefined */
|
//#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS 0 /**< Default exit value to use, can be undefined */
|
||||||
//#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE 1 /**< Default exit value to use, can be undefined */
|
//#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE 1 /**< Default exit value to use, can be undefined */
|
||||||
|
//#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */
|
||||||
|
//#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */
|
||||||
|
//#define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile" /**< Seed file to read/write with default implementation */
|
||||||
|
|
||||||
/* To Use Function Macros MBEDTLS_PLATFORM_C must be enabled */
|
/* To Use Function Macros MBEDTLS_PLATFORM_C must be enabled */
|
||||||
/* MBEDTLS_PLATFORM_XXX_MACRO and MBEDTLS_PLATFORM_XXX_ALT cannot both be defined */
|
/* MBEDTLS_PLATFORM_XXX_MACRO and MBEDTLS_PLATFORM_XXX_ALT cannot both be defined */
|
||||||
|
@ -2485,6 +2508,8 @@
|
||||||
//#define MBEDTLS_PLATFORM_PRINTF_MACRO printf /**< Default printf macro to use, can be undefined */
|
//#define MBEDTLS_PLATFORM_PRINTF_MACRO printf /**< Default printf macro to use, can be undefined */
|
||||||
/* Note: your snprintf must correclty zero-terminate the buffer! */
|
/* Note: your snprintf must correclty zero-terminate the buffer! */
|
||||||
//#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf /**< Default snprintf macro to use, can be undefined */
|
//#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf /**< Default snprintf macro to use, can be undefined */
|
||||||
|
//#define MBEDTLS_PLATFORM_NV_SEED_READ_MACRO mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */
|
||||||
|
//#define MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */
|
||||||
|
|
||||||
/* SSL Cache options */
|
/* SSL Cache options */
|
||||||
//#define MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */
|
//#define MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* \brief mbed TLS Platform abstraction layer
|
* \brief mbed TLS Platform abstraction layer
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
* Copyright (C) 2006-2016, ARM Limited, All Rights Reserved
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
@ -76,12 +76,22 @@ extern "C" {
|
||||||
#if !defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE)
|
#if !defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE)
|
||||||
#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE EXIT_FAILURE /**< Default exit value to use */
|
#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE EXIT_FAILURE /**< Default exit value to use */
|
||||||
#endif
|
#endif
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ)
|
||||||
|
#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read
|
||||||
|
#endif
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE)
|
||||||
|
#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write
|
||||||
|
#endif
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_FILE)
|
||||||
|
#define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile"
|
||||||
|
#endif
|
||||||
#else /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */
|
#else /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */
|
||||||
#if defined(MBEDTLS_PLATFORM_STD_MEM_HDR)
|
#if defined(MBEDTLS_PLATFORM_STD_MEM_HDR)
|
||||||
#include MBEDTLS_PLATFORM_STD_MEM_HDR
|
#include MBEDTLS_PLATFORM_STD_MEM_HDR
|
||||||
#endif
|
#endif
|
||||||
#endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */
|
#endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */
|
||||||
|
|
||||||
|
|
||||||
/* \} name SECTION: Module settings */
|
/* \} name SECTION: Module settings */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -262,6 +272,47 @@ int mbedtls_platform_set_time( mbedtls_time_t (*time_func)( mbedtls_time_t* time
|
||||||
#endif /* MBEDTLS_PLATFORM_TIME_MACRO */
|
#endif /* MBEDTLS_PLATFORM_TIME_MACRO */
|
||||||
#endif /* MBEDTLS_PLATFORM_TIME_ALT */
|
#endif /* MBEDTLS_PLATFORM_TIME_ALT */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The function pointers for reading from and writing a seed file to
|
||||||
|
* Non-Volatile storage (NV) in a platform-independent way
|
||||||
|
*
|
||||||
|
* Only enabled when the NV seed entropy source is enabled
|
||||||
|
*/
|
||||||
|
#if defined(MBEDTLS_ENTROPY_NV_SEED)
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) && defined(MBEDTLS_FS_IO)
|
||||||
|
/* Internal standard platform definitions */
|
||||||
|
int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len );
|
||||||
|
int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT)
|
||||||
|
extern int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len );
|
||||||
|
extern int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Set your own seed file writing/reading functions
|
||||||
|
*
|
||||||
|
* \param nv_seed_read_func the seed reading function implementation
|
||||||
|
* \param nv_seed_write_func the seed writing function implementation
|
||||||
|
*
|
||||||
|
* \return 0
|
||||||
|
*/
|
||||||
|
int mbedtls_platform_set_nv_seed(
|
||||||
|
int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ),
|
||||||
|
int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len )
|
||||||
|
);
|
||||||
|
#else
|
||||||
|
#if defined(MBEDTLS_PLATFORM_NV_SEED_READ_MACRO) && \
|
||||||
|
defined(MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO)
|
||||||
|
#define mbedtls_nv_seed_read MBEDTLS_PLATFORM_NV_SEED_READ_MACRO
|
||||||
|
#define mbedtls_nv_seed_write MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO
|
||||||
|
#else
|
||||||
|
#define mbedtls_nv_seed_read mbedtls_platform_std_nv_seed_read
|
||||||
|
#define mbedtls_nv_seed_write mbedtls_platform_std_nv_seed_write
|
||||||
|
#endif
|
||||||
|
#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */
|
||||||
|
#endif /* MBEDTLS_ENTROPY_NV_SEED */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Platform abstraction layer
|
* Platform abstraction layer
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
* Copyright (C) 2006-2016, ARM Limited, All Rights Reserved
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
@ -213,4 +213,91 @@ int mbedtls_platform_set_time( mbedtls_time_t (*time_func)( mbedtls_time_t* time
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_PLATFORM_TIME_ALT */
|
#endif /* MBEDTLS_PLATFORM_TIME_ALT */
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_ENTROPY_NV_SEED)
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) && defined(MBEDTLS_FS_IO)
|
||||||
|
/* Default implementations for the platform independent seed functions use
|
||||||
|
* standard libc file functions to read from and write to a pre-defined filename
|
||||||
|
*/
|
||||||
|
int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len )
|
||||||
|
{
|
||||||
|
FILE *file;
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
if( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "rb" ) ) == NULL )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if( ( n = fread( buf, 1, buf_len, file ) ) != buf_len )
|
||||||
|
{
|
||||||
|
fclose( file );
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose( file );
|
||||||
|
return( n );
|
||||||
|
}
|
||||||
|
|
||||||
|
int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len )
|
||||||
|
{
|
||||||
|
FILE *file;
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
if( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "w" ) ) == NULL )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if( ( n = fwrite( buf, 1, buf_len, file ) ) != buf_len )
|
||||||
|
{
|
||||||
|
fclose( file );
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose( file );
|
||||||
|
return( n );
|
||||||
|
}
|
||||||
|
#endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT)
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ)
|
||||||
|
/*
|
||||||
|
* Make dummy function to prevent NULL pointer dereferences
|
||||||
|
*/
|
||||||
|
static int platform_nv_seed_read_uninit( unsigned char *buf, size_t buf_len )
|
||||||
|
{
|
||||||
|
((void) buf);
|
||||||
|
((void) buf_len);
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MBEDTLS_PLATFORM_STD_NV_SEED_READ platform_nv_seed_read_uninit
|
||||||
|
#endif /* !MBEDTLS_PLATFORM_STD_NV_SEED_READ */
|
||||||
|
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE)
|
||||||
|
/*
|
||||||
|
* Make dummy function to prevent NULL pointer dereferences
|
||||||
|
*/
|
||||||
|
static int platform_nv_seed_write_uninit( unsigned char *buf, size_t buf_len )
|
||||||
|
{
|
||||||
|
((void) buf);
|
||||||
|
((void) buf_len);
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE platform_nv_seed_write_uninit
|
||||||
|
#endif /* !MBEDTLS_PLATFORM_STD_NV_SEED_WRITE */
|
||||||
|
|
||||||
|
int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len ) =
|
||||||
|
MBEDTLS_PLATFORM_STD_NV_SEED_READ;
|
||||||
|
int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len ) =
|
||||||
|
MBEDTLS_PLATFORM_STD_NV_SEED_WRITE;
|
||||||
|
|
||||||
|
int mbedtls_platform_set_nv_seed(
|
||||||
|
int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ),
|
||||||
|
int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len ) )
|
||||||
|
{
|
||||||
|
mbedtls_nv_seed_read = nv_seed_read_func;
|
||||||
|
mbedtls_nv_seed_write = nv_seed_write_func;
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */
|
||||||
|
#endif /* MBEDTLS_ENTROPY_NV_SEED */
|
||||||
|
|
||||||
#endif /* MBEDTLS_PLATFORM_C */
|
#endif /* MBEDTLS_PLATFORM_C */
|
||||||
|
|
Loading…
Reference in a new issue