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