1a8e1175bSopenharmony_ci/* BEGIN_HEADER */
2a8e1175bSopenharmony_ci#include "psa/crypto.h"
3a8e1175bSopenharmony_ci/* END_HEADER */
4a8e1175bSopenharmony_ci
5a8e1175bSopenharmony_ci/* BEGIN_DEPENDENCIES
6a8e1175bSopenharmony_ci * depends_on:MBEDTLS_PSA_CRYPTO_CLIENT
7a8e1175bSopenharmony_ci * END_DEPENDENCIES
8a8e1175bSopenharmony_ci */
9a8e1175bSopenharmony_ci
10a8e1175bSopenharmony_ci/* BEGIN_CASE */
11a8e1175bSopenharmony_civoid attributes_set_get(int owner_id_arg, int id_arg, int lifetime_arg,
12a8e1175bSopenharmony_ci                        int usage_flags_arg, int alg_arg,
13a8e1175bSopenharmony_ci                        int type_arg, int bits_arg)
14a8e1175bSopenharmony_ci{
15a8e1175bSopenharmony_ci    psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
16a8e1175bSopenharmony_ci    mbedtls_svc_key_id_t id = mbedtls_svc_key_id_make(owner_id_arg, id_arg);
17a8e1175bSopenharmony_ci    psa_key_lifetime_t lifetime = lifetime_arg;
18a8e1175bSopenharmony_ci    psa_key_usage_t usage_flags = usage_flags_arg;
19a8e1175bSopenharmony_ci    psa_algorithm_t alg = alg_arg;
20a8e1175bSopenharmony_ci    psa_key_type_t type = type_arg;
21a8e1175bSopenharmony_ci    size_t bits = bits_arg;
22a8e1175bSopenharmony_ci
23a8e1175bSopenharmony_ci    TEST_EQUAL(
24a8e1175bSopenharmony_ci        MBEDTLS_SVC_KEY_ID_GET_KEY_ID(psa_get_key_id(&attributes)), 0);
25a8e1175bSopenharmony_ci    TEST_EQUAL(
26a8e1175bSopenharmony_ci        MBEDTLS_SVC_KEY_ID_GET_OWNER_ID(psa_get_key_id(&attributes)), 0);
27a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_lifetime(&attributes), 0);
28a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_usage_flags(&attributes), 0);
29a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_algorithm(&attributes), 0);
30a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_type(&attributes), 0);
31a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_bits(&attributes), 0);
32a8e1175bSopenharmony_ci
33a8e1175bSopenharmony_ci    psa_set_key_id(&attributes, id);
34a8e1175bSopenharmony_ci    psa_set_key_lifetime(&attributes, lifetime);
35a8e1175bSopenharmony_ci    psa_set_key_usage_flags(&attributes, usage_flags);
36a8e1175bSopenharmony_ci    psa_set_key_algorithm(&attributes, alg);
37a8e1175bSopenharmony_ci    psa_set_key_type(&attributes, type);
38a8e1175bSopenharmony_ci    psa_set_key_bits(&attributes, bits);
39a8e1175bSopenharmony_ci
40a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_svc_key_id_equal(
41a8e1175bSopenharmony_ci                    psa_get_key_id(&attributes), id));
42a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_lifetime(&attributes), lifetime);
43a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_usage_flags(&attributes), usage_flags);
44a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_algorithm(&attributes), alg);
45a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_type(&attributes), type);
46a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_bits(&attributes), bits);
47a8e1175bSopenharmony_ci
48a8e1175bSopenharmony_ci    psa_reset_key_attributes(&attributes);
49a8e1175bSopenharmony_ci
50a8e1175bSopenharmony_ci    TEST_EQUAL(
51a8e1175bSopenharmony_ci        MBEDTLS_SVC_KEY_ID_GET_KEY_ID(psa_get_key_id(&attributes)), 0);
52a8e1175bSopenharmony_ci    TEST_EQUAL(
53a8e1175bSopenharmony_ci        MBEDTLS_SVC_KEY_ID_GET_OWNER_ID(psa_get_key_id(&attributes)), 0);
54a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_lifetime(&attributes), 0);
55a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_usage_flags(&attributes), 0);
56a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_algorithm(&attributes), 0);
57a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_type(&attributes), 0);
58a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_bits(&attributes), 0);
59a8e1175bSopenharmony_ci}
60a8e1175bSopenharmony_ci/* END_CASE */
61a8e1175bSopenharmony_ci
62a8e1175bSopenharmony_ci/* BEGIN_CASE */
63a8e1175bSopenharmony_civoid persistence_attributes(int id1_arg, int owner_id1_arg, int lifetime_arg,
64a8e1175bSopenharmony_ci                            int id2_arg, int owner_id2_arg,
65a8e1175bSopenharmony_ci                            int expected_id_arg, int expected_owner_id_arg,
66a8e1175bSopenharmony_ci                            int expected_lifetime_arg)
67a8e1175bSopenharmony_ci{
68a8e1175bSopenharmony_ci    psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
69a8e1175bSopenharmony_ci    mbedtls_svc_key_id_t id1 =
70a8e1175bSopenharmony_ci        mbedtls_svc_key_id_make(owner_id1_arg, id1_arg);
71a8e1175bSopenharmony_ci    psa_key_lifetime_t lifetime = lifetime_arg;
72a8e1175bSopenharmony_ci    mbedtls_svc_key_id_t id2 =
73a8e1175bSopenharmony_ci        mbedtls_svc_key_id_make(owner_id2_arg, id2_arg);
74a8e1175bSopenharmony_ci    mbedtls_svc_key_id_t expected_id =
75a8e1175bSopenharmony_ci        mbedtls_svc_key_id_make(expected_owner_id_arg, expected_id_arg);
76a8e1175bSopenharmony_ci    psa_key_lifetime_t expected_lifetime = expected_lifetime_arg;
77a8e1175bSopenharmony_ci
78a8e1175bSopenharmony_ci    if (id1_arg != -1) {
79a8e1175bSopenharmony_ci        psa_set_key_id(&attributes, id1);
80a8e1175bSopenharmony_ci    }
81a8e1175bSopenharmony_ci    if (lifetime_arg != -1) {
82a8e1175bSopenharmony_ci        psa_set_key_lifetime(&attributes, lifetime);
83a8e1175bSopenharmony_ci    }
84a8e1175bSopenharmony_ci    if (id2_arg != -1) {
85a8e1175bSopenharmony_ci        psa_set_key_id(&attributes, id2);
86a8e1175bSopenharmony_ci    }
87a8e1175bSopenharmony_ci
88a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_svc_key_id_equal(
89a8e1175bSopenharmony_ci                    psa_get_key_id(&attributes), expected_id));
90a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_lifetime(&attributes), expected_lifetime);
91a8e1175bSopenharmony_ci}
92a8e1175bSopenharmony_ci/* END_CASE */
93a8e1175bSopenharmony_ci
94a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_PSA_CRYPTO_SE_C */
95a8e1175bSopenharmony_civoid slot_number_attribute()
96a8e1175bSopenharmony_ci{
97a8e1175bSopenharmony_ci    psa_key_slot_number_t slot_number = 0xdeadbeef;
98a8e1175bSopenharmony_ci    psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
99a8e1175bSopenharmony_ci
100a8e1175bSopenharmony_ci    /* Initially, there is no slot number. */
101a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_slot_number(&attributes, &slot_number),
102a8e1175bSopenharmony_ci               PSA_ERROR_INVALID_ARGUMENT);
103a8e1175bSopenharmony_ci
104a8e1175bSopenharmony_ci    /* Test setting a slot number. */
105a8e1175bSopenharmony_ci    psa_set_key_slot_number(&attributes, 0);
106a8e1175bSopenharmony_ci    PSA_ASSERT(psa_get_key_slot_number(&attributes, &slot_number));
107a8e1175bSopenharmony_ci    TEST_EQUAL(slot_number, 0);
108a8e1175bSopenharmony_ci
109a8e1175bSopenharmony_ci    /* Test changing the slot number. */
110a8e1175bSopenharmony_ci    psa_set_key_slot_number(&attributes, 42);
111a8e1175bSopenharmony_ci    PSA_ASSERT(psa_get_key_slot_number(&attributes, &slot_number));
112a8e1175bSopenharmony_ci    TEST_EQUAL(slot_number, 42);
113a8e1175bSopenharmony_ci
114a8e1175bSopenharmony_ci    /* Test clearing the slot number. */
115a8e1175bSopenharmony_ci    psa_clear_key_slot_number(&attributes);
116a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_slot_number(&attributes, &slot_number),
117a8e1175bSopenharmony_ci               PSA_ERROR_INVALID_ARGUMENT);
118a8e1175bSopenharmony_ci
119a8e1175bSopenharmony_ci    /* Clearing again should have no effect. */
120a8e1175bSopenharmony_ci    psa_clear_key_slot_number(&attributes);
121a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_slot_number(&attributes, &slot_number),
122a8e1175bSopenharmony_ci               PSA_ERROR_INVALID_ARGUMENT);
123a8e1175bSopenharmony_ci
124a8e1175bSopenharmony_ci    /* Test that reset clears the slot number. */
125a8e1175bSopenharmony_ci    psa_set_key_slot_number(&attributes, 42);
126a8e1175bSopenharmony_ci    PSA_ASSERT(psa_get_key_slot_number(&attributes, &slot_number));
127a8e1175bSopenharmony_ci    TEST_EQUAL(slot_number, 42);
128a8e1175bSopenharmony_ci    psa_reset_key_attributes(&attributes);
129a8e1175bSopenharmony_ci    TEST_EQUAL(psa_get_key_slot_number(&attributes, &slot_number),
130a8e1175bSopenharmony_ci               PSA_ERROR_INVALID_ARGUMENT);
131a8e1175bSopenharmony_ci}
132a8e1175bSopenharmony_ci/* END_CASE */
133