mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-26 04:45:44 +01:00
Merge pull request #3390 from piotr-now/rndelay_comment
Add comment for mbedtls_platform_random_delay() and returning an FAULT_DETECTED error on potential FI attack detection
This commit is contained in:
commit
c520b90507
@ -46,10 +46,9 @@
|
|||||||
#endif /* MBEDTLS_USE_TINYCRYPT */
|
#endif /* MBEDTLS_USE_TINYCRYPT */
|
||||||
|
|
||||||
#include "mbedtls/platform_util.h"
|
#include "mbedtls/platform_util.h"
|
||||||
|
|
||||||
#if defined(MBEDTLS_PLATFORM_C)
|
|
||||||
#include "mbedtls/platform.h"
|
#include "mbedtls/platform.h"
|
||||||
#else
|
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_C)
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#define mbedtls_calloc calloc
|
#define mbedtls_calloc calloc
|
||||||
#define mbedtls_free free
|
#define mbedtls_free free
|
||||||
@ -1561,7 +1560,7 @@ int mbedtls_pk_verify_restartable( mbedtls_pk_context *ctx,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
verify_ret = MBEDTLS_ERR_PK_HW_ACCEL_FAILED;
|
verify_ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,6 +190,9 @@ void mbedtls_platform_random_delay( void )
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
i++;
|
i++;
|
||||||
|
/* Dummy calculations to increase the time between iterations and
|
||||||
|
* make side channel attack more difficult by reducing predictability
|
||||||
|
* of its behaviour */
|
||||||
shift = rn_2 & 0x07;
|
shift = rn_2 & 0x07;
|
||||||
if ( i % 2 )
|
if ( i % 2 )
|
||||||
rn_2 = (uint32_t)( rn_2 >> shift | rn_2 << ( 32 - shift ) );
|
rn_2 = (uint32_t)( rn_2 >> shift | rn_2 << ( 32 - shift ) );
|
||||||
|
@ -27,9 +27,9 @@
|
|||||||
|
|
||||||
#if defined(MBEDTLS_SSL_CLI_C)
|
#if defined(MBEDTLS_SSL_CLI_C)
|
||||||
|
|
||||||
#if defined(MBEDTLS_PLATFORM_C)
|
|
||||||
#include "mbedtls/platform.h"
|
#include "mbedtls/platform.h"
|
||||||
#else
|
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_C)
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#define mbedtls_calloc calloc
|
#define mbedtls_calloc calloc
|
||||||
#define mbedtls_free free
|
#define mbedtls_free free
|
||||||
@ -724,6 +724,10 @@ static int ssl_generate_random( mbedtls_ssl_context *ssl )
|
|||||||
ssl->handshake->hello_random_set = MBEDTLS_SSL_FI_FLAG_SET;
|
ssl->handshake->hello_random_set = MBEDTLS_SSL_FI_FLAG_SET;
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return( ret );
|
return( ret );
|
||||||
@ -2388,6 +2392,10 @@ static int ssl_rsa_generate_partial_pms( mbedtls_ssl_context *ssl,
|
|||||||
ssl->handshake->premaster_generated = MBEDTLS_SSL_FI_FLAG_SET;
|
ssl->handshake->premaster_generated = MBEDTLS_SSL_FI_FLAG_SET;
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "f_rng", ret );
|
MBEDTLS_SSL_DEBUG_RET( 1, "f_rng", ret );
|
||||||
@ -2460,6 +2468,12 @@ static int ssl_rsa_encrypt_partial_pms( mbedtls_ssl_context *ssl,
|
|||||||
{
|
{
|
||||||
ssl->handshake->premaster_generated = MBEDTLS_SSL_FI_FLAG_SET;
|
ssl->handshake->premaster_generated = MBEDTLS_SSL_FI_FLAG_SET;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_rsa_pkcs1_encrypt", ret );
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3101,7 +3115,7 @@ static int ssl_in_server_key_exchange_parse( mbedtls_ssl_context *ssl,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
return( MBEDTLS_ERR_PLATFORM_FAULT_DETECTED );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(MBEDTLS_SSL__ECP_RESTARTABLE)
|
#if defined(MBEDTLS_SSL__ECP_RESTARTABLE)
|
||||||
|
@ -27,9 +27,9 @@
|
|||||||
|
|
||||||
#if defined(MBEDTLS_SSL_SRV_C)
|
#if defined(MBEDTLS_SSL_SRV_C)
|
||||||
|
|
||||||
#if defined(MBEDTLS_PLATFORM_C)
|
|
||||||
#include "mbedtls/platform.h"
|
#include "mbedtls/platform.h"
|
||||||
#else
|
|
||||||
|
#if !defined(MBEDTLS_PLATFORM_C)
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#define mbedtls_calloc calloc
|
#define mbedtls_calloc calloc
|
||||||
#define mbedtls_free free
|
#define mbedtls_free free
|
||||||
@ -4659,6 +4659,10 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl )
|
|||||||
MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate verify" ) );
|
MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate verify" ) );
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2027,8 +2027,9 @@ int mbedtls_ssl_build_pms( mbedtls_ssl_context *ssl )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret );
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret",
|
||||||
return( ret );
|
MBEDTLS_ERR_PLATFORM_FAULT_DETECTED );
|
||||||
|
return( MBEDTLS_ERR_PLATFORM_FAULT_DETECTED );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2936,7 +2936,7 @@ static int x509_crt_check_parent( const mbedtls_x509_crt_sig_info *sig_info,
|
|||||||
*
|
*
|
||||||
* Return value:
|
* Return value:
|
||||||
* - 0 on success
|
* - 0 on success
|
||||||
* - MBEDTLS_ERR_ECP_IN_PROGRESS otherwise
|
* - MBEDTLS_ERR_ECP_IN_PROGRESS or MBEDTLS_ERR_PLATFORM_FAULT_DETECTED otherwise
|
||||||
*/
|
*/
|
||||||
static int x509_crt_find_parent_in(
|
static int x509_crt_find_parent_in(
|
||||||
mbedtls_x509_crt_sig_info const *child_sig,
|
mbedtls_x509_crt_sig_info const *child_sig,
|
||||||
@ -3051,6 +3051,8 @@ check_signature:
|
|||||||
mbedtls_platform_random_delay();
|
mbedtls_platform_random_delay();
|
||||||
if( ret_fi == 0 )
|
if( ret_fi == 0 )
|
||||||
signature_is_good = X509_SIGNATURE_IS_GOOD;
|
signature_is_good = X509_SIGNATURE_IS_GOOD;
|
||||||
|
else
|
||||||
|
return( MBEDTLS_ERR_PLATFORM_FAULT_DETECTED );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( top && ! signature_is_good )
|
if( top && ! signature_is_good )
|
||||||
@ -3869,6 +3871,8 @@ exit:
|
|||||||
mbedtls_platform_random_delay();
|
mbedtls_platform_random_delay();
|
||||||
if( flags_fi == 0 )
|
if( flags_fi == 0 )
|
||||||
return( 0 );
|
return( 0 );
|
||||||
|
else
|
||||||
|
return( MBEDTLS_ERR_PLATFORM_FAULT_DETECTED );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Preserve the API by removing internal extra bits - from now on the
|
/* Preserve the API by removing internal extra bits - from now on the
|
||||||
|
Loading…
Reference in New Issue
Block a user