/* BEGIN_HEADER */ #include "mbedtls/pkcs12.h" #include "mbedtls/error.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 ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; 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; 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; ASSERT_ALLOC( output_data, key_size ); 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 ) { ASSERT_COMPARE( expected_output->x, expected_output->len, output_data, key_size ); } exit: mbedtls_free( output_data ); } /* END_CASE */