/* BEGIN_HEADER */ #include "psa/crypto.h" /* END_HEADER */ /* BEGIN_DEPENDENCIES * depends_on:MBEDTLS_PSA_CRYPTO_CLIENT * END_DEPENDENCIES */ /* BEGIN_CASE */ void attributes_set_get( int owner_id_arg, int id_arg, int lifetime_arg, int usage_flags_arg, int alg_arg, int type_arg, int bits_arg ) { psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; mbedtls_svc_key_id_t id = mbedtls_svc_key_id_make( owner_id_arg, id_arg ); psa_key_lifetime_t lifetime = lifetime_arg; psa_key_usage_t usage_flags = usage_flags_arg; psa_algorithm_t alg = alg_arg; psa_key_type_t type = type_arg; size_t bits = bits_arg; TEST_EQUAL( MBEDTLS_SVC_KEY_ID_GET_KEY_ID( psa_get_key_id( &attributes ) ), 0 ); TEST_EQUAL( MBEDTLS_SVC_KEY_ID_GET_OWNER_ID( psa_get_key_id( &attributes ) ), 0 ); TEST_EQUAL( psa_get_key_lifetime( &attributes ), 0 ); TEST_EQUAL( psa_get_key_usage_flags( &attributes ), 0 ); TEST_EQUAL( psa_get_key_algorithm( &attributes ), 0 ); TEST_EQUAL( psa_get_key_type( &attributes ), 0 ); TEST_EQUAL( psa_get_key_bits( &attributes ), 0 ); psa_set_key_id( &attributes, id ); psa_set_key_lifetime( &attributes, lifetime ); psa_set_key_usage_flags( &attributes, usage_flags ); psa_set_key_algorithm( &attributes, alg ); psa_set_key_type( &attributes, type ); psa_set_key_bits( &attributes, bits ); TEST_ASSERT( mbedtls_svc_key_id_equal( psa_get_key_id( &attributes ), id ) ); TEST_EQUAL( psa_get_key_lifetime( &attributes ), lifetime ); TEST_EQUAL( psa_get_key_usage_flags( &attributes ), usage_flags ); TEST_EQUAL( psa_get_key_algorithm( &attributes ), alg ); TEST_EQUAL( psa_get_key_type( &attributes ), type ); TEST_EQUAL( psa_get_key_bits( &attributes ), bits ); psa_reset_key_attributes( &attributes ); TEST_EQUAL( MBEDTLS_SVC_KEY_ID_GET_KEY_ID( psa_get_key_id( &attributes ) ), 0 ); TEST_EQUAL( MBEDTLS_SVC_KEY_ID_GET_OWNER_ID( psa_get_key_id( &attributes ) ), 0 ); TEST_EQUAL( psa_get_key_lifetime( &attributes ), 0 ); TEST_EQUAL( psa_get_key_usage_flags( &attributes ), 0 ); TEST_EQUAL( psa_get_key_algorithm( &attributes ), 0 ); TEST_EQUAL( psa_get_key_type( &attributes ), 0 ); TEST_EQUAL( psa_get_key_bits( &attributes ), 0 ); } /* END_CASE */ /* BEGIN_CASE */ void persistence_attributes( int id1_arg, int owner_id1_arg, int lifetime_arg, int id2_arg, int owner_id2_arg, int expected_id_arg, int expected_owner_id_arg, int expected_lifetime_arg ) { psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; mbedtls_svc_key_id_t id1 = mbedtls_svc_key_id_make( owner_id1_arg, id1_arg ); psa_key_lifetime_t lifetime = lifetime_arg; mbedtls_svc_key_id_t id2 = mbedtls_svc_key_id_make( owner_id2_arg, id2_arg ); mbedtls_svc_key_id_t expected_id = mbedtls_svc_key_id_make( expected_owner_id_arg, expected_id_arg ); psa_key_lifetime_t expected_lifetime = expected_lifetime_arg; if( id1_arg != -1 ) psa_set_key_id( &attributes, id1 ); if( lifetime_arg != -1 ) psa_set_key_lifetime( &attributes, lifetime ); if( id2_arg != -1 ) psa_set_key_id( &attributes, id2 ); TEST_ASSERT( mbedtls_svc_key_id_equal( psa_get_key_id( &attributes ), expected_id ) ); TEST_EQUAL( psa_get_key_lifetime( &attributes ), expected_lifetime ); } /* END_CASE */ /* BEGIN_CASE depends_on:MBEDTLS_PSA_CRYPTO_SE_C */ void slot_number_attribute( ) { psa_key_slot_number_t slot_number = 0xdeadbeef; psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; /* Initially, there is no slot number. */ TEST_EQUAL( psa_get_key_slot_number( &attributes, &slot_number ), PSA_ERROR_INVALID_ARGUMENT ); /* Test setting a slot number. */ psa_set_key_slot_number( &attributes, 0 ); PSA_ASSERT( psa_get_key_slot_number( &attributes, &slot_number ) ); TEST_EQUAL( slot_number, 0 ); /* Test changing the slot number. */ psa_set_key_slot_number( &attributes, 42 ); PSA_ASSERT( psa_get_key_slot_number( &attributes, &slot_number ) ); TEST_EQUAL( slot_number, 42 ); /* Test clearing the slot number. */ psa_clear_key_slot_number( &attributes ); TEST_EQUAL( psa_get_key_slot_number( &attributes, &slot_number ), PSA_ERROR_INVALID_ARGUMENT ); /* Clearing again should have no effect. */ psa_clear_key_slot_number( &attributes ); TEST_EQUAL( psa_get_key_slot_number( &attributes, &slot_number ), PSA_ERROR_INVALID_ARGUMENT ); /* Test that reset clears the slot number. */ psa_set_key_slot_number( &attributes, 42 ); PSA_ASSERT( psa_get_key_slot_number( &attributes, &slot_number ) ); TEST_EQUAL( slot_number, 42 ); psa_reset_key_attributes( &attributes ); TEST_EQUAL( psa_get_key_slot_number( &attributes, &slot_number ), PSA_ERROR_INVALID_ARGUMENT ); } /* END_CASE */