Skip to content

Commit 1dc3941

Browse files
committed
Apply feedback by @Patater
1 parent 2f02a23 commit 1dc3941

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
@@ -2314,13 +2314,14 @@
23142314
"EFM32": {
23152315
"inherits": ["Target"],
23162316
"extra_labels": ["Silicon_Labs", "EFM32"],
2317+
"macros": ["MBEDTLS_CONFIG_HW_SUPPORT"],
23172318
"public": false
23182319
},
23192320
"EFM32GG990F1024": {
23202321
"inherits": ["EFM32"],
23212322
"extra_labels_add": ["EFM32GG", "1024K", "SL_AES"],
23222323
"core": "Cortex-M3",
2323-
"macros": ["EFM32GG990F1024", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2324+
"macros_add": ["EFM32GG990F1024", "TRANSACTION_QUEUE_SIZE_SPI=4"],
23242325
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
23252326
"release_versions": ["2", "5"],
23262327
"device_name": "EFM32GG990F1024",
@@ -2374,7 +2375,7 @@
23742375
"inherits": ["EFM32"],
23752376
"extra_labels_add": ["EFM32LG", "256K", "SL_AES"],
23762377
"core": "Cortex-M3",
2377-
"macros": ["EFM32LG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2378+
"macros_add": ["EFM32LG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4"],
23782379
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
23792380
"release_versions": ["2", "5"],
23802381
"device_name": "EFM32LG990F256",
@@ -2428,7 +2429,7 @@
24282429
"inherits": ["EFM32"],
24292430
"extra_labels_add": ["EFM32WG", "256K", "SL_AES"],
24302431
"core": "Cortex-M4F",
2431-
"macros": ["EFM32WG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2432+
"macros_add": ["EFM32WG990F256", "TRANSACTION_QUEUE_SIZE_SPI=4"],
24322433
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
24332434
"release_versions": ["2", "5"],
24342435
"device_name": "EFM32WG990F256",
@@ -2483,7 +2484,7 @@
24832484
"extra_labels_add": ["EFM32ZG", "32K", "SL_AES"],
24842485
"core": "Cortex-M0+",
24852486
"default_toolchain": "uARM",
2486-
"macros": ["EFM32ZG222F32", "TRANSACTION_QUEUE_SIZE_SPI=0", "MBEDTLS_CONFIG_HW_SUPPORT"],
2487+
"macros_add": ["EFM32ZG222F32", "TRANSACTION_QUEUE_SIZE_SPI=0"],
24872488
"supported_toolchains": ["GCC_ARM", "uARM", "IAR"],
24882489
"default_lib": "small",
24892490
"release_versions": ["2"],
@@ -2537,7 +2538,7 @@
25372538
"extra_labels_add": ["EFM32HG", "64K", "SL_AES"],
25382539
"core": "Cortex-M0+",
25392540
"default_toolchain": "uARM",
2540-
"macros": ["EFM32HG322F64", "TRANSACTION_QUEUE_SIZE_SPI=0", "MBEDTLS_CONFIG_HW_SUPPORT"],
2541+
"macros_add": ["EFM32HG322F64", "TRANSACTION_QUEUE_SIZE_SPI=0"],
25412542
"supported_toolchains": ["GCC_ARM", "uARM", "IAR"],
25422543
"default_lib": "small",
25432544
"release_versions": ["2"],
@@ -2590,7 +2591,7 @@
25902591
"inherits": ["EFM32"],
25912592
"extra_labels_add": ["EFM32PG", "256K", "SL_CRYPTO"],
25922593
"core": "Cortex-M4F",
2593-
"macros": ["EFM32PG1B100F256GM32", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2594+
"macros_add": ["EFM32PG1B100F256GM32", "TRANSACTION_QUEUE_SIZE_SPI=4"],
25942595
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
25952596
"release_versions": ["2", "5"],
25962597
"device_name": "EFM32PG1B100F256GM32",
@@ -2643,7 +2644,7 @@
26432644
"inherits": ["EFM32"],
26442645
"extra_labels_add": ["EFR32MG1", "256K", "SL_RAIL", "SL_CRYPTO"],
26452646
"core": "Cortex-M4F",
2646-
"macros": ["EFR32MG1P132F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2647+
"macros_add": ["EFR32MG1P132F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4"],
26472648
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
26482649
"release_versions": ["2", "5"],
26492650
"device_name": "EFR32MG1P132F256GM48",
@@ -2654,7 +2655,7 @@
26542655
"inherits": ["EFM32"],
26552656
"extra_labels_add": ["EFR32MG1", "256K", "SL_RAIL", "SL_CRYPTO"],
26562657
"core": "Cortex-M4F",
2657-
"macros": ["EFR32MG1P233F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2658+
"macros_add": ["EFR32MG1P233F256GM48", "TRANSACTION_QUEUE_SIZE_SPI=4"],
26582659
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
26592660
"release_versions": ["2", "5"],
26602661
"public": false,
@@ -2744,7 +2745,7 @@
27442745
"inherits": ["EFM32"],
27452746
"extra_labels_add": ["EFM32PG12", "1024K", "SL_CRYPTO"],
27462747
"core": "Cortex-M4F",
2747-
"macros": ["EFM32PG12B500F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4", "MBEDTLS_CONFIG_HW_SUPPORT"],
2748+
"macros_add": ["EFM32PG12B500F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4"],
27482749
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
27492750
"release_versions": ["2", "5"],
27502751
"public": false,
@@ -2794,9 +2795,9 @@
27942795
},
27952796
"EFR32MG12P332F1024GL125": {
27962797
"inherits": ["EFM32"],
2797-
"extra_labels_add": ["EFR32MG12", "1024K", "SL_RAIL", "SL_CRYPTO", "MBEDTLS_CONFIG_HW_SUPPORT"],
2798+
"extra_labels_add": ["EFR32MG12", "1024K", "SL_RAIL", "SL_CRYPTO"],
27982799
"core": "Cortex-M4F",
2799-
"macros": ["EFR32MG12P332F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4"],
2800+
"macros_add": ["EFR32MG12P332F1024GL125", "TRANSACTION_QUEUE_SIZE_SPI=4"],
28002801
"supported_toolchains": ["GCC_ARM", "ARM", "uARM", "IAR"],
28012802
"release_versions": ["2", "5"],
28022803
"public": false,

0 commit comments

Comments
 (0)