Skip to content

Commit 8657958

Browse files
stevew817adbridge
authored andcommitted
Apply feedback by @Patater
1 parent c6a6585 commit 8657958

File tree

5 files changed

+66
-45
lines changed

5 files changed

+66
-45
lines changed

features/mbedtls/targets/TARGET_Silicon_Labs/crypto_ecp.c

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,13 @@
6969
#define ECC_BIGINT_SIZE_IN_BITS (256)
7070
#define ECC_BIGINT_SIZE_IN_BYTES (ECC_BIGINT_SIZE_IN_BITS/8)
7171
#define ECC_BIGINT_SIZE_IN_32BIT_WORDS (ECC_BIGINT_SIZE_IN_BYTES/sizeof(uint32_t))
72-
#define EC_BIGINT_COPY(X, Y) memcpy(X, Y, sizeof(ecc_bigint_t));
72+
#define EC_BIGINT_COPY(X, Y) memcpy((X), (Y), sizeof(ecc_bigint_t));
7373
typedef uint32_t ecc_bigint_t[ECC_BIGINT_SIZE_IN_32BIT_WORDS];
7474

75-
#define SLCL_ECP_CHK(f) do { if( ( ret = f ) != 0 ) goto cleanup; } while( 0 )
75+
#define SLCL_ECP_CHK(f) do { if( ( ret = (f) ) != 0 ) goto cleanup; } while( 0 )
7676

7777
#if defined(MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT) || defined(MBEDTLS_ECP_NORMALIZE_JAC_ALT)
78-
#define MPI_TO_BIGINT(bigint, mpi) mpitobigint(bigint, mpi);
78+
#define MPI_TO_BIGINT(bigint, mpi) mpitobigint((bigint), (mpi));
7979

8080
/***************************************************************************//**
8181
* @brief
@@ -85,14 +85,17 @@ __STATIC_INLINE void mpitobigint( ecc_bigint_t bigint, const mbedtls_mpi* mpi )
8585
{
8686
uint32_t* bi = bigint;
8787

88-
if ( mpi->n < 8 )
88+
if ( mpi->n < ECC_BIGINT_SIZE_IN_32BIT_WORDS )
8989
{
9090
memcpy(bigint, mpi->p, mpi->n * sizeof(uint32_t));
91-
memset(&bi[mpi->n], 0, sizeof(ecc_bigint_t) - mpi->n * sizeof(uint32_t));
91+
memset(&bi[mpi->n],
92+
0,
93+
ECC_BIGINT_SIZE_IN_BYTES - ( mpi->n * sizeof(uint32_t) ) );
9294
}
9395
else
9496
{
95-
memcpy(bigint, mpi->p, 8 * sizeof(uint32_t));
97+
/* mpi has more room than bigint, so only store up to sizeof(bigint) */
98+
memcpy(bigint, mpi->p, ECC_BIGINT_SIZE_IN_BYTES);
9699
}
97100
}
98101

@@ -137,11 +140,11 @@ __STATIC_INLINE bool crypto_ddata0_is_zero(CRYPTO_TypeDef* crypto,
137140
*
138141
* @return N/A
139142
******************************************************************************/
140-
static void mbedtls_mpi_div_mod(CRYPTO_TypeDef *crypto,
141-
ecc_bigint_t X,
142-
ecc_bigint_t Y,
143-
ecc_bigint_t N,
144-
ecc_bigint_t R)
143+
static void crypto_mpi_div_mod(CRYPTO_TypeDef *crypto,
144+
ecc_bigint_t X,
145+
ecc_bigint_t Y,
146+
ecc_bigint_t N,
147+
ecc_bigint_t R)
145148
{
146149
uint32_t D[9];
147150
uint32_t status_reg;
@@ -381,7 +384,7 @@ static void mbedtls_mpi_div_mod(CRYPTO_TypeDef *crypto,
381384
CORE_EXIT_CRITICAL();
382385
}
383386
return;
384-
} /* mbedtls_mpi_div_mod */
387+
} /* crypto_mpi_div_mod */
385388
#endif /* MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT || MBEDTLS_ECP_NORMALIZE_JAC_ALT */
386389

