| /* 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 */ |