/* BEGIN_HEADER */
#include "mbedtls/pbkdf2.h"
/* END_HEADER */

/* BEGIN_DEPENDENCIES
 * depends_on:POLARSSL_PBKDF2_C
 * END_DEPENDENCIES
 */

/* BEGIN_CASE */
void pbkdf2_hmac( int hash, char *hex_password_string, char *hex_salt_string,
                  int it_cnt, int key_len, char *result_key_string )
{
    unsigned char pw_str[100];
    unsigned char salt_str[100];
    unsigned char dst_str[100];

    md_context_t ctx;
    const md_info_t *info;

    int pw_len, salt_len;
    unsigned char key[100];

    md_init( &ctx );

    memset(pw_str, 0x00, 100);
    memset(salt_str, 0x00, 100);
    memset(dst_str, 0x00, 100);

    pw_len = unhexify( pw_str, hex_password_string );
    salt_len = unhexify( salt_str, hex_salt_string );


    info = md_info_from_type( hash );
    TEST_ASSERT( info != NULL );
    if( info == NULL )
        return;
    TEST_ASSERT( md_init_ctx( &ctx, info ) == 0 );
    TEST_ASSERT( pbkdf2_hmac( &ctx, pw_str, pw_len, salt_str, salt_len,
                              it_cnt, key_len, key ) == 0 );

    hexify( dst_str, key, key_len );
    TEST_ASSERT( strcmp( (char *) dst_str, result_key_string ) == 0 );

exit:
    md_free( &ctx );
}
/* END_CASE */
