aboutsummaryrefslogtreecommitdiff
path: root/tests/suites/test_suite_psa_crypto_attributes.function
blob: c933cb724256185e8f36e85c0e33503539f82a8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* 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 */