/* BEGIN_HEADER */
#include <polarssl/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 */
