Skip to content

Commit 028eb3d

Browse files
committed
crypto_se_driver: add an error injection mechanism to the mocks
1 parent 52a68f8 commit 028eb3d

File tree

2 files changed

+49
-23
lines changed

2 files changed

+49
-23
lines changed

tests/suites/test_suite_psa_crypto_se_driver_hal.data

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,22 @@ Register SE driver: maximum number of drivers
2828
register_max:
2929

3030
Key importing mock test
31-
mock_import:
31+
mock_import:PSA_SUCCESS:PSA_SUCCESS:PSA_SUCCESS
32+
33+
Key importing mock test: alloc failed
34+
mock_import:PSA_ERROR_HARDWARE_FAILURE:PSA_SUCCESS:PSA_ERROR_HARDWARE_FAILURE
35+
36+
Key importing mock test: import failed
37+
mock_import:PSA_SUCCESS:PSA_ERROR_HARDWARE_FAILURE:PSA_ERROR_HARDWARE_FAILURE
3238

3339
Key exporting mock test
34-
mock_export:
40+
mock_export:PSA_SUCCESS:PSA_SUCCESS
41+
42+
Key exporting mock test: export failed
43+
mock_export:PSA_ERROR_HARDWARE_FAILURE:PSA_ERROR_HARDWARE_FAILURE
3544

3645
Key generating mock test
37-
mock_generate:
46+
mock_generate:PSA_SUCCESS:PSA_SUCCESS
47+
48+
Key generating mock test: generating failed
49+
mock_generate:PSA_ERROR_HARDWARE_FAILURE:PSA_ERROR_HARDWARE_FAILURE

tests/suites/test_suite_psa_crypto_se_driver_hal.function

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ static struct
2020
size_t bits;
2121
size_t extra_size;
2222
size_t pubkey_out_size;
23+
psa_status_t return_value;
2324
} mock_generate_data;
2425

2526
static struct
@@ -31,24 +32,28 @@ static struct
3132
psa_algorithm_t algorithm;
3233
psa_key_usage_t usage;
3334
size_t data_length;
35+
psa_status_t return_value;
3436
} mock_import_data;
3537

3638
static struct
3739
{
3840
uint16_t called;
3941
psa_key_slot_number_t slot_number;
4042
size_t data_size;
43+
psa_status_t return_value;
4144
} mock_export_data;
4245

4346
static struct
4447
{
4548
uint16_t called;
49+
psa_status_t return_value;
4650
} mock_allocate_data;
4751

4852
static struct
4953
{
5054
uint16_t called;
5155
psa_key_slot_number_t slot_number;
56+
psa_status_t return_value;
5257
} mock_destroy_data;
5358

5459
static void mock_teardown( void )
@@ -82,7 +87,7 @@ static psa_status_t mock_generate( psa_key_slot_number_t key_slot,
8287
mock_generate_data.extra_size = extra_size;
8388
mock_generate_data.pubkey_out_size = pubkey_out_size;
8489

85-
return( PSA_SUCCESS );
90+
return( mock_generate_data.return_value );
8691
}
8792

