@@ -50,18 +50,22 @@ LOG_MODULE_REGISTER(crypto_stm32);
50
50
51
51
struct crypto_stm32_session crypto_stm32_sessions [CRYPTO_MAX_SESSION ];
52
52
53
- static void copy_reverse_words (uint8_t * dst_buf , int dst_len ,
54
- uint8_t * src_buf , int src_len )
53
+ static int copy_reverse_words (uint8_t * dst_buf , int dst_len ,
54
+ uint8_t * src_buf , int src_len )
55
55
{
56
56
int i ;
57
57
58
- __ASSERT_NO_MSG (dst_len >= src_len );
59
- __ASSERT_NO_MSG ((dst_len % 4 ) == 0 );
58
+ if ((dst_len < src_len ) || ((dst_len % 4 ) != 0 )) {
59
+ LOG_ERR ("Buffer length error" );
60
+ return - EINVAL ;
61
+ }
60
62
61
63
memcpy (dst_buf , src_buf , src_len );
62
64
for (i = 0 ; i < dst_len ; i += sizeof (uint32_t )) {
63
65
sys_mem_swap (& dst_buf [i ], sizeof (uint32_t ));
64
66
}
67
+
68
+ return 0 ;
65
69
}
66
70
67
71
static int do_encrypt (struct cipher_ctx * ctx , uint8_t * in_buf , int in_len ,
@@ -175,7 +179,8 @@ static int crypto_stm32_cbc_encrypt(struct cipher_ctx *ctx,
175
179
176
180
struct crypto_stm32_session * session = CRYPTO_STM32_SESSN (ctx );
177
181
178
- copy_reverse_words ((uint8_t * )vec , sizeof (vec ), iv , BLOCK_LEN_BYTES );
182
+ (void )copy_reverse_words ((uint8_t * )vec , sizeof (vec ), iv , BLOCK_LEN_BYTES );
183
+
179
184
session -> config .pInitVect = vec ;
180
185
181
186
if ((ctx -> flags & CAP_NO_IV_PREFIX ) == 0U ) {
@@ -202,7 +207,8 @@ static int crypto_stm32_cbc_decrypt(struct cipher_ctx *ctx,
202
207
203
208
struct crypto_stm32_session * session = CRYPTO_STM32_SESSN (ctx );
204
209
205
- copy_reverse_words ((uint8_t * )vec , sizeof (vec ), iv , BLOCK_LEN_BYTES );
210
+ (void )copy_reverse_words ((uint8_t * )vec , sizeof (vec ), iv , BLOCK_LEN_BYTES );
211
+
206
212
session -> config .pInitVect = vec ;
207
213
208
214
if ((ctx -> flags & CAP_NO_IV_PREFIX ) == 0U ) {
@@ -227,7 +233,10 @@ static int crypto_stm32_ctr_encrypt(struct cipher_ctx *ctx,
227
233
228
234
struct crypto_stm32_session * session = CRYPTO_STM32_SESSN (ctx );
229
235
230
- copy_reverse_words ((uint8_t * )ctr , sizeof (ctr ), iv , ivlen );
236
+ if (copy_reverse_words ((uint8_t * )ctr , sizeof (ctr ), iv , ivlen ) != 0 ) {
237
+ return - EIO ;
238
+ }
239
+
231
240
session -> config .pInitVect = ctr ;
232
241
233
242
ret = do_encrypt (ctx , pkt -> in_buf , pkt -> in_len , pkt -> out_buf );
@@ -247,7 +256,10 @@ static int crypto_stm32_ctr_decrypt(struct cipher_ctx *ctx,
247
256
248
257
struct crypto_stm32_session * session = CRYPTO_STM32_SESSN (ctx );
249
258
250
- copy_reverse_words ((uint8_t * )ctr , sizeof (ctr ), iv , ivlen );
259
+ if (copy_reverse_words ((uint8_t * )ctr , sizeof (ctr ), iv , ivlen ) != 0 ) {
260
+ return - EIO ;
261
+ }
262
+
251
263
session -> config .pInitVect = ctr ;
252
264
253
265
ret = do_decrypt (ctx , pkt -> in_buf , pkt -> in_len , pkt -> out_buf );
@@ -285,7 +297,7 @@ static int crypto_stm32_session_setup(const struct device *dev,
285
297
enum cipher_mode mode ,
286
298
enum cipher_op op_type )
287
299
{
288
- int ctx_idx ;
300
+ int ctx_idx , ret ;
289
301
struct crypto_stm32_session * session ;
290
302
291
303
struct crypto_stm32_data * data = CRYPTO_STM32_DATA (dev );
@@ -394,8 +406,11 @@ static int crypto_stm32_session_setup(const struct device *dev,
394
406
}
395
407
}
396
408
397
- copy_reverse_words ((uint8_t * )session -> key , CRYPTO_STM32_AES_MAX_KEY_LEN ,
398
- ctx -> key .bit_stream , ctx -> keylen );
409
+ ret = copy_reverse_words ((uint8_t * )session -> key , CRYPTO_STM32_AES_MAX_KEY_LEN ,
410
+ ctx -> key .bit_stream , ctx -> keylen );
411
+ if (ret != 0 ) {
412
+ return - EIO ;
413
+ }
399
414
400
415
session -> config .pKey = session -> key ;
401
416
session -> config .DataType = CRYP_DATATYPE_8B ;
0 commit comments