11
11
* This is probably a bug in the library. */
12
12
#define PSA_ERROR_DETECTED_BY_DRIVER ((psa_status_t)( -500 ))
13
13
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
+
14
25
static struct
15
26
{
16
27
uint16_t called;
@@ -46,37 +57,67 @@ static void mock_teardown( void )
46
57
memset( &mock_export_data, 0, sizeof( mock_export_data ) );
47
58
memset( &mock_allocate_data, 0, sizeof( mock_allocate_data ) );
48
59
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 );
49
86
}
50
87
51
88
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 )
58
95
{
59
96
(void) p_data;
97
+
60
98
mock_import_data.called++;
61
99
mock_import_data.slot_number = slot_number;
62
100
mock_import_data.lifetime = lifetime;
63
101
mock_import_data.type = type;
64
102
mock_import_data.algorithm = algorithm;
65
103
mock_import_data.usage = usage;
66
104
mock_import_data.data_length = data_length;
105
+
67
106
return( PSA_SUCCESS );
68
107
}
69
108
70
109
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 )
74
113
{
75
114
(void) p_data;
76
115
(void) p_data_length;
116
+
77
117
mock_export_data.called++;
78
118
mock_export_data.slot_number = slot_number;
79
119
mock_export_data.data_size = data_size;
120
+
80
121
return( PSA_SUCCESS );
81
122
}
82
123
@@ -87,15 +128,18 @@ psa_status_t mock_allocate( const psa_key_attributes_t *attributes,
87
128
(void) attributes;
88
129
(void) slot_usage;
89
130
(void) slot_number;
131
+
90
132
mock_allocate_data.called++;
91
133
*slot_number = 0;
134
+
92
135
return( PSA_SUCCESS );
93
136
}
94
137
95
138
psa_status_t mock_destroy( psa_key_slot_number_t slot_number )
96
139
{
97
140
mock_destroy_data.called++;
98
141
mock_destroy_data.slot_number = slot_number;
142
+
99
143
return( PSA_SUCCESS );
100
144
}
101
145
@@ -253,15 +297,50 @@ void mock_export( )
253
297
PSA_ASSERT( psa_export_key( handle,
254
298
exported, sizeof( exported ),
255
299
&exported_length ) );
256
-
300
+
257
301
TEST_ASSERT( mock_export_data.called == 1 );
258
-
302
+
259
303
PSA_ASSERT( psa_destroy_key( handle ) );
260
304
261
305
TEST_ASSERT( mock_destroy_data.called == 1 );
262
306
263
307
exit:
264
308
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( );
266
345
}
267
346
/* END_CASE */
0 commit comments