8893
static psa_status_t mock_import( psa_key_slot_number_t slot_number,
@@ -103,7 +108,7 @@ static psa_status_t mock_import( psa_key_slot_number_t slot_number,
103108
mock_import_data.usage = usage;
104109
mock_import_data.data_length = data_length;
105110

106-
return( PSA_SUCCESS );
111+
return( mock_import_data.return_value );
107112
}
108113

109114
psa_status_t mock_export( psa_key_slot_number_t slot_number,
@@ -118,7 +123,7 @@ psa_status_t mock_export( psa_key_slot_number_t slot_number,
118123
mock_export_data.slot_number = slot_number;
119124
mock_export_data.data_size = data_size;
120125

121-
return( PSA_SUCCESS );
126+
return( mock_export_data.return_value );
122127
}
123128

124129
psa_status_t mock_allocate( const psa_key_attributes_t *attributes,
@@ -132,15 +137,15 @@ psa_status_t mock_allocate( const psa_key_attributes_t *attributes,
132137
mock_allocate_data.called++;
133138
*slot_number = 0;
134139

135-
return( PSA_SUCCESS );
140+
return( mock_allocate_data.return_value );
136141
}
137142

138143
psa_status_t mock_destroy( psa_key_slot_number_t slot_number )
139144
{
140145
mock_destroy_data.called++;
141146
mock_destroy_data.slot_number = slot_number;
142147

143-
return( PSA_SUCCESS );
148+
return( mock_destroy_data.return_value );
144149
}
145150

146151
/* END_HEADER */
@@ -216,7 +221,9 @@ exit:
216221
/* END_CASE */
217222

218223
/* BEGIN_CASE */
219-
void mock_import( )
224+
void mock_import( int mock_alloc_return_value,
225+
int mock_import_return_value,
226+
int expected_result)
220227
{
221228
psa_drv_se_t driver;
222229
psa_drv_se_key_management_t key_management;
@@ -226,6 +233,8 @@ void mock_import( )
226233
psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
227234
const uint8_t key_material[3] = {0xfa, 0xca, 0xde};
228235

236+
mock_allocate_data.return_value = mock_alloc_return_value;
237+
mock_import_data.return_value = mock_import_return_value;
229238
memset( &driver, 0, sizeof( driver ) );
230239
memset( &key_management, 0, sizeof( key_management ) );
231240
driver.hal_version = PSA_DRV_SE_HAL_VERSION;
@@ -242,26 +251,29 @@ void mock_import( )
242251
psa_set_key_lifetime( &attributes, lifetime );
243252
psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_EXPORT );
244253
psa_set_key_type( &attributes, PSA_KEY_TYPE_RAW_DATA );
245-
PSA_ASSERT( psa_import_key( &attributes,
254+
TEST_ASSERT( psa_import_key( &attributes,
246255
key_material, sizeof( key_material ),
247-
&handle ) );
256+
&handle ) == expected_result );
248257

249258
TEST_ASSERT( mock_allocate_data.called == 1 );
250-
TEST_ASSERT( mock_import_data.called == 1 );
251-
TEST_ASSERT( mock_import_data.type == PSA_KEY_TYPE_RAW_DATA);
252-
253-
PSA_ASSERT( psa_destroy_key( handle ) );
254-
255-
TEST_ASSERT( mock_destroy_data.called == 1 );
256-
259+
TEST_ASSERT( mock_import_data.called ==
260+
(expected_result == PSA_SUCCESS? 1 : 0) );
261+
TEST_ASSERT( mock_import_data.type ==
262+
(expected_result == PSA_SUCCESS? PSA_KEY_TYPE_RAW_DATA : 0));
263+
264+
if( expected_result == PSA_SUCCESS )
265+
{
266+
PSA_ASSERT( psa_destroy_key( handle ) );
267+
TEST_ASSERT( mock_destroy_data.called == 1 );
268+
}
257269
exit:
258270
PSA_DONE( );
259271
mock_teardown( );
260272
}
261273
/* END_CASE */
262274

263275
/* BEGIN_CASE */
264-
void mock_export( )
276+
void mock_export( int mock_export_return_value, int expected_result )
265277
{
266278
psa_drv_se_t driver;
267279
psa_drv_se_key_management_t key_management;
@@ -273,6 +285,7 @@ void mock_export( )
273285
uint8_t exported[sizeof( key_material )];
274286
size_t exported_length;
275287

288+
mock_export_data.return_value = mock_export_return_value;
276289
memset( &driver, 0, sizeof( driver ) );
277290
memset( &key_management, 0, sizeof( key_management ) );
278291
driver.hal_version = PSA_DRV_SE_HAL_VERSION;
@@ -294,9 +307,9 @@ void mock_export( )
294307
key_material, sizeof( key_material ),
295308
&handle ) );
296309

297-
PSA_ASSERT( psa_export_key( handle,
310+
TEST_ASSERT( psa_export_key( handle,
298311
exported, sizeof( exported ),
299-
&exported_length ) );
312+
&exported_length ) == expected_result );
300313

301314
TEST_ASSERT( mock_export_data.called == 1 );
302315

@@ -311,7 +324,7 @@ exit:
311324
/* END_CASE */
312325

313326
/* BEGIN_CASE */
314-
void mock_generate( )
327+
void mock_generate( int mock_generate_return_value, int expected_result )
315328
{
316329
psa_drv_se_t driver;
317330
psa_drv_se_key_management_t key_management;
@@ -320,6 +333,7 @@ void mock_generate( )
320333
psa_key_handle_t handle = 0;
321334
psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
322335

336+
mock_generate_data.return_value = mock_generate_return_value;
323337
memset( &driver, 0, sizeof( driver ) );
324338
memset( &key_management, 0, sizeof( key_management ) );
325339
driver.hal_version = PSA_DRV_SE_HAL_VERSION;
@@ -336,7 +350,7 @@ void mock_generate( )
336350
psa_set_key_lifetime( &attributes, lifetime );
337351
psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_EXPORT );
338352
psa_set_key_type( &attributes, PSA_KEY_TYPE_RAW_DATA );
339-
PSA_ASSERT( psa_generate_key( &attributes, &handle ) );
353+
TEST_ASSERT( psa_generate_key( &attributes, &handle ) == expected_result );
340354
TEST_ASSERT( mock_generate_data.called == 1 );
341355

342356
exit:

0 commit comments

Comments
 (0)