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