BEGIN_HEADER
#include <polarssl/arc4.h>
END_HEADER

BEGIN_CASE
arc4_crypt:hex_src_string:hex_key_string:hex_dst_string
{
    unsigned char src_str[1000];
    unsigned char key_str[1000];
    unsigned char dst_str[2000];
    int src_len, key_len;
    arc4_context ctx;

    memset(src_str, 0x00, 1000);
    memset(key_str, 0x00, 1000);
    memset(dst_str, 0x00, 2000);

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

    arc4_setup(&ctx, key_str, key_len);
    arc4_crypt(&ctx, src_str, src_len);
    hexify( dst_str, src_str, src_len );

    TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
}
END_CASE

BEGIN_CASE
arc4_selftest:
{
    TEST_ASSERT( arc4_self_test( 0 ) == 0 );
}
END_CASE
