mirror of https://github.com/ARMmbed/mbed-os.git
Apply feedback by @Patater
parent
2f02a23ac0
commit
1dc3941a5f
|
@ -69,13 +69,13 @@
|
|||
#define ECC_BIGINT_SIZE_IN_BITS (256)
|
||||
#define ECC_BIGINT_SIZE_IN_BYTES (ECC_BIGINT_SIZE_IN_BITS/8)
|
||||
#define ECC_BIGINT_SIZE_IN_32BIT_WORDS (ECC_BIGINT_SIZE_IN_BYTES/sizeof(uint32_t))
|
||||
#define EC_BIGINT_COPY(X, Y) memcpy(X, Y, sizeof(ecc_bigint_t));
|
||||
#define EC_BIGINT_COPY(X, Y) memcpy((X), (Y), sizeof(ecc_bigint_t));
|
||||
typedef uint32_t ecc_bigint_t[ECC_BIGINT_SIZE_IN_32BIT_WORDS];
|
||||
|
||||
#define SLCL_ECP_CHK(f) do { if( ( ret = f ) != 0 ) goto cleanup; } while( 0 )
|
||||
#define SLCL_ECP_CHK(f) do { if( ( ret = (f) ) != 0 ) goto cleanup; } while( 0 )
|
||||
|
||||
#if defined(MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT) || defined(MBEDTLS_ECP_NORMALIZE_JAC_ALT)
|
||||
#define MPI_TO_BIGINT(bigint, mpi) mpitobigint(bigint, mpi);
|
||||
#define MPI_TO_BIGINT(bigint, mpi) mpitobigint((bigint), (mpi));
|
||||
|
||||
/***************************************************************************//**
|
||||
* @brief
|
||||
|
@ -85,14 +85,17 @@ __STATIC_INLINE void mpitobigint( ecc_bigint_t bigint, const mbedtls_mpi* mpi )
|
|||
{
|
||||
uint32_t* bi = bigint;
|
||||
|
||||
if ( mpi->n < 8 )
|
||||
if ( mpi->n < ECC_BIGINT_SIZE_IN_32BIT_WORDS )
|
||||
{
|
||||
memcpy(bigint, mpi->p, mpi->n * sizeof(uint32_t));
|
||||
memset(&bi[mpi->n], 0, sizeof(ecc_bigint_t) - mpi->n * sizeof(uint32_t));
|
||||
memset(&bi[mpi->n],
|
||||
0,
|
||||
ECC_BIGINT_SIZE_IN_BYTES - ( mpi->n * sizeof(uint32_t) ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(bigint, mpi->p, 8 * sizeof(uint32_t));
|
||||
/* mpi has more room than bigint, so only store up to sizeof(bigint) */
|
||||
memcpy(bigint, mpi->p, ECC_BIGINT_SIZE_IN_BYTES);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,7 +140,7 @@ __STATIC_INLINE bool crypto_ddata0_is_zero(CRYPTO_TypeDef* crypto,
|
|||
*
|
||||
* @return N/A
|
||||
******************************************************************************/
|
||||
static void mbedtls_mpi_div_mod(CRYPTO_TypeDef *crypto,
|
||||
static void crypto_mpi_div_mod(CRYPTO_TypeDef *crypto,
|
||||
ecc_bigint_t X,
|
||||
ecc_bigint_t Y,
|
||||
ecc_bigint_t N,
|
||||
|
@ -381,7 +384,7 @@ static void mbedtls_mpi_div_mod(CRYPTO_TypeDef *crypto,
|
|||
CORE_EXIT_CRITICAL();
|
||||
}
|
||||
return;
|
||||
} /* mbedtls_mpi_div_mod */
|
||||
} /* crypto_mpi_div_mod */
|
||||
#endif /* MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT || MBEDTLS_ECP_NORMALIZE_JAC_ALT */
|
||||
|
||||
/***************************************************************************//**
|
||||
|
@ -1509,7 +1512,7 @@ int mbedtls_internal_ecp_normalize_jac_many( const mbedtls_ecp_group *grp,
|
|||
/*
|
||||
* u = 1 / (Z_0 * ... * Z_n) mod P
|
||||
*/
|
||||
mbedtls_mpi_div_mod(crypto, one, cc[t_len-1], modulus, uu);
|
||||
crypto_mpi_div_mod(crypto, one, cc[t_len-1], modulus, uu);
|
||||
|
||||
for( i = t_len - 1; ; i-- )
|
||||
{
|
||||
|
@ -1638,7 +1641,7 @@ int mbedtls_internal_ecp_normalize_jac( const mbedtls_ecp_group *grp,
|
|||
MPI_TO_BIGINT( Z, &pt->Z );
|
||||
MPI_TO_BIGINT( modulus, &grp->P );
|
||||
|
||||
mbedtls_mpi_div_mod(crypto, one, Z, modulus, Z_inv);
|
||||
crypto_mpi_div_mod(crypto, one, Z, modulus, Z_inv);
|
||||
|
||||
/*
|
||||
|
||||
|
|
|
@ -22,6 +22,13 @@
|
|||
#include "em_bus.h"
|
||||
|
||||
#if defined( CRYPTO_PRESENT )
|
||||
|
||||
/* Conversion macro for compatibility with the 5.3.x release of the Gecko SDK */
|
||||
#if defined( MBEDTLS_CRYPTO_DEVICE_PREEMPTION )
|
||||
#warning "MBEDTLS_CRYPTO_DEVICE_PREEMPTION is deprecated, please define " \
|
||||
"CRYPTO_DEVICE_PREEMPTION instead."
|
||||
#endif
|
||||
|
||||
#if defined( MBEDTLS_THREADING_C )
|
||||
#include "mbedtls/threading.h"
|
||||
static mbedtls_threading_mutex_t crypto_locks[CRYPTO_COUNT];
|
||||
|
@ -29,7 +36,7 @@ static volatile bool crypto_locks_initialized = false;
|
|||
static unsigned int acquire_count = 0U;
|
||||
#endif /* MBEDTLS_THREADING_C */
|
||||
|
||||
#if defined( MBEDTLS_CRYPTO_DEVICE_PREEMPTION )
|
||||
#if defined( CRYPTO_DEVICE_PREEMPTION )
|
||||
/** Preemptable context of CRYPTO hardware module. */
|
||||
typedef struct
|
||||
{
|
||||
|
@ -52,7 +59,7 @@ typedef struct
|
|||
static crypto_context_t preemption_context;
|
||||
static bool is_preempted = false;
|
||||
static CORE_DECLARE_IRQ_STATE;
|
||||
#endif /* MBEDTLS_CRYPTO_DEVICE_PREEMPTION */
|
||||
#endif /* CRYPTO_DEVICE_PREEMPTION */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
@ -106,9 +113,9 @@ static inline int crypto_management_index_by_device( CRYPTO_TypeDef *device )
|
|||
}
|
||||
|
||||
/* Use bitband for clock enable/disable operations, such that they are atomic */
|
||||
#define CRYPTO_CLOCK_ENABLE(clk) BUS_RegBitWrite(&(CMU->HFBUSCLKEN0), clk, 1)
|
||||
#define CRYPTO_CLOCK_DISABLE(clk) BUS_RegBitWrite(&(CMU->HFBUSCLKEN0), clk, 0)
|
||||
#define CRYPTO_CLOCK_ENABLED(clk) BUS_RegBitRead(&(CMU->HFBUSCLKEN0), clk)
|
||||
#define CRYPTO_CLOCK_ENABLE(clk) BUS_RegBitWrite(&(CMU->HFBUSCLKEN0), (clk), 1)
|
||||
#define CRYPTO_CLOCK_DISABLE(clk) BUS_RegBitWrite(&(CMU->HFBUSCLKEN0), (clk), 0)
|
||||
#define CRYPTO_CLOCK_ENABLED(clk) BUS_RegBitRead(&(CMU->HFBUSCLKEN0), (clk))
|
||||
|
||||
/* Get ownership of an available crypto device */
|
||||
CRYPTO_TypeDef *crypto_management_acquire( void )
|
||||
|
@ -130,6 +137,9 @@ CRYPTO_TypeDef *crypto_management_acquire( void )
|
|||
CORE_EXIT_CRITICAL();
|
||||
}
|
||||
|
||||
/* Wrapping this in SL_THREADING_ALT pending non-blocking mutex in official
|
||||
* threading API. */
|
||||
#if defined( SL_THREADING_ALT )
|
||||
/* Try to take an available crypto instance */
|
||||
unsigned int devno = 0;
|
||||
for ( ; devno < CRYPTO_COUNT; devno++ ) {
|
||||
|
@ -138,6 +148,7 @@ CRYPTO_TypeDef *crypto_management_acquire( void )
|
|||
break;
|
||||
}
|
||||
}
|
||||
#endif // SL_THREADING_ALT
|
||||
|
||||
/* If no device immediately available, do naieve round-robin */
|
||||
if ( device == NULL ) {
|
||||
|
@ -213,7 +224,7 @@ void crypto_management_release( CRYPTO_TypeDef *device )
|
|||
/* Acquire a device with preemption. NOT thread-safe! */
|
||||
CRYPTO_TypeDef *crypto_management_acquire_preemption( uint32_t regmask )
|
||||
{
|
||||
#if defined( MBEDTLS_CRYPTO_DEVICE_PREEMPTION )
|
||||
#if defined( CRYPTO_DEVICE_PREEMPTION )
|
||||
CRYPTO_TypeDef *device = NULL;
|
||||
/* Turn off interrupts */
|
||||
CORE_ENTER_CRITICAL();
|
||||
|
@ -309,7 +320,7 @@ void crypto_management_release_preemption( CRYPTO_TypeDef *device )
|
|||
if ( crypto_management_index_by_device( device ) < 0 ) {
|
||||
return;
|
||||
}
|
||||
#if defined( MBEDTLS_CRYPTO_DEVICE_PREEMPTION )
|
||||
#if defined( CRYPTO_DEVICE_PREEMPTION )
|
||||
|
||||
if ( is_preempted ) {
|
||||
/* If we preempted something, put their context back */
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef MBEDTLS_CRYPTO_MANAGEMENT_H
|
||||
#define MBEDTLS_CRYPTO_MANAGEMENT_H
|
||||
#ifndef CRYPTO_MANAGEMENT_H
|
||||
#define CRYPTO_MANAGEMENT_H
|
||||
|
||||
/***************************************************************************//**
|
||||
* \addtogroup sl_crypto
|
||||
|
@ -125,4 +125,4 @@ void crypto_management_release_preemption( CRYPTO_TypeDef *device );
|
|||
/** \} (end addtogroup sl_crypto_management) */
|
||||
/** \} (end addtogroup sl_crypto) */
|
||||
|
||||
#endif /* MBEDTLS_CRYPTO_MANAGEMENT_H */
|
||||
#endif /* CRYPTO_MANAGEMENT_H */
|
|
@ -51,6 +51,8 @@
|
|||
#include "em_assert.h"
|
||||
#include <string.h>
|
||||
|
||||
#define CRYPTO_SHA_BLOCK_SIZE (64)
|
||||
|
||||
#if defined(MBEDTLS_SHA1_C)
|
||||
static const uint32_t init_state_sha1[8] =
|
||||
{
|
||||
|
@ -173,10 +175,10 @@ static void crypto_sha_update_state( uint32_t state[8],
|
|||
|
||||
/* Load the data block(s) */
|
||||
for ( size_t i = 0; i < blocks; i++ ) {
|
||||
if ((uint32_t)(&data[i*64]) & 0x3)
|
||||
if ((uint32_t)(&data[i*CRYPTO_SHA_BLOCK_SIZE]) & 0x3)
|
||||
{
|
||||
uint32_t temp[16];
|
||||
memcpy(temp, &data[i*64], 64);
|
||||
uint32_t temp[CRYPTO_SHA_BLOCK_SIZE/sizeof(uint32_t)];
|
||||
memcpy(temp, &data[i*CRYPTO_SHA_BLOCK_SIZE], CRYPTO_SHA_BLOCK_SIZE);
|
||||
CORE_ENTER_CRITICAL();
|
||||
CRYPTO_QDataWrite(&crypto->QDATA1BIG, temp);
|
||||
CORE_EXIT_CRITICAL();
|
||||
|
@ -184,7 +186,8 @@ static void crypto_sha_update_state( uint32_t state[8],
|
|||
else
|
||||
{
|
||||
CORE_ENTER_CRITICAL();
|
||||
CRYPTO_QDataWrite(&crypto->QDATA1BIG, (uint32_t*) &data[i*64]);
|
||||
CRYPTO_QDataWrite(&crypto->QDATA1BIG,
|
||||
(uint32_t*) &data[i*CRYPTO_SHA_BLOCK_SIZE]);
|
||||
CORE_EXIT_CRITICAL();
|
||||
}
|
||||
|
||||
|
@ -238,14 +241,15 @@ void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 )
|
|||
|
||||
if ( is224 != 0 ) {
|
||||
ctx->is224 = true;
|
||||
memcpy(ctx->state, init_state_sha224, 32);
|
||||
memcpy(ctx->state, init_state_sha224, sizeof(ctx->state));
|
||||
} else {
|
||||
ctx->is224 = false;
|
||||
memcpy(ctx->state, init_state_sha256, 32);
|
||||
memcpy(ctx->state, init_state_sha256, sizeof(ctx->state));
|
||||
}
|
||||
}
|
||||
|
||||
void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char data[64] )
|
||||
void mbedtls_sha256_process( mbedtls_sha256_context *ctx,
|
||||
const unsigned char data[64] )
|
||||
{
|
||||
crypto_sha_update_state( ctx->state, data, 1, CRYPTO_SHA2 );
|
||||
}
|
||||
|
@ -253,7 +257,8 @@ void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char da
|
|||
/*
|
||||
* SHA-256 process buffer
|
||||
*/
|
||||
void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *input,
|
||||
void mbedtls_sha256_update( mbedtls_sha256_context *ctx,
|
||||
const unsigned char *input,
|
||||
size_t ilen )
|
||||
{
|
||||
size_t fill;
|
||||
|
@ -296,7 +301,8 @@ void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *in
|
|||
/*
|
||||
* SHA-256 final digest
|
||||
*/
|
||||
void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32] )
|
||||
void mbedtls_sha256_finish( mbedtls_sha256_context *ctx,
|
||||
unsigned char output[32] )
|
||||
{
|
||||
uint32_t last, padn;
|
||||
uint32_t high, low;
|
||||
|
|
|
@ -2314,13 +2314,14 @@
|
|||
"EFM32": {
|
||||
"inherits": ["Target"],
|
||||
"extra_labels": ["Silicon_Labs", "EFM32"],
|
||||
"macros": ["MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"public": false
|
||||
},
|
||||
"EFM32GG990F1024": {
|
||||
"inherits": ["EFM32"],
|
||||
"extra_labels_add": ["EFM32GG", "1024K", "SL_AES"],
|
||||
"core": "Cortex-M3",
|
||||
"macros": ["EFM32GG990F1024", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"macros_add": ["EFM32GG990F1024", "TRANSACTION_QUEUE_SIZE_SPI=4"],
|
||||
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
|
||||
"release_versions": ["2", "5"],
|
||||
"device_name": "EFM32GG990F1024",
|
||||
|
@ -2374,7 +2375,7 @@
|
|||
"inherits": ["EFM32"],
|
||||
"extra_labels_add": ["EFM32LG", "256K", "SL_AES"],
|
||||
"core": "Cortex-M3",
|
||||
"macros": ["EFM32LG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"macros_add": ["EFM32LG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4"],
|
||||
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
|
||||
"release_versions": ["2", "5"],
|
||||
"device_name": "EFM32LG990F256",
|
||||
|
@ -2428,7 +2429,7 @@
|
|||
"inherits": ["EFM32"],
|
||||
"extra_labels_add": ["EFM32WG", "256K", "SL_AES"],
|
||||
"core": "Cortex-M4F",
|
||||
"macros": ["EFM32WG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"macros_add": ["EFM32WG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4"],
|
||||
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
|
||||
"release_versions": ["2", "5"],
|
||||
"device_name": "EFM32WG990F256",
|
||||
|
@ -2483,7 +2484,7 @@
|
|||
"extra_labels_add": ["EFM32ZG", "32K", "SL_AES"],
|
||||
"core": "Cortex-M0+",
|
||||
"default_toolchain": "uARM",
|
||||
"macros": ["EFM32ZG222F32", "TRANSACTION_QUEUE_SIZE_SPI=0", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"macros_add": ["EFM32ZG222F32", "TRANSACTION_QUEUE_SIZE_SPI=0"],
|
||||
"supported_toolchains": ["GCC_ARM", "uARM", "IAR"],
|
||||
"default_lib": "small",
|
||||
"release_versions": ["2"],
|
||||
|
@ -2537,7 +2538,7 @@
|
|||
"extra_labels_add": ["EFM32HG", "64K", "SL_AES"],
|
||||
"core": "Cortex-M0+",
|
||||
"default_toolchain": "uARM",
|
||||
"macros": ["EFM32HG322F64", "TRANSACTION_QUEUE_SIZE_SPI=0", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"macros_add": ["EFM32HG322F64", "TRANSACTION_QUEUE_SIZE_SPI=0"],
|
||||
"supported_toolchains": ["GCC_ARM", "uARM", "IAR"],
|
||||
"default_lib": "small",
|
||||
"release_versions": ["2"],
|
||||
|
@ -2590,7 +2591,7 @@
|
|||
"inherits": ["EFM32"],
|
||||
"extra_labels_add": ["EFM32PG", "256K", "SL_CRYPTO"],
|
||||
"core": "Cortex-M4F",
|
||||
"macros": ["EFM32PG1B100F256GM32", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"macros_add": ["EFM32PG1B100F256GM32", "TRANSACTION_QUEUE_SIZE_SPI=4"],
|
||||
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
|
||||
"release_versions": ["2", "5"],
|
||||
"device_name": "EFM32PG1B100F256GM32",
|
||||
|
@ -2643,7 +2644,7 @@
|
|||
"inherits": ["EFM32"],
|
||||
"extra_labels_add": ["EFR32MG1", "256K", "SL_RAIL", "SL_CRYPTO"],
|
||||
"core": "Cortex-M4F",
|
||||
"macros": ["EFR32MG1P132F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"macros_add": ["EFR32MG1P132F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4"],
|
||||
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
|
||||
"release_versions": ["2", "5"],
|
||||
"device_name": "EFR32MG1P132F256GM48",
|
||||
|
@ -2654,7 +2655,7 @@
|
|||
"inherits": ["EFM32"],
|
||||
"extra_labels_add": ["EFR32MG1", "256K", "SL_RAIL", "SL_CRYPTO"],
|
||||
"core": "Cortex-M4F",
|
||||
"macros": ["EFR32MG1P233F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"macros_add": ["EFR32MG1P233F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4"],
|
||||
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
|
||||
"release_versions": ["2", "5"],
|
||||
"public": false,
|
||||
|
@ -2744,7 +2745,7 @@
|
|||
"inherits": ["EFM32"],
|
||||
"extra_labels_add": ["EFM32PG12", "1024K", "SL_CRYPTO"],
|
||||
"core": "Cortex-M4F",
|
||||
"macros": ["EFM32PG12B500F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"macros_add": ["EFM32PG12B500F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4"],
|
||||
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
|
||||
"release_versions": ["2", "5"],
|
||||
"public": false,
|
||||
|
@ -2794,9 +2795,9 @@
|
|||
},
|
||||
"EFR32MG12P332F1024GL125": {
|
||||
"inherits": ["EFM32"],
|
||||
"extra_labels_add": ["EFR32MG12", "1024K", "SL_RAIL", "SL_CRYPTO", "MBEDTLS_CONFIG_HW_SUPPORT"],
|
||||
"extra_labels_add": ["EFR32MG12", "1024K", "SL_RAIL", "SL_CRYPTO"],
|
||||
"core": "Cortex-M4F",
|
||||
"macros": ["EFR32MG12P332F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4"],
|
||||
"macros_add": ["EFR32MG12P332F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4"],
|
||||
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
|
||||
"release_versions": ["2", "5"],
|
||||
"public": false,
|
||||
|
|
Loading…
Reference in New Issue