/* BEGIN_HEADER */ #include "mbedtls/pkcs12.h" #include "common.h" typedef enum { USE_NULL_INPUT = 0, USE_GIVEN_INPUT = 1, } input_usage_method_t; /* END_HEADER */ /* BEGIN_DEPENDENCIES * depends_on:MBEDTLS_PKCS12_C * END_DEPENDENCIES */ /* BEGIN_CASE */ void pkcs12_derive_key(int md_type, int key_size_arg, data_t *password_arg, int password_usage, data_t *salt_arg, int salt_usage, int iterations, data_t *expected_output, int expected_status) { unsigned char *output_data = NULL; unsigned char *password = NULL; size_t password_len = 0; unsigned char *salt = NULL; size_t salt_len = 0; size_t key_size = key_size_arg; MD_PSA_INIT(); if (password_usage == USE_GIVEN_INPUT) { password = password_arg->x; } password_len = password_arg->len; if (salt_usage == USE_GIVEN_INPUT) { salt = salt_arg->x; } salt_len = salt_arg->len; TEST_CALLOC(output_data, key_size); int ret = mbedtls_pkcs12_derivation(output_data, key_size, password, password_len, salt, salt_len, md_type, MBEDTLS_PKCS12_DERIVE_KEY, iterations); TEST_EQUAL(ret, expected_status); if (expected_status == 0) { TEST_MEMORY_COMPARE(expected_output->x, expected_output->len, output_data, key_size); } exit: mbedtls_free(output_data); MD_PSA_DONE(); } /* END_CASE */