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