387390
/***************************************************************************//**
@@ -1509,7 +1512,7 @@ int mbedtls_internal_ecp_normalize_jac_many( const mbedtls_ecp_group *grp,
15091512
/*
15101513
* u = 1 / (Z_0 * ... * Z_n) mod P
15111514
*/
1512-
mbedtls_mpi_div_mod(crypto, one, cc[t_len-1], modulus, uu);
1515+
crypto_mpi_div_mod(crypto, one, cc[t_len-1], modulus, uu);
15131516

15141517
for( i = t_len - 1; ; i-- )
15151518
{
@@ -1638,7 +1641,7 @@ int mbedtls_internal_ecp_normalize_jac( const mbedtls_ecp_group *grp,
16381641
MPI_TO_BIGINT( Z, &pt->Z );
16391642
MPI_TO_BIGINT( modulus, &grp->P );
16401643

1641-
mbedtls_mpi_div_mod(crypto, one, Z, modulus, Z_inv);
1644+
crypto_mpi_div_mod(crypto, one, Z, modulus, Z_inv);
16421645

16431646
/*
16441647

features/mbedtls/targets/TARGET_Silicon_Labs/crypto_management.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,21 @@
2222
#include "em_bus.h"
2323

2424
#if defined( CRYPTO_PRESENT )
25+
26+
/* Conversion macro for compatibility with the 5.3.x release of the Gecko SDK */
27+
#if defined( MBEDTLS_CRYPTO_DEVICE_PREEMPTION )
28+
#warning "MBEDTLS_CRYPTO_DEVICE_PREEMPTION is deprecated, please define " \
29+
"CRYPTO_DEVICE_PREEMPTION instead."
30+
#endif
31+
2532
#if defined( MBEDTLS_THREADING_C )
2633
#include "mbedtls/threading.h"
2734
static mbedtls_threading_mutex_t crypto_locks[CRYPTO_COUNT];
2835
static volatile bool crypto_locks_initialized = false;
2936
static unsigned int acquire_count = 0U;
3037
#endif /* MBEDTLS_THREADING_C */
3138

32-
#if defined( MBEDTLS_CRYPTO_DEVICE_PREEMPTION )
39+
#if defined( CRYPTO_DEVICE_PREEMPTION )
3340
/** Preemptable context of CRYPTO hardware module. */
3441
typedef struct
3542
{
@@ -52,7 +59,7 @@ typedef struct
5259
static crypto_context_t preemption_context;
5360
static bool is_preempted = false;
5461
static CORE_DECLARE_IRQ_STATE;
55-
#endif /* MBEDTLS_CRYPTO_DEVICE_PREEMPTION */
62+
#endif /* CRYPTO_DEVICE_PREEMPTION */
5663

5764
typedef enum
5865
{
@@ -106,9 +113,9 @@ static inline int crypto_management_index_by_device( CRYPTO_TypeDef *device )
106113
}
107114

108115
/* Use bitband for clock enable/disable operations, such that they are atomic */
109-
#define CRYPTO_CLOCK_ENABLE(clk) BUS_RegBitWrite(&(CMU->HFBUSCLKEN0), clk, 1)
110-
#define CRYPTO_CLOCK_DISABLE(clk) BUS_RegBitWrite(&(CMU->HFBUSCLKEN0), clk, 0)
111-
#define CRYPTO_CLOCK_ENABLED(clk) BUS_RegBitRead(&(CMU->HFBUSCLKEN0), clk)
116+
#define CRYPTO_CLOCK_ENABLE(clk) BUS_RegBitWrite(&(CMU->HFBUSCLKEN0), (clk), 1)
117+
#define CRYPTO_CLOCK_DISABLE(clk) BUS_RegBitWrite(&(CMU->HFBUSCLKEN0), (clk), 0)
118+
#define CRYPTO_CLOCK_ENABLED(clk) BUS_RegBitRead(&(CMU->HFBUSCLKEN0), (clk))
112119

113120
/* Get ownership of an available crypto device */
114121
CRYPTO_TypeDef *crypto_management_acquire( void )
@@ -130,6 +137,9 @@ CRYPTO_TypeDef *crypto_management_acquire( void )
130137
CORE_EXIT_CRITICAL();
131138
}
132139

140+
/* Wrapping this in SL_THREADING_ALT pending non-blocking mutex in official
141+
* threading API. */
142+
#if defined( SL_THREADING_ALT )
133143
/* Try to take an available crypto instance */
134144
unsigned int devno = 0;
135145
for ( ; devno < CRYPTO_COUNT; devno++ ) {
@@ -138,6 +148,7 @@ CRYPTO_TypeDef *crypto_management_acquire( void )
138148
break;
139149
}
140150
}
151+
#endif // SL_THREADING_ALT
141152

142153
/* If no device immediately available, do naieve round-robin */
143154
if ( device == NULL ) {
@@ -213,7 +224,7 @@ void crypto_management_release( CRYPTO_TypeDef *device )
213224
/* Acquire a device with preemption. NOT thread-safe! */
214225
CRYPTO_TypeDef *crypto_management_acquire_preemption( uint32_t regmask )
215226
{
216-
#if defined( MBEDTLS_CRYPTO_DEVICE_PREEMPTION )
227+
#if defined( CRYPTO_DEVICE_PREEMPTION )
217228
CRYPTO_TypeDef *device = NULL;
218229
/* Turn off interrupts */
219230
CORE_ENTER_CRITICAL();
@@ -309,7 +320,7 @@ void crypto_management_release_preemption( CRYPTO_TypeDef *device )
309320
if ( crypto_management_index_by_device( device ) < 0 ) {
310321
return;
311322
}
312-
#if defined( MBEDTLS_CRYPTO_DEVICE_PREEMPTION )
323+
#if defined( CRYPTO_DEVICE_PREEMPTION )
313324

314325
if ( is_preempted ) {
315326
/* If we preempted something, put their context back */

features/mbedtls/targets/TARGET_Silicon_Labs/crypto_management.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
* limitations under the License.
1818
*/
1919

20-
#ifndef MBEDTLS_CRYPTO_MANAGEMENT_H
21-
#define MBEDTLS_CRYPTO_MANAGEMENT_H
20+
#ifndef CRYPTO_MANAGEMENT_H
21+
#define CRYPTO_MANAGEMENT_H
2222

2323
/***************************************************************************//**
2424
* \addtogroup sl_crypto
@@ -125,4 +125,4 @@ void crypto_management_release_preemption( CRYPTO_TypeDef *device );
125125
/** \} (end addtogroup sl_crypto_management) */
126126
/** \} (end addtogroup sl_crypto) */
127127

128-
#endif /* MBEDTLS_CRYPTO_MANAGEMENT_H */
128+
#endif /* CRYPTO_MANAGEMENT_H */

features/mbedtls/targets/TARGET_Silicon_Labs/crypto_sha.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
#include "em_assert.h"
5252
#include <string.h>
5353

54+
#define CRYPTO_SHA_BLOCK_SIZE (64)
55+
5456
#if defined(MBEDTLS_SHA1_C)
5557
static const uint32_t init_state_sha1[8] =
5658
{
@@ -173,18 +175,19 @@ static void crypto_sha_update_state( uint32_t state[8],
173175

174176
/* Load the data block(s) */
175177
for ( size_t i = 0; i < blocks; i++ ) {
176-
if ((uint32_t)(&data[i*64]) & 0x3)
178+
if ((uint32_t)(&data[i*CRYPTO_SHA_BLOCK_SIZE]) & 0x3)
177179
{
178-
uint32_t temp[16];
179-
memcpy(temp, &data[i*64], 64);
180+
uint32_t temp[CRYPTO_SHA_BLOCK_SIZE/sizeof(uint32_t)];
181+
memcpy(temp, &data[i*CRYPTO_SHA_BLOCK_SIZE], CRYPTO_SHA_BLOCK_SIZE);
180182
CORE_ENTER_CRITICAL();
181183
CRYPTO_QDataWrite(&crypto->QDATA1BIG, temp);
182184
CORE_EXIT_CRITICAL();
183185
}
184186
else
185187
{
186188
CORE_ENTER_CRITICAL();
187-
CRYPTO_QDataWrite(&crypto->QDATA1BIG, (uint32_t*) &data[i*64]);
189+
CRYPTO_QDataWrite(&crypto->QDATA1BIG,
190+
(uint32_t*) &data[i*CRYPTO_SHA_BLOCK_SIZE]);
188191
CORE_EXIT_CRITICAL();
189192
}
190193

@@ -238,23 +241,25 @@ void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 )
238241

239242
if ( is224 != 0 ) {
240243
ctx->is224 = true;
241-
memcpy(ctx->state, init_state_sha224, 32);
244+
memcpy(ctx->state, init_state_sha224, sizeof(ctx->state));
242245
} else {
243246
ctx->is224 = false;
244-
memcpy(ctx->state, init_state_sha256, 32);
247+
memcpy(ctx->state, init_state_sha256, sizeof(ctx->state));
245248
}
246249
}
247250

248-
void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char data[64] )
251+
void mbedtls_sha256_process( mbedtls_sha256_context *ctx,
252+
const unsigned char data[64] )
249253
{
250254
crypto_sha_update_state( ctx->state, data, 1, CRYPTO_SHA2 );
251255
}
252256

253257
/*
254258
* SHA-256 process buffer
255259
*/
256-
void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *input,
257-
size_t ilen )
260+
void mbedtls_sha256_update( mbedtls_sha256_context *ctx,
261+
const unsigned char *input,
262+
size_t ilen )
258263
{
259264
size_t fill;
260265
uint32_t left;
@@ -296,7 +301,8 @@ void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *in
296301
/*
297302
* SHA-256 final digest
298303
*/
299-
void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32] )
304+
void mbedtls_sha256_finish( mbedtls_sha256_context *ctx,
305+
unsigned char output[32] )
300306
{
301307
uint32_t last, padn;
302308
uint32_t high, low;

targets/targets.json

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,13 +2422,14 @@
24222422
"EFM32": {
24232423
"inherits": ["Target"],
24242424
"extra_labels": ["Silicon_Labs", "EFM32"],
2425+
"macros": ["MBEDTLS_CONFIG_HW_SUPPORT"],
24252426
"public": false
24262427
},
24272428
"EFM32GG990F1024": {
24282429
"inherits": ["EFM32"],
24292430
"extra_labels_add": ["EFM32GG", "1024K", "SL_AES"],
24302431
"core": "Cortex-M3",
2431-
"macros": ["EFM32GG990F1024", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2432+
"macros_add": ["EFM32GG990F1024", "TRANSACTION_QUEUE_SIZE_SPI=4"],
24322433
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
24332434
"release_versions": ["2", "5"],
24342435
"device_name": "EFM32GG990F1024",
@@ -2482,7 +2483,7 @@
24822483
"inherits": ["EFM32"],
24832484
"extra_labels_add": ["EFM32LG", "256K", "SL_AES"],
24842485
"core": "Cortex-M3",
2485-
"macros": ["EFM32LG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2486+
"macros_add": ["EFM32LG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4"],
24862487
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
24872488
"release_versions": ["2", "5"],
24882489
"device_name": "EFM32LG990F256",
@@ -2536,7 +2537,7 @@
25362537
"inherits": ["EFM32"],
25372538
"extra_labels_add": ["EFM32WG", "256K", "SL_AES"],
25382539
"core": "Cortex-M4F",
2539-
"macros": ["EFM32WG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2540+
"macros_add": ["EFM32WG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4"],
25402541
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
25412542
"release_versions": ["2", "5"],
25422543
"device_name": "EFM32WG990F256",
@@ -2591,7 +2592,7 @@
25912592
"extra_labels_add": ["EFM32ZG", "32K", "SL_AES"],
25922593
"core": "Cortex-M0+",
25932594
"default_toolchain": "uARM",
2594-
"macros": ["EFM32ZG222F32", "TRANSACTION_QUEUE_SIZE_SPI=0", "MBEDTLS_CONFIG_HW_SUPPORT"],
2595+
"macros_add": ["EFM32ZG222F32", "TRANSACTION_QUEUE_SIZE_SPI=0"],
25952596
"supported_toolchains": ["GCC_ARM", "uARM", "IAR"],
25962597
"default_lib": "small",
25972598
"release_versions": ["2"],
@@ -2645,7 +2646,7 @@
26452646
"extra_labels_add": ["EFM32HG", "64K", "SL_AES"],
26462647
"core": "Cortex-M0+",
26472648
"default_toolchain": "uARM",
2648-
"macros": ["EFM32HG322F64", "TRANSACTION_QUEUE_SIZE_SPI=0", "MBEDTLS_CONFIG_HW_SUPPORT"],
2649+
"macros_add": ["EFM32HG322F64", "TRANSACTION_QUEUE_SIZE_SPI=0"],
26492650
"supported_toolchains": ["GCC_ARM", "uARM", "IAR"],
26502651
"default_lib": "small",
26512652
"release_versions": ["2"],
@@ -2698,7 +2699,7 @@
26982699
"inherits": ["EFM32"],
26992700
"extra_labels_add": ["EFM32PG", "256K", "SL_CRYPTO"],
27002701
"core": "Cortex-M4F",
2701-
"macros": ["EFM32PG1B100F256GM32", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2702+
"macros_add": ["EFM32PG1B100F256GM32", "TRANSACTION_QUEUE_SIZE_SPI=4"],
27022703
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
27032704
"release_versions": ["2", "5"],
27042705
"device_name": "EFM32PG1B100F256GM32",
@@ -2751,7 +2752,7 @@
27512752
"inherits": ["EFM32"],
27522753
"extra_labels_add": ["EFR32MG1", "256K", "SL_RAIL", "SL_CRYPTO"],
27532754
"core": "Cortex-M4F",
2754-
"macros": ["EFR32MG1P132F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2755+
"macros_add": ["EFR32MG1P132F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4"],
27552756
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
27562757
"release_versions": ["2", "5"],
27572758
"device_name": "EFR32MG1P132F256GM48",
@@ -2762,7 +2763,7 @@
27622763
"inherits": ["EFM32"],
27632764
"extra_labels_add": ["EFR32MG1", "256K", "SL_RAIL", "SL_CRYPTO"],
27642765
"core": "Cortex-M4F",
2765-
"macros": ["EFR32MG1P233F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2766+
"macros_add": ["EFR32MG1P233F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4"],
27662767
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
27672768
"release_versions": ["2", "5"],
27682769
"public": false,
@@ -2852,7 +2853,7 @@
28522853
"inherits": ["EFM32"],
28532854
"extra_labels_add": ["EFM32PG12", "1024K", "SL_CRYPTO"],
28542855
"core": "Cortex-M4F",
2855-
"macros": ["EFM32PG12B500F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2856+
"macros_add": ["EFM32PG12B500F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4"],
28562857
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
28572858
"release_versions": ["2", "5"],
28582859
"public": false,
@@ -2902,9 +2903,9 @@
29022903
},
29032904
"EFR32MG12P332F1024GL125": {
29042905
"inherits": ["EFM32"],
2905-
"extra_labels_add": ["EFR32MG12", "1024K", "SL_RAIL", "SL_CRYPTO", "MBEDTLS_CONFIG_HW_SUPPORT"],
2906+
"extra_labels_add": ["EFR32MG12", "1024K", "SL_RAIL", "SL_CRYPTO"],
29062907
"core": "Cortex-M4F",
2907-
"macros": ["EFR32MG12P332F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4"],
2908+
"macros_add": ["EFR32MG12P332F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4"],
29082909
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
29092910
"release_versions": ["2", "5"],
29102911
"public": false,

0 commit comments

Comments
 (0)