37
37
/* Miscellaneous driver methods */
38
38
/****************************************************************/
39
39
40
+ typedef struct
41
+ {
42
+ psa_key_slot_number_t slot_number;
43
+ psa_key_creation_method_t method;
44
+ psa_status_t status;
45
+ } validate_slot_number_directions_t;
46
+ static validate_slot_number_directions_t validate_slot_number_directions;
47
+
48
+ /* Validate a choice of slot number as directed. */
49
+ static psa_status_t validate_slot_number_as_directed(
50
+ psa_drv_se_context_t *context,
51
+ const psa_key_attributes_t *attributes,
52
+ psa_key_creation_method_t method,
53
+ psa_key_slot_number_t slot_number )
54
+ {
55
+ (void) context;
56
+ (void) attributes;
57
+ DRIVER_ASSERT( slot_number == validate_slot_number_directions.slot_number );
58
+ DRIVER_ASSERT( method == validate_slot_number_directions.method );
59
+ return( validate_slot_number_directions.status );
60
+ }
61
+
40
62
/* Allocate slot numbers with a monotonic counter. */
41
63
static psa_status_t counter_allocate( psa_drv_se_context_t *context,
42
64
void *persistent_data,
@@ -718,11 +740,14 @@ exit:
718
740
/* END_CASE */
719
741
720
742
/* BEGIN_CASE */
721
- void register_key_smoke_test( int lifetime_arg, int expected_status_arg )
743
+ void register_key_smoke_test( int lifetime_arg,
744
+ int validate,
745
+ int expected_status_arg )
722
746
{
723
747
psa_key_lifetime_t lifetime = lifetime_arg;
724
748
psa_status_t expected_status = expected_status_arg;
725
749
psa_drv_se_t driver;
750
+ psa_drv_se_key_management_t key_management;
726
751
psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
727
752
psa_key_id_t id = 1;
728
753
size_t bit_size = 48;
@@ -732,6 +757,16 @@ void register_key_smoke_test( int lifetime_arg, int expected_status_arg )
732
757
733
758
memset( &driver, 0, sizeof( driver ) );
734
759
driver.hal_version = PSA_DRV_SE_HAL_VERSION;
760
+ if( validate >= 0 )
761
+ {
762
+ memset( &key_management, 0, sizeof( key_management ) );
763
+ driver.key_management = &key_management;
764
+ key_management.p_validate_slot_number = validate_slot_number_as_directed;
765
+ validate_slot_number_directions.slot_number = wanted_slot;
766
+ validate_slot_number_directions.method = PSA_KEY_CREATION_REGISTER;
767
+ validate_slot_number_directions.status =
768
+ ( validate > 0 ? PSA_SUCCESS : PSA_ERROR_NOT_PERMITTED );
769
+ }
735
770
736
771
PSA_ASSERT( psa_register_se_driver( MIN_DRIVER_LIFETIME, &driver ) );
737
772
PSA_ASSERT( psa_crypto_init( ) );
@@ -770,5 +805,7 @@ exit:
770
805
psa_destroy_key( handle );
771
806
PSA_DONE( );
772
807
psa_purge_storage( );
808
+ memset( &validate_slot_number_directions, 0,
809
+ sizeof( validate_slot_number_directions ) );
773
810
}
774
811
/* END_CASE */
0 commit comments