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

/* BEGIN_DEPENDENCIES
 * depends_on:POLARSSL_ARC4_C
 * END_DEPENDENCIES
 */

/* BEGIN_CASE */
void arc4_crypt( char *hex_src_string, char *hex_key_string,
                 char *hex_dst_string )
{
    unsigned char src_str[1000];
    unsigned char key_str[1000];
    unsigned char dst_str[1000];
    unsigned char dst_hexstr[2000];
    int src_len, key_len;
    arc4_context ctx;

    memset(src_str, 0x00, 1000);
    memset(key_str, 0x00, 1000);
    memset(dst_str, 0x00, 1000);
    memset(dst_hexstr, 0x00, 2000);
    arc4_init( &ctx );

    src_len = unhexify( src_str, hex_src_string );
    key_len = unhexify( key_str, hex_key_string );

    arc4_setup(&ctx, key_str, key_len);
    TEST_ASSERT( arc4_crypt(&ctx, src_len, src_str, dst_str ) == 0 );
    hexify( dst_hexstr, dst_str, src_len );

    TEST_ASSERT( strcmp( (char *) dst_hexstr, hex_dst_string ) == 0 );

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

/* BEGIN_CASE depends_on:POLARSSL_SELF_TEST */
void arc4_selftest()
{
    TEST_ASSERT( arc4_self_test( 0 ) == 0 );
}
/* END_CASE */
