| /* 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 ) |
| |
| { |
| 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 */ |