@@ -48,6 +48,16 @@ static struct
48
48
psa_status_t return_value;
49
49
} mock_sign_data;
50
50
51
+ static struct
52
+ {
53
+ uint16_t called;
54
+ psa_key_slot_number_t key_slot;
55
+ psa_algorithm_t alg;
56
+ size_t hash_length;
57
+ size_t signature_length;
58
+ psa_status_t return_value;
59
+ } mock_verify_data;
60
+
51
61
static struct
52
62
{
53
63
uint16_t called;
@@ -67,6 +77,7 @@ static void mock_teardown( void )
67
77
memset( &mock_export_data, 0, sizeof( mock_export_data ) );
68
78
memset( &mock_export_public_data, 0, sizeof( mock_export_public_data ) );
69
79
memset( &mock_sign_data, 0, sizeof( mock_sign_data ) );
80
+ memset( &mock_verify_data, 0, sizeof( mock_verify_data ) );
70
81
memset( &mock_allocate_data, 0, sizeof( mock_allocate_data ) );
71
82
memset( &mock_destroy_data, 0, sizeof( mock_destroy_data ) );
72
83
memset( &mock_generate_data, 0, sizeof( mock_generate_data ) );
@@ -168,6 +179,27 @@ psa_status_t mock_sign( psa_drv_se_context_t *context,
168
179
return mock_sign_data.return_value;
169
180
}
170
181
182
+ psa_status_t mock_verify( psa_drv_se_context_t *context,
183
+ psa_key_slot_number_t key_slot,
184
+ psa_algorithm_t alg,
185
+ const uint8_t *p_hash,
186
+ size_t hash_length,
187
+ const uint8_t *p_signature,
188
+ size_t signature_length )
189
+ {
190
+ (void) context;
191
+ (void) p_hash;
192
+ (void) p_signature;
193
+
194
+ mock_verify_data.called++;
195
+ mock_verify_data.key_slot = key_slot;
196
+ mock_verify_data.alg = alg;
197
+ mock_verify_data.hash_length = hash_length;
198
+ mock_verify_data.signature_length = signature_length;
199
+
200
+ return mock_verify_data.return_value;
201
+ }
202
+
171
203
psa_status_t mock_allocate( psa_drv_se_context_t *drv_context,
172
204
void *persistent_data,
173
205
const psa_key_attributes_t *attributes,
@@ -455,3 +487,57 @@ exit:
455
487
mock_teardown( );
456
488
}
457
489
/* END_CASE */
490
+
491
+ /* BEGIN_CASE */
492
+ void mock_verify( int mock_verify_return_value, int expected_result )
493
+ {
494
+ psa_drv_se_t driver;
495
+ psa_drv_se_key_management_t key_management;
496
+ psa_drv_se_asymmetric_t asymmetric;
497
+ psa_key_lifetime_t lifetime = 2;
498
+ psa_key_id_t id = 1;
499
+ psa_key_handle_t handle = 0;
500
+ psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
501
+ const uint8_t key_material[3] = {0xfa, 0xca, 0xde};
502
+ psa_algorithm_t algorithm = PSA_ALG_ECDSA(PSA_ALG_SHA_256);
503
+
504
+ mock_verify_data.return_value = mock_verify_return_value;
505
+ memset( &driver, 0, sizeof( driver ) );
506
+ memset( &key_management, 0, sizeof( key_management ) );
507
+ memset( &asymmetric, 0, sizeof( asymmetric ) );
508
+
509
+ driver.hal_version = PSA_DRV_SE_HAL_VERSION;
510
+
511
+ driver.key_management = &key_management;
512
+ key_management.p_import = mock_import;
513
+ key_management.p_destroy = mock_destroy;
514
+ key_management.p_allocate = mock_allocate;
515
+
516
+ driver.asymmetric = &asymmetric;
517
+ asymmetric.p_verify = mock_verify;
518
+
519
+ PSA_ASSERT( psa_register_se_driver( lifetime, &driver ) );
520
+ PSA_ASSERT( psa_crypto_init( ) );
521
+
522
+ psa_set_key_id( &attributes, id );
523
+ psa_set_key_lifetime( &attributes, lifetime );
524
+ psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_VERIFY );
525
+ psa_set_key_algorithm( &attributes, algorithm );
526
+ psa_set_key_type( &attributes, PSA_KEY_TYPE_RAW_DATA );
527
+
528
+ PSA_ASSERT( psa_import_key( &attributes,
529
+ key_material, sizeof( key_material ),
530
+ &handle ) );
531
+
532
+ TEST_ASSERT( psa_asymmetric_verify( handle, algorithm, NULL, 0, NULL, 0)
533
+ == expected_result );
534
+ TEST_ASSERT( mock_verify_data.called == 1 );
535
+
536
+ PSA_ASSERT( psa_destroy_key( handle ) );
537
+ TEST_ASSERT( mock_destroy_data.called == 1 );
538
+
539
+ exit:
540
+ PSA_DONE( );
541
+ mock_teardown( );
542
+ }
543
+ /* END_CASE */
0 commit comments