1a8e1175bSopenharmony_ci/* BEGIN_HEADER */
2a8e1175bSopenharmony_ci#include "mbedtls/pkcs5.h"
3a8e1175bSopenharmony_ci#include "mbedtls/cipher.h"
4a8e1175bSopenharmony_ci/* END_HEADER */
5a8e1175bSopenharmony_ci
6a8e1175bSopenharmony_ci/* BEGIN_DEPENDENCIES
7a8e1175bSopenharmony_ci * depends_on:MBEDTLS_PKCS5_C
8a8e1175bSopenharmony_ci * END_DEPENDENCIES
9a8e1175bSopenharmony_ci */
10a8e1175bSopenharmony_ci
11a8e1175bSopenharmony_ci/* BEGIN_CASE */
12a8e1175bSopenharmony_civoid pbkdf2_hmac(int hash, data_t *pw_str, data_t *salt_str,
13a8e1175bSopenharmony_ci                 int it_cnt, int key_len, data_t *result_key_string)
14a8e1175bSopenharmony_ci{
15a8e1175bSopenharmony_ci    unsigned char key[100];
16a8e1175bSopenharmony_ci
17a8e1175bSopenharmony_ci    MD_PSA_INIT();
18a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_pkcs5_pbkdf2_hmac_ext(hash, pw_str->x, pw_str->len,
19a8e1175bSopenharmony_ci                                              salt_str->x, salt_str->len,
20a8e1175bSopenharmony_ci                                              it_cnt, key_len, key) == 0);
21a8e1175bSopenharmony_ci
22a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_test_hexcmp(key, result_key_string->x,
23a8e1175bSopenharmony_ci                                    key_len, result_key_string->len) == 0);
24a8e1175bSopenharmony_ci
25a8e1175bSopenharmony_ciexit:
26a8e1175bSopenharmony_ci    MD_PSA_DONE();
27a8e1175bSopenharmony_ci}
28a8e1175bSopenharmony_ci/* END_CASE */
29a8e1175bSopenharmony_ci
30a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C:MBEDTLS_CIPHER_C */
31a8e1175bSopenharmony_civoid pbes2_encrypt(int params_tag, data_t *params_hex, data_t *pw,
32a8e1175bSopenharmony_ci                   data_t *data, int outsize, int ref_ret,
33a8e1175bSopenharmony_ci                   data_t *ref_out)
34a8e1175bSopenharmony_ci{
35a8e1175bSopenharmony_ci    int my_ret;
36a8e1175bSopenharmony_ci    mbedtls_asn1_buf params;
37a8e1175bSopenharmony_ci    unsigned char *my_out = NULL;
38a8e1175bSopenharmony_ci#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
39a8e1175bSopenharmony_ci    size_t my_out_len = 0;
40a8e1175bSopenharmony_ci#endif
41a8e1175bSopenharmony_ci    MD_PSA_INIT();
42a8e1175bSopenharmony_ci
43a8e1175bSopenharmony_ci    params.tag = params_tag;
44a8e1175bSopenharmony_ci    params.p = params_hex->x;
45a8e1175bSopenharmony_ci    params.len = params_hex->len;
46a8e1175bSopenharmony_ci
47a8e1175bSopenharmony_ci    ASSERT_ALLOC(my_out, outsize);
48a8e1175bSopenharmony_ci
49a8e1175bSopenharmony_ci#if defined(MBEDTLS_TEST_DEPRECATED)
50a8e1175bSopenharmony_ci    if (ref_ret != MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) {
51a8e1175bSopenharmony_ci        my_ret = mbedtls_pkcs5_pbes2(&params, MBEDTLS_PKCS5_ENCRYPT,
52a8e1175bSopenharmony_ci                                     pw->x, pw->len, data->x, data->len, my_out);
53a8e1175bSopenharmony_ci        TEST_EQUAL(my_ret, ref_ret);
54a8e1175bSopenharmony_ci    }
55a8e1175bSopenharmony_ci    if (ref_ret == 0) {
56a8e1175bSopenharmony_ci        ASSERT_COMPARE(my_out, ref_out->len,
57a8e1175bSopenharmony_ci                       ref_out->x, ref_out->len);
58a8e1175bSopenharmony_ci    }
59a8e1175bSopenharmony_ci#endif
60a8e1175bSopenharmony_ci
61a8e1175bSopenharmony_ci#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
62a8e1175bSopenharmony_ci    my_ret = mbedtls_pkcs5_pbes2_ext(&params, MBEDTLS_PKCS5_ENCRYPT,
63a8e1175bSopenharmony_ci                                     pw->x, pw->len, data->x, data->len, my_out,
64a8e1175bSopenharmony_ci                                     outsize, &my_out_len);
65a8e1175bSopenharmony_ci    TEST_EQUAL(my_ret, ref_ret);
66a8e1175bSopenharmony_ci    if (ref_ret == 0) {
67a8e1175bSopenharmony_ci        ASSERT_COMPARE(my_out, my_out_len,
68a8e1175bSopenharmony_ci                       ref_out->x, ref_out->len);
69a8e1175bSopenharmony_ci    }
70a8e1175bSopenharmony_ci#endif
71a8e1175bSopenharmony_ci
72a8e1175bSopenharmony_ciexit:
73a8e1175bSopenharmony_ci    mbedtls_free(my_out);
74a8e1175bSopenharmony_ci    MD_PSA_DONE();
75a8e1175bSopenharmony_ci}
76a8e1175bSopenharmony_ci/* END_CASE */
77a8e1175bSopenharmony_ci
78a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C:MBEDTLS_CIPHER_C */
79a8e1175bSopenharmony_civoid pbes2_decrypt(int params_tag, data_t *params_hex, data_t *pw,
80a8e1175bSopenharmony_ci                   data_t *data, int outsize, int ref_ret,
81a8e1175bSopenharmony_ci                   data_t *ref_out)
82a8e1175bSopenharmony_ci{
83a8e1175bSopenharmony_ci    int my_ret;
84a8e1175bSopenharmony_ci    mbedtls_asn1_buf params;
85a8e1175bSopenharmony_ci    unsigned char *my_out = NULL;
86a8e1175bSopenharmony_ci#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
87a8e1175bSopenharmony_ci    size_t my_out_len = 0;
88a8e1175bSopenharmony_ci#endif
89a8e1175bSopenharmony_ci
90a8e1175bSopenharmony_ci    MD_PSA_INIT();
91a8e1175bSopenharmony_ci
92a8e1175bSopenharmony_ci    params.tag = params_tag;
93a8e1175bSopenharmony_ci    params.p = params_hex->x;
94a8e1175bSopenharmony_ci    params.len = params_hex->len;
95a8e1175bSopenharmony_ci
96a8e1175bSopenharmony_ci    ASSERT_ALLOC(my_out, outsize);
97a8e1175bSopenharmony_ci
98a8e1175bSopenharmony_ci#if defined(MBEDTLS_TEST_DEPRECATED)
99a8e1175bSopenharmony_ci    if (ref_ret != MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) {
100a8e1175bSopenharmony_ci        my_ret = mbedtls_pkcs5_pbes2(&params, MBEDTLS_PKCS5_DECRYPT,
101a8e1175bSopenharmony_ci                                     pw->x, pw->len, data->x, data->len, my_out);
102a8e1175bSopenharmony_ci        TEST_EQUAL(my_ret, ref_ret);
103a8e1175bSopenharmony_ci    }
104a8e1175bSopenharmony_ci    if (ref_ret == 0) {
105a8e1175bSopenharmony_ci        ASSERT_COMPARE(my_out, ref_out->len,
106a8e1175bSopenharmony_ci                       ref_out->x, ref_out->len);
107a8e1175bSopenharmony_ci    }
108a8e1175bSopenharmony_ci#endif
109a8e1175bSopenharmony_ci
110a8e1175bSopenharmony_ci#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
111a8e1175bSopenharmony_ci    my_ret = mbedtls_pkcs5_pbes2_ext(&params, MBEDTLS_PKCS5_DECRYPT,
112a8e1175bSopenharmony_ci                                     pw->x, pw->len, data->x, data->len, my_out,
113a8e1175bSopenharmony_ci                                     outsize, &my_out_len);
114a8e1175bSopenharmony_ci    TEST_EQUAL(my_ret, ref_ret);
115a8e1175bSopenharmony_ci    if (ref_ret == 0) {
116a8e1175bSopenharmony_ci        ASSERT_COMPARE(my_out, my_out_len,
117a8e1175bSopenharmony_ci                       ref_out->x, ref_out->len);
118a8e1175bSopenharmony_ci    }
119a8e1175bSopenharmony_ci#endif
120a8e1175bSopenharmony_ci
121a8e1175bSopenharmony_ciexit:
122a8e1175bSopenharmony_ci    mbedtls_free(my_out);
123a8e1175bSopenharmony_ci    MD_PSA_DONE();
124a8e1175bSopenharmony_ci}
125a8e1175bSopenharmony_ci/* END_CASE */
126a8e1175bSopenharmony_ci
127a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
128a8e1175bSopenharmony_civoid pkcs5_selftest()
129a8e1175bSopenharmony_ci{
130a8e1175bSopenharmony_ci    MD_PSA_INIT();
131a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_pkcs5_self_test(1) == 0);
132a8e1175bSopenharmony_ci
133a8e1175bSopenharmony_ciexit:
134a8e1175bSopenharmony_ci    MD_PSA_DONE();
135a8e1175bSopenharmony_ci}
136a8e1175bSopenharmony_ci/* END_CASE */
137