Skip to content

Commit b5db3b7

Browse files
AndrzejKurekdgreen-arm
authored andcommitted
crypto_se_driver: add verification mock test
1 parent b9ba6cc commit b5db3b7

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

tests/suites/test_suite_psa_crypto_se_driver_hal_mocks.data

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,9 @@ mock_sign:PSA_SUCCESS:PSA_SUCCESS
3333

3434
SE signing mock test: sign failed
3535
mock_sign:PSA_ERROR_HARDWARE_FAILURE:PSA_ERROR_HARDWARE_FAILURE
36+
37+
SE verification mock test
38+
mock_verify:PSA_SUCCESS:PSA_SUCCESS
39+
40+
SE verification mock test: verify failed
41+
mock_verify:PSA_ERROR_HARDWARE_FAILURE:PSA_ERROR_HARDWARE_FAILURE

tests/suites/test_suite_psa_crypto_se_driver_hal_mocks.function

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,16 @@ static struct
4848
psa_status_t return_value;
4949
} mock_sign_data;
5050

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+
5161
static struct
5262
{
5363
uint16_t called;
@@ -67,6 +77,7 @@ static void mock_teardown( void )
6777
memset( &mock_export_data, 0, sizeof( mock_export_data ) );
6878
memset( &mock_export_public_data, 0, sizeof( mock_export_public_data ) );
6979
memset( &mock_sign_data, 0, sizeof( mock_sign_data ) );
80+
memset( &mock_verify_data, 0, sizeof( mock_verify_data ) );
7081
memset( &mock_allocate_data, 0, sizeof( mock_allocate_data ) );
7182
memset( &mock_destroy_data, 0, sizeof( mock_destroy_data ) );
7283
memset( &mock_generate_data, 0, sizeof( mock_generate_data ) );
@@ -168,6 +179,27 @@ psa_status_t mock_sign( psa_drv_se_context_t *context,
168179
return mock_sign_data.return_value;
169180
}
170181

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+
171203
psa_status_t mock_allocate( psa_drv_se_context_t *drv_context,
172204
void *persistent_data,
173205
const psa_key_attributes_t *attributes,
@@ -455,3 +487,57 @@ exit:
455487
mock_teardown( );
456488
}
457489
/* 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

Comments
 (0)