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(¶ms, 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(¶ms, 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(¶ms, 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(¶ms, 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