1/* BEGIN_HEADER */ 2#include "mbedtls/pkcs12.h" 3#include "common.h" 4 5#include "mbedtls/legacy_or_psa.h" 6 7typedef enum 8{ 9 USE_NULL_INPUT = 0, 10 USE_GIVEN_INPUT = 1, 11} input_usage_method_t; 12 13/* END_HEADER */ 14 15/* BEGIN_DEPENDENCIES 16 * depends_on:MBEDTLS_PKCS12_C 17 * END_DEPENDENCIES 18 */ 19 20/* BEGIN_CASE */ 21void pkcs12_derive_key( int md_type, int key_size_arg, 22 data_t *password_arg, int password_usage, 23 data_t *salt_arg, int salt_usage, 24 int iterations, 25 data_t* expected_output, int expected_status ) 26 27{ 28 unsigned char *output_data = NULL; 29 30 unsigned char *password = NULL; 31 size_t password_len = 0; 32 unsigned char *salt = NULL; 33 size_t salt_len = 0; 34 size_t key_size = key_size_arg; 35 36 if( password_usage == USE_GIVEN_INPUT ) 37 password = password_arg->x; 38 39 password_len = password_arg->len; 40 41 if( salt_usage == USE_GIVEN_INPUT ) 42 salt = salt_arg->x; 43 44 salt_len = salt_arg->len; 45 46 ASSERT_ALLOC( output_data, key_size ); 47 48 int ret = mbedtls_pkcs12_derivation( output_data, 49 key_size, 50 password, 51 password_len, 52 salt, 53 salt_len, 54 md_type, 55 MBEDTLS_PKCS12_DERIVE_KEY, 56 iterations ); 57 58 TEST_EQUAL( ret, expected_status ); 59 60 if( expected_status == 0 ) 61 { 62 ASSERT_COMPARE( expected_output->x, expected_output->len, 63 output_data, key_size ); 64 } 65 66exit: 67 mbedtls_free( output_data ); 68 69} 70/* END_CASE */ 71