Skip to content

Commit 52a68f8

Browse files
committed
crypto_se_driver: add key generation mock and test
1 parent 1b7ff0e commit 52a68f8

File tree

2 files changed

+94
-12
lines changed

2 files changed

+94
-12
lines changed

tests/suites/test_suite_psa_crypto_se_driver_hal.data

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,6 @@ mock_import:
3232

3333
Key exporting mock test
3434
mock_export:
35+
36+
Key generating mock test
37+
mock_generate:

tests/suites/test_suite_psa_crypto_se_driver_hal.function

Lines changed: 91 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@
1111
* This is probably a bug in the library. */
1212
#define PSA_ERROR_DETECTED_BY_DRIVER ((psa_status_t)( -500 ))
1313

14+
static struct
15+
{
16+
uint16_t called;
17+
psa_key_slot_number_t key_slot;
18+
psa_key_type_t type;
19+
psa_key_usage_t usage;
20+
size_t bits;
21+
size_t extra_size;
22+
size_t pubkey_out_size;
23+
} mock_generate_data;
24+
1425
static struct
1526
{
1627
uint16_t called;
@@ -46,37 +57,67 @@ static void mock_teardown( void )
4657
memset( &mock_export_data, 0, sizeof( mock_export_data ) );
4758
memset( &mock_allocate_data, 0, sizeof( mock_allocate_data ) );
4859
memset( &mock_destroy_data, 0, sizeof( mock_destroy_data ) );
60+
memset( &mock_generate_data, 0, sizeof( mock_generate_data ) );
61+
}
62+
63+
static psa_status_t mock_generate( psa_key_slot_number_t key_slot,
64+
psa_key_type_t type,
65+
psa_key_usage_t usage,
66+
size_t bits,
67+
const void *extra,
68+
size_t extra_size,
69+
uint8_t *p_pubkey_out,
70+
size_t pubkey_out_size,
71+
size_t *p_pubkey_length )
72+
{
73+
(void) extra;
74+
(void) p_pubkey_out;
75+
(void) p_pubkey_length;
76+
77+
mock_generate_data.called++;
78+
mock_generate_data.key_slot = key_slot;
79+
mock_generate_data.type = type;
80+
mock_generate_data.usage = usage;
81+
mock_generate_data.bits = bits;
82+
mock_generate_data.extra_size = extra_size;
83+
mock_generate_data.pubkey_out_size = pubkey_out_size;
84+
85+
return( PSA_SUCCESS );
4986
}
5087

5188
static psa_status_t mock_import( psa_key_slot_number_t slot_number,
52-
psa_key_lifetime_t lifetime,
53-
psa_key_type_t type,
54-
psa_algorithm_t algorithm,
55-
psa_key_usage_t usage,
56-
const uint8_t *p_data,
57-
size_t data_length )
89+
psa_key_lifetime_t lifetime,
90+
psa_key_type_t type,
91+
psa_algorithm_t algorithm,
92+
psa_key_usage_t usage,
93+
const uint8_t *p_data,
94+
size_t data_length )
5895
{
5996
(void) p_data;
97+
6098
mock_import_data.called++;
6199
mock_import_data.slot_number = slot_number;
62100
mock_import_data.lifetime = lifetime;
63101
mock_import_data.type = type;
64102
mock_import_data.algorithm = algorithm;
65103
mock_import_data.usage = usage;
66104
mock_import_data.data_length = data_length;
105+
67106
return( PSA_SUCCESS );
68107
}
69108

70109
psa_status_t mock_export( psa_key_slot_number_t slot_number,
71-
uint8_t *p_data,
72-
size_t data_size,
73-
size_t *p_data_length )
110+
uint8_t *p_data,
111+
size_t data_size,
112+
size_t *p_data_length )
74113
{
75114
(void) p_data;
76115
(void) p_data_length;
116+
77117
mock_export_data.called++;
78118
mock_export_data.slot_number = slot_number;
79119
mock_export_data.data_size = data_size;
120+
80121
return( PSA_SUCCESS );
81122
}
82123

@@ -87,15 +128,18 @@ psa_status_t mock_allocate( const psa_key_attributes_t *attributes,
87128
(void) attributes;
88129
(void) slot_usage;
89130
(void) slot_number;
131+
90132
mock_allocate_data.called++;
91133
*slot_number = 0;
134+
92135
return( PSA_SUCCESS );
93136
}
94137

95138
psa_status_t mock_destroy( psa_key_slot_number_t slot_number )
96139
{
97140
mock_destroy_data.called++;
98141
mock_destroy_data.slot_number = slot_number;
142+
99143
return( PSA_SUCCESS );
100144
}
101145

@@ -253,15 +297,50 @@ void mock_export( )
253297
PSA_ASSERT( psa_export_key( handle,
254298
exported, sizeof( exported ),
255299
&exported_length ) );
256-
300+
257301
TEST_ASSERT( mock_export_data.called == 1 );
258-
302+
259303
PSA_ASSERT( psa_destroy_key( handle ) );
260304

261305
TEST_ASSERT( mock_destroy_data.called == 1 );
262306

263307
exit:
264308
PSA_DONE( );
265-
mock_teardown( );
309+
mock_teardown( );
310+
}
311+
/* END_CASE */
312+
313+
/* BEGIN_CASE */
314+
void mock_generate( )
315+
{
316+
psa_drv_se_t driver;
317+
psa_drv_se_key_management_t key_management;
318+
psa_key_lifetime_t lifetime = 2;
319+
psa_key_id_t id = 1;
320+
psa_key_handle_t handle = 0;
321+
psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
322+
323+
memset( &driver, 0, sizeof( driver ) );
324+
memset( &key_management, 0, sizeof( key_management ) );
325+
driver.hal_version = PSA_DRV_SE_HAL_VERSION;
326+
driver.key_management = &key_management;
327+
key_management.slot_count = 1;
328+
key_management.p_generate = mock_generate;
329+
key_management.p_destroy = mock_destroy;
330+
key_management.p_allocate = mock_allocate;
331+
332+
PSA_ASSERT( psa_register_se_driver( lifetime, &driver ) );
333+
PSA_ASSERT( psa_crypto_init( ) );
334+
335+
psa_set_key_id( &attributes, id );
336+
psa_set_key_lifetime( &attributes, lifetime );
337+
psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_EXPORT );
338+
psa_set_key_type( &attributes, PSA_KEY_TYPE_RAW_DATA );
339+
PSA_ASSERT( psa_generate_key( &attributes, &handle ) );
340+
TEST_ASSERT( mock_generate_data.called == 1 );
341+
342+
exit:
343+
PSA_DONE( );
344+
mock_teardown( );
266345
}
267346
/* END_CASE */

0 commit comments

Comments
 (0)