• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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    mbedtls_md_context_t ctx;
16    const mbedtls_md_info_t *info;
17
18    unsigned char key[100];
19
20    mbedtls_md_init(&ctx);
21
22    info = mbedtls_md_info_from_type(hash);
23    TEST_ASSERT(info != NULL);
24    TEST_ASSERT(mbedtls_md_setup(&ctx, info, 1) == 0);
25    TEST_ASSERT(mbedtls_pkcs5_pbkdf2_hmac(&ctx, pw_str->x, pw_str->len, salt_str->x, salt_str->len,
26                                          it_cnt, key_len, key) == 0);
27
28    TEST_ASSERT(mbedtls_test_hexcmp(key, result_key_string->x,
29                                    key_len, result_key_string->len) == 0);
30
31exit:
32    mbedtls_md_free(&ctx);
33}
34/* END_CASE */
35
36/* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C */
37void pbes2_encrypt(int params_tag, data_t *params_hex, data_t *pw,
38                   data_t *data, int outsize, int ref_ret,
39                   data_t *ref_out)
40{
41    int my_ret;
42    mbedtls_asn1_buf params;
43    unsigned char *my_out = NULL;
44#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
45    size_t my_out_len = 0;
46#endif
47
48    params.tag = params_tag;
49    params.p = params_hex->x;
50    params.len = params_hex->len;
51
52    ASSERT_ALLOC(my_out, outsize);
53
54    if (ref_ret != MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) {
55        my_ret = mbedtls_pkcs5_pbes2(&params, MBEDTLS_PKCS5_ENCRYPT,
56                                     pw->x, pw->len, data->x, data->len, my_out);
57        TEST_EQUAL(my_ret, ref_ret);
58    }
59    if (ref_ret == 0) {
60        ASSERT_COMPARE(my_out, ref_out->len,
61                       ref_out->x, ref_out->len);
62    }
63
64#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
65    my_ret = mbedtls_pkcs5_pbes2_ext(&params, MBEDTLS_PKCS5_ENCRYPT,
66                                     pw->x, pw->len, data->x, data->len, my_out,
67                                     outsize, &my_out_len);
68    TEST_EQUAL(my_ret, ref_ret);
69    if (ref_ret == 0) {
70        ASSERT_COMPARE(my_out, my_out_len,
71                       ref_out->x, ref_out->len);
72    }
73#endif
74
75exit:
76    mbedtls_free(my_out);
77}
78/* END_CASE */
79
80/* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C */
81void pbes2_decrypt(int params_tag, data_t *params_hex, data_t *pw,
82                   data_t *data, int outsize, int ref_ret,
83                   data_t *ref_out)
84{
85    int my_ret;
86    mbedtls_asn1_buf params;
87    unsigned char *my_out = NULL;
88#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
89    size_t my_out_len = 0;
90#endif
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 (ref_ret != MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) {
99        my_ret = mbedtls_pkcs5_pbes2(&params, MBEDTLS_PKCS5_DECRYPT,
100                                     pw->x, pw->len, data->x, data->len, my_out);
101        TEST_EQUAL(my_ret, ref_ret);
102    }
103    if (ref_ret == 0) {
104        ASSERT_COMPARE(my_out, ref_out->len,
105                       ref_out->x, ref_out->len);
106    }
107#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
108    my_ret = mbedtls_pkcs5_pbes2_ext(&params, MBEDTLS_PKCS5_DECRYPT,
109                                     pw->x, pw->len, data->x, data->len, my_out,
110                                     outsize, &my_out_len);
111    TEST_EQUAL(my_ret, ref_ret);
112    if (ref_ret == 0) {
113        ASSERT_COMPARE(my_out, my_out_len,
114                       ref_out->x, ref_out->len);
115    }
116#endif
117
118exit:
119    mbedtls_free(my_out);
120}
121/* END_CASE */
122
123/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
124void pkcs5_selftest()
125{
126    TEST_ASSERT(mbedtls_pkcs5_self_test(1) == 0);
127}
128/* END_CASE */
129